diff options
author | Xu Yang <xu.yang_2@nxp.com> | 2022-10-13 23:14:37 +0800 |
---|---|---|
committer | Stefan Eichenberger <eichest@gmail.com> | 2023-05-05 12:09:51 +0200 |
commit | a918eab4e464ddbdca90b4837ef9a3fc20ead058 (patch) | |
tree | 379a8c0656d325b576b7a29513f1c08bcf169544 | |
parent | f4e8e5648dea68906a2d0430657088d98790184a (diff) |
usb: chipidea: host: add suspend/resume support for host controller
The controller's power may be powered off during system suspend. This
will add suspend/resume support when the controller suffers power lost.
Upstream-Status: Backport [2f64d6a6cdfbd992e8a8c481ebf79bfa9a71325b]
Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
Link: https://lore.kernel.org/r/20221013151442.3262951-4-xu.yang_2@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/usb/chipidea/host.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c index f70c77db45dc..f40bd322f3c8 100644 --- a/drivers/usb/chipidea/host.c +++ b/drivers/usb/chipidea/host.c @@ -528,6 +528,18 @@ static int ci_ehci_bus_resume(struct usb_hcd *hcd) return 0; } +#ifdef CONFIG_PM_SLEEP +static void ci_hdrc_host_suspend(struct ci_hdrc *ci) +{ + ehci_suspend(ci->hcd, device_may_wakeup(ci->dev)); +} + +static void ci_hdrc_host_resume(struct ci_hdrc *ci, bool power_lost) +{ + ehci_resume(ci->hcd, power_lost); +} +#endif + int ci_hdrc_host_init(struct ci_hdrc *ci) { struct ci_role_driver *rdrv; @@ -541,6 +553,10 @@ int ci_hdrc_host_init(struct ci_hdrc *ci) rdrv->start = host_start; rdrv->stop = host_stop; +#ifdef CONFIG_PM_SLEEP + rdrv->suspend = ci_hdrc_host_suspend; + rdrv->resume = ci_hdrc_host_resume; +#endif rdrv->irq = host_irq; rdrv->name = "host"; ci->roles[CI_ROLE_HOST] = rdrv; |