xref: /openbmc/linux/drivers/hid/hid-multitouch.c (revision cfbb9be8)
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);
1902