|
@@ -858,12 +858,43 @@ not_claimed_input:
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+static void ntrig_input_configured(struct hid_device *hid,
|
|
|
+ struct hid_input *hidinput)
|
|
|
+
|
|
|
+{
|
|
|
+ struct input_dev *input = hidinput->input;
|
|
|
+
|
|
|
+ if (hidinput->report->maxfield < 1)
|
|
|
+ return;
|
|
|
+
|
|
|
+ switch (hidinput->report->field[0]->application) {
|
|
|
+ case HID_DG_PEN:
|
|
|
+ input->name = "N-Trig Pen";
|
|
|
+ break;
|
|
|
+ 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_FINGER, input->keybit);
|
|
|
+ __clear_bit(BTN_0, input->keybit);
|
|
|
+ __set_bit(BTN_TOOL_DOUBLETAP, input->keybit);
|
|
|
+ /*
|
|
|
+ * The physical touchscreen (single touch)
|
|
|
+ * input has a value for physical, whereas
|
|
|
+ * the multitouch only has logical input
|
|
|
+ * fields.
|
|
|
+ */
|
|
|
+ input->name = (hidinput->report->field[0]->physical) ?
|
|
|
+ "N-Trig Touchscreen" :
|
|
|
+ "N-Trig MultiTouch";
|
|
|
+ break;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
|
|
{
|
|
|
int ret;
|
|
|
struct ntrig_data *nd;
|
|
|
- struct hid_input *hidinput;
|
|
|
- struct input_dev *input;
|
|
|
struct hid_report *report;
|
|
|
|
|
|
if (id->driver_data)
|
|
@@ -901,38 +932,6 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
|
|
goto err_free;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- list_for_each_entry(hidinput, &hdev->inputs, list) {
|
|
|
- if (hidinput->report->maxfield < 1)
|
|
|
- continue;
|
|
|
-
|
|
|
- input = hidinput->input;
|
|
|
- switch (hidinput->report->field[0]->application) {
|
|
|
- case HID_DG_PEN:
|
|
|
- input->name = "N-Trig Pen";
|
|
|
- break;
|
|
|
- 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_FINGER, input->keybit);
|
|
|
- __clear_bit(BTN_0, input->keybit);
|
|
|
- __set_bit(BTN_TOOL_DOUBLETAP, input->keybit);
|
|
|
- /*
|
|
|
- * The physical touchscreen (single touch)
|
|
|
- * input has a value for physical, whereas
|
|
|
- * the multitouch only has logical input
|
|
|
- * fields.
|
|
|
- */
|
|
|
- input->name =
|
|
|
- (hidinput->report->field[0]
|
|
|
- ->physical) ?
|
|
|
- "N-Trig Touchscreen" :
|
|
|
- "N-Trig MultiTouch";
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/* This is needed for devices with more recent firmware versions */
|
|
|
report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0x0a];
|
|
|
if (report) {
|
|
@@ -1023,6 +1022,7 @@ static struct hid_driver ntrig_driver = {
|
|
|
.remove = ntrig_remove,
|
|
|
.input_mapping = ntrig_input_mapping,
|
|
|
.input_mapped = ntrig_input_mapped,
|
|
|
+ .input_configured = ntrig_input_configured,
|
|
|
.usage_table = ntrig_grabbed_usages,
|
|
|
.event = ntrig_event,
|
|
|
};
|