usb: dwc3: gadget: Remove check for bounded driver
authorThinh Nguyen <Thinh.Nguyen@synopsys.com>
Fri, 5 Feb 2021 09:53:47 +0000 (01:53 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 6 Feb 2021 14:07:38 +0000 (15:07 +0100)
The check for bounded gadget driver in dwc3_gadget_start() was to
prevent going through the initialization again without any cleanup. The
recent commit 49d08cfc7830 ("usb: udc: core: Introduce started state")
updated the UDC framework and guarantees this won't happen while the UDC
is started. Also, this check doesn't prevent requesting threaded irq to
the same dev_id, which will mess up the irq freeing logic. Let's remove
it.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/ccc90f316cf78bb5f7d46d3fd84f4c7f2c3020b1.1612518764.git.Thinh.Nguyen@synopsys.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/dwc3/gadget.c

index 9acf515f6a672b1b399107afd171afc302a3c63b..97d707b4f384650058378ed93f855bd72ca47d5a 100644 (file)
@@ -2411,7 +2411,7 @@ static int dwc3_gadget_start(struct usb_gadget *g,
 {
        struct dwc3             *dwc = gadget_to_dwc(g);
        unsigned long           flags;
-       int                     ret = 0;
+       int                     ret;
        int                     irq;
 
        irq = dwc->irq_gadget;
@@ -2420,29 +2420,14 @@ static int dwc3_gadget_start(struct usb_gadget *g,
        if (ret) {
                dev_err(dwc->dev, "failed to request irq #%d --> %d\n",
                                irq, ret);
-               goto err0;
+               return ret;
        }
 
        spin_lock_irqsave(&dwc->lock, flags);
-       if (dwc->gadget_driver) {
-               dev_err(dwc->dev, "%s is already bound to %s\n",
-                               dwc->gadget->name,
-                               dwc->gadget_driver->driver.name);
-               ret = -EBUSY;
-               goto err1;
-       }
-
        dwc->gadget_driver      = driver;
        spin_unlock_irqrestore(&dwc->lock, flags);
 
        return 0;
-
-err1:
-       spin_unlock_irqrestore(&dwc->lock, flags);
-       free_irq(irq, dwc);
-
-err0:
-       return ret;
 }
 
 static void __dwc3_gadget_stop(struct dwc3 *dwc)