Re: USB reset xhci_hcd for ELAN touchscreen

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

 



Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> writes:

> ffff8800da9be6c0 3444255124 S Ci:2:067:0 s 80 06 0100 0000 0012 18 <
> ffff8800da9be6c0 3444255418 C Ci:2:067:0 0 18 = 12010002 00000008 f3048900 1300040e 0001

So you are successfully reading the device descriptor in hub_port_init()

> ffff88020b7a76c0 3444255485 S Ci:2:067:0 s 80 06 0600 0000 000a 10 <
> ffff88020b7a76c0 3444255548 C Ci:2:067:0 -32 0
> ffff88020b7a76c0 3444255612 S Ci:2:067:0 s 80 06 0600 0000 000a 10 <
> ffff88020b7a76c0 3446360388 C Ci:2:067:0 -71 0
> ffff88020b7a76c0 3446360451 S Ci:2:067:0 s 80 06 0600 0000 000a 10 <
> ffff88020b7a76c0 3446360539 C Ci:2:067:0 -71 0


Then you hit this part of hub_port_connect_change():

                /* check for devices running slower than they could */
                if (le16_to_cpu(udev->descriptor.bcdUSB) >= 0x0200
                                && udev->speed == USB_SPEED_FULL
                                && highspeed_hubs != 0)
                        check_highspeed (hub, udev, port1);


And check_highspeed() calls usb_get_descriptor() to get the
USB_DT_DEVICE_QUALIFIER descriptor, but this device doesn't like that
and stalls.   usb_get_descriptor() still tries 3 times before giving up,
but it looks like the stall isn't cleared like it should be?

I assume you know much better than me why  usb_get_descriptor() doesn't
bail out on stall while usb_get_string() does.  Looks kind of strange.
But I guess this is done for historic and/or good reasons. And why does
the device then start causing EPROTO? Is this expected?

In any case, it seems the failure to get the USB_DT_DEVICE_QUALIFIER is
screwing up this device, and is probably what makes the subsequent
attempt to fetch USB_DT_CONFIG fail with EPROTO as well:

> ffff88020b7a76c0 3446360611 S Ci:2:067:0 s 80 06 0200 0000 0009 9 <
> ffff88020b7a76c0 3446360700 C Ci:2:067:0 -71 0
> ffff88020b7a76c0 3446360749 S Ci:2:067:0 s 80 06 0200 0000 0009 9 <
> ffff88020b7a76c0 3446360859 C Ci:2:067:0 -71 0
> ffff88020b7a76c0 3446360908 S Ci:2:067:0 s 80 06 0200 0000 0009 9 <
> ffff88020b7a76c0 3446360980 C Ci:2:067:0 -71 0

I guess you could try to comment out the call to check_highspeed(), and
if that works then this could be food for another device specific quirk?


Bjørn
--
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