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