diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index e06aaa819929..e8b6cf1cea1e 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -918,6 +918,12 @@ static int dwc3_gadget_ep_enable(struct usb_ep *ep, dep->name)) return 0; + if (pm_runtime_suspended(dwc->sysdev)) { + dev_err(dwc->dev, "fail ep_enable %s device is into LPM\n", + dep->name); + return -EINVAL; + } + spin_lock_irqsave(&dwc->lock, flags); ret = __dwc3_gadget_ep_enable(dep, DWC3_DEPCFG_ACTION_INIT); dbg_event(dep->number, "ENABLE", ret); @@ -946,10 +952,13 @@ static int dwc3_gadget_ep_disable(struct usb_ep *ep) dep->name)) return 0; + pm_runtime_get_sync(dwc->dev); spin_lock_irqsave(&dwc->lock, flags); ret = __dwc3_gadget_ep_disable(dep); dbg_event(dep->number, "DISABLE", ret); spin_unlock_irqrestore(&dwc->lock, flags); + pm_runtime_mark_last_busy(dwc->dev); + pm_runtime_put_sync_autosuspend(dwc->dev); return ret; }