Commit 5a6c865d authored by Chris Bagwell's avatar Chris Bagwell Committed by Dmitry Torokhov

Input: wacom - ignore unwanted bamboo packets

Bamboo's Pen and Touch packets always start with a value
of 0x02 in first byte.  In 3rd gen Bamboo's, the hw is now
periodically sending some additional packets with unrelated data
and uses a value other than 0x02 to inform driver this.

Ignore those packets now.

This was reported by users as bad behavior in Gimp. The
invalid packets being processed made the stylus report
out of proximity for the 1 packet and this triggered some
secondary bug which caused Gimp to stop drawing until
user really took pen out of proximity of tablet.
Signed-off-by: default avatarChris Bagwell <chris@cnpbagwell.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent d2cc817a
...@@ -799,6 +799,9 @@ static int wacom_bpt_touch(struct wacom_wac *wacom) ...@@ -799,6 +799,9 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
unsigned char *data = wacom->data; unsigned char *data = wacom->data;
int i; int i;
if (data[0] != 0x02)
return 0;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
int p = data[9 * i + 2]; int p = data[9 * i + 2];
bool touch = p && !wacom->shared->stylus_in_proximity; bool touch = p && !wacom->shared->stylus_in_proximity;
...@@ -875,6 +878,9 @@ static int wacom_bpt3_touch(struct wacom_wac *wacom) ...@@ -875,6 +878,9 @@ static int wacom_bpt3_touch(struct wacom_wac *wacom)
int count = data[1] & 0x03; int count = data[1] & 0x03;
int i; int i;
if (data[0] != 0x02)
return 0;
/* data has up to 7 fixed sized 8-byte messages starting at data[2] */ /* data has up to 7 fixed sized 8-byte messages starting at data[2] */
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
int offset = (8 * i) + 2; int offset = (8 * i) + 2;
...@@ -900,6 +906,9 @@ static int wacom_bpt_pen(struct wacom_wac *wacom) ...@@ -900,6 +906,9 @@ static int wacom_bpt_pen(struct wacom_wac *wacom)
unsigned char *data = wacom->data; unsigned char *data = wacom->data;
int prox = 0, x = 0, y = 0, p = 0, d = 0, pen = 0, btn1 = 0, btn2 = 0; int prox = 0, x = 0, y = 0, p = 0, d = 0, pen = 0, btn1 = 0, btn2 = 0;
if (data[0] != 0x02)
return 0;
prox = (data[1] & 0x20) == 0x20; prox = (data[1] & 0x20) == 0x20;
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment