| From cc917378b77eab660ea77fb8abfce36843b7d9ba Mon Sep 17 00:00:00 2001 |
| From: Jason Gerecke <jason.gerecke@wacom.com> |
| Date: Wed, 1 Apr 2020 14:23:29 -0700 |
| Subject: [PATCH] HID: wacom: Read HID_DG_CONTACTMAX directly for non-generic |
| devices |
| |
| commit 778fbf4179991e7652e97d7f1ca1f657ef828422 upstream. |
| |
| We've recently switched from extracting the value of HID_DG_CONTACTMAX |
| at a fixed offset (which may not be correct for all tablets) to |
| injecting the report into the driver for the generic codepath to handle. |
| Unfortunately, this change was made for *all* tablets, even those which |
| aren't generic. Because `wacom_wac_report` ignores reports from non- |
| generic devices, the contact count never gets initialized. Ultimately |
| this results in the touch device itself failing to probe, and thus the |
| loss of touch input. |
| |
| This commit adds back the fixed-offset extraction for non-generic devices. |
| |
| Link: https://github.com/linuxwacom/input-wacom/issues/155 |
| Fixes: 184eccd40389 ("HID: wacom: generic: read HID_DG_CONTACTMAX from any feature report") |
| Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com> |
| Reviewed-by: Aaron Armstrong Skomra <aaron.skomra@wacom.com> |
| CC: stable@vger.kernel.org # 5.3+ |
| Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c |
| index 602219a8710d..0dbaf68ea291 100644 |
| --- a/drivers/hid/wacom_sys.c |
| +++ b/drivers/hid/wacom_sys.c |
| @@ -319,9 +319,11 @@ static void wacom_feature_mapping(struct hid_device *hdev, |
| data[0] = field->report->id; |
| ret = wacom_get_report(hdev, HID_FEATURE_REPORT, |
| data, n, WAC_CMD_RETRIES); |
| - if (ret == n) { |
| + if (ret == n && features->type == HID_GENERIC) { |
| ret = hid_report_raw_event(hdev, |
| HID_FEATURE_REPORT, data, n, 0); |
| + } else if (ret == 2 && features->type != HID_GENERIC) { |
| + features->touch_max = data[1]; |
| } else { |
| features->touch_max = 16; |
| hid_warn(hdev, "wacom_feature_mapping: " |
| -- |
| 2.7.4 |
| |