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