diff mbox series

[3/6] HID: wacom: Short-circuit processing of touch when it is disabled

Message ID 20210719205533.2189804-3-jason.gerecke@wacom.com (mailing list archive)
State Mainlined
Commit 5bed0128868ce0e71f243973b3fc7b3bfca902b5
Delegated to: Jiri Kosina
Headers show
Series [1/6] HID: wacom: Re-enable touch by default for Cintiq 24HDT / 27QHDT | expand

Commit Message

Gerecke, Jason July 19, 2021, 8:55 p.m. UTC
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>
---
 drivers/hid/wacom_sys.c |  1 +
 drivers/hid/wacom_wac.c | 12 ++++++++++++
 drivers/hid/wacom_wac.h |  1 +
 3 files changed, 14 insertions(+)
diff mbox series

Patch

diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index 713a2504092f..93f49b766376 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -2797,6 +2797,7 @@  static int wacom_probe(struct hid_device *hdev,
 				 error);
 	}
 
+	wacom_wac->probe_complete = true;
 	return 0;
 }
 
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index b87fbd2a81a6..27587070a192 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2581,6 +2581,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;
 
@@ -2630,6 +2636,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++) {
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
index 4e9eb0c1eff6..8b2d4e5b2303 100644
--- a/drivers/hid/wacom_wac.h
+++ b/drivers/hid/wacom_wac.h
@@ -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;