mirror of
https://github.com/torvalds/linux.git
synced 2024-12-30 14:52:05 +00:00
HID: wacom - make sure wacom_intuos_inout only process in/out events
Move general events related data validation to wacom_intuos_general. Signed-off-by: Ping Cheng <pingc@wacom.com> Reviewed-by: Jason Gerecke <jason.gerecke@wacom.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
599b082095
commit
4750f5fe29
@ -580,11 +580,12 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
|
||||
struct wacom_features *features = &wacom->features;
|
||||
unsigned char *data = wacom->data;
|
||||
struct input_dev *input = wacom->pen_input;
|
||||
int idx = 0;
|
||||
int idx = (features->type == INTUOS) ? (data[1] & 0x01) : 0;
|
||||
|
||||
/* tool number */
|
||||
if (features->type == INTUOS)
|
||||
idx = data[1] & 0x01;
|
||||
if (!(((data[1] & 0xfc) == 0xc0) || /* in prox */
|
||||
((data[1] & 0xfe) == 0x20) || /* in range */
|
||||
((data[1] & 0xfe) == 0x80))) /* out prox */
|
||||
return 0;
|
||||
|
||||
/* Enter report */
|
||||
if ((data[1] & 0xfc) == 0xc0) {
|
||||
@ -676,26 +677,6 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* don't report events for invalid data
|
||||
*/
|
||||
/* older I4 styli don't work with new Cintiqs */
|
||||
if ((!((wacom->id[idx] >> 20) & 0x01) &&
|
||||
(features->type == WACOM_21UX2)) ||
|
||||
/* Only large Intuos support Lense Cursor */
|
||||
(wacom->tool[idx] == BTN_TOOL_LENS &&
|
||||
(features->type == INTUOS3 ||
|
||||
features->type == INTUOS3S ||
|
||||
features->type == INTUOS4 ||
|
||||
features->type == INTUOS4S ||
|
||||
features->type == INTUOS5 ||
|
||||
features->type == INTUOS5S ||
|
||||
features->type == INTUOSPM ||
|
||||
features->type == INTUOSPS)) ||
|
||||
/* Cintiq doesn't send data when RDY bit isn't set */
|
||||
(features->type == CINTIQ && !(data[1] & 0x40)))
|
||||
return 1;
|
||||
|
||||
wacom->shared->stylus_in_proximity = true;
|
||||
if (wacom->shared->touch_down)
|
||||
return 1;
|
||||
@ -897,6 +878,26 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* don't report events for invalid data
|
||||
*/
|
||||
/* older I4 styli don't work with new Cintiqs */
|
||||
if ((!((wacom->id[idx] >> 20) & 0x01) &&
|
||||
(features->type == WACOM_21UX2)) ||
|
||||
/* Only large Intuos support Lense Cursor */
|
||||
(wacom->tool[idx] == BTN_TOOL_LENS &&
|
||||
(features->type == INTUOS3 ||
|
||||
features->type == INTUOS3S ||
|
||||
features->type == INTUOS4 ||
|
||||
features->type == INTUOS4S ||
|
||||
features->type == INTUOS5 ||
|
||||
features->type == INTUOS5S ||
|
||||
features->type == INTUOSPM ||
|
||||
features->type == INTUOSPS)) ||
|
||||
/* Cintiq doesn't send data when RDY bit isn't set */
|
||||
(features->type == CINTIQ && !(data[1] & 0x40)))
|
||||
return 1;
|
||||
|
||||
x = (be16_to_cpup((__be16 *)&data[2]) << 1) | ((data[9] >> 1) & 1);
|
||||
y = (be16_to_cpup((__be16 *)&data[4]) << 1) | (data[9] & 1);
|
||||
distance = data[9] >> 2;
|
||||
|
Loading…
Reference in New Issue
Block a user