diff options
author | Jason Gerecke <killertofu@gmail.com> | 2015-10-07 16:54:22 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-01-31 11:25:54 -0800 |
commit | c8dfd6a268ee33048a30fc493fa75f0bc2f96e3c (patch) | |
tree | 897aa01bbf1c122c49e1339972701d1a3b9a2e77 | |
parent | 4fb5b5240132170cd176845086085c213f6d9cf5 (diff) | |
download | lwn-c8dfd6a268ee33048a30fc493fa75f0bc2f96e3c.tar.gz lwn-c8dfd6a268ee33048a30fc493fa75f0bc2f96e3c.zip |
HID: wacom: Expect 'touch_max' touches if HID_DG_CONTACTCOUNT not present
commit df7079380554e6e8e13a0812c7e6c72f669aba5c upstream.
When introduced in commit 1b5d514, the check 'if (hid_data->cc_index >= 0)'
in 'wacom_wac_finger_pre_report' was intended to switch where the driver
got the expected number of contacts from: HID_DG_CONTACTCOUNT if the usage
was present, or 'touch_max' otherwise. Unfortunately, an oversight worthy
of a brown paper bag (specifically, that 'cc_index' could never be negative)
meant that the latter 'else' clause would never be entered.
The patch prior to this one introduced a way for 'cc_index' to be negative,
but only if HID_DG_CONTACTCOUNT is present in some report _other_ than the
one being processed. To ensure the 'else' clause is also entered for devices
which don't have HID_DG_CONTACTCOUNT on _any_ report, we add the additional
constraint that 'cc_report' be non-zero (which is true only if the usage is
present in some report).
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/hid/wacom_wac.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index 9c3b14496c97..cba008ac9cff 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c @@ -1740,8 +1740,8 @@ static void wacom_wac_finger_pre_report(struct hid_device *hdev, } } } - - if (hid_data->cc_index >= 0) { + if (hid_data->cc_report != 0 && + hid_data->cc_index >= 0) { struct hid_field *field = report->field[hid_data->cc_index]; int value = field->value[hid_data->cc_value_index]; if (value) |