usb: dwc3: gadget: change detemination method of connect status
authorMeng Dongyang <daniel.meng@rock-chips.com>
Fri, 2 Dec 2016 10:27:09 +0000 (18:27 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Thu, 8 Dec 2016 12:22:06 +0000 (20:22 +0800)
In current code, the connect status will be set to connected state when
reset interrupt occur and change to disconnected state in disconnect
interrupt.

But the usb charger may bring about reset signal in accident if we
connect and disconnect quickly. In this case, the dwc3 controller will
change link state and set to connect status, yet not change to
disconnected state when disconnect. So the dwc3 controller suspend
fail and result in a mistake when quick reconnect.

This patch set connect status to connected state when transfer complete
to make sure that usb is connect to PC exactly.

Change-Id: I8e5894d2e08b88bb5434222100d8f5c91c9f1a9d
Signed-off-by: Meng Dongyang <daniel.meng@rock-chips.com>
drivers/usb/dwc3/gadget.c

index 08f87831ae18331b05a0c5b34310f9c9ea2dfdcc..dc1d36028ab091e64d048b2cc244c16884cafcb3 100644 (file)
@@ -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