[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1624882097-23265-7-git-send-email-sanm@codeaurora.org>
Date: Mon, 28 Jun 2021 17:38:17 +0530
From: Sandeep Maheswaram <sanm@...eaurora.org>
To: Andy Gross <agross@...nel.org>,
Bjorn Andersson <bjorn.andersson@...aro.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Felipe Balbi <balbi@...nel.org>,
Stephen Boyd <swboyd@...omium.org>,
Doug Anderson <dianders@...omium.org>,
Matthias Kaehlcke <mka@...omium.org>,
Mathias Nyman <mathias.nyman@...el.com>
Cc: linux-arm-msm@...r.kernel.org, linux-usb@...r.kernel.org,
linux-kernel@...r.kernel.org,
Pratham Pratap <prathampratap@...eaurora.org>,
Sandeep Maheswaram <sanm@...eaurora.org>
Subject: [PATCH v8 6/6] usb: dwc3: qcom: Keep power domain on to support wakeup
If wakeup capable devices are connected to the controller (directly
or through hubs) at suspend time keep the power domain on in order
to support wakeup from these devices.
Signed-off-by: Sandeep Maheswaram <sanm@...eaurora.org>
---
Checking phy_power_off flag instead of usb_wakeup_enabled_descendants
to keep gdsc active.
drivers/usb/dwc3/dwc3-qcom.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
index 82125bc..ba31aa3 100644
--- a/drivers/usb/dwc3/dwc3-qcom.c
+++ b/drivers/usb/dwc3/dwc3-qcom.c
@@ -17,6 +17,7 @@
#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>
@@ -355,9 +356,15 @@ static int dwc3_qcom_suspend(struct dwc3_qcom *qcom)
u32 val;
int i, ret;
+ 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->phy_power_off && dwc->xhci)
+ 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 +389,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
Powered by blists - more mailing lists