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