diff options
author | Peter Chen <peter.chen@freescale.com> | 2015-02-10 23:44:48 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-03-18 11:19:09 -0400 |
commit | f8efa7665e66c1e92fa10492a243cc0de4437ade (patch) | |
tree | 853da2f37d53293be53995a9bd1e7c1164553cae | |
parent | e14db48dfcf3ab6ebea212e82dc56036a00b0d6b (diff) |
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 <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/usb/chipidea/core.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c index 63d2b398c9a0..6d9dc2d175eb 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) | |||
808 | if (ci_otg_is_fsm_mode(ci)) | 808 | if (ci_otg_is_fsm_mode(ci)) |
809 | ci_hdrc_otg_fsm_start(ci); | 809 | ci_hdrc_otg_fsm_start(ci); |
810 | 810 | ||
811 | device_set_wakeup_capable(&pdev->dev, true); | ||
812 | |||
811 | ret = dbg_create_files(ci); | 813 | ret = dbg_create_files(ci); |
812 | if (!ret) | 814 | if (!ret) |
813 | return 0; | 815 | return 0; |
@@ -898,6 +900,11 @@ static int ci_suspend(struct device *dev) | |||
898 | return 0; | 900 | return 0; |
899 | } | 901 | } |
900 | 902 | ||
903 | if (device_may_wakeup(dev)) { | ||
904 | usb_phy_set_wakeup(ci->usb_phy, true); | ||
905 | enable_irq_wake(ci->irq); | ||
906 | } | ||
907 | |||
901 | ci_controller_suspend(ci); | 908 | ci_controller_suspend(ci); |
902 | 909 | ||
903 | return 0; | 910 | return 0; |
@@ -908,6 +915,9 @@ static int ci_resume(struct device *dev) | |||
908 | struct ci_hdrc *ci = dev_get_drvdata(dev); | 915 | struct ci_hdrc *ci = dev_get_drvdata(dev); |
909 | int ret; | 916 | int ret; |
910 | 917 | ||
918 | if (device_may_wakeup(dev)) | ||
919 | disable_irq_wake(ci->irq); | ||
920 | |||
911 | ret = ci_controller_resume(dev); | 921 | ret = ci_controller_resume(dev); |
912 | if (ret) | 922 | if (ret) |
913 | return ret; | 923 | return ret; |