linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] usbcore: fix BABBLE failed enumeration of legacy USB2 devices on USB3 bus
@ 2013-12-24  4:19 Marius  Silaghi
  2014-01-08  0:32 ` Greg Kroah-Hartman
  0 siblings, 1 reply; 4+ messages in thread
From: Marius  Silaghi @ 2013-12-24  4:19 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Sarah Sharp
  Cc: linux-usb, linux-kernel, Alan Stern, Lan Tianyu,
	Xenia Ragiadakou, torvalds, Jiri Kosina

From: Marius C Silaghi <msilaghi@fit.edu>

This patch is generated against the last kernel version in the github kernel repository.
Some older families of USB2 cameras (STC-XXXXXUSB) do not support querying only the first 8 bytes of their 
device descriptor and therefore fail at enumeration on USB3 HCDs, with babble error -75 as they send more than
the expected 8 bytes. The proposed patch extends the mechanism used for non USB3 HCDs in the first part of 
the same function, and  successively tries to query both the 8 byte prefix of the device descriptor, as well as 
the whole device descriptor (in case the old style query of the 8 byte prefix fails).
In fact, for the cameras I try to fix, the preferred condition is the negation of the one in the proposed patch,  
"if (!USE_NEW_SCHEME(retry_counter))", to try first the version successful on this case, but I keep the 
current order of the "if" branches to ensure clean continuation of support for other supported devices.

Signed-off-by: Marius C Silaghi <msilaghi@fit.edu>
---
--- linux/drivers/usb/core/hub.c.orig	2013-12-23 22:09:50.545093470 -0500
+++ linux/drivers/usb/core/hub.c	2013-12-23 22:29:40.521043702 -0500
@@ -4197,7 +4197,19 @@ hub_port_init (struct usb_hub *hub, stru
 				break;
 		}
 
-		retval = usb_get_device_descriptor(udev, 8);
+		/*  Try first the old 8-byte query (since it may be expected
+		 *  by some devices), but then give at least a chance to the
+		 *  new form (retrieving the whole descriptor)!
+		 *  Querying the content of the whole structure is required
+		 *  for older USB2 video cameras which do not support partial
+		 *  descriptor queries, like the STC-XXXUSB family.
+		 *  Windows also supports them.
+		 */
+		if (USE_NEW_SCHEME(retry_counter))
+			retval = usb_get_device_descriptor(udev, 8);
+		else
+			retval = usb_get_device_descriptor(udev,
+				       sizeof(struct usb_device_descriptor));
 		if (retval < 8) {
 			if (retval != -ENODEV)
 				dev_err(&udev->dev,


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-01-18  4:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-24  4:19 [PATCH] usbcore: fix BABBLE failed enumeration of legacy USB2 devices on USB3 bus Marius  Silaghi
2014-01-08  0:32 ` Greg Kroah-Hartman
2014-01-08  4:00   ` Marius  Silaghi
2014-01-18  4:18     ` Jérôme Carretero

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).