Commit 649f5c84 authored by Sandeep Maheswaram's avatar Sandeep Maheswaram Committed by Greg Kroah-Hartman

usb: dwc3: core: Host wake up support from system suspend

Check wakeup-source property for dwc3 core node to set the
wakeup capability. Drop the device_init_wakeup call from
runtime suspend and resume.

If the dwc3 is wakeup capable, don't power down the USB PHY(s).
The glue drivers are expected to take care of configuring the
additional wakeup settings if needed based on the dwc3 wakeup
capability status. In some SOC designs, powering off the PHY is
resulting in higher leakage, so this patch save power on such boards.
Reviewed-by: default avatarPavankumar Kondeti <quic_pkondeti@quicinc.com>
Signed-off-by: default avatarSandeep Maheswaram <quic_c_sanm@quicinc.com>
Signed-off-by: default avatarKrishna Kurapati <quic_kriskura@quicinc.com>
Link: https://lore.kernel.org/r/1655094654-24052-3-git-send-email-quic_kriskura@quicinc.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 098c4d43
...@@ -1817,6 +1817,7 @@ static int dwc3_probe(struct platform_device *pdev) ...@@ -1817,6 +1817,7 @@ static int dwc3_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, dwc); platform_set_drvdata(pdev, dwc);
dwc3_cache_hwparams(dwc); dwc3_cache_hwparams(dwc);
device_init_wakeup(&pdev->dev, of_property_read_bool(dev->of_node, "wakeup-source"));
spin_lock_init(&dwc->lock); spin_lock_init(&dwc->lock);
mutex_init(&dwc->mutex); mutex_init(&dwc->mutex);
...@@ -1978,7 +1979,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg) ...@@ -1978,7 +1979,7 @@ static int dwc3_suspend_common(struct dwc3 *dwc, pm_message_t msg)
dwc3_core_exit(dwc); dwc3_core_exit(dwc);
break; break;
case DWC3_GCTL_PRTCAP_HOST: case DWC3_GCTL_PRTCAP_HOST:
if (!PMSG_IS_AUTO(msg)) { if (!PMSG_IS_AUTO(msg) && !device_can_wakeup(dwc->dev)) {
dwc3_core_exit(dwc); dwc3_core_exit(dwc);
break; break;
} }
...@@ -2039,7 +2040,7 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg) ...@@ -2039,7 +2040,7 @@ static int dwc3_resume_common(struct dwc3 *dwc, pm_message_t msg)
spin_unlock_irqrestore(&dwc->lock, flags); spin_unlock_irqrestore(&dwc->lock, flags);
break; break;
case DWC3_GCTL_PRTCAP_HOST: case DWC3_GCTL_PRTCAP_HOST:
if (!PMSG_IS_AUTO(msg)) { if (!PMSG_IS_AUTO(msg) && !device_can_wakeup(dwc->dev)) {
ret = dwc3_core_init_for_resume(dwc); ret = dwc3_core_init_for_resume(dwc);
if (ret) if (ret)
return ret; return ret;
...@@ -2116,8 +2117,6 @@ static int dwc3_runtime_suspend(struct device *dev) ...@@ -2116,8 +2117,6 @@ static int dwc3_runtime_suspend(struct device *dev)
if (ret) if (ret)
return ret; return ret;
device_init_wakeup(dev, true);
return 0; return 0;
} }
...@@ -2126,8 +2125,6 @@ static int dwc3_runtime_resume(struct device *dev) ...@@ -2126,8 +2125,6 @@ static int dwc3_runtime_resume(struct device *dev)
struct dwc3 *dwc = dev_get_drvdata(dev); struct dwc3 *dwc = dev_get_drvdata(dev);
int ret; int ret;
device_init_wakeup(dev, false);
ret = dwc3_resume_common(dwc, PMSG_AUTO_RESUME); ret = dwc3_resume_common(dwc, PMSG_AUTO_RESUME);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment