summaryrefslogtreecommitdiffstats
path: root/drivers/input
diff options
context:
space:
mode:
authorPeter Mamonov <pmamonov@gmail.com>2015-10-14 13:15:48 +0300
committerSascha Hauer <s.hauer@pengutronix.de>2015-10-14 15:35:30 +0200
commit6b0cbf2059d1a6f2f58965bae47c4f9c54174aa4 (patch)
treee6ad8dc8444d5627b39103313f47fd88c90c024d /drivers/input
parent16f7b3513822b514bb242e3756ceb01663a0bb1e (diff)
downloadbarebox-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.c7
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");