Set genpd active wakeup flag for usb gdsc if wakeup capable devices
are connected so that wake up happens without reenumeration.

Signed-off-by: Sandeep Maheswaram <s...@codeaurora.org>
---
 drivers/usb/dwc3/dwc3-qcom.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
index b1e9061..b61dc0b 100644
--- a/drivers/usb/dwc3/dwc3-qcom.c
+++ b/drivers/usb/dwc3/dwc3-qcom.c
@@ -17,9 +17,11 @@
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
 #include <linux/phy/phy.h>
+#include <linux/pm_domain.h>
 #include <linux/usb/of.h>
 #include <linux/reset.h>
 #include <linux/iopoll.h>
+#include <linux/usb/hcd.h>
 
 #include "core.h"
 
@@ -354,10 +356,19 @@ static int dwc3_qcom_suspend(struct dwc3_qcom *qcom)
 {
        u32 val;
        int i, ret;
+       struct dwc3 *dwc = platform_get_drvdata(qcom->dwc3);
+       struct usb_hcd  *hcd;
+       struct generic_pm_domain *genpd = pd_to_genpd(qcom->dev->pm_domain);
 
        if (qcom->is_suspended)
                return 0;
 
+       if (dwc->xhci) {
+               hcd = platform_get_drvdata(dwc->xhci);
+               if (usb_wakeup_enabled_descendants(hcd->self.root_hub))
+                       genpd->flags |= GENPD_FLAG_ACTIVE_WAKEUP;
+       }
+
        val = readl(qcom->qscratch_base + PWR_EVNT_IRQ_STAT_REG);
        if (!(val & PWR_EVNT_LPM_IN_L2_MASK))
                dev_err(qcom->dev, "HS-PHY not in L2\n");
@@ -382,9 +393,15 @@ static int dwc3_qcom_resume(struct dwc3_qcom *qcom)
        int ret;
        int i;
 
+       struct dwc3 *dwc = platform_get_drvdata(qcom->dwc3);
+       struct generic_pm_domain *genpd = pd_to_genpd(qcom->dev->pm_domain);
+
        if (!qcom->is_suspended)
                return 0;
 
+       if (dwc->xhci)
+               genpd->flags &= ~GENPD_FLAG_ACTIVE_WAKEUP;
+
        if (device_may_wakeup(qcom->dev))
                dwc3_qcom_disable_interrupts(qcom);
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation

Reply via email to