aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatolij Gustschin <agust@denx.de>2010-11-02 11:47:29 +0100
committerRemy Bohmer <linux@bohmer.net>2010-11-26 21:21:16 +0100
commit222d6dff27b81dd9cfd57b984538f3d481aae0f5 (patch)
tree9108164d8db309444902343a05613f92c1a59b72
parentc70e7ddb7e15e768d79edcbc4322d735e65ec31f (diff)
downloadu-boot-linaro-stable-222d6dff27b81dd9cfd57b984538f3d481aae0f5.tar.gz
usb: fix for USB_ST_STALLED status reporting in ehci_submit_async()
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>
-rw-r--r--drivers/usb/host/ehci-hcd.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 982f96e8b..c7fba1048 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -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);