usb: dwc3: set pm runtime active before resume common
authorFrank Wang <frank.wang@rock-chips.com>
Wed, 6 Dec 2023 06:59:39 +0000 (14:59 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 4 Jan 2024 15:00:45 +0000 (16:00 +0100)
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 <frank.wang@rock-chips.com>
Link: https://lore.kernel.org/r/20231206065939.16958-1-frank.wang@rock-chips.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/core.c

index 4447ef2cbc0f01ade237ce8aed9b6a97eef44fb6..3e55838c0001443845d975d297dcf25877fe34d5 100644 (file)
@@ -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;