diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-08-22 15:15:42 -0700 |
---|---|---|
committer | Willy Tarreau <w@1wt.eu> | 2007-10-17 21:30:27 +0200 |
commit | 1a7180c285e99e88d77738a6b0429930a20d37a7 (patch) | |
tree | 0c39508f90c2440402cd239e1a06cfc801a69554 | |
parent | 0c1115931a789ae78e300e7df86ef3787cfa6d55 (diff) | |
download | linux-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.c | 4 |
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; |