HID: input: call input_sync() when automatically releasing a key
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Thu, 9 Jul 2015 21:33:21 +0000 (14:33 -0700)
committerJiri Kosina <jkosina@suse.com>
Fri, 10 Jul 2015 09:34:44 +0000 (11:34 +0200)
We need to emit EV_SYN/SYN_REPORT between key press and release, otherwise
userspace is allowed to "swallow" the event.

[jkosina@suse.com: Dmitry says that he's observing this behavior with
 Plantronics headset]

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-input.c

index 3511bbaba505a4524ad382297ec1e486e21e7e48..14aebe4832194ab0d3f59e7d2bfdb180bb802b48 100644 (file)
@@ -1163,8 +1163,11 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
 
        input_event(input, usage->type, usage->code, value);
 
-       if ((field->flags & HID_MAIN_ITEM_RELATIVE) && (usage->type == EV_KEY))
+       if ((field->flags & HID_MAIN_ITEM_RELATIVE) &&
+           usage->type == EV_KEY && value) {
+               input_sync(input);
                input_event(input, usage->type, usage->code, 0);
+       }
 }
 
 void hidinput_report_event(struct hid_device *hid, struct hid_report *report)