[U-Boot] [PATCH] usb: kbd: Fix key repeat not always using

Hans de Goede hdegoede at redhat.com
Wed May 13 14:46:34 CEST 2015


Hi,

On 12-05-15 21:30, Marek Vasut wrote:
> On Tuesday, May 12, 2015 at 06:58:23 PM, Hans de Goede wrote:
>> 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 at redhat.com>
>
> Looks reasonable, I don't really care about the ifdef indent, but the
> data type for get_timer() should be fixed. Otherwise,

OK v2 with last_report changed to unsigned_long is coming up.

> Reviewed-by: Marek Vasut <marex at denx.de>
>
> Would this finally be a patch to pick through the USB tree ? :b

Yes!  :)

Regards,

Hans


More information about the U-Boot mailing list