[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1649704614-31518-6-git-send-email-quic_c_sanm@quicinc.com>
Date: Tue, 12 Apr 2022 00:46:53 +0530
From: Sandeep Maheswaram <quic_c_sanm@...cinc.com>
To: Rob Herring <robh+dt@...nel.org>, 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>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>
CC: <devicetree@...r.kernel.org>, <linux-arm-msm@...r.kernel.org>,
<linux-usb@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
<quic_pkondeti@...cinc.com>, <quic_ppratap@...cinc.com>,
<quic_kriskura@...cinc.com>, <quic_vpulyala@...cinc.com>,
Sandeep Maheswaram <quic_c_sanm@...cinc.com>
Subject: [PATCH v13 5/6] usb: dwc3: qcom: Keep power domain on to retain controller status
Keep the power domain always on during runtime suspend or if the
controller supports wakeup in order to retain controller status
and to support wakeup from devices.
Signed-off-by: Sandeep Maheswaram <quic_c_sanm@...cinc.com>
---
drivers/usb/dwc3/dwc3-qcom.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c
index 9804a19..9747be6 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>
@@ -724,6 +725,7 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
struct resource *res, *parent_res = NULL;
int ret, i;
bool ignore_pipe_clk;
+ struct generic_pm_domain *genpd;
qcom = devm_kzalloc(&pdev->dev, sizeof(*qcom), GFP_KERNEL);
if (!qcom)
@@ -732,6 +734,8 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, qcom);
qcom->dev = &pdev->dev;
+ genpd = pd_to_genpd(qcom->dev->pm_domain);
+
if (has_acpi_companion(dev)) {
qcom->acpi_pdata = acpi_device_get_match_data(dev);
if (!qcom->acpi_pdata) {
@@ -839,7 +843,12 @@ static int dwc3_qcom_probe(struct platform_device *pdev)
if (ret)
goto interconnect_exit;
- device_init_wakeup(&pdev->dev, 1);
+ genpd->flags |= GENPD_FLAG_RPM_ALWAYS_ON;
+
+ if (device_may_wakeup(&qcom->dwc3->dev))
+ genpd->flags |= GENPD_FLAG_ALWAYS_ON;
+
+ device_init_wakeup(&pdev->dev, device_may_wakeup(&qcom->dwc3->dev));
qcom->is_suspended = false;
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
--
2.7.4
Powered by blists - more mailing lists