Re: USB reset xhci_hcd for ELAN touchscreen

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

 



On Sun, Jun 01, 2014 at 10:43:21AM -0700, Greg Kroah-Hartman wrote:
> On Sun, Jun 01, 2014 at 12:21:55PM -0400, Alan Stern wrote:
> > On Sun, 1 Jun 2014, Bjørn Mork wrote:
> > 
> > > Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> writes:
> > > 
> > > > Ok, here's the dump for when the device keeps disconnecting itself from
> > > > the bus (no call to check_highspeed() anymore).
> > > >
> > > > Things go better, but then the device just goes quiet, and resets.  Any
> > > > ideas?  I'll dig further this evening...
> > > >
> > > > ffff8800d906a0c0 2610372685 S Ci:2:112:0 s 80 06 0100 0000 0012 18 <
> > > > ffff8800d906a0c0 2610372929 C Ci:2:112:0 0 18 = 12010002 00000008 f3048900 1300040e 0001
> > > > ffff8801d684d540 2610372974 S Ci:2:112:0 s 80 06 0200 0000 0009 9 <
> > > > ffff8801d684d540 2610373139 C Ci:2:112:0 0 9 = 09022900 010100e0 32
> > > > ffff8801d684d540 2610373167 S Ci:2:112:0 s 80 06 0200 0000 0029 41 <
> > > > ffff8801d684d540 2610373479 C Ci:2:112:0 0 41 = 09022900 010100e0 32090400 00020300 00000921 10010001 229d0307 05810340
> > > > ffff8801d684dd80 2610373508 S Ci:2:112:0 s 80 06 0300 0000 00ff 255 <
> > > > ffff8801d684dd80 2610373612 C Ci:2:112:0 0 4 = 04030904
> > > > ffff8801d684dd80 2610373636 S Ci:2:112:0 s 80 06 030e 0409 00ff 255 <
> > > > ffff8801d684dd80 2610373895 C Ci:2:112:0 0 24 = 18035400 6f007500 63006800 73006300 72006500 65006e00
> > > > ffff8801d684dd80 2610373922 S Ci:2:112:0 s 80 06 0304 0409 00ff 255 <
> > > > ffff8801d684dd80 2610374066 C Ci:2:112:0 0 10 = 0a034500 4c004100 4e00
> > > > ffff8800d906a9c0 2610374602 S Co:2:112:0 s 00 09 0001 0000 0000 0
> > > > ffff8800d906a9c0 2610374645 C Co:2:112:0 0 0
> > > 
> > > set config is successful, and then it looks like you are entering
> > > usbhid_parse(), which is called during hid_add_device(): 
> > > 
> > > > ffff8800d906a780 2610374837 S Co:2:112:0 s 21 0a 0000 0000 0000 0
> > > > ffff8800d906a780 2610374940 C Co:2:112:0 0 0
> > > 
> > >         hid_set_idle(dev, interface->desc.bInterfaceNumber, 0, 0);
> > > 
> > > > ffff8801d684d0c0 2610374976 S Ci:2:112:0 s 81 06 2200 0000 039d 925 <
> > > > ffff8801d684d0c0 2610379698 C Ci:2:112:0 0 925 = 050d0904 a1018501 0922a102 09421500 25017501 95018102 75018103 75060951
> > > 
> > >         ret = hid_get_class_descriptor(dev, interface->desc.bInterfaceNumber,
> > >                         HID_DT_REPORT, rdesc, rsize);
> > > 
> > > > ffff8801d684d840 2610381285 S Ci:2:001:0 s a3 00 0000 0007 0004 4 <
> > > > ffff8801d684d840 2610381303 C Ci:2:001:0 0 4 = 03010000
> > > 
> > > And there you lost the device? And me with it...
> > 
> > Not there exactly.  This is normal; the hub driver checks the hub's 
> > port status again after the device has been initialized and registered.
> > 
> > The real problem happened a couple of seconds later:
> > 
> > > ffff880211d106c0 2612480635 C Ii:2:001:1 0:2048 2 = 8000
> > > ffff880211d106c0 2612480649 S Ii:2:001:1 -115:2048 4 <
> > > ffff8800739bd240 2612480693 S Ci:2:001:0 s a3 00 0000 0007 0004 4 <
> > > ffff8800739bd240 2612480711 C Ci:2:001:0 0 4 = 00010100
> > 
> > This shows the device disconnected itself from the USB bus.  No obvious 
> > reason why.  As a wild guess, perhaps the device expected to receive 
> > some packets from the host and got confused when they didn't arrive.
> > 
> > Notice that there was no activity from any HID driver.  Once the report 
> > descriptor was fetched, nothing more happened.  Did any driver bind to 
> > the HID device?  What does the dmesg log say?
> > 
> > > But if this device really isn't able to cope with the
> > > USB_DT_DEVICE_QUALIFIER descriptor request, then it might not be
> > > prepared for anything "out of the ordinary"? Is there any other possible
> > > explanation for the sudden resets than a firmware crash due to
> > > unexpected input?
> > 
> > There was no unexpected input.  In fact, there was no input at all 
> > after the kernel read the report descriptor.  Not only was no data sent 
> > either way, there weren't even any URBs submitted for input or output.
> > 
> > > The failure seems to happen before any of the known HID quirks have any
> > > effect, so who knows what can be done differently here? Maybe you have
> > > to dump the exact sequence used by Windows and recreate that somehow?
> > > 
> > > Or just play with a userspace program to see what kind of requests you
> > > can send to this device without making it crash (after temporarily
> > > blacklisting usbhid to avoid the initial crash)?
> > 
> > It doesn't look to me like a crash.  It looks more like the driver is 
> > missing.
> 
> Doh, I had based my kernel config on my desktop, and it didn't have the
> hid multitouch driver enabled.
> 
> Turning that on and, wow, it works!  Thanks for pointing out my stupid
> error.
> 
> So, new quirk time, for a device that can't handle the check_highspeed
> command.  I'll do that late tonight after I go handle some household
> responsibilities.

I ended up getting the same laptop so now I'm facing the same problem
with repeated disconnects (especially during resume, which is really
annoying as it adds about a minute to resume time), even with a
hard-coded check-high speed "quirk" and the multitouch driver loaded.

Did you manage to fix the disconnect issue? Are you seeing something
similar at resume?

Thanks,
Johan
--
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