From: Vincent Palatin Date: Sat, 11 May 2013 02:48:59 +0000 (-0700) Subject: usb: workaround non-working keyboards. X-Git-Tag: v2013.07-rc1~3^2~11 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=5da2dc9789abecb1b018beb0c93f4c38c2985bc6;p=oweals%2Fu-boot.git 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 (cherry picked from commit 012bbf0ce0301be2482857e3f03b481dd15c2340) Rebased to upstream/master: Signed-off-by: Simon Glass Reviewed-by: Stefan Reinauer Tested-by: Vincent Palatin --- diff --git a/common/usb_kbd.c b/common/usb_kbd.c index 188763d605..3174b5e1bf 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -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;