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;
 }
 
 /*

Reply via email to