diff options
author | Peter Mamonov <pmamonov@gmail.com> | 2015-10-14 13:15:48 +0300 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-10-14 15:35:30 +0200 |
commit | 6b0cbf2059d1a6f2f58965bae47c4f9c54174aa4 (patch) | |
tree | e6ad8dc8444d5627b39103313f47fd88c90c024d /drivers/input | |
parent | 16f7b3513822b514bb242e3756ceb01663a0bb1e (diff) | |
download | barebox-6b0cbf2059d1a6f2f58965bae47c4f9c54174aa4.tar.gz barebox-6b0cbf2059d1a6f2f58965bae47c4f9c54174aa4.tar.xz |
input: usb_kbd: skip poll on -EAGAIN error
Skip poll if either usb_submit_int_msg() or usb_get_report()
returned -EAGAIN.
Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/input')
-rw-r--r-- | drivers/input/usb_kbd.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/input/usb_kbd.c b/drivers/input/usb_kbd.c index 8c08aba799..655d0c7b25 100644 --- a/drivers/input/usb_kbd.c +++ b/drivers/input/usb_kbd.c @@ -274,7 +274,7 @@ static void usb_kbd_poll(struct poller_struct *poller) struct usb_kbd_pdata *data = container_of(poller, struct usb_kbd_pdata, poller); struct usb_device *usbdev = data->usbdev; - int diff, tout; + int diff, tout, ret; if (data->lock) return; @@ -284,7 +284,10 @@ static void usb_kbd_poll(struct poller_struct *poller) goto exit; data->last_poll = get_time_ns(); - if (0 > data->do_poll(data)) { + ret = data->do_poll(data); + if (ret == -EAGAIN) + goto exit; + if (ret < 0) { /* exit and lock forever */ dev_err(&usbdev->dev, "usb_submit_int_msg() failed. Keyboard disconnect?\n"); |