HID: wacom: Short-circuit processing of touch when it is disabled
authorJason Gerecke <killertofu@gmail.com>
Mon, 19 Jul 2021 20:55:30 +0000 (13:55 -0700)
committerJiri Kosina <jkosina@suse.cz>
Wed, 28 Jul 2021 09:45:40 +0000 (11:45 +0200)
Avoid doing unnecessary work when touch is disabled by detecting this
condition and returning early. Note that the probe process sends GET
FEATURE requests to discover e.g. HID_DG_CONTACTMAX, so we can't start
ignoring touch reports until probe finishes.

Signed-off-by: Ping Cheng <ping.cheng@wacom.com>
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/wacom_sys.c
drivers/hid/wacom_wac.c
drivers/hid/wacom_wac.h

index 713a250..93f49b7 100644 (file)
@@ -2797,6 +2797,7 @@ static int wacom_probe(struct hid_device *hdev,
                                 error);
        }
 
+       wacom_wac->probe_complete = true;
        return 0;
 }
 
index fa2b422..ce9e8e9 100644 (file)
@@ -2584,6 +2584,12 @@ static void wacom_wac_finger_event(struct hid_device *hdev,
        unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
        struct wacom_features *features = &wacom->wacom_wac.features;
 
+       /* don't process touch events when touch is off */
+       if (wacom_wac->probe_complete &&
+           !wacom_wac->shared->is_touch_on &&
+           !wacom_wac->shared->touch_down)
+               return;
+
        if (wacom_wac->is_invalid_bt_frame)
                return;
 
@@ -2633,6 +2639,12 @@ static void wacom_wac_finger_pre_report(struct hid_device *hdev,
        struct hid_data* hid_data = &wacom_wac->hid_data;
        int i;
 
+       /* don't process touch events when touch is off */
+       if (wacom_wac->probe_complete &&
+           !wacom_wac->shared->is_touch_on &&
+           !wacom_wac->shared->touch_down)
+               return;
+
        wacom_wac->is_invalid_bt_frame = false;
 
        for (i = 0; i < report->maxfield; i++) {
index 4e9eb0c..8b2d4e5 100644 (file)
@@ -337,6 +337,7 @@ struct wacom_wac {
        int tool[2];
        int id[2];
        __u64 serial[2];
+       bool probe_complete;
        bool reporting_data;
        struct wacom_features features;
        struct wacom_shared *shared;