usb: workaround non-working keyboards.
If the USB keyboard is not answering properly the first request on its interrupt endpoint, just skip it and try the next one. This workarounds an issue with a wireless mouse dongle which presents itself both as a keyboard and a mouse but has a non-functional keyboard interface. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> (cherry picked from commit 012bbf0ce0301be2482857e3f03b481dd15c2340) Rebased to upstream/master: Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Stefan Reinauer <reinauer@chromium.org> Tested-by: Vincent Palatin <vpalatin@chromium.org>
This commit is contained in:
parent
09defbc75b
commit
5da2dc9789
@ -461,8 +461,13 @@ static int usb_kbd_probe(struct usb_device *dev, unsigned int ifnum)
|
||||
usb_set_idle(dev, iface->desc.bInterfaceNumber, REPEAT_RATE, 0);
|
||||
|
||||
debug("USB KBD: enable interrupt pipe...\n");
|
||||
usb_submit_int_msg(dev, pipe, data->new, maxp > 8 ? 8 : maxp,
|
||||
ep->bInterval);
|
||||
if (usb_submit_int_msg(dev, pipe, data->new, maxp > 8 ? 8 : maxp,
|
||||
ep->bInterval) < 0) {
|
||||
printf("Failed to get keyboard state from device %04x:%04x\n",
|
||||
dev->descriptor.idVendor, dev->descriptor.idProduct);
|
||||
/* Abort, we don't want to use that non-functional keyboard. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Success. */
|
||||
return 1;
|
||||
|
Loading…
Reference in New Issue
Block a user