]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/hid/hid-multitouch.c
HID: multitouch: Add support for button type usage
[karo-tx-linux.git] / drivers / hid / hid-multitouch.c
1 /*
2  *  HID driver for multitouch panels
3  *
4  *  Copyright (c) 2010-2012 Stephane Chatty <chatty@enac.fr>
5  *  Copyright (c) 2010-2013 Benjamin Tissoires <benjamin.tissoires@gmail.com>
6  *  Copyright (c) 2010-2012 Ecole Nationale de l'Aviation Civile, France
7  *  Copyright (c) 2012-2013 Red Hat, Inc
8  *
9  *  This code is partly based on hid-egalax.c:
10  *
11  *  Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
12  *  Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
13  *  Copyright (c) 2010 Canonical, Ltd.
14  *
15  *  This code is partly based on hid-3m-pct.c:
16  *
17  *  Copyright (c) 2009-2010 Stephane Chatty <chatty@enac.fr>
18  *  Copyright (c) 2010      Henrik Rydberg <rydberg@euromail.se>
19  *  Copyright (c) 2010      Canonical, Ltd.
20  *
21  */
22
23 /*
24  * This program is free software; you can redistribute it and/or modify it
25  * under the terms of the GNU General Public License as published by the Free
26  * Software Foundation; either version 2 of the License, or (at your option)
27  * any later version.
28  */
29
30 /*
31  * This driver is regularly tested thanks to the tool hid-test[1].
32  * This tool relies on hid-replay[2] and a database of hid devices[3].
33  * Please run these regression tests before patching this module so that
34  * your patch won't break existing known devices.
35  *
36  * [1] https://github.com/bentiss/hid-test
37  * [2] https://github.com/bentiss/hid-replay
38  * [3] https://github.com/bentiss/hid-devices
39  */
40
41 #include <linux/device.h>
42 #include <linux/hid.h>
43 #include <linux/module.h>
44 #include <linux/slab.h>
45 #include <linux/usb.h>
46 #include <linux/input/mt.h>
47 #include <linux/string.h>
48
49
50 MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
51 MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
52 MODULE_DESCRIPTION("HID multitouch panels");
53 MODULE_LICENSE("GPL");
54
55 #include "hid-ids.h"
56
57 /* quirks to control the device */
58 #define MT_QUIRK_NOT_SEEN_MEANS_UP      (1 << 0)
59 #define MT_QUIRK_SLOT_IS_CONTACTID      (1 << 1)
60 #define MT_QUIRK_CYPRESS                (1 << 2)
61 #define MT_QUIRK_SLOT_IS_CONTACTNUMBER  (1 << 3)
62 #define MT_QUIRK_ALWAYS_VALID           (1 << 4)
63 #define MT_QUIRK_VALID_IS_INRANGE       (1 << 5)
64 #define MT_QUIRK_VALID_IS_CONFIDENCE    (1 << 6)
65 #define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE    (1 << 8)
66 #define MT_QUIRK_NO_AREA                (1 << 9)
67 #define MT_QUIRK_IGNORE_DUPLICATES      (1 << 10)
68 #define MT_QUIRK_HOVERING               (1 << 11)
69 #define MT_QUIRK_CONTACT_CNT_ACCURATE   (1 << 12)
70 #define MT_QUIRK_FORCE_GET_FEATURE      (1 << 13)
71
72 #define MT_INPUTMODE_TOUCHSCREEN        0x02
73 #define MT_INPUTMODE_TOUCHPAD           0x03
74
75 #define MT_BUTTONTYPE_CLICKPAD          0
76
77 struct mt_slot {
78         __s32 x, y, cx, cy, p, w, h;
79         __s32 contactid;        /* the device ContactID assigned to this slot */
80         bool touch_state;       /* is the touch valid? */
81         bool inrange_state;     /* is the finger in proximity of the sensor? */
82 };
83
84 struct mt_class {
85         __s32 name;     /* MT_CLS */
86         __s32 quirks;
87         __s32 sn_move;  /* Signal/noise ratio for move events */
88         __s32 sn_width; /* Signal/noise ratio for width events */
89         __s32 sn_height;        /* Signal/noise ratio for height events */
90         __s32 sn_pressure;      /* Signal/noise ratio for pressure events */
91         __u8 maxcontacts;
92         bool is_indirect;       /* true for touchpads */
93         bool export_all_inputs; /* do not ignore mouse, keyboards, etc... */
94 };
95
96 struct mt_fields {
97         unsigned usages[HID_MAX_FIELDS];
98         unsigned int length;
99 };
100
101 struct mt_device {
102         struct mt_slot curdata; /* placeholder of incoming data */
103         struct mt_class mtclass;        /* our mt device class */
104         struct mt_fields *fields;       /* temporary placeholder for storing the
105                                            multitouch fields */
106         int cc_index;   /* contact count field index in the report */
107         int cc_value_index;     /* contact count value index in the field */
108         unsigned last_slot_field;       /* the last field of a slot */
109         unsigned mt_report_id;  /* the report ID of the multitouch device */
110         __s16 inputmode;        /* InputMode HID feature, -1 if non-existent */
111         __s16 inputmode_index;  /* InputMode HID feature index in the report */
112         __s16 maxcontact_report_id;     /* Maximum Contact Number HID feature,
113                                    -1 if non-existent */
114         __u8 inputmode_value;  /* InputMode HID feature value */
115         __u8 num_received;      /* how many contacts we received */
116         __u8 num_expected;      /* expected last contact index */
117         __u8 maxcontacts;
118         __u8 touches_by_report; /* how many touches are present in one report:
119                                 * 1 means we should use a serial protocol
120                                 * > 1 means hybrid (multitouch) protocol */
121         __u8 buttons_count;     /* number of physical buttons per touchpad */
122         bool is_buttonpad;      /* is this device a button pad? */
123         bool serial_maybe;      /* need to check for serial protocol */
124         bool curvalid;          /* is the current contact valid? */
125         unsigned mt_flags;      /* flags to pass to input-mt */
126 };
127
128 static void mt_post_parse_default_settings(struct mt_device *td);
129 static void mt_post_parse(struct mt_device *td);
130
131 /* classes of device behavior */
132 #define MT_CLS_DEFAULT                          0x0001
133
134 #define MT_CLS_SERIAL                           0x0002
135 #define MT_CLS_CONFIDENCE                       0x0003
136 #define MT_CLS_CONFIDENCE_CONTACT_ID            0x0004
137 #define MT_CLS_CONFIDENCE_MINUS_ONE             0x0005
138 #define MT_CLS_DUAL_INRANGE_CONTACTID           0x0006
139 #define MT_CLS_DUAL_INRANGE_CONTACTNUMBER       0x0007
140 /* reserved                                     0x0008 */
141 #define MT_CLS_INRANGE_CONTACTNUMBER            0x0009
142 #define MT_CLS_NSMU                             0x000a
143 /* reserved                                     0x0010 */
144 /* reserved                                     0x0011 */
145 #define MT_CLS_WIN_8                            0x0012
146 #define MT_CLS_EXPORT_ALL_INPUTS                0x0013
147
148 /* vendor specific classes */
149 #define MT_CLS_3M                               0x0101
150 /* reserved                                     0x0102 */
151 #define MT_CLS_EGALAX                           0x0103
152 #define MT_CLS_EGALAX_SERIAL                    0x0104
153 #define MT_CLS_TOPSEED                          0x0105
154 #define MT_CLS_PANASONIC                        0x0106
155 #define MT_CLS_FLATFROG                         0x0107
156 #define MT_CLS_GENERALTOUCH_TWOFINGERS          0x0108
157 #define MT_CLS_GENERALTOUCH_PWT_TENFINGERS      0x0109
158 #define MT_CLS_VTL                              0x0110
159
160 #define MT_DEFAULT_MAXCONTACT   10
161 #define MT_MAX_MAXCONTACT       250
162
163 #define MT_USB_DEVICE(v, p)     HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)
164 #define MT_BT_DEVICE(v, p)      HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)
165
166 /*
167  * these device-dependent functions determine what slot corresponds
168  * to a valid contact that was just read.
169  */
170
171 static int cypress_compute_slot(struct mt_device *td)
172 {
173         if (td->curdata.contactid != 0 || td->num_received == 0)
174                 return td->curdata.contactid;
175         else
176                 return -1;
177 }
178
179 static struct mt_class mt_classes[] = {
180         { .name = MT_CLS_DEFAULT,
181                 .quirks = MT_QUIRK_ALWAYS_VALID |
182                         MT_QUIRK_CONTACT_CNT_ACCURATE },
183         { .name = MT_CLS_NSMU,
184                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
185         { .name = MT_CLS_SERIAL,
186                 .quirks = MT_QUIRK_ALWAYS_VALID},
187         { .name = MT_CLS_CONFIDENCE,
188                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
189         { .name = MT_CLS_CONFIDENCE_CONTACT_ID,
190                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
191                         MT_QUIRK_SLOT_IS_CONTACTID },
192         { .name = MT_CLS_CONFIDENCE_MINUS_ONE,
193                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
194                         MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
195         { .name = MT_CLS_DUAL_INRANGE_CONTACTID,
196                 .quirks = MT_QUIRK_VALID_IS_INRANGE |
197                         MT_QUIRK_SLOT_IS_CONTACTID,
198                 .maxcontacts = 2 },
199         { .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
200                 .quirks = MT_QUIRK_VALID_IS_INRANGE |
201                         MT_QUIRK_SLOT_IS_CONTACTNUMBER,
202                 .maxcontacts = 2 },
203         { .name = MT_CLS_INRANGE_CONTACTNUMBER,
204                 .quirks = MT_QUIRK_VALID_IS_INRANGE |
205                         MT_QUIRK_SLOT_IS_CONTACTNUMBER },
206         { .name = MT_CLS_WIN_8,
207                 .quirks = MT_QUIRK_ALWAYS_VALID |
208                         MT_QUIRK_IGNORE_DUPLICATES |
209                         MT_QUIRK_HOVERING |
210                         MT_QUIRK_CONTACT_CNT_ACCURATE },
211         { .name = MT_CLS_EXPORT_ALL_INPUTS,
212                 .quirks = MT_QUIRK_ALWAYS_VALID |
213                         MT_QUIRK_CONTACT_CNT_ACCURATE,
214                 .export_all_inputs = true },
215
216         /*
217          * vendor specific classes
218          */
219         { .name = MT_CLS_3M,
220                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
221                         MT_QUIRK_SLOT_IS_CONTACTID,
222                 .sn_move = 2048,
223                 .sn_width = 128,
224                 .sn_height = 128,
225                 .maxcontacts = 60,
226         },
227         { .name = MT_CLS_EGALAX,
228                 .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
229                         MT_QUIRK_VALID_IS_INRANGE,
230                 .sn_move = 4096,
231                 .sn_pressure = 32,
232         },
233         { .name = MT_CLS_EGALAX_SERIAL,
234                 .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
235                         MT_QUIRK_ALWAYS_VALID,
236                 .sn_move = 4096,
237                 .sn_pressure = 32,
238         },
239         { .name = MT_CLS_TOPSEED,
240                 .quirks = MT_QUIRK_ALWAYS_VALID,
241                 .is_indirect = true,
242                 .maxcontacts = 2,
243         },
244         { .name = MT_CLS_PANASONIC,
245                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
246                 .maxcontacts = 4 },
247         { .name = MT_CLS_GENERALTOUCH_TWOFINGERS,
248                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
249                         MT_QUIRK_VALID_IS_INRANGE |
250                         MT_QUIRK_SLOT_IS_CONTACTID,
251                 .maxcontacts = 2
252         },
253         { .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
254                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
255                         MT_QUIRK_SLOT_IS_CONTACTID
256         },
257
258         { .name = MT_CLS_FLATFROG,
259                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
260                         MT_QUIRK_NO_AREA,
261                 .sn_move = 2048,
262                 .maxcontacts = 40,
263         },
264         { .name = MT_CLS_VTL,
265                 .quirks = MT_QUIRK_ALWAYS_VALID |
266                         MT_QUIRK_CONTACT_CNT_ACCURATE |
267                         MT_QUIRK_FORCE_GET_FEATURE,
268         },
269         { }
270 };
271
272 static ssize_t mt_show_quirks(struct device *dev,
273                            struct device_attribute *attr,
274                            char *buf)
275 {
276         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
277         struct mt_device *td = hid_get_drvdata(hdev);
278
279         return sprintf(buf, "%u\n", td->mtclass.quirks);
280 }
281
282 static ssize_t mt_set_quirks(struct device *dev,
283                           struct device_attribute *attr,
284                           const char *buf, size_t count)
285 {
286         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
287         struct mt_device *td = hid_get_drvdata(hdev);
288
289         unsigned long val;
290
291         if (kstrtoul(buf, 0, &val))
292                 return -EINVAL;
293
294         td->mtclass.quirks = val;
295
296         if (td->cc_index < 0)
297                 td->mtclass.quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
298
299         return count;
300 }
301
302 static DEVICE_ATTR(quirks, S_IWUSR | S_IRUGO, mt_show_quirks, mt_set_quirks);
303
304 static struct attribute *sysfs_attrs[] = {
305         &dev_attr_quirks.attr,
306         NULL
307 };
308
309 static struct attribute_group mt_attribute_group = {
310         .attrs = sysfs_attrs
311 };
312
313 static void mt_feature_mapping(struct hid_device *hdev,
314                 struct hid_field *field, struct hid_usage *usage)
315 {
316         struct mt_device *td = hid_get_drvdata(hdev);
317
318         switch (usage->hid) {
319         case HID_DG_INPUTMODE:
320                 /* Ignore if value index is out of bounds. */
321                 if (usage->usage_index >= field->report_count) {
322                         dev_err(&hdev->dev, "HID_DG_INPUTMODE out of range\n");
323                         break;
324                 }
325
326                 td->inputmode = field->report->id;
327                 td->inputmode_index = usage->usage_index;
328
329                 break;
330         case HID_DG_CONTACTMAX:
331                 td->maxcontact_report_id = field->report->id;
332                 td->maxcontacts = field->value[0];
333                 if (!td->maxcontacts &&
334                     field->logical_maximum <= MT_MAX_MAXCONTACT)
335                         td->maxcontacts = field->logical_maximum;
336                 if (td->mtclass.maxcontacts)
337                         /* check if the maxcontacts is given by the class */
338                         td->maxcontacts = td->mtclass.maxcontacts;
339
340                 break;
341         case HID_DG_BUTTONTYPE:
342                 if (usage->usage_index >= field->report_count) {
343                         dev_err(&hdev->dev, "HID_DG_BUTTONTYPE out of range\n");
344                         break;
345                 }
346
347                 if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
348                         td->is_buttonpad = true;
349
350                 break;
351         }
352 }
353
354 static void set_abs(struct input_dev *input, unsigned int code,
355                 struct hid_field *field, int snratio)
356 {
357         int fmin = field->logical_minimum;
358         int fmax = field->logical_maximum;
359         int fuzz = snratio ? (fmax - fmin) / snratio : 0;
360         input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
361         input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
362 }
363
364 static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
365                 struct hid_input *hi)
366 {
367         struct mt_fields *f = td->fields;
368
369         if (f->length >= HID_MAX_FIELDS)
370                 return;
371
372         f->usages[f->length++] = usage->hid;
373 }
374
375 static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
376                 struct hid_field *field, struct hid_usage *usage,
377                 unsigned long **bit, int *max)
378 {
379         struct mt_device *td = hid_get_drvdata(hdev);
380         struct mt_class *cls = &td->mtclass;
381         int code;
382         struct hid_usage *prev_usage = NULL;
383
384         if (field->application == HID_DG_TOUCHSCREEN)
385                 td->mt_flags |= INPUT_MT_DIRECT;
386
387         /*
388          * Model touchscreens providing buttons as touchpads.
389          */
390         if (field->application == HID_DG_TOUCHPAD ||
391             (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
392                 td->mt_flags |= INPUT_MT_POINTER;
393                 td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
394         }
395
396         /* count the buttons on touchpads */
397         if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
398                 td->buttons_count++;
399
400         if (usage->usage_index)
401                 prev_usage = &field->usage[usage->usage_index - 1];
402
403         switch (usage->hid & HID_USAGE_PAGE) {
404
405         case HID_UP_GENDESK:
406                 switch (usage->hid) {
407                 case HID_GD_X:
408                         if (prev_usage && (prev_usage->hid == usage->hid)) {
409                                 hid_map_usage(hi, usage, bit, max,
410                                         EV_ABS, ABS_MT_TOOL_X);
411                                 set_abs(hi->input, ABS_MT_TOOL_X, field,
412                                         cls->sn_move);
413                         } else {
414                                 hid_map_usage(hi, usage, bit, max,
415                                         EV_ABS, ABS_MT_POSITION_X);
416                                 set_abs(hi->input, ABS_MT_POSITION_X, field,
417                                         cls->sn_move);
418                         }
419
420                         mt_store_field(usage, td, hi);
421                         return 1;
422                 case HID_GD_Y:
423                         if (prev_usage && (prev_usage->hid == usage->hid)) {
424                                 hid_map_usage(hi, usage, bit, max,
425                                         EV_ABS, ABS_MT_TOOL_Y);
426                                 set_abs(hi->input, ABS_MT_TOOL_Y, field,
427                                         cls->sn_move);
428                         } else {
429                                 hid_map_usage(hi, usage, bit, max,
430                                         EV_ABS, ABS_MT_POSITION_Y);
431                                 set_abs(hi->input, ABS_MT_POSITION_Y, field,
432                                         cls->sn_move);
433                         }
434
435                         mt_store_field(usage, td, hi);
436                         return 1;
437                 }
438                 return 0;
439
440         case HID_UP_DIGITIZER:
441                 switch (usage->hid) {
442                 case HID_DG_INRANGE:
443                         if (cls->quirks & MT_QUIRK_HOVERING) {
444                                 hid_map_usage(hi, usage, bit, max,
445                                         EV_ABS, ABS_MT_DISTANCE);
446                                 input_set_abs_params(hi->input,
447                                         ABS_MT_DISTANCE, 0, 1, 0, 0);
448                         }
449                         mt_store_field(usage, td, hi);
450                         return 1;
451                 case HID_DG_CONFIDENCE:
452                         mt_store_field(usage, td, hi);
453                         return 1;
454                 case HID_DG_TIPSWITCH:
455                         hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
456                         input_set_capability(hi->input, EV_KEY, BTN_TOUCH);
457                         mt_store_field(usage, td, hi);
458                         return 1;
459                 case HID_DG_CONTACTID:
460                         mt_store_field(usage, td, hi);
461                         td->touches_by_report++;
462                         td->mt_report_id = field->report->id;
463                         return 1;
464                 case HID_DG_WIDTH:
465                         hid_map_usage(hi, usage, bit, max,
466                                         EV_ABS, ABS_MT_TOUCH_MAJOR);
467                         if (!(cls->quirks & MT_QUIRK_NO_AREA))
468                                 set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
469                                         cls->sn_width);
470                         mt_store_field(usage, td, hi);
471                         return 1;
472                 case HID_DG_HEIGHT:
473                         hid_map_usage(hi, usage, bit, max,
474                                         EV_ABS, ABS_MT_TOUCH_MINOR);
475                         if (!(cls->quirks & MT_QUIRK_NO_AREA)) {
476                                 set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
477                                         cls->sn_height);
478                                 input_set_abs_params(hi->input,
479                                         ABS_MT_ORIENTATION, 0, 1, 0, 0);
480                         }
481                         mt_store_field(usage, td, hi);
482                         return 1;
483                 case HID_DG_TIPPRESSURE:
484                         hid_map_usage(hi, usage, bit, max,
485                                         EV_ABS, ABS_MT_PRESSURE);
486                         set_abs(hi->input, ABS_MT_PRESSURE, field,
487                                 cls->sn_pressure);
488                         mt_store_field(usage, td, hi);
489                         return 1;
490                 case HID_DG_CONTACTCOUNT:
491                         /* Ignore if indexes are out of bounds. */
492                         if (field->index >= field->report->maxfield ||
493                             usage->usage_index >= field->report_count)
494                                 return 1;
495                         td->cc_index = field->index;
496                         td->cc_value_index = usage->usage_index;
497                         return 1;
498                 case HID_DG_CONTACTMAX:
499                         /* we don't set td->last_slot_field as contactcount and
500                          * contact max are global to the report */
501                         return -1;
502                 case HID_DG_TOUCH:
503                         /* Legacy devices use TIPSWITCH and not TOUCH.
504                          * Let's just ignore this field. */
505                         return -1;
506                 }
507                 /* let hid-input decide for the others */
508                 return 0;
509
510         case HID_UP_BUTTON:
511                 code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
512                 hid_map_usage(hi, usage, bit, max, EV_KEY, code);
513                 input_set_capability(hi->input, EV_KEY, code);
514                 return 1;
515
516         case 0xff000000:
517                 /* we do not want to map these: no input-oriented meaning */
518                 return -1;
519         }
520
521         return 0;
522 }
523
524 static int mt_touch_input_mapped(struct hid_device *hdev, struct hid_input *hi,
525                 struct hid_field *field, struct hid_usage *usage,
526                 unsigned long **bit, int *max)
527 {
528         if (usage->type == EV_KEY || usage->type == EV_ABS)
529                 set_bit(usage->type, hi->input->evbit);
530
531         return -1;
532 }
533
534 static int mt_compute_slot(struct mt_device *td, struct input_dev *input)
535 {
536         __s32 quirks = td->mtclass.quirks;
537
538         if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
539                 return td->curdata.contactid;
540
541         if (quirks & MT_QUIRK_CYPRESS)
542                 return cypress_compute_slot(td);
543
544         if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
545                 return td->num_received;
546
547         if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
548                 return td->curdata.contactid - 1;
549
550         return input_mt_get_slot_by_key(input, td->curdata.contactid);
551 }
552
553 /*
554  * this function is called when a whole contact has been processed,
555  * so that it can assign it to a slot and store the data there
556  */
557 static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
558 {
559         if ((td->mtclass.quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
560             td->num_received >= td->num_expected)
561                 return;
562
563         if (td->curvalid || (td->mtclass.quirks & MT_QUIRK_ALWAYS_VALID)) {
564                 int slotnum = mt_compute_slot(td, input);
565                 struct mt_slot *s = &td->curdata;
566                 struct input_mt *mt = input->mt;
567
568                 if (slotnum < 0 || slotnum >= td->maxcontacts)
569                         return;
570
571                 if ((td->mtclass.quirks & MT_QUIRK_IGNORE_DUPLICATES) && mt) {
572                         struct input_mt_slot *slot = &mt->slots[slotnum];
573                         if (input_mt_is_active(slot) &&
574                             input_mt_is_used(mt, slot))
575                                 return;
576                 }
577
578                 input_mt_slot(input, slotnum);
579                 input_mt_report_slot_state(input, MT_TOOL_FINGER,
580                         s->touch_state || s->inrange_state);
581                 if (s->touch_state || s->inrange_state) {
582                         /* this finger is in proximity of the sensor */
583                         int wide = (s->w > s->h);
584                         /* divided by two to match visual scale of touch */
585                         int major = max(s->w, s->h) >> 1;
586                         int minor = min(s->w, s->h) >> 1;
587
588                         input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);
589                         input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);
590                         input_event(input, EV_ABS, ABS_MT_TOOL_X, s->cx);
591                         input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy);
592                         input_event(input, EV_ABS, ABS_MT_DISTANCE,
593                                 !s->touch_state);
594                         input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
595                         input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
596                         input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
597                         input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
598                 }
599         }
600
601         td->num_received++;
602 }
603
604 /*
605  * this function is called when a whole packet has been received and processed,
606  * so that it can decide what to send to the input layer.
607  */
608 static void mt_sync_frame(struct mt_device *td, struct input_dev *input)
609 {
610         input_mt_sync_frame(input);
611         input_sync(input);
612         td->num_received = 0;
613 }
614
615 static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
616                                 struct hid_usage *usage, __s32 value)
617 {
618         /* we will handle the hidinput part later, now remains hiddev */
619         if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
620                 hid->hiddev_hid_event(hid, field, usage, value);
621
622         return 1;
623 }
624
625 static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
626                                 struct hid_usage *usage, __s32 value)
627 {
628         struct mt_device *td = hid_get_drvdata(hid);
629         __s32 quirks = td->mtclass.quirks;
630         struct input_dev *input = field->hidinput->input;
631
632         if (hid->claimed & HID_CLAIMED_INPUT) {
633                 switch (usage->hid) {
634                 case HID_DG_INRANGE:
635                         if (quirks & MT_QUIRK_VALID_IS_INRANGE)
636                                 td->curvalid = value;
637                         if (quirks & MT_QUIRK_HOVERING)
638                                 td->curdata.inrange_state = value;
639                         break;
640                 case HID_DG_TIPSWITCH:
641                         if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
642                                 td->curvalid = value;
643                         td->curdata.touch_state = value;
644                         break;
645                 case HID_DG_CONFIDENCE:
646                         if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
647                                 td->curvalid = value;
648                         break;
649                 case HID_DG_CONTACTID:
650                         td->curdata.contactid = value;
651                         break;
652                 case HID_DG_TIPPRESSURE:
653                         td->curdata.p = value;
654                         break;
655                 case HID_GD_X:
656                         if (usage->code == ABS_MT_TOOL_X)
657                                 td->curdata.cx = value;
658                         else
659                                 td->curdata.x = value;
660                         break;
661                 case HID_GD_Y:
662                         if (usage->code == ABS_MT_TOOL_Y)
663                                 td->curdata.cy = value;
664                         else
665                                 td->curdata.y = value;
666                         break;
667                 case HID_DG_WIDTH:
668                         td->curdata.w = value;
669                         break;
670                 case HID_DG_HEIGHT:
671                         td->curdata.h = value;
672                         break;
673                 case HID_DG_CONTACTCOUNT:
674                         break;
675                 case HID_DG_TOUCH:
676                         /* do nothing */
677                         break;
678
679                 default:
680                         if (usage->type)
681                                 input_event(input, usage->type, usage->code,
682                                                 value);
683                         return;
684                 }
685
686                 if (usage->usage_index + 1 == field->report_count) {
687                         /* we only take into account the last report. */
688                         if (usage->hid == td->last_slot_field)
689                                 mt_complete_slot(td, field->hidinput->input);
690                 }
691
692         }
693 }
694
695 static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
696 {
697         struct mt_device *td = hid_get_drvdata(hid);
698         struct hid_field *field;
699         unsigned count;
700         int r, n;
701
702         /*
703          * Includes multi-packet support where subsequent
704          * packets are sent with zero contactcount.
705          */
706         if (td->cc_index >= 0) {
707                 struct hid_field *field = report->field[td->cc_index];
708                 int value = field->value[td->cc_value_index];
709                 if (value)
710                         td->num_expected = value;
711         }
712
713         for (r = 0; r < report->maxfield; r++) {
714                 field = report->field[r];
715                 count = field->report_count;
716
717                 if (!(HID_MAIN_ITEM_VARIABLE & field->flags))
718                         continue;
719
720                 for (n = 0; n < count; n++)
721                         mt_process_mt_event(hid, field, &field->usage[n],
722                                         field->value[n]);
723         }
724
725         if (td->num_received >= td->num_expected)
726                 mt_sync_frame(td, report->field[0]->hidinput->input);
727 }
728
729 static void mt_touch_input_configured(struct hid_device *hdev,
730                                         struct hid_input *hi)
731 {
732         struct mt_device *td = hid_get_drvdata(hdev);
733         struct mt_class *cls = &td->mtclass;
734         struct input_dev *input = hi->input;
735
736         if (!td->maxcontacts)
737                 td->maxcontacts = MT_DEFAULT_MAXCONTACT;
738
739         mt_post_parse(td);
740         if (td->serial_maybe)
741                 mt_post_parse_default_settings(td);
742
743         if (cls->is_indirect)
744                 td->mt_flags |= INPUT_MT_POINTER;
745
746         if (cls->quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
747                 td->mt_flags |= INPUT_MT_DROP_UNUSED;
748
749         /* check for clickpads */
750         if ((td->mt_flags & INPUT_MT_POINTER) && (td->buttons_count == 1))
751                 td->is_buttonpad = true;
752
753         if (td->is_buttonpad)
754                 __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
755
756         input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
757
758         td->mt_flags = 0;
759 }
760
761 static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
762                 struct hid_field *field, struct hid_usage *usage,
763                 unsigned long **bit, int *max)
764 {
765         struct mt_device *td = hid_get_drvdata(hdev);
766
767         /*
768          * If mtclass.export_all_inputs is not set, only map fields from
769          * TouchScreen or TouchPad collections. We need to ignore fields
770          * that belong to other collections such as Mouse that might have
771          * the same GenericDesktop usages.
772          */
773         if (!td->mtclass.export_all_inputs &&
774             field->application != HID_DG_TOUCHSCREEN &&
775             field->application != HID_DG_PEN &&
776             field->application != HID_DG_TOUCHPAD)
777                 return -1;
778
779         /*
780          * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
781          * for the stylus.
782          */
783         if (field->physical == HID_DG_STYLUS)
784                 return 0;
785
786         if (field->application == HID_DG_TOUCHSCREEN ||
787             field->application == HID_DG_TOUCHPAD)
788                 return mt_touch_input_mapping(hdev, hi, field, usage, bit, max);
789
790         /* let hid-core decide for the others */
791         return 0;
792 }
793
794 static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
795                 struct hid_field *field, struct hid_usage *usage,
796                 unsigned long **bit, int *max)
797 {
798         /*
799          * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
800          * for the stylus.
801          */
802         if (field->physical == HID_DG_STYLUS)
803                 return 0;
804
805         if (field->application == HID_DG_TOUCHSCREEN ||
806             field->application == HID_DG_TOUCHPAD)
807                 return mt_touch_input_mapped(hdev, hi, field, usage, bit, max);
808
809         /* let hid-core decide for the others */
810         return 0;
811 }
812
813 static int mt_event(struct hid_device *hid, struct hid_field *field,
814                                 struct hid_usage *usage, __s32 value)
815 {
816         struct mt_device *td = hid_get_drvdata(hid);
817
818         if (field->report->id == td->mt_report_id)
819                 return mt_touch_event(hid, field, usage, value);
820
821         return 0;
822 }
823
824 static void mt_report(struct hid_device *hid, struct hid_report *report)
825 {
826         struct mt_device *td = hid_get_drvdata(hid);
827         struct hid_field *field = report->field[0];
828
829         if (!(hid->claimed & HID_CLAIMED_INPUT))
830                 return;
831
832         if (report->id == td->mt_report_id)
833                 return mt_touch_report(hid, report);
834
835         if (field && field->hidinput && field->hidinput->input)
836                 input_sync(field->hidinput->input);
837 }
838
839 static void mt_set_input_mode(struct hid_device *hdev)
840 {
841         struct mt_device *td = hid_get_drvdata(hdev);
842         struct hid_report *r;
843         struct hid_report_enum *re;
844         struct mt_class *cls = &td->mtclass;
845         char *buf;
846         int report_len;
847
848         if (td->inputmode < 0)
849                 return;
850
851         re = &(hdev->report_enum[HID_FEATURE_REPORT]);
852         r = re->report_id_hash[td->inputmode];
853         if (r) {
854                 if (cls->quirks & MT_QUIRK_FORCE_GET_FEATURE) {
855                         report_len = hid_report_len(r);
856                         buf = hid_alloc_report_buf(r, GFP_KERNEL);
857                         if (!buf) {
858                                 hid_err(hdev, "failed to allocate buffer for report\n");
859                                 return;
860                         }
861                         hid_hw_raw_request(hdev, r->id, buf, report_len,
862                                            HID_FEATURE_REPORT,
863                                            HID_REQ_GET_REPORT);
864                         kfree(buf);
865                 }
866                 r->field[0]->value[td->inputmode_index] = td->inputmode_value;
867                 hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
868         }
869 }
870
871 static void mt_set_maxcontacts(struct hid_device *hdev)
872 {
873         struct mt_device *td = hid_get_drvdata(hdev);
874         struct hid_report *r;
875         struct hid_report_enum *re;
876         int fieldmax, max;
877
878         if (td->maxcontact_report_id < 0)
879                 return;
880
881         if (!td->mtclass.maxcontacts)
882                 return;
883
884         re = &hdev->report_enum[HID_FEATURE_REPORT];
885         r = re->report_id_hash[td->maxcontact_report_id];
886         if (r) {
887                 max = td->mtclass.maxcontacts;
888                 fieldmax = r->field[0]->logical_maximum;
889                 max = min(fieldmax, max);
890                 if (r->field[0]->value[0] != max) {
891                         r->field[0]->value[0] = max;
892                         hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
893                 }
894         }
895 }
896
897 static void mt_post_parse_default_settings(struct mt_device *td)
898 {
899         __s32 quirks = td->mtclass.quirks;
900
901         /* unknown serial device needs special quirks */
902         if (td->touches_by_report == 1) {
903                 quirks |= MT_QUIRK_ALWAYS_VALID;
904                 quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
905                 quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
906                 quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
907                 quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
908         }
909
910         td->mtclass.quirks = quirks;
911 }
912
913 static void mt_post_parse(struct mt_device *td)
914 {
915         struct mt_fields *f = td->fields;
916         struct mt_class *cls = &td->mtclass;
917
918         if (td->touches_by_report > 0) {
919                 int field_count_per_touch = f->length / td->touches_by_report;
920                 td->last_slot_field = f->usages[field_count_per_touch - 1];
921         }
922
923         if (td->cc_index < 0)
924                 cls->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
925 }
926
927 static void mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
928 {
929         struct mt_device *td = hid_get_drvdata(hdev);
930         char *name;
931         const char *suffix = NULL;
932         struct hid_field *field = hi->report->field[0];
933
934         if (hi->report->id == td->mt_report_id)
935                 mt_touch_input_configured(hdev, hi);
936
937         /*
938          * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
939          * for the stylus. Check this first, and then rely on the application
940          * field.
941          */
942         if (hi->report->field[0]->physical == HID_DG_STYLUS) {
943                 suffix = "Pen";
944                 /* force BTN_STYLUS to allow tablet matching in udev */
945                 __set_bit(BTN_STYLUS, hi->input->keybit);
946         } else {
947                 switch (field->application) {
948                 case HID_GD_KEYBOARD:
949                         suffix = "Keyboard";
950                         break;
951                 case HID_GD_KEYPAD:
952                         suffix = "Keypad";
953                         break;
954                 case HID_GD_MOUSE:
955                         suffix = "Mouse";
956                         break;
957                 case HID_DG_STYLUS:
958                         suffix = "Pen";
959                         /* force BTN_STYLUS to allow tablet matching in udev */
960                         __set_bit(BTN_STYLUS, hi->input->keybit);
961                         break;
962                 case HID_DG_TOUCHSCREEN:
963                         /* we do not set suffix = "Touchscreen" */
964                         break;
965                 case HID_GD_SYSTEM_CONTROL:
966                         suffix = "System Control";
967                         break;
968                 case HID_CP_CONSUMER_CONTROL:
969                         suffix = "Consumer Control";
970                         break;
971                 default:
972                         suffix = "UNKNOWN";
973                         break;
974                 }
975         }
976
977         if (suffix) {
978                 name = devm_kzalloc(&hi->input->dev,
979                                     strlen(hdev->name) + strlen(suffix) + 2,
980                                     GFP_KERNEL);
981                 if (name) {
982                         sprintf(name, "%s %s", hdev->name, suffix);
983                         hi->input->name = name;
984                 }
985         }
986 }
987
988 static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
989 {
990         int ret, i;
991         struct mt_device *td;
992         struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */
993
994         for (i = 0; mt_classes[i].name ; i++) {
995                 if (id->driver_data == mt_classes[i].name) {
996                         mtclass = &(mt_classes[i]);
997                         break;
998                 }
999         }
1000
1001         /* This allows the driver to correctly support devices
1002          * that emit events over several HID messages.
1003          */
1004         hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
1005
1006         /*
1007          * This allows the driver to handle different input sensors
1008          * that emits events through different reports on the same HID
1009          * device.
1010          */
1011         hdev->quirks |= HID_QUIRK_MULTI_INPUT;
1012         hdev->quirks |= HID_QUIRK_NO_EMPTY_INPUT;
1013
1014         /*
1015          * Handle special quirks for Windows 8 certified devices.
1016          */
1017         if (id->group == HID_GROUP_MULTITOUCH_WIN_8)
1018                 /*
1019                  * Some multitouch screens do not like to be polled for input
1020                  * reports. Fortunately, the Win8 spec says that all touches
1021                  * should be sent during each report, making the initialization
1022                  * of input reports unnecessary.
1023                  */
1024                 hdev->quirks |= HID_QUIRK_NO_INIT_INPUT_REPORTS;
1025
1026         td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
1027         if (!td) {
1028                 dev_err(&hdev->dev, "cannot allocate multitouch data\n");
1029                 return -ENOMEM;
1030         }
1031         td->mtclass = *mtclass;
1032         td->inputmode = -1;
1033         td->maxcontact_report_id = -1;
1034         td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
1035         td->cc_index = -1;
1036         td->mt_report_id = -1;
1037         hid_set_drvdata(hdev, td);
1038
1039         td->fields = devm_kzalloc(&hdev->dev, sizeof(struct mt_fields),
1040                                   GFP_KERNEL);
1041         if (!td->fields) {
1042                 dev_err(&hdev->dev, "cannot allocate multitouch fields data\n");
1043                 return -ENOMEM;
1044         }
1045
1046         if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
1047                 td->serial_maybe = true;
1048
1049         ret = hid_parse(hdev);
1050         if (ret != 0)
1051                 return ret;
1052
1053         ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1054         if (ret)
1055                 return ret;
1056
1057         ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
1058
1059         mt_set_maxcontacts(hdev);
1060         mt_set_input_mode(hdev);
1061
1062         /* release .fields memory as it is not used anymore */
1063         devm_kfree(&hdev->dev, td->fields);
1064         td->fields = NULL;
1065
1066         return 0;
1067 }
1068
1069 #ifdef CONFIG_PM
1070 static int mt_reset_resume(struct hid_device *hdev)
1071 {
1072         mt_set_maxcontacts(hdev);
1073         mt_set_input_mode(hdev);
1074         return 0;
1075 }
1076
1077 static int mt_resume(struct hid_device *hdev)
1078 {
1079         /* Some Elan legacy devices require SET_IDLE to be set on resume.
1080          * It should be safe to send it to other devices too.
1081          * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */
1082
1083         hid_hw_idle(hdev, 0, 0, HID_REQ_SET_IDLE);
1084
1085         return 0;
1086 }
1087 #endif
1088
1089 static void mt_remove(struct hid_device *hdev)
1090 {
1091         sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
1092         hid_hw_stop(hdev);
1093 }
1094
1095 /*
1096  * This list contains only:
1097  * - VID/PID of products not working with the default multitouch handling
1098  * - 2 generic rules.
1099  * So there is no point in adding here any device with MT_CLS_DEFAULT.
1100  */
1101 static const struct hid_device_id mt_devices[] = {
1102
1103         /* 3M panels */
1104         { .driver_data = MT_CLS_3M,
1105                 MT_USB_DEVICE(USB_VENDOR_ID_3M,
1106                         USB_DEVICE_ID_3M1968) },
1107         { .driver_data = MT_CLS_3M,
1108                 MT_USB_DEVICE(USB_VENDOR_ID_3M,
1109                         USB_DEVICE_ID_3M2256) },
1110         { .driver_data = MT_CLS_3M,
1111                 MT_USB_DEVICE(USB_VENDOR_ID_3M,
1112                         USB_DEVICE_ID_3M3266) },
1113
1114         /* Anton devices */
1115         { .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
1116                 MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
1117                         USB_DEVICE_ID_ANTON_TOUCH_PAD) },
1118
1119         /* Atmel panels */
1120         { .driver_data = MT_CLS_SERIAL,
1121                 MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1122                         USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
1123
1124         /* Baanto multitouch devices */
1125         { .driver_data = MT_CLS_NSMU,
1126                 MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
1127                         USB_DEVICE_ID_BAANTO_MT_190W2) },
1128
1129         /* Cando panels */
1130         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1131                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1132                         USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
1133         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1134                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1135                         USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
1136
1137         /* Chunghwa Telecom touch panels */
1138         {  .driver_data = MT_CLS_NSMU,
1139                 MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
1140                         USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },
1141
1142         /* CVTouch panels */
1143         { .driver_data = MT_CLS_NSMU,
1144                 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
1145                         USB_DEVICE_ID_CVTOUCH_SCREEN) },
1146
1147         /* eGalax devices (resistive) */
1148         { .driver_data = MT_CLS_EGALAX,
1149                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1150                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
1151         { .driver_data = MT_CLS_EGALAX,
1152                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1153                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
1154
1155         /* eGalax devices (capacitive) */
1156         { .driver_data = MT_CLS_EGALAX_SERIAL,
1157                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1158                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
1159         { .driver_data = MT_CLS_EGALAX,
1160                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1161                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
1162         { .driver_data = MT_CLS_EGALAX_SERIAL,
1163                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1164                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
1165         { .driver_data = MT_CLS_EGALAX_SERIAL,
1166                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1167                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
1168         { .driver_data = MT_CLS_EGALAX_SERIAL,
1169                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1170                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
1171         { .driver_data = MT_CLS_EGALAX_SERIAL,
1172                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1173                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
1174         { .driver_data = MT_CLS_EGALAX,
1175                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1176                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
1177         { .driver_data = MT_CLS_EGALAX,
1178                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1179                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
1180         { .driver_data = MT_CLS_EGALAX_SERIAL,
1181                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1182                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
1183         { .driver_data = MT_CLS_EGALAX,
1184                 HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
1185                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4) },
1186         { .driver_data = MT_CLS_EGALAX,
1187                 HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
1188                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0) },
1189         { .driver_data = MT_CLS_EGALAX,
1190                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1191                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
1192         { .driver_data = MT_CLS_EGALAX,
1193                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1194                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
1195         { .driver_data = MT_CLS_EGALAX_SERIAL,
1196                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1197                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
1198         { .driver_data = MT_CLS_EGALAX_SERIAL,
1199                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1200                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
1201         { .driver_data = MT_CLS_EGALAX_SERIAL,
1202                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1203                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1204
1205         /* Elitegroup panel */
1206         { .driver_data = MT_CLS_SERIAL,
1207                 MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
1208                         USB_DEVICE_ID_ELITEGROUP_05D8) },
1209
1210         /* Flatfrog Panels */
1211         { .driver_data = MT_CLS_FLATFROG,
1212                 MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
1213                         USB_DEVICE_ID_MULTITOUCH_3200) },
1214
1215         /* FocalTech Panels */
1216         { .driver_data = MT_CLS_SERIAL,
1217                 MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
1218                         USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },
1219
1220         /* GeneralTouch panel */
1221         { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1222                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1223                         USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
1224         { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1225                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1226                         USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
1227         { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1228                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1229                         USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0101) },
1230         { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1231                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1232                         USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0102) },
1233         { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1234                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1235                         USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0106) },
1236         { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1237                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1238                         USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A) },
1239         { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1240                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1241                         USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100) },
1242
1243         /* Gametel game controller */
1244         { .driver_data = MT_CLS_NSMU,
1245                 MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
1246                         USB_DEVICE_ID_GAMETEL_MT_MODE) },
1247
1248         /* GoodTouch panels */
1249         { .driver_data = MT_CLS_NSMU,
1250                 MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
1251                         USB_DEVICE_ID_GOODTOUCH_000f) },
1252
1253         /* Hanvon panels */
1254         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1255                 MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
1256                         USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
1257
1258         /* Ilitek dual touch panel */
1259         {  .driver_data = MT_CLS_NSMU,
1260                 MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
1261                         USB_DEVICE_ID_ILITEK_MULTITOUCH) },
1262
1263         /* MosArt panels */
1264         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1265                 MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1266                         USB_DEVICE_ID_ASUS_T91MT)},
1267         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1268                 MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1269                         USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
1270         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1271                 MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1272                         USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
1273
1274         /* Panasonic panels */
1275         { .driver_data = MT_CLS_PANASONIC,
1276                 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1277                         USB_DEVICE_ID_PANABOARD_UBT780) },
1278         { .driver_data = MT_CLS_PANASONIC,
1279                 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1280                         USB_DEVICE_ID_PANABOARD_UBT880) },
1281
1282         /* Novatek Panel */
1283         { .driver_data = MT_CLS_NSMU,
1284                 MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
1285                         USB_DEVICE_ID_NOVATEK_PCT) },
1286
1287         /* PixArt optical touch screen */
1288         { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1289                 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1290                         USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
1291         { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1292                 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1293                         USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
1294         { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1295                 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1296                         USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
1297
1298         /* PixCir-based panels */
1299         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1300                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1301                         USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
1302
1303         /* Quanta-based panels */
1304         { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1305                 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1306                         USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1307
1308         /* Stantum panels */
1309         { .driver_data = MT_CLS_CONFIDENCE,
1310                 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1311                         USB_DEVICE_ID_MTP_STM)},
1312
1313         /* TopSeed panels */
1314         { .driver_data = MT_CLS_TOPSEED,
1315                 MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
1316                         USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },
1317
1318         /* Touch International panels */
1319         { .driver_data = MT_CLS_NSMU,
1320                 MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
1321                         USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
1322
1323         /* Unitec panels */
1324         { .driver_data = MT_CLS_NSMU,
1325                 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1326                         USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
1327         { .driver_data = MT_CLS_NSMU,
1328                 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1329                         USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1330
1331         /* VTL panels */
1332         { .driver_data = MT_CLS_VTL,
1333                 MT_USB_DEVICE(USB_VENDOR_ID_VTL,
1334                         USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },
1335
1336         /* Wistron panels */
1337         { .driver_data = MT_CLS_NSMU,
1338                 MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
1339                         USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },
1340
1341         /* XAT */
1342         { .driver_data = MT_CLS_NSMU,
1343                 MT_USB_DEVICE(USB_VENDOR_ID_XAT,
1344                         USB_DEVICE_ID_XAT_CSR) },
1345
1346         /* Xiroku */
1347         { .driver_data = MT_CLS_NSMU,
1348                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1349                         USB_DEVICE_ID_XIROKU_SPX) },
1350         { .driver_data = MT_CLS_NSMU,
1351                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1352                         USB_DEVICE_ID_XIROKU_MPX) },
1353         { .driver_data = MT_CLS_NSMU,
1354                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1355                         USB_DEVICE_ID_XIROKU_CSR) },
1356         { .driver_data = MT_CLS_NSMU,
1357                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1358                         USB_DEVICE_ID_XIROKU_SPX1) },
1359         { .driver_data = MT_CLS_NSMU,
1360                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1361                         USB_DEVICE_ID_XIROKU_MPX1) },
1362         { .driver_data = MT_CLS_NSMU,
1363                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1364                         USB_DEVICE_ID_XIROKU_CSR1) },
1365         { .driver_data = MT_CLS_NSMU,
1366                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1367                         USB_DEVICE_ID_XIROKU_SPX2) },
1368         { .driver_data = MT_CLS_NSMU,
1369                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1370                         USB_DEVICE_ID_XIROKU_MPX2) },
1371         { .driver_data = MT_CLS_NSMU,
1372                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1373                         USB_DEVICE_ID_XIROKU_CSR2) },
1374
1375         /* Generic MT device */
1376         { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1377
1378         /* Generic Win 8 certified MT device */
1379         {  .driver_data = MT_CLS_WIN_8,
1380                 HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
1381                         HID_ANY_ID, HID_ANY_ID) },
1382         { }
1383 };
1384 MODULE_DEVICE_TABLE(hid, mt_devices);
1385
1386 static const struct hid_usage_id mt_grabbed_usages[] = {
1387         { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
1388         { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
1389 };
1390
1391 static struct hid_driver mt_driver = {
1392         .name = "hid-multitouch",
1393         .id_table = mt_devices,
1394         .probe = mt_probe,
1395         .remove = mt_remove,
1396         .input_mapping = mt_input_mapping,
1397         .input_mapped = mt_input_mapped,
1398         .input_configured = mt_input_configured,
1399         .feature_mapping = mt_feature_mapping,
1400         .usage_table = mt_grabbed_usages,
1401         .event = mt_event,
1402         .report = mt_report,
1403 #ifdef CONFIG_PM
1404         .reset_resume = mt_reset_resume,
1405         .resume = mt_resume,
1406 #endif
1407 };
1408 module_hid_driver(mt_driver);