HID: wacom: generic: sync pad events only for actual packets
authorPing Cheng <pinglinux@gmail.com>
Tue, 4 Apr 2017 19:31:07 +0000 (12:31 -0700)
committerJiri Kosina <jkosina@suse.cz>
Thu, 6 Apr 2017 12:51:54 +0000 (14:51 +0200)
Commits d793ff8 and 4082da8 introduced two pad usages which do not
actually send pad input events. To make sure we do not post empty
pad packets, pad_input_event_flag is introduced. Turn on the flag
for real pad input events so we can synchronize them properly.

Signed-off-by: Ping Cheng <ping.cheng@wacom.com>
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/wacom_wac.c
drivers/hid/wacom_wac.h

index f1360381c8f53919ac13778ee69ab3d22e9e39c5..037a9962d053f9fccebebfe6e1c827f7b8afb816 100644 (file)
@@ -1881,6 +1881,8 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
                 /* fall through*/
        default:
                input_event(input, usage->type, usage->code, value);
+               if (value)
+                       wacom_wac->hid_data.pad_input_event_flag = true;
                break;
        }
 }
@@ -1921,9 +1923,12 @@ static void wacom_wac_pad_report(struct hid_device *hdev,
        bool active = wacom_wac->hid_data.inrange_state != 0;
 
        /* report prox for expresskey events */
-       if (wacom_equivalent_usage(report->field[0]->physical) == HID_DG_TABLETFUNCTIONKEY) {
+       if ((wacom_equivalent_usage(report->field[0]->physical) == HID_DG_TABLETFUNCTIONKEY) &&
+           wacom_wac->hid_data.pad_input_event_flag) {
                input_event(input, EV_ABS, ABS_MISC, active ? PAD_DEVICE_ID : 0);
                input_sync(input);
+               if (!active)
+                       wacom_wac->hid_data.pad_input_event_flag = false;
        }
 
 }
index 839bd4b6388c6f2f442cf348004ce37b3ac2127a..570d29582b8206c2c0ba530029916b70500baaa0 100644 (file)
@@ -301,6 +301,7 @@ struct hid_data {
        int bat_charging;
        int bat_connected;
        int ps_connected;
+       bool pad_input_event_flag;
 };
 
 struct wacom_remote_data {