]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/hid/hid-multitouch.c
HID: multitouch: add support for GeneralTouch multi-touchscreen
[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-2012 Benjamin Tissoires <benjamin.tissoires@gmail.com>
6  *  Copyright (c) 2010-2012 Ecole Nationale de l'Aviation Civile, France
7  *
8  *  This code is partly based on hid-egalax.c:
9  *
10  *  Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
11  *  Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
12  *  Copyright (c) 2010 Canonical, Ltd.
13  *
14  *  This code is partly based on hid-3m-pct.c:
15  *
16  *  Copyright (c) 2009-2010 Stephane Chatty <chatty@enac.fr>
17  *  Copyright (c) 2010      Henrik Rydberg <rydberg@euromail.se>
18  *  Copyright (c) 2010      Canonical, Ltd.
19  *
20  */
21
22 /*
23  * This program is free software; you can redistribute it and/or modify it
24  * under the terms of the GNU General Public License as published by the Free
25  * Software Foundation; either version 2 of the License, or (at your option)
26  * any later version.
27  */
28
29 #include <linux/device.h>
30 #include <linux/hid.h>
31 #include <linux/module.h>
32 #include <linux/slab.h>
33 #include <linux/usb.h>
34 #include <linux/input/mt.h>
35 #include "usbhid/usbhid.h"
36
37
38 MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
39 MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
40 MODULE_DESCRIPTION("HID multitouch panels");
41 MODULE_LICENSE("GPL");
42
43 #include "hid-ids.h"
44
45 /* quirks to control the device */
46 #define MT_QUIRK_NOT_SEEN_MEANS_UP      (1 << 0)
47 #define MT_QUIRK_SLOT_IS_CONTACTID      (1 << 1)
48 #define MT_QUIRK_CYPRESS                (1 << 2)
49 #define MT_QUIRK_SLOT_IS_CONTACTNUMBER  (1 << 3)
50 #define MT_QUIRK_ALWAYS_VALID           (1 << 4)
51 #define MT_QUIRK_VALID_IS_INRANGE       (1 << 5)
52 #define MT_QUIRK_VALID_IS_CONFIDENCE    (1 << 6)
53 #define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE    (1 << 8)
54
55 struct mt_slot {
56         __s32 x, y, p, w, h;
57         __s32 contactid;        /* the device ContactID assigned to this slot */
58         bool touch_state;       /* is the touch valid? */
59         bool seen_in_this_frame;/* has this slot been updated */
60 };
61
62 struct mt_class {
63         __s32 name;     /* MT_CLS */
64         __s32 quirks;
65         __s32 sn_move;  /* Signal/noise ratio for move events */
66         __s32 sn_width; /* Signal/noise ratio for width events */
67         __s32 sn_height;        /* Signal/noise ratio for height events */
68         __s32 sn_pressure;      /* Signal/noise ratio for pressure events */
69         __u8 maxcontacts;
70         bool is_indirect;       /* true for touchpads */
71 };
72
73 struct mt_fields {
74         unsigned usages[HID_MAX_FIELDS];
75         unsigned int length;
76 };
77
78 struct mt_device {
79         struct mt_slot curdata; /* placeholder of incoming data */
80         struct mt_class mtclass;        /* our mt device class */
81         struct mt_fields *fields;       /* temporary placeholder for storing the
82                                            multitouch fields */
83         unsigned last_field_index;      /* last field index of the report */
84         unsigned last_slot_field;       /* the last field of a slot */
85         __s8 inputmode;         /* InputMode HID feature, -1 if non-existent */
86         __s8 inputmode_index;   /* InputMode HID feature index in the report */
87         __s8 maxcontact_report_id;      /* Maximum Contact Number HID feature,
88                                    -1 if non-existent */
89         __u8 num_received;      /* how many contacts we received */
90         __u8 num_expected;      /* expected last contact index */
91         __u8 maxcontacts;
92         __u8 touches_by_report; /* how many touches are present in one report:
93                                 * 1 means we should use a serial protocol
94                                 * > 1 means hybrid (multitouch) protocol */
95         bool curvalid;          /* is the current contact valid? */
96         struct mt_slot *slots;
97 };
98
99 /* classes of device behavior */
100 #define MT_CLS_DEFAULT                          0x0001
101
102 #define MT_CLS_SERIAL                           0x0002
103 #define MT_CLS_CONFIDENCE                       0x0003
104 #define MT_CLS_CONFIDENCE_CONTACT_ID            0x0004
105 #define MT_CLS_CONFIDENCE_MINUS_ONE             0x0005
106 #define MT_CLS_DUAL_INRANGE_CONTACTID           0x0006
107 #define MT_CLS_DUAL_INRANGE_CONTACTNUMBER       0x0007
108 #define MT_CLS_DUAL_NSMU_CONTACTID              0x0008
109 #define MT_CLS_INRANGE_CONTACTNUMBER            0x0009
110
111 /* vendor specific classes */
112 #define MT_CLS_3M                               0x0101
113 #define MT_CLS_CYPRESS                          0x0102
114 #define MT_CLS_EGALAX                           0x0103
115 #define MT_CLS_EGALAX_SERIAL                    0x0104
116 #define MT_CLS_TOPSEED                          0x0105
117 #define MT_CLS_PANASONIC                        0x0106
118 #define MT_CLS_GENERALTOUCH_TWOFINGERS          0x0107
119 #define MT_CLS_GENERALTOUCH_PWT_TENFINGERS      0x0108
120
121 #define MT_DEFAULT_MAXCONTACT   10
122
123 #define MT_USB_DEVICE(v, p)     HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)
124 #define MT_BT_DEVICE(v, p)      HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)
125
126 /*
127  * these device-dependent functions determine what slot corresponds
128  * to a valid contact that was just read.
129  */
130
131 static int cypress_compute_slot(struct mt_device *td)
132 {
133         if (td->curdata.contactid != 0 || td->num_received == 0)
134                 return td->curdata.contactid;
135         else
136                 return -1;
137 }
138
139 static int find_slot_from_contactid(struct mt_device *td)
140 {
141         int i;
142         for (i = 0; i < td->maxcontacts; ++i) {
143                 if (td->slots[i].contactid == td->curdata.contactid &&
144                         td->slots[i].touch_state)
145                         return i;
146         }
147         for (i = 0; i < td->maxcontacts; ++i) {
148                 if (!td->slots[i].seen_in_this_frame &&
149                         !td->slots[i].touch_state)
150                         return i;
151         }
152         /* should not occurs. If this happens that means
153          * that the device sent more touches that it says
154          * in the report descriptor. It is ignored then. */
155         return -1;
156 }
157
158 static struct mt_class mt_classes[] = {
159         { .name = MT_CLS_DEFAULT,
160                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
161         { .name = MT_CLS_SERIAL,
162                 .quirks = MT_QUIRK_ALWAYS_VALID},
163         { .name = MT_CLS_CONFIDENCE,
164                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
165         { .name = MT_CLS_CONFIDENCE_CONTACT_ID,
166                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
167                         MT_QUIRK_SLOT_IS_CONTACTID },
168         { .name = MT_CLS_CONFIDENCE_MINUS_ONE,
169                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
170                         MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
171         { .name = MT_CLS_DUAL_INRANGE_CONTACTID,
172                 .quirks = MT_QUIRK_VALID_IS_INRANGE |
173                         MT_QUIRK_SLOT_IS_CONTACTID,
174                 .maxcontacts = 2 },
175         { .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
176                 .quirks = MT_QUIRK_VALID_IS_INRANGE |
177                         MT_QUIRK_SLOT_IS_CONTACTNUMBER,
178                 .maxcontacts = 2 },
179         { .name = MT_CLS_DUAL_NSMU_CONTACTID,
180                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
181                         MT_QUIRK_SLOT_IS_CONTACTID,
182                 .maxcontacts = 2 },
183         { .name = MT_CLS_INRANGE_CONTACTNUMBER,
184                 .quirks = MT_QUIRK_VALID_IS_INRANGE |
185                         MT_QUIRK_SLOT_IS_CONTACTNUMBER },
186
187         /*
188          * vendor specific classes
189          */
190         { .name = MT_CLS_3M,
191                 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
192                         MT_QUIRK_SLOT_IS_CONTACTID,
193                 .sn_move = 2048,
194                 .sn_width = 128,
195                 .sn_height = 128 },
196         { .name = MT_CLS_CYPRESS,
197                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
198                         MT_QUIRK_CYPRESS,
199                 .maxcontacts = 10 },
200         { .name = MT_CLS_EGALAX,
201                 .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
202                         MT_QUIRK_VALID_IS_INRANGE,
203                 .sn_move = 4096,
204                 .sn_pressure = 32,
205         },
206         { .name = MT_CLS_EGALAX_SERIAL,
207                 .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
208                         MT_QUIRK_ALWAYS_VALID,
209                 .sn_move = 4096,
210                 .sn_pressure = 32,
211         },
212         { .name = MT_CLS_TOPSEED,
213                 .quirks = MT_QUIRK_ALWAYS_VALID,
214                 .is_indirect = true,
215                 .maxcontacts = 2,
216         },
217         { .name = MT_CLS_PANASONIC,
218                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
219                 .maxcontacts = 4 },
220         { .name = MT_CLS_GENERALTOUCH_TWOFINGERS,
221                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
222                         MT_QUIRK_VALID_IS_INRANGE |
223                         MT_QUIRK_SLOT_IS_CONTACTNUMBER,
224                 .maxcontacts = 2
225         },
226         { .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
227                 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
228                         MT_QUIRK_SLOT_IS_CONTACTNUMBER,
229                 .maxcontacts = 10
230         },
231
232         { }
233 };
234
235 static ssize_t mt_show_quirks(struct device *dev,
236                            struct device_attribute *attr,
237                            char *buf)
238 {
239         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
240         struct mt_device *td = hid_get_drvdata(hdev);
241
242         return sprintf(buf, "%u\n", td->mtclass.quirks);
243 }
244
245 static ssize_t mt_set_quirks(struct device *dev,
246                           struct device_attribute *attr,
247                           const char *buf, size_t count)
248 {
249         struct hid_device *hdev = container_of(dev, struct hid_device, dev);
250         struct mt_device *td = hid_get_drvdata(hdev);
251
252         unsigned long val;
253
254         if (kstrtoul(buf, 0, &val))
255                 return -EINVAL;
256
257         td->mtclass.quirks = val;
258
259         return count;
260 }
261
262 static DEVICE_ATTR(quirks, S_IWUSR | S_IRUGO, mt_show_quirks, mt_set_quirks);
263
264 static struct attribute *sysfs_attrs[] = {
265         &dev_attr_quirks.attr,
266         NULL
267 };
268
269 static struct attribute_group mt_attribute_group = {
270         .attrs = sysfs_attrs
271 };
272
273 static void mt_feature_mapping(struct hid_device *hdev,
274                 struct hid_field *field, struct hid_usage *usage)
275 {
276         struct mt_device *td = hid_get_drvdata(hdev);
277         int i;
278
279         switch (usage->hid) {
280         case HID_DG_INPUTMODE:
281                 td->inputmode = field->report->id;
282                 td->inputmode_index = 0; /* has to be updated below */
283
284                 for (i=0; i < field->maxusage; i++) {
285                         if (field->usage[i].hid == usage->hid) {
286                                 td->inputmode_index = i;
287                                 break;
288                         }
289                 }
290
291                 break;
292         case HID_DG_CONTACTMAX:
293                 td->maxcontact_report_id = field->report->id;
294                 td->maxcontacts = field->value[0];
295                 if (td->mtclass.maxcontacts)
296                         /* check if the maxcontacts is given by the class */
297                         td->maxcontacts = td->mtclass.maxcontacts;
298
299                 break;
300         }
301 }
302
303 static void set_abs(struct input_dev *input, unsigned int code,
304                 struct hid_field *field, int snratio)
305 {
306         int fmin = field->logical_minimum;
307         int fmax = field->logical_maximum;
308         int fuzz = snratio ? (fmax - fmin) / snratio : 0;
309         input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
310 }
311
312 static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
313                 struct hid_input *hi)
314 {
315         struct mt_fields *f = td->fields;
316
317         if (f->length >= HID_MAX_FIELDS)
318                 return;
319
320         f->usages[f->length++] = usage->hid;
321 }
322
323 static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
324                 struct hid_field *field, struct hid_usage *usage,
325                 unsigned long **bit, int *max)
326 {
327         struct mt_device *td = hid_get_drvdata(hdev);
328         struct mt_class *cls = &td->mtclass;
329         int code;
330
331         /* Only map fields from TouchScreen or TouchPad collections.
332         * We need to ignore fields that belong to other collections
333         * such as Mouse that might have the same GenericDesktop usages. */
334         if (field->application == HID_DG_TOUCHSCREEN)
335                 set_bit(INPUT_PROP_DIRECT, hi->input->propbit);
336         else if (field->application != HID_DG_TOUCHPAD)
337                 return 0;
338
339         /* In case of an indirect device (touchpad), we need to add
340          * specific BTN_TOOL_* to be handled by the synaptics xorg
341          * driver.
342          * We also consider that touchscreens providing buttons are touchpads.
343          */
344         if (field->application == HID_DG_TOUCHPAD ||
345             (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON ||
346             cls->is_indirect) {
347                 set_bit(INPUT_PROP_POINTER, hi->input->propbit);
348                 set_bit(BTN_TOOL_FINGER, hi->input->keybit);
349                 set_bit(BTN_TOOL_DOUBLETAP, hi->input->keybit);
350                 set_bit(BTN_TOOL_TRIPLETAP, hi->input->keybit);
351                 set_bit(BTN_TOOL_QUADTAP, hi->input->keybit);
352         }
353
354         /* eGalax devices provide a Digitizer.Stylus input which overrides
355          * the correct Digitizers.Finger X/Y ranges.
356          * Let's just ignore this input. */
357         if (field->physical == HID_DG_STYLUS)
358                 return -1;
359
360         switch (usage->hid & HID_USAGE_PAGE) {
361
362         case HID_UP_GENDESK:
363                 switch (usage->hid) {
364                 case HID_GD_X:
365                         hid_map_usage(hi, usage, bit, max,
366                                         EV_ABS, ABS_MT_POSITION_X);
367                         set_abs(hi->input, ABS_MT_POSITION_X, field,
368                                 cls->sn_move);
369                         /* touchscreen emulation */
370                         set_abs(hi->input, ABS_X, field, cls->sn_move);
371                         mt_store_field(usage, td, hi);
372                         td->last_field_index = field->index;
373                         return 1;
374                 case HID_GD_Y:
375                         hid_map_usage(hi, usage, bit, max,
376                                         EV_ABS, ABS_MT_POSITION_Y);
377                         set_abs(hi->input, ABS_MT_POSITION_Y, field,
378                                 cls->sn_move);
379                         /* touchscreen emulation */
380                         set_abs(hi->input, ABS_Y, field, cls->sn_move);
381                         mt_store_field(usage, td, hi);
382                         td->last_field_index = field->index;
383                         return 1;
384                 }
385                 return 0;
386
387         case HID_UP_DIGITIZER:
388                 switch (usage->hid) {
389                 case HID_DG_INRANGE:
390                         mt_store_field(usage, td, hi);
391                         td->last_field_index = field->index;
392                         return 1;
393                 case HID_DG_CONFIDENCE:
394                         mt_store_field(usage, td, hi);
395                         td->last_field_index = field->index;
396                         return 1;
397                 case HID_DG_TIPSWITCH:
398                         hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
399                         input_set_capability(hi->input, EV_KEY, BTN_TOUCH);
400                         mt_store_field(usage, td, hi);
401                         td->last_field_index = field->index;
402                         return 1;
403                 case HID_DG_CONTACTID:
404                         if (!td->maxcontacts)
405                                 td->maxcontacts = MT_DEFAULT_MAXCONTACT;
406                         input_mt_init_slots(hi->input, td->maxcontacts);
407                         mt_store_field(usage, td, hi);
408                         td->last_field_index = field->index;
409                         td->touches_by_report++;
410                         return 1;
411                 case HID_DG_WIDTH:
412                         hid_map_usage(hi, usage, bit, max,
413                                         EV_ABS, ABS_MT_TOUCH_MAJOR);
414                         set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
415                                 cls->sn_width);
416                         mt_store_field(usage, td, hi);
417                         td->last_field_index = field->index;
418                         return 1;
419                 case HID_DG_HEIGHT:
420                         hid_map_usage(hi, usage, bit, max,
421                                         EV_ABS, ABS_MT_TOUCH_MINOR);
422                         set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
423                                 cls->sn_height);
424                         input_set_abs_params(hi->input,
425                                         ABS_MT_ORIENTATION, 0, 1, 0, 0);
426                         mt_store_field(usage, td, hi);
427                         td->last_field_index = field->index;
428                         return 1;
429                 case HID_DG_TIPPRESSURE:
430                         hid_map_usage(hi, usage, bit, max,
431                                         EV_ABS, ABS_MT_PRESSURE);
432                         set_abs(hi->input, ABS_MT_PRESSURE, field,
433                                 cls->sn_pressure);
434                         /* touchscreen emulation */
435                         set_abs(hi->input, ABS_PRESSURE, field,
436                                 cls->sn_pressure);
437                         mt_store_field(usage, td, hi);
438                         td->last_field_index = field->index;
439                         return 1;
440                 case HID_DG_CONTACTCOUNT:
441                         td->last_field_index = field->index;
442                         return 1;
443                 case HID_DG_CONTACTMAX:
444                         /* we don't set td->last_slot_field as contactcount and
445                          * contact max are global to the report */
446                         td->last_field_index = field->index;
447                         return -1;
448                 }
449                 case HID_DG_TOUCH:
450                         /* Legacy devices use TIPSWITCH and not TOUCH.
451                          * Let's just ignore this field. */
452                         return -1;
453                 /* let hid-input decide for the others */
454                 return 0;
455
456         case HID_UP_BUTTON:
457                 code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
458                 hid_map_usage(hi, usage, bit, max, EV_KEY, code);
459                 input_set_capability(hi->input, EV_KEY, code);
460                 return 1;
461
462         case 0xff000000:
463                 /* we do not want to map these: no input-oriented meaning */
464                 return -1;
465         }
466
467         return 0;
468 }
469
470 static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
471                 struct hid_field *field, struct hid_usage *usage,
472                 unsigned long **bit, int *max)
473 {
474         if (usage->type == EV_KEY || usage->type == EV_ABS)
475                 set_bit(usage->type, hi->input->evbit);
476
477         return -1;
478 }
479
480 static int mt_compute_slot(struct mt_device *td)
481 {
482         __s32 quirks = td->mtclass.quirks;
483
484         if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
485                 return td->curdata.contactid;
486
487         if (quirks & MT_QUIRK_CYPRESS)
488                 return cypress_compute_slot(td);
489
490         if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
491                 return td->num_received;
492
493         if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
494                 return td->curdata.contactid - 1;
495
496         return find_slot_from_contactid(td);
497 }
498
499 /*
500  * this function is called when a whole contact has been processed,
501  * so that it can assign it to a slot and store the data there
502  */
503 static void mt_complete_slot(struct mt_device *td)
504 {
505         td->curdata.seen_in_this_frame = true;
506         if (td->curvalid) {
507                 int slotnum = mt_compute_slot(td);
508
509                 if (slotnum >= 0 && slotnum < td->maxcontacts)
510                         td->slots[slotnum] = td->curdata;
511         }
512         td->num_received++;
513 }
514
515
516 /*
517  * this function is called when a whole packet has been received and processed,
518  * so that it can decide what to send to the input layer.
519  */
520 static void mt_emit_event(struct mt_device *td, struct input_dev *input)
521 {
522         int i;
523
524         for (i = 0; i < td->maxcontacts; ++i) {
525                 struct mt_slot *s = &(td->slots[i]);
526                 if ((td->mtclass.quirks & MT_QUIRK_NOT_SEEN_MEANS_UP) &&
527                         !s->seen_in_this_frame) {
528                         s->touch_state = false;
529                 }
530
531                 input_mt_slot(input, i);
532                 input_mt_report_slot_state(input, MT_TOOL_FINGER,
533                         s->touch_state);
534                 if (s->touch_state) {
535                         /* this finger is on the screen */
536                         int wide = (s->w > s->h);
537                         /* divided by two to match visual scale of touch */
538                         int major = max(s->w, s->h) >> 1;
539                         int minor = min(s->w, s->h) >> 1;
540
541                         input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);
542                         input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);
543                         input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
544                         input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
545                         input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
546                         input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
547                 }
548                 s->seen_in_this_frame = false;
549
550         }
551
552         input_mt_report_pointer_emulation(input, true);
553         input_sync(input);
554         td->num_received = 0;
555 }
556
557
558
559 static int mt_event(struct hid_device *hid, struct hid_field *field,
560                                 struct hid_usage *usage, __s32 value)
561 {
562         struct mt_device *td = hid_get_drvdata(hid);
563         __s32 quirks = td->mtclass.quirks;
564
565         if (hid->claimed & HID_CLAIMED_INPUT && td->slots) {
566                 switch (usage->hid) {
567                 case HID_DG_INRANGE:
568                         if (quirks & MT_QUIRK_ALWAYS_VALID)
569                                 td->curvalid = true;
570                         else if (quirks & MT_QUIRK_VALID_IS_INRANGE)
571                                 td->curvalid = value;
572                         break;
573                 case HID_DG_TIPSWITCH:
574                         if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
575                                 td->curvalid = value;
576                         td->curdata.touch_state = value;
577                         break;
578                 case HID_DG_CONFIDENCE:
579                         if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
580                                 td->curvalid = value;
581                         break;
582                 case HID_DG_CONTACTID:
583                         td->curdata.contactid = value;
584                         break;
585                 case HID_DG_TIPPRESSURE:
586                         td->curdata.p = value;
587                         break;
588                 case HID_GD_X:
589                         td->curdata.x = value;
590                         break;
591                 case HID_GD_Y:
592                         td->curdata.y = value;
593                         break;
594                 case HID_DG_WIDTH:
595                         td->curdata.w = value;
596                         break;
597                 case HID_DG_HEIGHT:
598                         td->curdata.h = value;
599                         break;
600                 case HID_DG_CONTACTCOUNT:
601                         /*
602                          * Includes multi-packet support where subsequent
603                          * packets are sent with zero contactcount.
604                          */
605                         if (value)
606                                 td->num_expected = value;
607                         break;
608                 case HID_DG_TOUCH:
609                         /* do nothing */
610                         break;
611
612                 default:
613                         /* fallback to the generic hidinput handling */
614                         return 0;
615                 }
616
617                 if (usage->hid == td->last_slot_field)
618                         mt_complete_slot(td);
619
620                 if (field->index == td->last_field_index
621                         && td->num_received >= td->num_expected)
622                         mt_emit_event(td, field->hidinput->input);
623
624         }
625
626         /* we have handled the hidinput part, now remains hiddev */
627         if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
628                 hid->hiddev_hid_event(hid, field, usage, value);
629
630         return 1;
631 }
632
633 static void mt_set_input_mode(struct hid_device *hdev)
634 {
635         struct mt_device *td = hid_get_drvdata(hdev);
636         struct hid_report *r;
637         struct hid_report_enum *re;
638
639         if (td->inputmode < 0)
640                 return;
641
642         re = &(hdev->report_enum[HID_FEATURE_REPORT]);
643         r = re->report_id_hash[td->inputmode];
644         if (r) {
645                 r->field[0]->value[td->inputmode_index] = 0x02;
646                 usbhid_submit_report(hdev, r, USB_DIR_OUT);
647         }
648 }
649
650 static void mt_set_maxcontacts(struct hid_device *hdev)
651 {
652         struct mt_device *td = hid_get_drvdata(hdev);
653         struct hid_report *r;
654         struct hid_report_enum *re;
655         int fieldmax, max;
656
657         if (td->maxcontact_report_id < 0)
658                 return;
659
660         if (!td->mtclass.maxcontacts)
661                 return;
662
663         re = &hdev->report_enum[HID_FEATURE_REPORT];
664         r = re->report_id_hash[td->maxcontact_report_id];
665         if (r) {
666                 max = td->mtclass.maxcontacts;
667                 fieldmax = r->field[0]->logical_maximum;
668                 max = min(fieldmax, max);
669                 if (r->field[0]->value[0] != max) {
670                         r->field[0]->value[0] = max;
671                         usbhid_submit_report(hdev, r, USB_DIR_OUT);
672                 }
673         }
674 }
675
676 static void mt_post_parse_default_settings(struct mt_device *td)
677 {
678         __s32 quirks = td->mtclass.quirks;
679
680         /* unknown serial device needs special quirks */
681         if (td->touches_by_report == 1) {
682                 quirks |= MT_QUIRK_ALWAYS_VALID;
683                 quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
684                 quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
685                 quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
686         }
687
688         td->mtclass.quirks = quirks;
689 }
690
691 static void mt_post_parse(struct mt_device *td)
692 {
693         struct mt_fields *f = td->fields;
694
695         if (td->touches_by_report > 0) {
696                 int field_count_per_touch = f->length / td->touches_by_report;
697                 td->last_slot_field = f->usages[field_count_per_touch - 1];
698         }
699 }
700
701 static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
702 {
703         int ret, i;
704         struct mt_device *td;
705         struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */
706
707         for (i = 0; mt_classes[i].name ; i++) {
708                 if (id->driver_data == mt_classes[i].name) {
709                         mtclass = &(mt_classes[i]);
710                         break;
711                 }
712         }
713
714         /* This allows the driver to correctly support devices
715          * that emit events over several HID messages.
716          */
717         hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
718
719         td = kzalloc(sizeof(struct mt_device), GFP_KERNEL);
720         if (!td) {
721                 dev_err(&hdev->dev, "cannot allocate multitouch data\n");
722                 return -ENOMEM;
723         }
724         td->mtclass = *mtclass;
725         td->inputmode = -1;
726         td->maxcontact_report_id = -1;
727         hid_set_drvdata(hdev, td);
728
729         td->fields = kzalloc(sizeof(struct mt_fields), GFP_KERNEL);
730         if (!td->fields) {
731                 dev_err(&hdev->dev, "cannot allocate multitouch fields data\n");
732                 ret = -ENOMEM;
733                 goto fail;
734         }
735
736         ret = hid_parse(hdev);
737         if (ret != 0)
738                 goto fail;
739
740         ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
741         if (ret)
742                 goto fail;
743
744         mt_post_parse(td);
745
746         if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
747                 mt_post_parse_default_settings(td);
748
749         td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot),
750                                 GFP_KERNEL);
751         if (!td->slots) {
752                 dev_err(&hdev->dev, "cannot allocate multitouch slots\n");
753                 hid_hw_stop(hdev);
754                 ret = -ENOMEM;
755                 goto fail;
756         }
757
758         ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
759
760         mt_set_maxcontacts(hdev);
761         mt_set_input_mode(hdev);
762
763         kfree(td->fields);
764         td->fields = NULL;
765
766         return 0;
767
768 fail:
769         kfree(td->fields);
770         kfree(td);
771         return ret;
772 }
773
774 #ifdef CONFIG_PM
775 static int mt_reset_resume(struct hid_device *hdev)
776 {
777         mt_set_maxcontacts(hdev);
778         mt_set_input_mode(hdev);
779         return 0;
780 }
781
782 static int mt_resume(struct hid_device *hdev)
783 {
784         struct usb_interface *intf;
785         struct usb_host_interface *interface;
786         struct usb_device *dev;
787
788         if (hdev->bus != BUS_USB)
789                 return 0;
790
791         intf = to_usb_interface(hdev->dev.parent);
792         interface = intf->cur_altsetting;
793         dev = hid_to_usb_dev(hdev);
794
795         /* Some Elan legacy devices require SET_IDLE to be set on resume.
796          * It should be safe to send it to other devices too.
797          * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */
798
799         usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
800                         HID_REQ_SET_IDLE,
801                         USB_TYPE_CLASS | USB_RECIP_INTERFACE,
802                         0, interface->desc.bInterfaceNumber,
803                         NULL, 0, USB_CTRL_SET_TIMEOUT);
804
805         return 0;
806 }
807 #endif
808
809 static void mt_remove(struct hid_device *hdev)
810 {
811         struct mt_device *td = hid_get_drvdata(hdev);
812         sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
813         hid_hw_stop(hdev);
814         kfree(td->slots);
815         kfree(td);
816         hid_set_drvdata(hdev, NULL);
817 }
818
819 static const struct hid_device_id mt_devices[] = {
820
821         /* 3M panels */
822         { .driver_data = MT_CLS_3M,
823                 MT_USB_DEVICE(USB_VENDOR_ID_3M,
824                         USB_DEVICE_ID_3M1968) },
825         { .driver_data = MT_CLS_3M,
826                 MT_USB_DEVICE(USB_VENDOR_ID_3M,
827                         USB_DEVICE_ID_3M2256) },
828         { .driver_data = MT_CLS_3M,
829                 MT_USB_DEVICE(USB_VENDOR_ID_3M,
830                         USB_DEVICE_ID_3M3266) },
831
832         /* ActionStar panels */
833         { .driver_data = MT_CLS_DEFAULT,
834                 MT_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR,
835                         USB_DEVICE_ID_ACTIONSTAR_1011) },
836
837         /* Atmel panels */
838         { .driver_data = MT_CLS_SERIAL,
839                 MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
840                         USB_DEVICE_ID_ATMEL_MULTITOUCH) },
841         { .driver_data = MT_CLS_SERIAL,
842                 MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
843                         USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
844
845         /* Baanto multitouch devices */
846         { .driver_data = MT_CLS_DEFAULT,
847                 MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
848                         USB_DEVICE_ID_BAANTO_MT_190W2) },
849         /* Cando panels */
850         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
851                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
852                         USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
853         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
854                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
855                         USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) },
856         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
857                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
858                         USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) },
859         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
860                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
861                         USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
862
863         /* Chunghwa Telecom touch panels */
864         {  .driver_data = MT_CLS_DEFAULT,
865                 MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
866                         USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },
867
868         /* CVTouch panels */
869         { .driver_data = MT_CLS_DEFAULT,
870                 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
871                         USB_DEVICE_ID_CVTOUCH_SCREEN) },
872
873         /* Cypress panel */
874         { .driver_data = MT_CLS_CYPRESS,
875                 HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS,
876                         USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
877
878         /* eGalax devices (resistive) */
879         { .driver_data = MT_CLS_EGALAX,
880                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
881                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
882         { .driver_data = MT_CLS_EGALAX,
883                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
884                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
885
886         /* eGalax devices (capacitive) */
887         { .driver_data = MT_CLS_EGALAX,
888                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
889                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
890         { .driver_data = MT_CLS_EGALAX_SERIAL,
891                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
892                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
893         { .driver_data = MT_CLS_EGALAX_SERIAL,
894                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
895                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
896         { .driver_data = MT_CLS_EGALAX_SERIAL,
897                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
898                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
899         { .driver_data = MT_CLS_EGALAX_SERIAL,
900                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
901                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
902         { .driver_data = MT_CLS_EGALAX,
903                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
904                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
905         { .driver_data = MT_CLS_EGALAX_SERIAL,
906                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
907                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
908         { .driver_data = MT_CLS_EGALAX,
909                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
910                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
911         { .driver_data = MT_CLS_EGALAX_SERIAL,
912                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
913                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
914         { .driver_data = MT_CLS_EGALAX,
915                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
916                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
917         { .driver_data = MT_CLS_EGALAX,
918                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
919                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
920         { .driver_data = MT_CLS_EGALAX_SERIAL,
921                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
922                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
923         { .driver_data = MT_CLS_EGALAX_SERIAL,
924                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
925                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
926         { .driver_data = MT_CLS_EGALAX_SERIAL,
927                 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
928                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
929         { .driver_data = MT_CLS_EGALAX,
930                 HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
931                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
932         { .driver_data = MT_CLS_EGALAX,
933                 HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
934                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0) },
935         { .driver_data = MT_CLS_EGALAX,
936                 HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
937                         USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4) },
938
939         /* Elo TouchSystems IntelliTouch Plus panel */
940         { .driver_data = MT_CLS_DUAL_NSMU_CONTACTID,
941                 MT_USB_DEVICE(USB_VENDOR_ID_ELO,
942                         USB_DEVICE_ID_ELO_TS2515) },
943
944         /* GeneralTouch panel */
945         { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
946                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
947                         USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
948         { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
949                 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
950                         USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
951
952         /* Gametel game controller */
953         { .driver_data = MT_CLS_DEFAULT,
954                 MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
955                         USB_DEVICE_ID_GAMETEL_MT_MODE) },
956
957         /* GoodTouch panels */
958         { .driver_data = MT_CLS_DEFAULT,
959                 MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
960                         USB_DEVICE_ID_GOODTOUCH_000f) },
961
962         /* Hanvon panels */
963         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
964                 MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
965                         USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
966
967         /* Ideacom panel */
968         { .driver_data = MT_CLS_SERIAL,
969                 MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
970                         USB_DEVICE_ID_IDEACOM_IDC6650) },
971         { .driver_data = MT_CLS_SERIAL,
972                 MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
973                         USB_DEVICE_ID_IDEACOM_IDC6651) },
974
975         /* Ilitek dual touch panel */
976         {  .driver_data = MT_CLS_DEFAULT,
977                 MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
978                         USB_DEVICE_ID_ILITEK_MULTITOUCH) },
979
980         /* IRTOUCH panels */
981         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
982                 MT_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS,
983                         USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
984
985         /* LG Display panels */
986         { .driver_data = MT_CLS_DEFAULT,
987                 MT_USB_DEVICE(USB_VENDOR_ID_LG,
988                         USB_DEVICE_ID_LG_MULTITOUCH) },
989
990         /* Lumio panels */
991         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
992                 MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
993                         USB_DEVICE_ID_CRYSTALTOUCH) },
994         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
995                 MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
996                         USB_DEVICE_ID_CRYSTALTOUCH_DUAL) },
997
998         /* MosArt panels */
999         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1000                 MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1001                         USB_DEVICE_ID_ASUS_T91MT)},
1002         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1003                 MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1004                         USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
1005         { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1006                 MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1007                         USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
1008
1009         /* Panasonic panels */
1010         { .driver_data = MT_CLS_PANASONIC,
1011                 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1012                         USB_DEVICE_ID_PANABOARD_UBT780) },
1013         { .driver_data = MT_CLS_PANASONIC,
1014                 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1015                         USB_DEVICE_ID_PANABOARD_UBT880) },
1016
1017         /* Novatek Panel */
1018         { .driver_data = MT_CLS_DEFAULT,
1019                 MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
1020                         USB_DEVICE_ID_NOVATEK_PCT) },
1021
1022         /* PenMount panels */
1023         { .driver_data = MT_CLS_CONFIDENCE,
1024                 MT_USB_DEVICE(USB_VENDOR_ID_PENMOUNT,
1025                         USB_DEVICE_ID_PENMOUNT_PCI) },
1026
1027         /* PixArt optical touch screen */
1028         { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1029                 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1030                         USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
1031         { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1032                 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1033                         USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
1034         { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1035                 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1036                         USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
1037
1038         /* PixCir-based panels */
1039         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1040                 MT_USB_DEVICE(USB_VENDOR_ID_HANVON,
1041                         USB_DEVICE_ID_HANVON_MULTITOUCH) },
1042         { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1043                 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1044                         USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
1045
1046         /* Quanta-based panels */
1047         { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1048                 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1049                         USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
1050         { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1051                 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1052                         USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1053         { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1054                 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1055                         USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008) },
1056
1057         /* Stantum panels */
1058         { .driver_data = MT_CLS_CONFIDENCE,
1059                 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM,
1060                         USB_DEVICE_ID_MTP)},
1061         { .driver_data = MT_CLS_CONFIDENCE,
1062                 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1063                         USB_DEVICE_ID_MTP_STM)},
1064         { .driver_data = MT_CLS_CONFIDENCE,
1065                 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX,
1066                         USB_DEVICE_ID_MTP_SITRONIX)},
1067
1068         /* TopSeed panels */
1069         { .driver_data = MT_CLS_TOPSEED,
1070                 MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
1071                         USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },
1072
1073         /* Touch International panels */
1074         { .driver_data = MT_CLS_DEFAULT,
1075                 MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
1076                         USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
1077
1078         /* Unitec panels */
1079         { .driver_data = MT_CLS_DEFAULT,
1080                 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1081                         USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
1082         { .driver_data = MT_CLS_DEFAULT,
1083                 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1084                         USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1085         /* XAT */
1086         { .driver_data = MT_CLS_DEFAULT,
1087                 MT_USB_DEVICE(USB_VENDOR_ID_XAT,
1088                         USB_DEVICE_ID_XAT_CSR) },
1089
1090         /* Xiroku */
1091         { .driver_data = MT_CLS_DEFAULT,
1092                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1093                         USB_DEVICE_ID_XIROKU_SPX) },
1094         { .driver_data = MT_CLS_DEFAULT,
1095                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1096                         USB_DEVICE_ID_XIROKU_MPX) },
1097         { .driver_data = MT_CLS_DEFAULT,
1098                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1099                         USB_DEVICE_ID_XIROKU_CSR) },
1100         { .driver_data = MT_CLS_DEFAULT,
1101                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1102                         USB_DEVICE_ID_XIROKU_SPX1) },
1103         { .driver_data = MT_CLS_DEFAULT,
1104                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1105                         USB_DEVICE_ID_XIROKU_MPX1) },
1106         { .driver_data = MT_CLS_DEFAULT,
1107                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1108                         USB_DEVICE_ID_XIROKU_CSR1) },
1109         { .driver_data = MT_CLS_DEFAULT,
1110                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1111                         USB_DEVICE_ID_XIROKU_SPX2) },
1112         { .driver_data = MT_CLS_DEFAULT,
1113                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1114                         USB_DEVICE_ID_XIROKU_MPX2) },
1115         { .driver_data = MT_CLS_DEFAULT,
1116                 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1117                         USB_DEVICE_ID_XIROKU_CSR2) },
1118
1119         /* Zytronic panels */
1120         { .driver_data = MT_CLS_SERIAL,
1121                 MT_USB_DEVICE(USB_VENDOR_ID_ZYTRONIC,
1122                         USB_DEVICE_ID_ZYTRONIC_ZXY100) },
1123
1124         /* Generic MT device */
1125         { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1126         { }
1127 };
1128 MODULE_DEVICE_TABLE(hid, mt_devices);
1129
1130 static const struct hid_usage_id mt_grabbed_usages[] = {
1131         { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
1132         { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
1133 };
1134
1135 static struct hid_driver mt_driver = {
1136         .name = "hid-multitouch",
1137         .id_table = mt_devices,
1138         .probe = mt_probe,
1139         .remove = mt_remove,
1140         .input_mapping = mt_input_mapping,
1141         .input_mapped = mt_input_mapped,
1142         .feature_mapping = mt_feature_mapping,
1143         .usage_table = mt_grabbed_usages,
1144         .event = mt_event,
1145 #ifdef CONFIG_PM
1146         .reset_resume = mt_reset_resume,
1147         .resume = mt_resume,
1148 #endif
1149 };
1150
1151 static int __init mt_init(void)
1152 {
1153         return hid_register_driver(&mt_driver);
1154 }
1155
1156 static void __exit mt_exit(void)
1157 {
1158         hid_unregister_driver(&mt_driver);
1159 }
1160
1161 module_init(mt_init);
1162 module_exit(mt_exit);