usb: dwc_otg_310: fix usb vbus power controlled by pmic
[firefly-linux-kernel-4.4.55.git] / drivers / usb / dwc3 / gadget.c
index 08f87831ae18331b05a0c5b34310f9c9ea2dfdcc..3399679513a8a310ca50156cce5642ea4572004a 100644 (file)
@@ -189,11 +189,11 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
        if (req->request.status == -EINPROGRESS)
                req->request.status = status;
 
-       if (dwc->ep0_bounced && dep->number == 0)
+       if (dwc->ep0_bounced && dep->number <= 1)
                dwc->ep0_bounced = false;
-       else
-               usb_gadget_unmap_request(&dwc->gadget, &req->request,
-                               req->direction);
+
+       usb_gadget_unmap_request(&dwc->gadget, &req->request,
+                       req->direction);
 
        trace_dwc3_gadget_giveback(req);
 
@@ -2179,6 +2179,9 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
                return;
 
        if (epnum == 0 || epnum == 1) {
+               if (!dwc->connected &&
+                   event->endpoint_event == DWC3_DEPEVT_XFERCOMPLETE)
+                       dwc->connected = true;
                dwc3_ep0_interrupt(dwc, event);
                return;
        }
@@ -2398,8 +2401,6 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
 {
        u32                     reg;
 
-       dwc->connected = true;
-
        /*
         * WORKAROUND: DWC3 revisions <1.88a have an issue which
         * would cause a missing Disconnect Event if there's a