dwc3_gadget_ep0_desc.wMaxPacketSize = cpu_to_le16(512);
 
        dep = dwc->eps[0];
+       dep->flags = 0;
        ret = __dwc3_gadget_ep_enable(dep, DWC3_DEPCFG_ACTION_INIT);
        if (ret) {
                dev_err(dwc->dev, "failed to enable %s\n", dep->name);
        }
 
        dep = dwc->eps[1];
+       dep->flags = 0;
        ret = __dwc3_gadget_ep_enable(dep, DWC3_DEPCFG_ACTION_INIT);
        if (ret) {
                dev_err(dwc->dev, "failed to enable %s\n", dep->name);
        dep = dwc->eps[epnum];
 
        if (!(dep->flags & DWC3_EP_ENABLED)) {
-               if (!(dep->flags & DWC3_EP_TRANSFER_STARTED))
+               if ((epnum > 1) && !(dep->flags & DWC3_EP_TRANSFER_STARTED))
                        return;
 
                /* Handle only EPCMDCMPLT when EP disabled */
-               if (event->endpoint_event != DWC3_DEPEVT_EPCMDCMPLT)
+               if ((event->endpoint_event != DWC3_DEPEVT_EPCMDCMPLT) &&
+                       !(epnum <= 1 && event->endpoint_event == DWC3_DEPEVT_XFERCOMPLETE))
                        return;
        }