stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] HID: wacom: Avoid entering wacom_wac_pen_report for pad / battery
@ 2020-09-23 20:14 Gerecke, Jason
  2020-09-25 11:15 ` Jiri Kosina
  0 siblings, 1 reply; 2+ messages in thread
From: Gerecke, Jason @ 2020-09-23 20:14 UTC (permalink / raw)
  To: linux-input, Jiri Kosina, Benjamin Tissoires
  Cc: Ping Cheng, Aaron Armstrong Skomra, Jason Gerecke, stable, Ping Cheng

From: Jason Gerecke <jason.gerecke@wacom.com>

It has recently been reported that the "heartbeat" report from devices
like the 2nd-gen Intuos Pro (PTH-460, PTH-660, PTH-860) or the 2nd-gen
Bluetooth-enabled Intuos tablets (CTL-4100WL, CTL-6100WL) can cause the
driver to send a spurious BTN_TOUCH=0 once per second in the middle of
drawing. This can result in broken lines while drawing on Chrome OS.

The source of the issue has been traced back to a change which modified
the driver to only call `wacom_wac_pad_report()` once per report instead
of once per collection. As part of this change, pad-handling code was
removed from `wacom_wac_collection()` under the assumption that the
`WACOM_PEN_FIELD` and `WACOM_TOUCH_FIELD` checks would not be satisfied
when a pad or battery collection was being processed.

To be clear, the macros `WACOM_PAD_FIELD` and `WACOM_PEN_FIELD` do not
currently check exclusive conditions. In fact, most "pad" fields will
also appear to be "pen" fields simply due to their presence inside of
a Digitizer application collection. Because of this, the removal of
the check from `wacom_wac_collection()` just causes pad / battery
collections to instead trigger a call to `wacom_wac_pen_report()`
instead. The pen report function in turn resets the tip switch state
just prior to exiting, resulting in the observed BTN_TOUCH=0 symptom.

To correct this, we restore a version of the `WACOM_PAD_FIELD` check
in `wacom_wac_collection()` and return early. This effectively prevents
pad / battery collections from being reported until the very end of the
report as originally intended.

Fixes: d4b8efeb46d9 ("HID: wacom: generic: Correct pad syncing")
Cc: stable@vger.kernel.org # v4.17+
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Reviewed-by: Ping Cheng <ping.cheng@wacom.com>
Tested-by: Ping Cheng <ping.cheng@wacom.com>
---
 drivers/hid/wacom_wac.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 1c96809b51c9..b74acbd5997b 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2773,7 +2773,9 @@ static int wacom_wac_collection(struct hid_device *hdev, struct hid_report *repo
 	if (report->type != HID_INPUT_REPORT)
 		return -1;
 
-	if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
+	if (WACOM_PAD_FIELD(field))
+		return 0;
+	else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
 		wacom_wac_pen_report(hdev, report);
 	else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
 		wacom_wac_finger_report(hdev, report);
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] HID: wacom: Avoid entering wacom_wac_pen_report for pad / battery
  2020-09-23 20:14 [PATCH] HID: wacom: Avoid entering wacom_wac_pen_report for pad / battery Gerecke, Jason
@ 2020-09-25 11:15 ` Jiri Kosina
  0 siblings, 0 replies; 2+ messages in thread
From: Jiri Kosina @ 2020-09-25 11:15 UTC (permalink / raw)
  To: Gerecke, Jason
  Cc: linux-input, Benjamin Tissoires, Ping Cheng,
	Aaron Armstrong Skomra, Jason Gerecke, stable, Ping Cheng

On Wed, 23 Sep 2020, Gerecke, Jason wrote:

> From: Jason Gerecke <jason.gerecke@wacom.com>
> 
> It has recently been reported that the "heartbeat" report from devices
> like the 2nd-gen Intuos Pro (PTH-460, PTH-660, PTH-860) or the 2nd-gen
> Bluetooth-enabled Intuos tablets (CTL-4100WL, CTL-6100WL) can cause the
> driver to send a spurious BTN_TOUCH=0 once per second in the middle of
> drawing. This can result in broken lines while drawing on Chrome OS.
> 
> The source of the issue has been traced back to a change which modified
> the driver to only call `wacom_wac_pad_report()` once per report instead
> of once per collection. As part of this change, pad-handling code was
> removed from `wacom_wac_collection()` under the assumption that the
> `WACOM_PEN_FIELD` and `WACOM_TOUCH_FIELD` checks would not be satisfied
> when a pad or battery collection was being processed.
> 
> To be clear, the macros `WACOM_PAD_FIELD` and `WACOM_PEN_FIELD` do not
> currently check exclusive conditions. In fact, most "pad" fields will
> also appear to be "pen" fields simply due to their presence inside of
> a Digitizer application collection. Because of this, the removal of
> the check from `wacom_wac_collection()` just causes pad / battery
> collections to instead trigger a call to `wacom_wac_pen_report()`
> instead. The pen report function in turn resets the tip switch state
> just prior to exiting, resulting in the observed BTN_TOUCH=0 symptom.
> 
> To correct this, we restore a version of the `WACOM_PAD_FIELD` check
> in `wacom_wac_collection()` and return early. This effectively prevents
> pad / battery collections from being reported until the very end of the
> report as originally intended.
> 
> Fixes: d4b8efeb46d9 ("HID: wacom: generic: Correct pad syncing")
> Cc: stable@vger.kernel.org # v4.17+
> Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
> Reviewed-by: Ping Cheng <ping.cheng@wacom.com>
> Tested-by: Ping Cheng <ping.cheng@wacom.com>

Applied.

-- 
Jiri Kosina
SUSE Labs


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-09-25 11:15 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-23 20:14 [PATCH] HID: wacom: Avoid entering wacom_wac_pen_report for pad / battery Gerecke, Jason
2020-09-25 11:15 ` Jiri Kosina

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).