USB: atmel-usba-udc : fix control out requests.
authorMartin Fuzzey <mfuzzey@gmail.com>
Fri, 1 May 2009 15:21:11 +0000 (17:21 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 28 May 2009 20:54:40 +0000 (13:54 -0700)
usbtest #14 was failing with "udc: ep0: TXCOMP: Invalid endpoint state 2, halting endpoint..."
This occured since ep0 is bidirectional and ep->is_in is not valid (must always use ep->state)

Signed-off-by: Martin Fuzzey <mfuzzey@gmail.com>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/gadget/atmel_usba_udc.c

index 563d5727544849c46d9b6996cbe686996cdad44e..5644897c1c5dd63673aa5a028907856ec9891cb8 100644 (file)
@@ -794,7 +794,8 @@ usba_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
        if (ep->desc) {
                list_add_tail(&req->queue, &ep->queue);
 
-               if (ep->is_in || (ep_is_control(ep)
+               if ((!ep_is_control(ep) && ep->is_in) ||
+                       (ep_is_control(ep)
                                && (ep->state == DATA_STAGE_IN
                                        || ep->state == STATUS_STAGE_IN)))
                        usba_ep_writel(ep, CTL_ENB, USBA_TX_PK_RDY);