Please merge.
- Dave
Some of the recent changes to change how descriptors are read have managed
to confuse one USB keyboard. It recovers OK with a few retries though.
Signed-off-by: David Brownell <[EMAIL PROTECTED]>
--- 1.146/drivers/usb/core/hub.c Thu Sep 16 10:56:12 2004
+++ edited/drivers/usb/core/hub.c Fri Oct 1 17:18:19 2004
@@ -76,9 +76,17 @@
/* USB 2.0 spec Section 11.24.4.5 */
static int get_hub_descriptor(struct usb_device *hdev, void *data, int size)
{
- return usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
- USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
- USB_DT_HUB << 8, 0, data, size, HZ * USB_CTRL_GET_TIMEOUT);
+ int i, ret;
+
+ for (i = 0; i < 3; i++) {
+ ret = usb_control_msg(hdev, usb_rcvctrlpipe(hdev, 0),
+ USB_REQ_GET_DESCRIPTOR, USB_DIR_IN | USB_RT_HUB,
+ USB_DT_HUB << 8, 0, data, size,
+ HZ * USB_CTRL_GET_TIMEOUT);
+ if (ret >= (USB_DT_HUB_NONVAR_SIZE + 2))
+ return ret;
+ }
+ return -EINVAL;
}
/*