summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2007-08-22 15:15:42 -0700
committerWilly Tarreau <w@1wt.eu>2007-10-17 21:30:27 +0200
commit1a7180c285e99e88d77738a6b0429930a20d37a7 (patch)
tree0c39508f90c2440402cd239e1a06cfc801a69554
parent0c1115931a789ae78e300e7df86ef3787cfa6d55 (diff)
downloadlinux-stable-1a7180c285e99e88d77738a6b0429930a20d37a7.tar.gz
linux-stable-1a7180c285e99e88d77738a6b0429930a20d37a7.tar.bz2
linux-stable-1a7180c285e99e88d77738a6b0429930a20d37a7.zip
[PATCH] USB: allow retry on descriptor fetch errors
This patch (as964) was suggested by Steffen Koepf. It makes usb_get_descriptor() retry on all errors other than ETIMEDOUT, instead of only on EPIPE. This helps with some devices. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/usb/core/message.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
index 149aa8bfb1fe..dec1337c4775 100644
--- a/drivers/usb/core/message.c
+++ b/drivers/usb/core/message.c
@@ -608,12 +608,12 @@ int usb_get_descriptor(struct usb_device *dev, unsigned char type, unsigned char
memset(buf,0,size); // Make sure we parse really received data
for (i = 0; i < 3; ++i) {
- /* retry on length 0 or stall; some devices are flakey */
+ /* retry on length 0 or error; some devices are flakey */
result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
USB_REQ_GET_DESCRIPTOR, USB_DIR_IN,
(type << 8) + index, 0, buf, size,
USB_CTRL_GET_TIMEOUT);
- if (result == 0 || result == -EPIPE)
+ if (result <= 0 && result != -ETIMEDOUT)
continue;
if (result > 1 && ((u8 *)buf)[1] != type) {
result = -EPROTO;