Patch "HID: wacom: Tie cached HID_DG_CONTACTCOUNT indices to report ID" has been added to the 4.3-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
HID: wacom: Tie cached HID_DG_CONTACTCOUNT indices to report ID
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
hid-wacom-tie-cached-hid_dg_contactcount-indices-to-report-id.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
499522c8c015de995aabce3d0f0bf4b9b17f44c3Mon Sep 17 00:00:00 2001
From: Jason Gerecke <[email protected]>
Date: Wed, 7 Oct 2015 16:54:21 -0700
Subject: HID: wacom: Tie cached HID_DG_CONTACTCOUNT indices to report ID
From: Jason Gerecke <[email protected]>
commit 499522c8c015de995aabce3d0f0bf4b9b17f44c3 upstream.
The cached indicies 'cc_index' and 'cc_value_index' introduced in 1b5d514 are only valid for a single report ID. If a touchscreen has multiple reports with a HID_DG_CONTACTCOUNT usage, its possible that the values will not be correct for the report we're handling, resulting in an incorrect value for 'num_expected'. This has been observed with the Cintiq Companion 2.
To address this, we store the ID of the report those indicies are valid for in a new 'cc_report' variable. Before using them to get the expected contact count, we first check if the ID of the report we're processing matches 'cc_report'. If it doesn't, we update the indicies to point to the HID_DG_CONTACTCOUNT usage of the current report (if it has one).
--- drivers/hid/wacom_wac.c | 26 ++++++++++++++++++++++++++ drivers/hid/wacom_wac.h | 1 + 2 files changed, 27 insertions(+)
drivers/hid/wacom_wac.c +26 -0
@@ -1628,6 +1628,7 @@ static void wacom_wac_finger_usage_mappiwacom_map_usage (input, usage, field,EV_KEY ,BTN_TOUCH ,0 );break ;case HID_DG_CONTACTCOUNT : + wacom_wac->hid_data.cc_report = field->report->id; wacom_wac->hid_data.cc_index = field->index; wacom_wac->hid_data.cc_value_index = usage->usage_index;break ;
@@ -1715,6 +1716,31 @@ static void wacom_wac_finger_pre_report(struct wacom_wac *wacom_wac = &wacom->wacom_wac;struct hid_data * hid_data = &wacom_wac->hid_data; +if (hid_data->cc_report !=0 && + hid_data->cc_report != report->id) { +int i; + + hid_data->cc_report = report->id; + hid_data->cc_index =-1 ; + hid_data->cc_value_index =-1 ; + +for (i =0 ; i < report->maxfield; i++) { +struct hid_field *field = report->field[i]; +int j; + +for (j =0 ; j < field->maxusage; j++) { +if (field->usage[j].hid ==HID_DG_CONTACTCOUNT ) { + hid_data->cc_index = i; + hid_data->cc_value_index = j; + +/* break */ + i = report->maxfield; + j = field->maxusage; + } + } + } + } +if (hid_data->cc_index >=0 ) {struct hid_field *field = report->field[hid_data->cc_index];int value = field->value[hid_data->cc_value_index];
drivers/hid/wacom_wac.h +1 -0
@@ -198,6 +198,7 @@ struct hid_data {int width;int height;int id; +int cc_report;int cc_index;int cc_value_index;int num_expected;
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/hid-wacom-expect-touch_max-touches-if-hid_dg_contactcount.patch queue-4.3/hid-wacom-tie-cached-hid_dg_contactcount-indices-to-report-id.patch