USB: fix up merge of 6.4-rc4 into usb-next
authorRoger Quadros <rogerq@kernel.org>
Sun, 28 May 2023 15:48:12 +0000 (18:48 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 28 May 2023 16:05:32 +0000 (17:05 +0100)
The merge of 6.4-rc4 got the changes in drivers/usb/dwc3/gadget.c
completely incorrect, so fix it up properly.

Link: https://lore.kernel.org/r/f604f836-7858-6140-4ec1-9ba95cba6991@kernel.org
Fixes: 7e530d32a365 ("Merge 6.4-rc4 into usb-next")
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/gadget.c

index 7d59e0f43fda93791f6264595bdc8a0d03b7cda0..578804dc29ca8c33ae0fa4a17a8018c043ab0825 100644 (file)
@@ -2702,13 +2702,17 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc)
 
 static int dwc3_gadget_soft_connect(struct dwc3 *dwc)
 {
+       int ret;
+
        /*
         * In the Synopsys DWC_usb31 1.90a programming guide section
         * 4.1.9, it specifies that for a reconnect after a
         * device-initiated disconnect requires a core soft reset
         * (DCTL.CSftRst) before enabling the run/stop bit.
         */
-       dwc3_core_soft_reset(dwc);
+       ret = dwc3_core_soft_reset(dwc);
+       if (ret)
+               return ret;
 
        dwc3_event_buffers_setup(dwc);
        __dwc3_gadget_start(dwc);
@@ -2753,25 +2757,11 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on)
 
        synchronize_irq(dwc->irq_gadget);
 
-       if (!is_on) {
+       if (!is_on)
                ret = dwc3_gadget_soft_disconnect(dwc);
-       } else {
-               /*
-                * In the Synopsys DWC_usb31 1.90a programming guide section
-                * 4.1.9, it specifies that for a reconnect after a
-                * device-initiated disconnect requires a core soft reset
-                * (DCTL.CSftRst) before enabling the run/stop bit.
-                */
-               ret = dwc3_core_soft_reset(dwc);
-               if (ret)
-                       goto done;
-
-               dwc3_event_buffers_setup(dwc);
-               __dwc3_gadget_start(dwc);
-               ret = dwc3_gadget_run_stop(dwc, true);
-       }
+       else
+               ret = dwc3_gadget_soft_connect(dwc);
 
-done:
        pm_runtime_put(dwc->dev);
 
        return ret;