case DWC3_GCTL_PRTCAP_DEVICE:
                if (pm_runtime_suspended(dwc->dev))
                        break;
-               spin_lock_irqsave(&dwc->lock, flags);
                dwc3_gadget_suspend(dwc);
-               spin_unlock_irqrestore(&dwc->lock, flags);
                synchronize_irq(dwc->irq_gadget);
                dwc3_core_exit(dwc);
                break;
                        return ret;
 
                dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);
-               spin_lock_irqsave(&dwc->lock, flags);
                dwc3_gadget_resume(dwc);
-               spin_unlock_irqrestore(&dwc->lock, flags);
                break;
        case DWC3_GCTL_PRTCAP_HOST:
                if (!PMSG_IS_AUTO(msg) && !device_may_wakeup(dwc->dev)) {
 
 
 int dwc3_gadget_suspend(struct dwc3 *dwc)
 {
+       unsigned long flags;
+
        if (!dwc->gadget_driver)
                return 0;
 
        dwc3_gadget_run_stop(dwc, false, false);
+
+       spin_lock_irqsave(&dwc->lock, flags);
        dwc3_disconnect_gadget(dwc);
        __dwc3_gadget_stop(dwc);
+       spin_unlock_irqrestore(&dwc->lock, flags);
 
        return 0;
 }