HID: wacom: Limit touchstrip data to 13 bits
Subsystems (2)
PATCH 1/4 HID: wacom: Limit touchstrip data to 13 bits
Commit c7f0522 uses sixteen bits of data in the construction of 'strip1' and 'strip2'. This can cause problems in some cases, however, since some tablets store flags in the MSB of data[2] and data[4] that should not be included in these values. This restores the 0x1f mask that used prior to c7f0522.
--- drivers/hid/wacom_wac.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/hid/wacom_wac.c +2 -2
@@ -545,8 +545,8 @@ static int wacom_intuos_pad(struct wacom_wac *wacom) ((data[6 ] &0x0F ) <<4 ) | (data[5 ] &0x0F ); } - strip1 = (data[1 ] <<8 ) | data[2 ]; - strip2 = (data[3 ] <<8 ) | data[4 ]; + strip1 = ((data[1 ] &0x1f ) <<8 ) | data[2 ]; + strip2 = ((data[3 ] &0x1f ) <<8 ) | data[4 ]; } prox = (buttons & ~(~0 << nbuttons)) | (keys & ~(~0 << nkeys)) |
Signature · 1 line
2.6.3
PATCH 2/4 HID: wacom: Report 'strip2' values in ABS_RY
Commit c7f0522 accidentally used ABS_RX for reporting both 'strip1' and 'strip2', when the latter should actually be reported through ABS_RY.
--- drivers/hid/wacom_wac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hid/wacom_wac.c +1 -1
@@ -558,7 +558,7 @@ static int wacom_intuos_pad(struct wacom_wac *wacom)input_report_key (input,KEY_PROG1 + i, keys & (1 << i));input_report_abs (input,ABS_RX , strip1); -input_report_abs (input,ABS_RX , strip2); +input_report_abs (input,ABS_RY , strip2);input_report_abs (input,ABS_WHEEL , ring1 &0x7f ? ring1 :0 );input_report_abs (input,ABS_THROTTLE , ring2 &0x07 ? ring2 :0 );
Signature · 1 line
2.6.3
PATCH 3/4 HID: wacom: Fix touchring value reporting
In reply to Jason GereckeCommit c7f0522 reports incorrect touchring values to userspace. This is due to its incorrect handling of the 'touched' bit present in the 'ring1' and 'ring2' variables. Instead of using this bit when determining if a value should be sent, the ABS_WHEEL and ABS_INPUT check (different?!) portions of the position bits. Furthermore, the full values of 'ring1' and 'ring2' are reported to userspace, despite the 'touched' flag needing to be trimmed beforehand. This commit addresses both issues.
--- drivers/hid/wacom_wac.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/hid/wacom_wac.c +2 -2
@@ -560,8 +560,8 @@ static int wacom_intuos_pad(struct wacom_wac *wacom)input_report_abs (input,ABS_RX , strip1);input_report_abs (input,ABS_RY , strip2); -input_report_abs (input,ABS_WHEEL , ring1 &0x7f ? ring1 :0 ); -input_report_abs (input,ABS_THROTTLE , ring2 &0x07 ? ring2 :0 ); +input_report_abs (input,ABS_WHEEL , (ring1 &0x80 ) ? (ring1 &0x7f ) :0 ); +input_report_abs (input,ABS_THROTTLE , (ring2 &0x80 ) ? (ring2 &0x7f ) :0 );input_report_key (input, wacom->tool[1 ], prox ?1 :0 );input_report_abs (input,ABS_MISC , prox ?PAD_DEVICE_ID :0 );
Signature · 1 line
2.6.3
PATCH 4/4 HID: wacom: Fix pad button range for CINTIQ_COMPANION_2
In reply to Jason GereckeCommit c7f0522 incorrectly constructs the 'buttons' variable for the CINTIQ_COMPANION_2 case. The high nybble of data[2] is shifted four bits too far, leaving the bits associated with BTN_7 through BTN_A unset.
--- drivers/hid/wacom_wac.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hid/wacom_wac.c +1 -1
@@ -516,7 +516,7 @@ static int wacom_intuos_pad(struct wacom_wac *wacom)* d-pad down -> data[4] & 0x80 * d-pad center -> data[3] & 0x01 */ - buttons = ((data[2 ] &0xF0 ) <<7 ) | + buttons = ((data[2 ] >>4 ) <<7 ) | ((data[1 ] &0x04 ) <<6 ) | ((data[2 ] &0x0F ) <<2 ) | (data[1 ] &0x03 );
Signature · 1 line
2.6.3
I've applied the series to for-4.5/wacom.
Thanks,
Signature · 2 lines
Jiri Kosina SUSE Labs