mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-22 17:01:14 +00:00
HID: wacom - Cleanup touch arbitration logic
stylus_in_proximity was introduced to support touch arbitration before in range was supported. With in range event, the logic changed. stylus_in_proximity should be set for both in prox and in range events. To finish a clean touch arbitration logic, we should send touch up (if it was down) before posting any general pen events. 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
4750f5fe29
commit
c1b03f5511
1 changed files with 15 additions and 9 deletions
|
@ -674,19 +674,22 @@ static int wacom_intuos_inout(struct wacom_wac *wacom)
|
||||||
wacom->tool[idx] = BTN_TOOL_PEN;
|
wacom->tool[idx] = BTN_TOOL_PEN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
wacom->shared->stylus_in_proximity = true;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
wacom->shared->stylus_in_proximity = true;
|
/* in Range */
|
||||||
if (wacom->shared->touch_down)
|
if ((data[1] & 0xfe) == 0x20) {
|
||||||
return 1;
|
wacom->shared->stylus_in_proximity = true;
|
||||||
|
|
||||||
/* in Range while exiting */
|
/* in Range while exiting */
|
||||||
if (((data[1] & 0xfe) == 0x20) && wacom->reporting_data) {
|
if (wacom->reporting_data) {
|
||||||
input_report_key(input, BTN_TOUCH, 0);
|
input_report_key(input, BTN_TOUCH, 0);
|
||||||
input_report_abs(input, ABS_PRESSURE, 0);
|
input_report_abs(input, ABS_PRESSURE, 0);
|
||||||
input_report_abs(input, ABS_DISTANCE, wacom->features.distance_max);
|
input_report_abs(input, ABS_DISTANCE, wacom->features.distance_max);
|
||||||
return 2;
|
return 2;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exit report */
|
/* Exit report */
|
||||||
|
@ -871,6 +874,9 @@ static int wacom_intuos_general(struct wacom_wac *wacom)
|
||||||
data[0] != WACOM_REPORT_INTUOS_PEN)
|
data[0] != WACOM_REPORT_INTUOS_PEN)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (wacom->shared->touch_down)
|
||||||
|
return 1;
|
||||||
|
|
||||||
/* don't report events if we don't know the tool ID */
|
/* don't report events if we don't know the tool ID */
|
||||||
if (!wacom->id[idx]) {
|
if (!wacom->id[idx]) {
|
||||||
/* but reschedule a read of the current tool */
|
/* but reschedule a read of the current tool */
|
||||||
|
|
Loading…
Reference in a new issue