diff options
Diffstat (limited to 'target/linux/ipq806x/patches-4.4/096-10-usb-dwc3-core-fix-PHY-handling-during-suspend.patch')
-rw-r--r-- | target/linux/ipq806x/patches-4.4/096-10-usb-dwc3-core-fix-PHY-handling-during-suspend.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/target/linux/ipq806x/patches-4.4/096-10-usb-dwc3-core-fix-PHY-handling-during-suspend.patch b/target/linux/ipq806x/patches-4.4/096-10-usb-dwc3-core-fix-PHY-handling-during-suspend.patch new file mode 100644 index 0000000000..87f1562cc6 --- /dev/null +++ b/target/linux/ipq806x/patches-4.4/096-10-usb-dwc3-core-fix-PHY-handling-during-suspend.patch @@ -0,0 +1,71 @@ +From 5c4ad318de3b8e8680d654c82a254c4b65243739 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi <balbi@kernel.org> +Date: Mon, 11 Apr 2016 17:12:34 +0300 +Subject: usb: dwc3: core: fix PHY handling during suspend + +we need to power off the PHY during suspend and +power it back on during resume. + +Signed-off-by: Felipe Balbi <balbi@kernel.org> +[nsekhar@ti.com: fix call to usb_phy_set_suspend() in dwc3_suspend()] +Signed-off-by: Sekhar Nori <nsekhar@ti.com> +Signed-off-by: Roger Quadros <rogerq@ti.com> +Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> +--- + drivers/usb/dwc3/core.c | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c +index fa20f5a9..34277ce 100644 +--- a/drivers/usb/dwc3/core.c ++++ b/drivers/usb/dwc3/core.c +@@ -1150,6 +1150,11 @@ static int dwc3_suspend(struct device *dev) + phy_exit(dwc->usb2_generic_phy); + phy_exit(dwc->usb3_generic_phy); + ++ usb_phy_set_suspend(dwc->usb2_phy, 1); ++ usb_phy_set_suspend(dwc->usb3_phy, 1); ++ WARN_ON(phy_power_off(dwc->usb2_generic_phy) < 0); ++ WARN_ON(phy_power_off(dwc->usb3_generic_phy) < 0); ++ + pinctrl_pm_select_sleep_state(dev); + + return 0; +@@ -1163,11 +1168,21 @@ static int dwc3_resume(struct device *dev) + + pinctrl_pm_select_default_state(dev); + ++ usb_phy_set_suspend(dwc->usb2_phy, 0); ++ usb_phy_set_suspend(dwc->usb3_phy, 0); ++ ret = phy_power_on(dwc->usb2_generic_phy); ++ if (ret < 0) ++ return ret; ++ ++ ret = phy_power_on(dwc->usb3_generic_phy); ++ if (ret < 0) ++ goto err_usb2phy_power; ++ + usb_phy_init(dwc->usb3_phy); + usb_phy_init(dwc->usb2_phy); + ret = phy_init(dwc->usb2_generic_phy); + if (ret < 0) +- return ret; ++ goto err_usb3phy_power; + + ret = phy_init(dwc->usb3_generic_phy); + if (ret < 0) +@@ -1200,6 +1215,12 @@ static int dwc3_resume(struct device *dev) + err_usb2phy_init: + phy_exit(dwc->usb2_generic_phy); + ++err_usb3phy_power: ++ phy_power_off(dwc->usb3_generic_phy); ++ ++err_usb2phy_power: ++ phy_power_off(dwc->usb2_generic_phy); ++ + return ret; + } + +-- +cgit v0.12 |