diff --git a/drivers/input/usb_kbd.c b/drivers/input/usb_kbd.c index 8c08aba..655d0c7 100644 --- a/drivers/input/usb_kbd.c +++ b/drivers/input/usb_kbd.c @@ -274,7 +274,7 @@ 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 @@ 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");