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