提交 2886539d 编写于 作者: R Rafi Rubin 提交者: Jiri Kosina

HID: ntrig: fix touch events

This reinstates the lost unpressing of BTN_TOUCH.  To prevent undesireably
touch toggles this also deals with tip switch events.

Added a trap to prevent going out of bounds for hidinputs with empty reports.

Clear bits of unused buttons which result in misidentification.
Signed-off-by: NRafi Rubin <rafi@seas.upenn.edu>
Signed-off-by: NJiri Kosina <jkosina@suse.cz>
上级 eff7f270
...@@ -140,6 +140,9 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field, ...@@ -140,6 +140,9 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field,
nd->reading_mt = 1; nd->reading_mt = 1;
nd->first_contact_confidence = 0; nd->first_contact_confidence = 0;
break; break;
case HID_DG_TIPSWITCH:
/* Prevent emission of touch until validated */
return 1;
case HID_DG_CONFIDENCE: case HID_DG_CONFIDENCE:
nd->confidence = value; nd->confidence = value;
break; break;
...@@ -259,6 +262,7 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field, ...@@ -259,6 +262,7 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field,
BTN_TOOL_TRIPLETAP, 0); BTN_TOOL_TRIPLETAP, 0);
input_report_key(input, input_report_key(input,
BTN_TOOL_QUADTAP, 0); BTN_TOOL_QUADTAP, 0);
input_report_key(input, BTN_TOUCH, 0);
} }
break; break;
...@@ -308,13 +312,20 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) ...@@ -308,13 +312,20 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
list_for_each_entry(hidinput, &hdev->inputs, list) { list_for_each_entry(hidinput, &hdev->inputs, list) {
if (hidinput->report->maxfield < 1)
continue;
input = hidinput->input; input = hidinput->input;
switch (hidinput->report->field[0]->application) { switch (hidinput->report->field[0]->application) {
case HID_DG_PEN: case HID_DG_PEN:
input->name = "N-Trig Pen"; input->name = "N-Trig Pen";
break; break;
case HID_DG_TOUCHSCREEN: case HID_DG_TOUCHSCREEN:
/* These keys are redundant for fingers, clear them
* to prevent incorrect identification */
__clear_bit(BTN_TOOL_PEN, input->keybit); __clear_bit(BTN_TOOL_PEN, input->keybit);
__clear_bit(BTN_TOOL_FINGER, input->keybit);
__clear_bit(BTN_0, input->keybit);
/* /*
* A little something special to enable * A little something special to enable
* two and three finger taps. * two and three finger taps.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册