]> git.kernelconcepts.de Git - karo-tx-uboot.git/commit
usb: kbd: Fix key repeat not always working
authorHans de Goede <hdegoede@redhat.com>
Tue, 19 May 2015 20:51:03 +0000 (22:51 +0200)
committerLothar Waßmann <LW@KARO-electronics.de>
Tue, 8 Sep 2015 20:47:10 +0000 (22:47 +0200)
commit8c3a12cb0f76869387d6aede09b874d484bd0026
tree884f60e629c789d8c900d6cddd0117d0ff3c00aa
parentf21f1019303ba0b942efb8c789976a51a3a38621
usb: kbd: Fix key repeat not always working

The usb-kbd key repeat code assumes that reports get repeated every 40 ms,
this is never true when using CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP, and
does not always works for CONFIG_SYS_USB_EVENT_POLL and
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE since not all usb keyboards honor
the usb_set_idle() command.

For CONFIG_SYS_USB_EVENT_POLL we must use usb_set_idle() since we do a
blocking wait for the hid report, so if we do not tell the keyboard to send
a hid report every 40ms even if nothing changes then we will block u-boot
for 1s (the default u-boot usb interrupt packet timeout). Note that in this
case on keyboards which do not support usb_set_idle() we loose and we actually
get 1s latencies on other u-boot activities.

For the other poll-methods this commit stops using usb_set_idle() and instead
repeats the last received hid-report every 40 ms as long as no new hid-report
is received. This fixes key-repeat not working at all with
CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP and fixes it not working with
keyboards which do not implement usb_set_idle() when using
CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
common/usb_kbd.c