Re: How to set USB_PORT_QUIRK_OLD_SCHEME on an usb-port ?

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

 



Hi,

On 9/6/20 4:22 AM, Alan Stern wrote:
On Sat, Sep 05, 2020 at 01:37:38PM +0200, Hans de Goede wrote:
Hi All,

I have been debugging an issue with a 2-in-1 which
consists of a tablet + a kbd-dock, where the device
turns into a clamshell when docked into the kbd-dock.

The kbd dock is connected via pogo-pins. This works
fine when docked at boot. But there is an enumeration
issue when hot-docked (and the keyboard looses power
when the lid is closedm so this also triggers after
a suspend/resume):

[ 3498.924190] usb 1-3: new full-speed USB device number 5 using xhci_hcd
[ 3499.041725] usb 1-3: device descriptor read/64, error -71
[ 3515.215890] usb 1-3: device descriptor read/64, error -110
[ 3515.440369] usb 1-3: new full-speed USB device number 6 using xhci_hcd
[ 3515.603544] usb 1-3: New USB device found, idVendor=06cb, idProduct=73f5, bcdDevice= 0.02
[ 3515.603574] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3515.603596] usb 1-3: Product: ITE Device(8910)
[ 3515.603614] usb 1-3: Manufacturer: ITE Tech. Inc.

Note there is about 6 seconds before the keyboard becomes
usable, which is quite long when trying to unlock the
laptop after opening the lid.

If I set the USB_PORT_QUIRK_OLD_SCHEME on the port used by the kbd-dock:

echo 1 >  /sys/devices/pci0000\:00/0000\:00\:14.0/usb1/1-0\:1.0/usb1-port3/quirks

Then this changes to:

[ 4467.875008] usb 1-3: new full-speed USB device number 7 using xhci_hcd
[ 4467.878483] usb 1-3: Device not responding to setup address.
[ 4468.082476] usb 1-3: Device not responding to setup address.
[ 4468.289990] usb 1-3: device not accepting address 7, error -71
[ 4468.614928] usb 1-3: new full-speed USB device number 8 using xhci_hcd
[ 4468.662392] usb 1-3: New USB device found, idVendor=06cb, idProduct=73f5, bcdDevice= 0.02
[ 4468.662423] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 4468.662444] usb 1-3: Product: ITE Device(8910)
[ 4468.662461] usb 1-3: Manufacturer: ITE Tech. Inc.

Which is a lot better wrt making the keyboard available for
use in a timely manner.

So now I'm looking into a way to automatically do this. I would
prefer to keep the handling of this out of the kernel, so I looked into
udev, but it seems that the usb_port_device_type device-s registered by
usb_hub_create_port_device() are not visible to udev?

At least I'm not seeing them, in the output of "udevadm info -e"

My impression is that fixing this would be the simplest approach.

I agree that first trying to fix it is a good idea.

Note another option would be to set the global old_scheme_first kernel
cmdline parameter on this 2-in-1. That can be done with a simple
dmi_system_id table on which to do this, but adding such a table
seems undesirable.


A third option I guess would be to try and improve the probe time
of the kbd-dock under the new scheme.

Have you tried decreasing the initial_descriptor_timeout module
parameter for usbcore?  That would probably help, but it's kind of a
sledgehammer.

So I tried this:

[root@localhost ~]# cat /sys/module/usbcore/parameters/initial_descriptor_timeout
1000

But it does not really seem to help:

[ 1171.435346] usb 1-3: USB disconnect, device number 2
[ 1180.430958] usb 1-3: new full-speed USB device number 3 using xhci_hcd
[ 1180.551543] usb 1-3: device descriptor read/64, error -71
[ 1184.045548] usb 1-3: device descriptor read/64, error -110
[ 1184.270924] usb 1-3: new full-speed USB device number 4 using xhci_hcd
[ 1184.438336] usb 1-3: New USB device found, idVendor=06cb, idProduct=73f5, bcdDevice= 0.02
[ 1184.438371] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1184.438399] usb 1-3: Product: ITE Device(8910)
[ 1184.438425] usb 1-3: Manufacturer: ITE Tech. Inc.

Regards,

Hans




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

  Powered by Linux