usb: musb: fix bug in musb_cleanup_urb
authorAjay Kumar Gupta <ajay.gupta@ti.com>
Wed, 14 Mar 2012 12:03:35 +0000 (17:33 +0530)
committerFelipe Balbi <balbi@ti.com>
Tue, 10 Apr 2012 16:11:48 +0000 (19:11 +0300)
Control transfers with data expected from device to host will use usb_rcvctrlpipe()
for urb->pipe so for such urbs 'is_in' will be set causing control urb to fall
into the first "if" condition in musb_cleanup_urb().

Fixed by adding logic to check for non control endpoints.

Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/musb_host.c

index 79cb0af..ef8d744 100644 (file)
@@ -2098,7 +2098,7 @@ static int musb_cleanup_urb(struct urb *urb, struct musb_qh *qh)
        }
 
        /* turn off DMA requests, discard state, stop polling ... */
-       if (is_in) {
+       if (ep->epnum && is_in) {
                /* giveback saves bulk toggle */
                csr = musb_h_flush_rxfifo(ep, 0);