RE: xHCI driver Bug report (Babble reported at enumeration for cam that works in Windows)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This bug can be fixed by the patch I have just sent (if some maintainer will kindly apply it). I repeat the patch here:
From: Marius C Silaghi <msilaghi@xxxxxxx>

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@xxxxxxx>
---
--- 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,--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux