]> nv-tegra.nvidia Code Review - linux-3.10.git/blobdiff - drivers/hid/hid-ntrig.c
Merge branches 'for-3.9/logitech', 'for-3.9/multitouch', 'for-3.9/ntrig', 'for-3...
[linux-3.10.git] / drivers / hid / hid-ntrig.c
index 86a969f6329297f9b34c9866b1bb39c5a0c85638..7757e82416e7f2270a1ebba2ef44070161424985 100644 (file)
@@ -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,20 +1022,10 @@ 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,
 };
+module_hid_driver(ntrig_driver);
 
-static int __init ntrig_init(void)
-{
-       return hid_register_driver(&ntrig_driver);
-}
-
-static void __exit ntrig_exit(void)
-{
-       hid_unregister_driver(&ntrig_driver);
-}
-
-module_init(ntrig_init);
-module_exit(ntrig_exit);
 MODULE_LICENSE("GPL");