So,
I've finally got something that I think works quite well with the devices I have. This fix should help remove any problems with keyboards repeating / dropping keys...
https://github.com/ghollingworth/linux.git
It may well break other things, such as isochronous endpoints (I've not put in any special cases yet) so I'd be interested if anyone can test with something like that...
Disclaimer:
To try it out, you're going to have to be able to rebuild your own kernel, if you can't do that then this is not the right time for you to try out the patch. Second, there are a couple of BUG()'s in there that are specifically there to catch the bad cases (such as ever getting a NYET response from a hub). This isn't actually a bug at all but is useful to know!
To build this, I'd suggest you turn on kernel debug (under kernel hacking in the menuconfig) and have a serial debug available...
Known issues:
1) Isochronous endpoints have not been tested and I know they are different but haven't been bothered yet to put any thought into why they would fail, so they probably do!
2) There are two main bug's you could get rid of it you hit them, the first is the NYET bug on line 266 of dwc_otg_hcd_intr.c. You can safely remove this with no loss of packets. The second is the NYET ERR bug on line 291, if you hit this then you have dropped a packet and is indicative of the type of packet loss we were seeing on keyboards... It doesn't mean it's the end of the world, but I would like to know about it! (remove the BUG and see if its better anyway)
So to confirm, have a play and see if it fixes some of your problems, if not try to understand which of the BUGs you are hitting there is further debug available if you have a serial console connected and understand the kdb interface...
Would be interested in knowing if there are any combinations of devices that fail with this software...
Thanks and have fun
Gordon Hollingworth