aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Wang <[email protected]>2023-12-06 14:59:39 +0800
committerGreg Kroah-Hartman <[email protected]>2024-01-04 16:00:45 +0100
commit68c26fe58182f5af56bfa577d1cc0c949740baab (patch)
tree45fa54d64603289f2d56f4d2de10160852e416de
parent398aa9a7e77cf23c2a6f882ddd3dcd96f21771dc (diff)
usb: dwc3: set pm runtime active before resume common
For device mode, if PM runtime autosuspend feature enabled, the runtime power status of dwc3 may be suspended when run dwc3_resume(), and dwc3 gadget would not be configured in dwc3_gadget_run_stop(). It would cause gadget connected failed if USB cable has been plugged before PM resume. So move forward pm_runtime_set_active() to fix it. Signed-off-by: Frank Wang <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
-rw-r--r--drivers/usb/dwc3/core.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 4447ef2cbc0f..3e55838c0001 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -2315,12 +2315,15 @@ static int dwc3_resume(struct device *dev)
pinctrl_pm_select_default_state(dev);
+ pm_runtime_disable(dev);
+ pm_runtime_set_active(dev);
+
ret = dwc3_resume_common(dwc, PMSG_RESUME);
- if (ret)
+ if (ret) {
+ pm_runtime_set_suspended(dev);
return ret;
+ }
- pm_runtime_disable(dev);
- pm_runtime_set_active(dev);
pm_runtime_enable(dev);
return 0;