diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/hid/usbhid/hid-core.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 96b0181cf819..d7cf2b56e117 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -688,7 +688,14 @@ static int usbhid_open(struct hid_device *hid) set_bit(HID_OPENED, &usbhid->iofl); - if (hid->quirks & HID_QUIRK_ALWAYS_POLL) { + /* + * ALWAYS_POLL devices are already polled from usbhid_start(), and a + * device with no input reports has nothing to send on the interrupt + * IN endpoint. In some cases polling is harmful: on the ASUS ROG + * N-Key keyboards it makes the sibling interface drop keypresses. + */ + if ((hid->quirks & HID_QUIRK_ALWAYS_POLL) || + list_empty(&hid->report_enum[HID_INPUT_REPORT].report_list)) { res = 0; goto Done; } |
