usb: fix for USB_ST_STALLED status reporting in ehci_submit_async()
authorAnatolij Gustschin <agust@denx.de>
Tue, 2 Nov 2010 10:47:29 +0000 (11:47 +0100)
committerRemy Bohmer <linux@bohmer.net>
Fri, 26 Nov 2010 20:21:16 +0000 (21:21 +0100)
Checking the status field of the qTD token in the current code
do not take into acount cases where endpoint stall (halted) bit
is set together with XactErr status bit. As a result clearing
stall on an endpoint won't be done if this status bit was also
set. Check for halted bit and report USB_ST_STALLED status
if the host controller also indicates endpoit stall condition.

Signed-off-by: Anatolij Gustschin <agust@denx.de>
drivers/usb/host/ehci-hcd.c

index 982f96e8b8ff242d7617389f5181abab4238b3fe..c7fba104899fe336a160b68f2a837c9cb35b11f0 100644 (file)
@@ -491,6 +491,8 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
                        break;
                default:
                        dev->status = USB_ST_CRC_ERR;
+                       if ((token & 0x40) == 0x40)
+                               dev->status |= USB_ST_STALLED;
                        break;
                }
                dev->act_len = length - ((token >> 16) & 0x7fff);