|
@@ -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;
|