usb: dwc3: ep0: fix status phase delayed status direction
authorFelipe Balbi <balbi@ti.com>
Thu, 19 Jul 2012 18:05:08 +0000 (21:05 +0300)
committerFelipe Balbi <balbi@ti.com>
Fri, 3 Aug 2012 06:28:27 +0000 (09:28 +0300)
commit 68d3e66 (usb: dwc3: ep0: fix for possible early
delayed_status) added handling for early delayed status,
but the current code only works because so far delayed
status will always be on the IN direction.

This patch makes the code more robust by making sure that
we can handle all directions properly.

Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/ep0.c

index 3936c64c8baba6e1701ab4c21dceea312ac46881..3f2c698a2bd16a8e35c13c6f6bd9d7be0ee24a53 100644 (file)
@@ -164,10 +164,13 @@ static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep,
         * handle it here.
         */
        if (dwc->delayed_status) {
+               unsigned        direction;
+
+               direction = !dwc->ep0_expect_in;
                dwc->delayed_status = false;
 
                if (dwc->ep0state == EP0_STATUS_PHASE)
-                       __dwc3_ep0_do_control_status(dwc, dwc->eps[1]);
+                       __dwc3_ep0_do_control_status(dwc, dwc->eps[direction]);
                else
                        dev_dbg(dwc->dev, "too early for delayed status\n");