Skip to content

Commit d9216d7

Browse files
jigpuJiri Kosina
authored andcommitted
HID: wacom: Avoid entering wacom_wac_pen_report for pad / battery
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: d4b8efe ("HID: wacom: generic: Correct pad syncing") Cc: [email protected] # v4.17+ Signed-off-by: Jason Gerecke <[email protected]> Reviewed-by: Ping Cheng <[email protected]> Tested-by: Ping Cheng <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent ca43ab1 commit d9216d7

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

drivers/hid/wacom_wac.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2773,7 +2773,9 @@ static int wacom_wac_collection(struct hid_device *hdev, struct hid_report *repo
27732773
if (report->type != HID_INPUT_REPORT)
27742774
return -1;
27752775

2776-
if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2776+
if (WACOM_PAD_FIELD(field))
2777+
return 0;
2778+
else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
27772779
wacom_wac_pen_report(hdev, report);
27782780
else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
27792781
wacom_wac_finger_report(hdev, report);

0 commit comments

Comments
 (0)