Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4750f5fe authored by Ping Cheng's avatar Ping Cheng Committed by Jiri Kosina
Browse files

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: default avatarPing Cheng <pingc@wacom.com>
Reviewed-by: default avatarJason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 599b0820
Loading
Loading
Loading
Loading
+25 −24
Original line number Original line Diff line number Diff line
@@ -580,11 +580,12 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
	struct wacom_features *features = &wacom->features;
	struct wacom_features *features = &wacom->features;
	unsigned char *data = wacom->data;
	unsigned char *data = wacom->data;
	struct input_dev *input = wacom->pen_input;
	struct input_dev *input = wacom->pen_input;
	int idx = 0;
	int idx = (features->type == INTUOS) ? (data[1] & 0x01) : 0;


	/* tool number */
	if (!(((data[1] & 0xfc) == 0xc0) ||  /* in prox */
	if (features->type == INTUOS)
	    ((data[1] & 0xfe) == 0x20) ||    /* in range */
		idx = data[1] & 0x01;
	    ((data[1] & 0xfe) == 0x80)))     /* out prox */
		return 0;


	/* Enter report */
	/* Enter report */
	if ((data[1] & 0xfc) == 0xc0) {
	if ((data[1] & 0xfc) == 0xc0) {
@@ -676,26 +677,6 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
		return 1;
		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;
	wacom->shared->stylus_in_proximity = true;
	if (wacom->shared->touch_down)
	if (wacom->shared->touch_down)
		return 1;
		return 1;
@@ -897,6 +878,26 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
		return 1;
		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);
	x = (be16_to_cpup((__be16 *)&data[2]) << 1) | ((data[9] >> 1) & 1);
	y = (be16_to_cpup((__be16 *)&data[4]) << 1) | (data[9] & 1);
	y = (be16_to_cpup((__be16 *)&data[4]) << 1) | (data[9] & 1);
	distance = data[9] >> 2;
	distance = data[9] >> 2;