Commit 4affc233 authored by Jason Gerecke's avatar Jason Gerecke Committed by Jiri Kosina

HID: wacom: generic: Leave tool in prox until it completely leaves sense

The legacy Intuos codepath and tablet behavior (e.g. the 1st-gen Intuos
Pro, Cintiq 27, etc.) would result in a BTN_TOOL_* event not being cleared
to zero until the tool had completely left the sensing range of the
tablet. Before the final "out of prox" packet would be sent, zero or
more "in range" packets could be sent to indicate that a pen was still
detectable but not within a useful distance. These "in range" packets
were used by the driver to keep touch input disabled at greater pen
distances. In addition to keeping the `stylus_in_proximity` flag set,
the driver would leave the current BTN_TOOL_* marked as being in
proximity as well.

The new HID codepath also sets `stylus_in_proximity` based on the "sense"
flag, but does not leave the current BTN_TOOL_* marked as being in prox.
This information is potentially useful to for a future userspace-based
palm rejection, so this patch modifies the driver to continue sending it.
Signed-off-by: default avatarJason Gerecke <jason.gerecke@wacom.com>
Reviewed-by: default avatarPing Cheng <ping.cheng@wacom.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 7690dd18
...@@ -2217,8 +2217,8 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field ...@@ -2217,8 +2217,8 @@ static void wacom_wac_pen_event(struct hid_device *hdev, struct hid_field *field
if (!usage->type || delay_pen_events(wacom_wac)) if (!usage->type || delay_pen_events(wacom_wac))
return; return;
/* send pen events only when the pen is in/entering/leaving range */ /* send pen events only when the pen is in range */
if (!wacom_wac->hid_data.inrange_state && !wacom_wac->tool[0]) if (!wacom_wac->hid_data.inrange_state)
return; return;
input_event(input, usage->type, usage->code, value); input_event(input, usage->type, usage->code, value);
...@@ -2269,10 +2269,10 @@ static void wacom_wac_pen_report(struct hid_device *hdev, ...@@ -2269,10 +2269,10 @@ static void wacom_wac_pen_report(struct hid_device *hdev,
*/ */
input_report_key(input, BTN_TOUCH, input_report_key(input, BTN_TOUCH,
wacom_wac->hid_data.tipswitch); wacom_wac->hid_data.tipswitch);
input_report_key(input, wacom_wac->tool[0], range); input_report_key(input, wacom_wac->tool[0], sense);
if (wacom_wac->serial[0]) { if (wacom_wac->serial[0]) {
input_event(input, EV_MSC, MSC_SERIAL, wacom_wac->serial[0]); input_event(input, EV_MSC, MSC_SERIAL, wacom_wac->serial[0]);
input_report_abs(input, ABS_MISC, range ? id : 0); input_report_abs(input, ABS_MISC, sense ? id : 0);
} }
wacom_wac->hid_data.tipswitch = false; wacom_wac->hid_data.tipswitch = false;
...@@ -2280,7 +2280,7 @@ static void wacom_wac_pen_report(struct hid_device *hdev, ...@@ -2280,7 +2280,7 @@ static void wacom_wac_pen_report(struct hid_device *hdev,
input_sync(input); input_sync(input);
} }
if (!range) { if (!sense) {
wacom_wac->tool[0] = 0; wacom_wac->tool[0] = 0;
wacom_wac->id[0] = 0; wacom_wac->id[0] = 0;
wacom_wac->serial[0] = 0; wacom_wac->serial[0] = 0;
......
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