summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2015-11-13 13:34:09 -0700
committerMarek Vasut <marex@denx.de>2015-12-17 21:54:41 +0100
commite4b70d80350c1238fa07872d71c19e3ddbf53b76 (patch)
tree26505fbc6c2cfc9af2bc49766c8116acad159798 /common
parentfee331f66c923bd1b481b4a72fe7814e5436daed (diff)
usb: kbd: don't use int xfers when polling via ctrl xfers
When CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP is enabled, use a GET_REPORT control transfer to retrieve the initial state of the keyboard. This matches the technique used to poll the keyboard state. This is useful since it eliminates the remaining use of interrupt transfers from the USB keyboard driver, which allows it to work with USB HCD that don't support interrupt transfers. Cc: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'common')
-rw-r--r--common/usb_kbd.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/common/usb_kbd.c b/common/usb_kbd.c
index 069fbd2de7d..9617a4848ad 100644
--- a/common/usb_kbd.c
+++ b/common/usb_kbd.c
@@ -476,6 +476,9 @@ static int usb_kbd_probe_dev(struct usb_device *dev, unsigned int ifnum)
USB_KBD_BOOT_REPORT_SIZE, data->new,
data->intinterval);
if (!data->intq) {
+#elif defined(CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP)
+ if (usb_get_report(dev, iface->desc.bInterfaceNumber,
+ 1, 0, data->new, USB_KBD_BOOT_REPORT_SIZE) < 0) {
#else
if (usb_submit_int_msg(dev, data->intpipe, data->new, data->intpktsize,
data->intinterval) < 0) {