diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 1f41b05e26b8..4c7d05e99887 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2050,17 +2050,25 @@ static int dwc3_gadget_stop(struct usb_gadget *g) spin_lock_irqsave(&dwc->lock, flags); + if (!dwc->gadget_driver) { + spin_unlock_irqrestore(&dwc->lock, flags); + dev_warn(dwc->dev, "%s is already stopped\n", + dwc->gadget.name); + goto out0; + } + if (pm_runtime_suspended(dwc->dev)) - goto out; + goto out1; __dwc3_gadget_stop(dwc); -out: +out1: dwc->gadget_driver = NULL; spin_unlock_irqrestore(&dwc->lock, flags); free_irq(dwc->irq_gadget, dwc->ev_buf); +out0: return 0; }