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