From f8efa7665e66c1e92fa10492a243cc0de4437ade Mon Sep 17 00:00:00 2001 From: Peter Chen Date: Wed, 11 Feb 2015 12:44:48 +0800 Subject: [PATCH] usb: chipidea: add usb as system wakeup source The USB signal can be system wakeup source, this patch add the support, for how to enable it, see Documentation/usb/chipidea.txt. Since USB wakeup enable logic is vendor/platform specific, the glue layer needs to implement it to support this feature. Signed-off-by: Peter Chen Signed-off-by: Greg Kroah-Hartman --- drivers/usb/chipidea/core.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c index 63d2b39..6d9dc2d 100644 --- a/drivers/usb/chipidea/core.c +++ b/drivers/usb/chipidea/core.c @@ -808,6 +808,8 @@ static int ci_hdrc_probe(struct platform_device *pdev) if (ci_otg_is_fsm_mode(ci)) ci_hdrc_otg_fsm_start(ci); + device_set_wakeup_capable(&pdev->dev, true); + ret = dbg_create_files(ci); if (!ret) return 0; @@ -898,6 +900,11 @@ static int ci_suspend(struct device *dev) return 0; } + if (device_may_wakeup(dev)) { + usb_phy_set_wakeup(ci->usb_phy, true); + enable_irq_wake(ci->irq); + } + ci_controller_suspend(ci); return 0; @@ -908,6 +915,9 @@ static int ci_resume(struct device *dev) struct ci_hdrc *ci = dev_get_drvdata(dev); int ret; + if (device_may_wakeup(dev)) + disable_irq_wake(ci->irq); + ret = ci_controller_resume(dev); if (ret) return ret; -- 2.7.4