Genius USB keyboard can't work with interrupt msgs, only control msgs. Then, with control msgs if there were no report requests during ~10 secs, EHCI stack in Barebox reports "timeout error" infinitely until 'usb' command will be exectued (i.e. until EHCI halt + reset). So: 1) usb_kbd can detect "timeout error" (or some other error) so your patch, as for now, lacks status checking from idev->poll(). 2) I know this is a WIP patch, but > +static void input_devices_poller_func(struct poller_struct *poller) > { > - struct input_console *ic = ctx; > + struct input_device *idev; > + static uint64_t last_poll; > + struct input_notifier *in; > + > + if (!is_timeout(last_poll, 10 * MSECOND)) > + return; the last_poll var was never set and why 'is_timeout' is here if you have async_calls? Maybe it should be like this?: static struct poller_async input_poller; static void input_devices_poller_func(void *arg) { struct input_device *idev; struct input_notifier *in; list_for_each_entry(idev, &input_devices, list) { idev->poll(idev); if (idev->event.value && is_timeout(idev->start, idev->timeout)) { list_for_each_entry(in, &input_consumers, list) in->notify(in, &idev->event); idev->timeout = 40 * MSECOND; idev->start = get_time_ns(); } } poller_call_async(&input_poller, 10 * MSECOND, input_devices_poller_func, NULL); } And that's all what I can say about EHCI/input/usb_kbd so far. _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox