On Sat, 20 Nov 2021 21:54:20 -0500 Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: > On Fri, Nov 19, 2021 at 05:19:15PM -0500, David Niklas wrote: > > On Wed, 17 Nov 2021 12:08:17 -0500 > > Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote: <snip> > > > This will cause the kernel to ask for 1060 bytes rather than 996. > > > (It's also potentially dangerous, because it asks for 1060 bytes to > > > be stored into a 996-byte buffer; if the device sends more data than > > > expected then the excess will be written beyond the end of the > > > buffer.) > > > > > > Please send a usbmon trace showing what happens with this patch > > > applied. And you might as well put the Set-Idle request back in, > > > because now we know Windows does send that request. > > > > > <snip> > > > > It still disconnects. I've attached the usbmon output. > > The trace clearly shows the request for a 1060-byte HID report > descriptor and the device sending back a 996-byte reply, just like in > Windows. And yet the disconnect still occurs. > > The only remaining difference is the transfer of string descriptors. > You can prevent Linux from asking for them by editing usb_string() in > drivers/usb/core/message.c. Just make the function return -ENOMEM > unconditionally. That will stop the requests from going out. > > Alan Stern > Ok, I first edited the kernel to return -ENOMEM like you suggested but the UPS still disconnected. I then edited it again to re-add the 1060 byte request and the UPS still disconnected. I'm attaching the usbmon traces. If you need any additional info I'll do my best to provide it. Thanks, David
Attachment:
mon3.txt.bz2
Description: application/bzip
Attachment:
mon4.txt.bz2
Description: application/bzip