|
@@ -637,12 +637,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;
|