2
votes

I have a full-speed USB HID device with polling interval requested equal to 1, and when I use it with Kernels 3.x, 4.x I only get Interrupt IN transfers every other frame (every 2ms). At the same time, the OUT transfers happen every frame (every 1ms) as designed. Exact same device with exact same software works as expected (IN transfers every 1ms) on Kernel 2.6 on very slow (500MHz Atom) computer.

Anything I can do about this?

1

1 Answers

1
votes

Looks like this is because of a bug in Linux drivers for UHCI and some OHCI controllers. The driver doesn't process the TDs filled by the controller fast enough, so the controller must skip a SOH slot. As a result, interrupt transfers arrive only every second slot.

If I insert USB 3.0 card into the same Linux, everything is fine because XHCI driver is used instead. If I run Windows on the same computer, everything is fine, because Windows doesn't have the bug.