OSDN Git Service

usb: xhci: tegra: Unlink power domain devices
authorJC Kuo <jckuo@nvidia.com>
Wed, 20 Jan 2021 07:34:13 +0000 (15:34 +0800)
committerThierry Reding <treding@nvidia.com>
Fri, 11 Jun 2021 16:15:46 +0000 (18:15 +0200)
commit41a7426d25fa3f43380560928edb6f815397da20
tree35a6845c268dc5685d4b6ddd805ed36bce01f466
parent23eca83155c33285fa9adee80fab8b22cb01d4c9
usb: xhci: tegra: Unlink power domain devices

This commit unlinks xhci-tegra platform device with SS/host power
domain devices. Reasons for this change is - at ELPG entry, PHY
sleepwalk and wake configuration need to be done before powering
down SS/host partitions, and PHY need be powered off after powering
down SS/host partitions. Sequence looks like roughly below:

  tegra_xusb_enter_elpg() -> xhci_suspend()
                          -> enable PHY sleepwalk and wake if needed
                          -> power down SS/host partitions
                          -> power down PHY

If SS/host power domains are linked to xhci-tegra platform device, we
are not able to perform the sequence like above.

This commit introduces:
  1. tegra_xusb_unpowergate_partitions() to power up SS and host
     partitions together. If SS/host power domain devices are
     available, it invokes pm_runtime_get_sync() to request power
     driver to power up partitions; If power domain devices are not
     available, tegra_powergate_sequence_power_up() will be used to
     power up partitions.

  2. tegra_xusb_powergate_partitions() to power down SS and host
     partitions together. If SS/host power domain devices are
     available, it invokes pm_runtime_put_sync() to request power
     driver to power down partitions; If power domain devices are not
     available, tegra_powergate_power_off() will be used to power down
     partitions.

Signed-off-by: JC Kuo <jckuo@nvidia.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/usb/host/xhci-tegra.c