aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid/hid-ntrig.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hid/hid-ntrig.c')
-rw-r--r--drivers/hid/hid-ntrig.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c
index 2ffc0e3844c7..7757e82416e7 100644
--- a/drivers/hid/hid-ntrig.c
+++ b/drivers/hid/hid-ntrig.c
@@ -858,12 +858,43 @@ not_claimed_input:
858 return 1; 858 return 1;
859} 859}
860 860
861static void ntrig_input_configured(struct hid_device *hid,
862 struct hid_input *hidinput)
863
864{
865 struct input_dev *input = hidinput->input;
866
867 if (hidinput->report->maxfield < 1)
868 return;
869
870 switch (hidinput->report->field[0]->application) {
871 case HID_DG_PEN:
872 input->name = "N-Trig Pen";
873 break;
874 case HID_DG_TOUCHSCREEN:
875 /* These keys are redundant for fingers, clear them
876 * to prevent incorrect identification */
877 __clear_bit(BTN_TOOL_PEN, input->keybit);
878 __clear_bit(BTN_TOOL_FINGER, input->keybit);
879 __clear_bit(BTN_0, input->keybit);
880 __set_bit(BTN_TOOL_DOUBLETAP, input->keybit);
881 /*
882 * The physical touchscreen (single touch)
883 * input has a value for physical, whereas
884 * the multitouch only has logical input
885 * fields.
886 */
887 input->name = (hidinput->report->field[0]->physical) ?
888 "N-Trig Touchscreen" :
889 "N-Trig MultiTouch";
890 break;
891 }
892}
893
861static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) 894static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
862{ 895{
863 int ret; 896 int ret;
864 struct ntrig_data *nd; 897 struct ntrig_data *nd;
865 struct hid_input *hidinput;
866 struct input_dev *input;
867 struct hid_report *report; 898 struct hid_report *report;
868 899
869 if (id->driver_data) 900 if (id->driver_data)
@@ -901,38 +932,6 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
901 goto err_free; 932 goto err_free;
902 } 933 }
903 934
904
905 list_for_each_entry(hidinput, &hdev->inputs, list) {
906 if (hidinput->report->maxfield < 1)
907 continue;
908
909 input = hidinput->input;
910 switch (hidinput->report->field[0]->application) {
911 case HID_DG_PEN:
912 input->name = "N-Trig Pen";
913 break;
914 case HID_DG_TOUCHSCREEN:
915 /* These keys are redundant for fingers, clear them
916 * to prevent incorrect identification */
917 __clear_bit(BTN_TOOL_PEN, input->keybit);
918 __clear_bit(BTN_TOOL_FINGER, input->keybit);
919 __clear_bit(BTN_0, input->keybit);
920 __set_bit(BTN_TOOL_DOUBLETAP, input->keybit);
921 /*
922 * The physical touchscreen (single touch)
923 * input has a value for physical, whereas
924 * the multitouch only has logical input
925 * fields.
926 */
927 input->name =
928 (hidinput->report->field[0]
929 ->physical) ?
930 "N-Trig Touchscreen" :
931 "N-Trig MultiTouch";
932 break;
933 }
934 }
935
936 /* This is needed for devices with more recent firmware versions */ 935 /* This is needed for devices with more recent firmware versions */
937 report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0x0a]; 936 report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0x0a];
938 if (report) { 937 if (report) {
@@ -1023,6 +1022,7 @@ static struct hid_driver ntrig_driver = {
1023 .remove = ntrig_remove, 1022 .remove = ntrig_remove,
1024 .input_mapping = ntrig_input_mapping, 1023 .input_mapping = ntrig_input_mapping,
1025 .input_mapped = ntrig_input_mapped, 1024 .input_mapped = ntrig_input_mapped,
1025 .input_configured = ntrig_input_configured,
1026 .usage_table = ntrig_grabbed_usages, 1026 .usage_table = ntrig_grabbed_usages,
1027 .event = ntrig_event, 1027 .event = ntrig_event,
1028}; 1028};