xref: /linux/drivers/hid/hid-multitouch.c (revision 95e9fd10f06cb5642028b6b851e32b8c8afb4571)
1 /*
2  *  HID driver for multitouch panels
3  *
4  *  Copyright (c) 2010-2012 Stephane Chatty <chatty@enac.fr>
5  *  Copyright (c) 2010-2012 Benjamin Tissoires <benjamin.tissoires@gmail.com>
6  *  Copyright (c) 2010-2012 Ecole Nationale de l'Aviation Civile, France
7  *
8  *  This code is partly based on hid-egalax.c:
9  *
10  *  Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
11  *  Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
12  *  Copyright (c) 2010 Canonical, Ltd.
13  *
14  *  This code is partly based on hid-3m-pct.c:
15  *
16  *  Copyright (c) 2009-2010 Stephane Chatty <chatty@enac.fr>
17  *  Copyright (c) 2010      Henrik Rydberg <rydberg@euromail.se>
18  *  Copyright (c) 2010      Canonical, Ltd.
19  *
20  */
21 
22 /*
23  * This program is free software; you can redistribute it and/or modify it
24  * under the terms of the GNU General Public License as published by the Free
25  * Software Foundation; either version 2 of the License, or (at your option)
26  * any later version.
27  */
28 
29 #include <linux/device.h>
30 #include <linux/hid.h>
31 #include <linux/module.h>
32 #include <linux/slab.h>
33 #include <linux/usb.h>
34 #include <linux/input/mt.h>
35 #include "usbhid/usbhid.h"
36 
37 
38 MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
39 MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
40 MODULE_DESCRIPTION("HID multitouch panels");
41 MODULE_LICENSE("GPL");
42 
43 #include "hid-ids.h"
44 
45 /* quirks to control the device */
46 #define MT_QUIRK_NOT_SEEN_MEANS_UP	(1 << 0)
47 #define MT_QUIRK_SLOT_IS_CONTACTID	(1 << 1)
48 #define MT_QUIRK_CYPRESS		(1 << 2)
49 #define MT_QUIRK_SLOT_IS_CONTACTNUMBER	(1 << 3)
50 #define MT_QUIRK_ALWAYS_VALID		(1 << 4)
51 #define MT_QUIRK_VALID_IS_INRANGE	(1 << 5)
52 #define MT_QUIRK_VALID_IS_CONFIDENCE	(1 << 6)
53 #define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE	(1 << 8)
54 
55 struct mt_slot {
56 	__s32 x, y, p, w, h;
57 	__s32 contactid;	/* the device ContactID assigned to this slot */
58 	bool touch_state;	/* is the touch valid? */
59 	bool seen_in_this_frame;/* has this slot been updated */
60 };
61 
62 struct mt_class {
63 	__s32 name;	/* MT_CLS */
64 	__s32 quirks;
65 	__s32 sn_move;	/* Signal/noise ratio for move events */
66 	__s32 sn_width;	/* Signal/noise ratio for width events */
67 	__s32 sn_height;	/* Signal/noise ratio for height events */
68 	__s32 sn_pressure;	/* Signal/noise ratio for pressure events */
69 	__u8 maxcontacts;
70 	bool is_indirect;	/* true for touchpads */
71 };
72 
73 struct mt_fields {
74 	unsigned usages[HID_MAX_FIELDS];
75 	unsigned int length;
76 };
77 
78 struct mt_device {
79 	struct mt_slot curdata;	/* placeholder of incoming data */
80 	struct mt_class mtclass;	/* our mt device class */
81 	struct mt_fields *fields;	/* temporary placeholder for storing the
82 					   multitouch fields */
83 	unsigned last_field_index;	/* last field index of the report */
84 	unsigned last_slot_field;	/* the last field of a slot */
85 	__s8 inputmode;		/* InputMode HID feature, -1 if non-existent */
86 	__s8 inputmode_index;	/* InputMode HID feature index in the report */
87 	__s8 maxcontact_report_id;	/* Maximum Contact Number HID feature,
88 				   -1 if non-existent */
89 	__u8 num_received;	/* how many contacts we received */
90 	__u8 num_expected;	/* expected last contact index */
91 	__u8 maxcontacts;
92 	__u8 touches_by_report;	/* how many touches are present in one report:
93 				* 1 means we should use a serial protocol
94 				* > 1 means hybrid (multitouch) protocol */
95 	bool curvalid;		/* is the current contact valid? */
96 	struct mt_slot *slots;
97 };
98 
99 /* classes of device behavior */
100 #define MT_CLS_DEFAULT				0x0001
101 
102 #define MT_CLS_SERIAL				0x0002
103 #define MT_CLS_CONFIDENCE			0x0003
104 #define MT_CLS_CONFIDENCE_CONTACT_ID		0x0004
105 #define MT_CLS_CONFIDENCE_MINUS_ONE		0x0005
106 #define MT_CLS_DUAL_INRANGE_CONTACTID		0x0006
107 #define MT_CLS_DUAL_INRANGE_CONTACTNUMBER	0x0007
108 #define MT_CLS_DUAL_NSMU_CONTACTID		0x0008
109 #define MT_CLS_INRANGE_CONTACTNUMBER		0x0009
110 
111 /* vendor specific classes */
112 #define MT_CLS_3M				0x0101
113 #define MT_CLS_CYPRESS				0x0102
114 #define MT_CLS_EGALAX				0x0103
115 #define MT_CLS_EGALAX_SERIAL			0x0104
116 #define MT_CLS_TOPSEED				0x0105
117 #define MT_CLS_PANASONIC			0x0106
118 
119 #define MT_DEFAULT_MAXCONTACT	10
120 
121 #define MT_USB_DEVICE(v, p)	HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)
122 #define MT_BT_DEVICE(v, p)	HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)
123 
124 /*
125  * these device-dependent functions determine what slot corresponds
126  * to a valid contact that was just read.
127  */
128 
129 static int cypress_compute_slot(struct mt_device *td)
130 {
131 	if (td->curdata.contactid != 0 || td->num_received == 0)
132 		return td->curdata.contactid;
133 	else
134 		return -1;
135 }
136 
137 static int find_slot_from_contactid(struct mt_device *td)
138 {
139 	int i;
140 	for (i = 0; i < td->maxcontacts; ++i) {
141 		if (td->slots[i].contactid == td->curdata.contactid &&
142 			td->slots[i].touch_state)
143 			return i;
144 	}
145 	for (i = 0; i < td->maxcontacts; ++i) {
146 		if (!td->slots[i].seen_in_this_frame &&
147 			!td->slots[i].touch_state)
148 			return i;
149 	}
150 	/* should not occurs. If this happens that means
151 	 * that the device sent more touches that it says
152 	 * in the report descriptor. It is ignored then. */
153 	return -1;
154 }
155 
156 static struct mt_class mt_classes[] = {
157 	{ .name = MT_CLS_DEFAULT,
158 		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
159 	{ .name = MT_CLS_SERIAL,
160 		.quirks = MT_QUIRK_ALWAYS_VALID},
161 	{ .name = MT_CLS_CONFIDENCE,
162 		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
163 	{ .name = MT_CLS_CONFIDENCE_CONTACT_ID,
164 		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
165 			MT_QUIRK_SLOT_IS_CONTACTID },
166 	{ .name = MT_CLS_CONFIDENCE_MINUS_ONE,
167 		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
168 			MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
169 	{ .name = MT_CLS_DUAL_INRANGE_CONTACTID,
170 		.quirks = MT_QUIRK_VALID_IS_INRANGE |
171 			MT_QUIRK_SLOT_IS_CONTACTID,
172 		.maxcontacts = 2 },
173 	{ .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
174 		.quirks = MT_QUIRK_VALID_IS_INRANGE |
175 			MT_QUIRK_SLOT_IS_CONTACTNUMBER,
176 		.maxcontacts = 2 },
177 	{ .name = MT_CLS_DUAL_NSMU_CONTACTID,
178 		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
179 			MT_QUIRK_SLOT_IS_CONTACTID,
180 		.maxcontacts = 2 },
181 	{ .name = MT_CLS_INRANGE_CONTACTNUMBER,
182 		.quirks = MT_QUIRK_VALID_IS_INRANGE |
183 			MT_QUIRK_SLOT_IS_CONTACTNUMBER },
184 
185 	/*
186 	 * vendor specific classes
187 	 */
188 	{ .name = MT_CLS_3M,
189 		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
190 			MT_QUIRK_SLOT_IS_CONTACTID,
191 		.sn_move = 2048,
192 		.sn_width = 128,
193 		.sn_height = 128 },
194 	{ .name = MT_CLS_CYPRESS,
195 		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
196 			MT_QUIRK_CYPRESS,
197 		.maxcontacts = 10 },
198 	{ .name = MT_CLS_EGALAX,
199 		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
200 			MT_QUIRK_VALID_IS_INRANGE,
201 		.sn_move = 4096,
202 		.sn_pressure = 32,
203 	},
204 	{ .name = MT_CLS_EGALAX_SERIAL,
205 		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
206 			MT_QUIRK_ALWAYS_VALID,
207 		.sn_move = 4096,
208 		.sn_pressure = 32,
209 	},
210 	{ .name = MT_CLS_TOPSEED,
211 		.quirks = MT_QUIRK_ALWAYS_VALID,
212 		.is_indirect = true,
213 		.maxcontacts = 2,
214 	},
215 	{ .name = MT_CLS_PANASONIC,
216 		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
217 		.maxcontacts = 4 },
218 
219 	{ }
220 };
221 
222 static ssize_t mt_show_quirks(struct device *dev,
223 			   struct device_attribute *attr,
224 			   char *buf)
225 {
226 	struct hid_device *hdev = container_of(dev, struct hid_device, dev);
227 	struct mt_device *td = hid_get_drvdata(hdev);
228 
229 	return sprintf(buf, "%u\n", td->mtclass.quirks);
230 }
231 
232 static ssize_t mt_set_quirks(struct device *dev,
233 			  struct device_attribute *attr,
234 			  const char *buf, size_t count)
235 {
236 	struct hid_device *hdev = container_of(dev, struct hid_device, dev);
237 	struct mt_device *td = hid_get_drvdata(hdev);
238 
239 	unsigned long val;
240 
241 	if (kstrtoul(buf, 0, &val))
242 		return -EINVAL;
243 
244 	td->mtclass.quirks = val;
245 
246 	return count;
247 }
248 
249 static DEVICE_ATTR(quirks, S_IWUSR | S_IRUGO, mt_show_quirks, mt_set_quirks);
250 
251 static struct attribute *sysfs_attrs[] = {
252 	&dev_attr_quirks.attr,
253 	NULL
254 };
255 
256 static struct attribute_group mt_attribute_group = {
257 	.attrs = sysfs_attrs
258 };
259 
260 static void mt_feature_mapping(struct hid_device *hdev,
261 		struct hid_field *field, struct hid_usage *usage)
262 {
263 	struct mt_device *td = hid_get_drvdata(hdev);
264 	int i;
265 
266 	switch (usage->hid) {
267 	case HID_DG_INPUTMODE:
268 		td->inputmode = field->report->id;
269 		td->inputmode_index = 0; /* has to be updated below */
270 
271 		for (i=0; i < field->maxusage; i++) {
272 			if (field->usage[i].hid == usage->hid) {
273 				td->inputmode_index = i;
274 				break;
275 			}
276 		}
277 
278 		break;
279 	case HID_DG_CONTACTMAX:
280 		td->maxcontact_report_id = field->report->id;
281 		td->maxcontacts = field->value[0];
282 		if (td->mtclass.maxcontacts)
283 			/* check if the maxcontacts is given by the class */
284 			td->maxcontacts = td->mtclass.maxcontacts;
285 
286 		break;
287 	}
288 }
289 
290 static void set_abs(struct input_dev *input, unsigned int code,
291 		struct hid_field *field, int snratio)
292 {
293 	int fmin = field->logical_minimum;
294 	int fmax = field->logical_maximum;
295 	int fuzz = snratio ? (fmax - fmin) / snratio : 0;
296 	input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
297 }
298 
299 static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
300 		struct hid_input *hi)
301 {
302 	struct mt_fields *f = td->fields;
303 
304 	if (f->length >= HID_MAX_FIELDS)
305 		return;
306 
307 	f->usages[f->length++] = usage->hid;
308 }
309 
310 static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
311 		struct hid_field *field, struct hid_usage *usage,
312 		unsigned long **bit, int *max)
313 {
314 	struct mt_device *td = hid_get_drvdata(hdev);
315 	struct mt_class *cls = &td->mtclass;
316 	int code;
317 
318 	/* Only map fields from TouchScreen or TouchPad collections.
319 	* We need to ignore fields that belong to other collections
320 	* such as Mouse that might have the same GenericDesktop usages. */
321 	if (field->application == HID_DG_TOUCHSCREEN)
322 		set_bit(INPUT_PROP_DIRECT, hi->input->propbit);
323 	else if (field->application != HID_DG_TOUCHPAD)
324 		return 0;
325 
326 	/* In case of an indirect device (touchpad), we need to add
327 	 * specific BTN_TOOL_* to be handled by the synaptics xorg
328 	 * driver.
329 	 * We also consider that touchscreens providing buttons are touchpads.
330 	 */
331 	if (field->application == HID_DG_TOUCHPAD ||
332 	    (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON ||
333 	    cls->is_indirect) {
334 		set_bit(INPUT_PROP_POINTER, hi->input->propbit);
335 		set_bit(BTN_TOOL_FINGER, hi->input->keybit);
336 		set_bit(BTN_TOOL_DOUBLETAP, hi->input->keybit);
337 		set_bit(BTN_TOOL_TRIPLETAP, hi->input->keybit);
338 		set_bit(BTN_TOOL_QUADTAP, hi->input->keybit);
339 	}
340 
341 	/* eGalax devices provide a Digitizer.Stylus input which overrides
342 	 * the correct Digitizers.Finger X/Y ranges.
343 	 * Let's just ignore this input. */
344 	if (field->physical == HID_DG_STYLUS)
345 		return -1;
346 
347 	switch (usage->hid & HID_USAGE_PAGE) {
348 
349 	case HID_UP_GENDESK:
350 		switch (usage->hid) {
351 		case HID_GD_X:
352 			hid_map_usage(hi, usage, bit, max,
353 					EV_ABS, ABS_MT_POSITION_X);
354 			set_abs(hi->input, ABS_MT_POSITION_X, field,
355 				cls->sn_move);
356 			/* touchscreen emulation */
357 			set_abs(hi->input, ABS_X, field, cls->sn_move);
358 			mt_store_field(usage, td, hi);
359 			td->last_field_index = field->index;
360 			return 1;
361 		case HID_GD_Y:
362 			hid_map_usage(hi, usage, bit, max,
363 					EV_ABS, ABS_MT_POSITION_Y);
364 			set_abs(hi->input, ABS_MT_POSITION_Y, field,
365 				cls->sn_move);
366 			/* touchscreen emulation */
367 			set_abs(hi->input, ABS_Y, field, cls->sn_move);
368 			mt_store_field(usage, td, hi);
369 			td->last_field_index = field->index;
370 			return 1;
371 		}
372 		return 0;
373 
374 	case HID_UP_DIGITIZER:
375 		switch (usage->hid) {
376 		case HID_DG_INRANGE:
377 			mt_store_field(usage, td, hi);
378 			td->last_field_index = field->index;
379 			return 1;
380 		case HID_DG_CONFIDENCE:
381 			mt_store_field(usage, td, hi);
382 			td->last_field_index = field->index;
383 			return 1;
384 		case HID_DG_TIPSWITCH:
385 			hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
386 			input_set_capability(hi->input, EV_KEY, BTN_TOUCH);
387 			mt_store_field(usage, td, hi);
388 			td->last_field_index = field->index;
389 			return 1;
390 		case HID_DG_CONTACTID:
391 			if (!td->maxcontacts)
392 				td->maxcontacts = MT_DEFAULT_MAXCONTACT;
393 			input_mt_init_slots(hi->input, td->maxcontacts);
394 			mt_store_field(usage, td, hi);
395 			td->last_field_index = field->index;
396 			td->touches_by_report++;
397 			return 1;
398 		case HID_DG_WIDTH:
399 			hid_map_usage(hi, usage, bit, max,
400 					EV_ABS, ABS_MT_TOUCH_MAJOR);
401 			set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
402 				cls->sn_width);
403 			mt_store_field(usage, td, hi);
404 			td->last_field_index = field->index;
405 			return 1;
406 		case HID_DG_HEIGHT:
407 			hid_map_usage(hi, usage, bit, max,
408 					EV_ABS, ABS_MT_TOUCH_MINOR);
409 			set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
410 				cls->sn_height);
411 			input_set_abs_params(hi->input,
412 					ABS_MT_ORIENTATION, 0, 1, 0, 0);
413 			mt_store_field(usage, td, hi);
414 			td->last_field_index = field->index;
415 			return 1;
416 		case HID_DG_TIPPRESSURE:
417 			hid_map_usage(hi, usage, bit, max,
418 					EV_ABS, ABS_MT_PRESSURE);
419 			set_abs(hi->input, ABS_MT_PRESSURE, field,
420 				cls->sn_pressure);
421 			/* touchscreen emulation */
422 			set_abs(hi->input, ABS_PRESSURE, field,
423 				cls->sn_pressure);
424 			mt_store_field(usage, td, hi);
425 			td->last_field_index = field->index;
426 			return 1;
427 		case HID_DG_CONTACTCOUNT:
428 			td->last_field_index = field->index;
429 			return 1;
430 		case HID_DG_CONTACTMAX:
431 			/* we don't set td->last_slot_field as contactcount and
432 			 * contact max are global to the report */
433 			td->last_field_index = field->index;
434 			return -1;
435 		}
436 		case HID_DG_TOUCH:
437 			/* Legacy devices use TIPSWITCH and not TOUCH.
438 			 * Let's just ignore this field. */
439 			return -1;
440 		/* let hid-input decide for the others */
441 		return 0;
442 
443 	case HID_UP_BUTTON:
444 		code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
445 		hid_map_usage(hi, usage, bit, max, EV_KEY, code);
446 		input_set_capability(hi->input, EV_KEY, code);
447 		return 1;
448 
449 	case 0xff000000:
450 		/* we do not want to map these: no input-oriented meaning */
451 		return -1;
452 	}
453 
454 	return 0;
455 }
456 
457 static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
458 		struct hid_field *field, struct hid_usage *usage,
459 		unsigned long **bit, int *max)
460 {
461 	if (usage->type == EV_KEY || usage->type == EV_ABS)
462 		set_bit(usage->type, hi->input->evbit);
463 
464 	return -1;
465 }
466 
467 static int mt_compute_slot(struct mt_device *td)
468 {
469 	__s32 quirks = td->mtclass.quirks;
470 
471 	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
472 		return td->curdata.contactid;
473 
474 	if (quirks & MT_QUIRK_CYPRESS)
475 		return cypress_compute_slot(td);
476 
477 	if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
478 		return td->num_received;
479 
480 	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
481 		return td->curdata.contactid - 1;
482 
483 	return find_slot_from_contactid(td);
484 }
485 
486 /*
487  * this function is called when a whole contact has been processed,
488  * so that it can assign it to a slot and store the data there
489  */
490 static void mt_complete_slot(struct mt_device *td)
491 {
492 	td->curdata.seen_in_this_frame = true;
493 	if (td->curvalid) {
494 		int slotnum = mt_compute_slot(td);
495 
496 		if (slotnum >= 0 && slotnum < td->maxcontacts)
497 			td->slots[slotnum] = td->curdata;
498 	}
499 	td->num_received++;
500 }
501 
502 
503 /*
504  * this function is called when a whole packet has been received and processed,
505  * so that it can decide what to send to the input layer.
506  */
507 static void mt_emit_event(struct mt_device *td, struct input_dev *input)
508 {
509 	int i;
510 
511 	for (i = 0; i < td->maxcontacts; ++i) {
512 		struct mt_slot *s = &(td->slots[i]);
513 		if ((td->mtclass.quirks & MT_QUIRK_NOT_SEEN_MEANS_UP) &&
514 			!s->seen_in_this_frame) {
515 			s->touch_state = false;
516 		}
517 
518 		input_mt_slot(input, i);
519 		input_mt_report_slot_state(input, MT_TOOL_FINGER,
520 			s->touch_state);
521 		if (s->touch_state) {
522 			/* this finger is on the screen */
523 			int wide = (s->w > s->h);
524 			/* divided by two to match visual scale of touch */
525 			int major = max(s->w, s->h) >> 1;
526 			int minor = min(s->w, s->h) >> 1;
527 
528 			input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);
529 			input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);
530 			input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
531 			input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
532 			input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
533 			input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
534 		}
535 		s->seen_in_this_frame = false;
536 
537 	}
538 
539 	input_mt_report_pointer_emulation(input, true);
540 	input_sync(input);
541 	td->num_received = 0;
542 }
543 
544 
545 
546 static int mt_event(struct hid_device *hid, struct hid_field *field,
547 				struct hid_usage *usage, __s32 value)
548 {
549 	struct mt_device *td = hid_get_drvdata(hid);
550 	__s32 quirks = td->mtclass.quirks;
551 
552 	if (hid->claimed & HID_CLAIMED_INPUT && td->slots) {
553 		switch (usage->hid) {
554 		case HID_DG_INRANGE:
555 			if (quirks & MT_QUIRK_ALWAYS_VALID)
556 				td->curvalid = true;
557 			else if (quirks & MT_QUIRK_VALID_IS_INRANGE)
558 				td->curvalid = value;
559 			break;
560 		case HID_DG_TIPSWITCH:
561 			if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
562 				td->curvalid = value;
563 			td->curdata.touch_state = value;
564 			break;
565 		case HID_DG_CONFIDENCE:
566 			if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
567 				td->curvalid = value;
568 			break;
569 		case HID_DG_CONTACTID:
570 			td->curdata.contactid = value;
571 			break;
572 		case HID_DG_TIPPRESSURE:
573 			td->curdata.p = value;
574 			break;
575 		case HID_GD_X:
576 			td->curdata.x = value;
577 			break;
578 		case HID_GD_Y:
579 			td->curdata.y = value;
580 			break;
581 		case HID_DG_WIDTH:
582 			td->curdata.w = value;
583 			break;
584 		case HID_DG_HEIGHT:
585 			td->curdata.h = value;
586 			break;
587 		case HID_DG_CONTACTCOUNT:
588 			/*
589 			 * Includes multi-packet support where subsequent
590 			 * packets are sent with zero contactcount.
591 			 */
592 			if (value)
593 				td->num_expected = value;
594 			break;
595 		case HID_DG_TOUCH:
596 			/* do nothing */
597 			break;
598 
599 		default:
600 			/* fallback to the generic hidinput handling */
601 			return 0;
602 		}
603 
604 		if (usage->hid == td->last_slot_field)
605 			mt_complete_slot(td);
606 
607 		if (field->index == td->last_field_index
608 			&& td->num_received >= td->num_expected)
609 			mt_emit_event(td, field->hidinput->input);
610 
611 	}
612 
613 	/* we have handled the hidinput part, now remains hiddev */
614 	if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
615 		hid->hiddev_hid_event(hid, field, usage, value);
616 
617 	return 1;
618 }
619 
620 static void mt_set_input_mode(struct hid_device *hdev)
621 {
622 	struct mt_device *td = hid_get_drvdata(hdev);
623 	struct hid_report *r;
624 	struct hid_report_enum *re;
625 
626 	if (td->inputmode < 0)
627 		return;
628 
629 	re = &(hdev->report_enum[HID_FEATURE_REPORT]);
630 	r = re->report_id_hash[td->inputmode];
631 	if (r) {
632 		r->field[0]->value[td->inputmode_index] = 0x02;
633 		usbhid_submit_report(hdev, r, USB_DIR_OUT);
634 	}
635 }
636 
637 static void mt_set_maxcontacts(struct hid_device *hdev)
638 {
639 	struct mt_device *td = hid_get_drvdata(hdev);
640 	struct hid_report *r;
641 	struct hid_report_enum *re;
642 	int fieldmax, max;
643 
644 	if (td->maxcontact_report_id < 0)
645 		return;
646 
647 	if (!td->mtclass.maxcontacts)
648 		return;
649 
650 	re = &hdev->report_enum[HID_FEATURE_REPORT];
651 	r = re->report_id_hash[td->maxcontact_report_id];
652 	if (r) {
653 		max = td->mtclass.maxcontacts;
654 		fieldmax = r->field[0]->logical_maximum;
655 		max = min(fieldmax, max);
656 		if (r->field[0]->value[0] != max) {
657 			r->field[0]->value[0] = max;
658 			usbhid_submit_report(hdev, r, USB_DIR_OUT);
659 		}
660 	}
661 }
662 
663 static void mt_post_parse_default_settings(struct mt_device *td)
664 {
665 	__s32 quirks = td->mtclass.quirks;
666 
667 	/* unknown serial device needs special quirks */
668 	if (td->touches_by_report == 1) {
669 		quirks |= MT_QUIRK_ALWAYS_VALID;
670 		quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
671 		quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
672 		quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
673 	}
674 
675 	td->mtclass.quirks = quirks;
676 }
677 
678 static void mt_post_parse(struct mt_device *td)
679 {
680 	struct mt_fields *f = td->fields;
681 
682 	if (td->touches_by_report > 0) {
683 		int field_count_per_touch = f->length / td->touches_by_report;
684 		td->last_slot_field = f->usages[field_count_per_touch - 1];
685 	}
686 }
687 
688 static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
689 {
690 	int ret, i;
691 	struct mt_device *td;
692 	struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */
693 
694 	if (id) {
695 		for (i = 0; mt_classes[i].name ; i++) {
696 			if (id->driver_data == mt_classes[i].name) {
697 				mtclass = &(mt_classes[i]);
698 				break;
699 			}
700 		}
701 	}
702 
703 	/* This allows the driver to correctly support devices
704 	 * that emit events over several HID messages.
705 	 */
706 	hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
707 
708 	td = kzalloc(sizeof(struct mt_device), GFP_KERNEL);
709 	if (!td) {
710 		dev_err(&hdev->dev, "cannot allocate multitouch data\n");
711 		return -ENOMEM;
712 	}
713 	td->mtclass = *mtclass;
714 	td->inputmode = -1;
715 	td->maxcontact_report_id = -1;
716 	hid_set_drvdata(hdev, td);
717 
718 	td->fields = kzalloc(sizeof(struct mt_fields), GFP_KERNEL);
719 	if (!td->fields) {
720 		dev_err(&hdev->dev, "cannot allocate multitouch fields data\n");
721 		ret = -ENOMEM;
722 		goto fail;
723 	}
724 
725 	ret = hid_parse(hdev);
726 	if (ret != 0)
727 		goto fail;
728 
729 	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
730 	if (ret)
731 		goto fail;
732 
733 	mt_post_parse(td);
734 
735 	if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
736 		mt_post_parse_default_settings(td);
737 
738 	td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot),
739 				GFP_KERNEL);
740 	if (!td->slots) {
741 		dev_err(&hdev->dev, "cannot allocate multitouch slots\n");
742 		hid_hw_stop(hdev);
743 		ret = -ENOMEM;
744 		goto fail;
745 	}
746 
747 	ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
748 
749 	mt_set_maxcontacts(hdev);
750 	mt_set_input_mode(hdev);
751 
752 	kfree(td->fields);
753 	td->fields = NULL;
754 
755 	return 0;
756 
757 fail:
758 	kfree(td->fields);
759 	kfree(td);
760 	return ret;
761 }
762 
763 #ifdef CONFIG_PM
764 static int mt_reset_resume(struct hid_device *hdev)
765 {
766 	mt_set_maxcontacts(hdev);
767 	mt_set_input_mode(hdev);
768 	return 0;
769 }
770 #endif
771 
772 static void mt_remove(struct hid_device *hdev)
773 {
774 	struct mt_device *td = hid_get_drvdata(hdev);
775 	sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
776 	hid_hw_stop(hdev);
777 	kfree(td->slots);
778 	kfree(td);
779 	hid_set_drvdata(hdev, NULL);
780 }
781 
782 static const struct hid_device_id mt_devices[] = {
783 
784 	/* 3M panels */
785 	{ .driver_data = MT_CLS_3M,
786 		MT_USB_DEVICE(USB_VENDOR_ID_3M,
787 			USB_DEVICE_ID_3M1968) },
788 	{ .driver_data = MT_CLS_3M,
789 		MT_USB_DEVICE(USB_VENDOR_ID_3M,
790 			USB_DEVICE_ID_3M2256) },
791 	{ .driver_data = MT_CLS_3M,
792 		MT_USB_DEVICE(USB_VENDOR_ID_3M,
793 			USB_DEVICE_ID_3M3266) },
794 
795 	/* ActionStar panels */
796 	{ .driver_data = MT_CLS_DEFAULT,
797 		MT_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR,
798 			USB_DEVICE_ID_ACTIONSTAR_1011) },
799 
800 	/* Atmel panels */
801 	{ .driver_data = MT_CLS_SERIAL,
802 		MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
803 			USB_DEVICE_ID_ATMEL_MULTITOUCH) },
804 	{ .driver_data = MT_CLS_SERIAL,
805 		MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
806 			USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
807 
808 	/* Baanto multitouch devices */
809 	{ .driver_data = MT_CLS_DEFAULT,
810 		MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
811 			USB_DEVICE_ID_BAANTO_MT_190W2) },
812 	/* Cando panels */
813 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
814 		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
815 			USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
816 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
817 		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
818 			USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) },
819 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
820 		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
821 			USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) },
822 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
823 		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
824 			USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
825 
826 	/* Chunghwa Telecom touch panels */
827 	{  .driver_data = MT_CLS_DEFAULT,
828 		MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
829 			USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },
830 
831 	/* CVTouch panels */
832 	{ .driver_data = MT_CLS_DEFAULT,
833 		MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
834 			USB_DEVICE_ID_CVTOUCH_SCREEN) },
835 
836 	/* Cypress panel */
837 	{ .driver_data = MT_CLS_CYPRESS,
838 		HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS,
839 			USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
840 
841 	/* eGalax devices (resistive) */
842 	{ .driver_data = MT_CLS_EGALAX,
843 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
844 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
845 	{ .driver_data = MT_CLS_EGALAX,
846 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
847 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
848 
849 	/* eGalax devices (capacitive) */
850 	{ .driver_data = MT_CLS_EGALAX,
851 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
852 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
853 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
854 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
855 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
856 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
857 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
858 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
859 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
860 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
861 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
862 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
863 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
864 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
865 	{ .driver_data = MT_CLS_EGALAX,
866 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
867 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
868 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
869 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
870 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
871 	{ .driver_data = MT_CLS_EGALAX,
872 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
873 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
874 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
875 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
876 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
877 	{ .driver_data = MT_CLS_EGALAX,
878 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
879 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
880 	{ .driver_data = MT_CLS_EGALAX,
881 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
882 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
883 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
884 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
885 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
886 	{ .driver_data = MT_CLS_EGALAX_SERIAL,
887 		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
888 			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
889 
890 	/* Elo TouchSystems IntelliTouch Plus panel */
891 	{ .driver_data = MT_CLS_DUAL_NSMU_CONTACTID,
892 		MT_USB_DEVICE(USB_VENDOR_ID_ELO,
893 			USB_DEVICE_ID_ELO_TS2515) },
894 
895 	/* GeneralTouch panel */
896 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
897 		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
898 			USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
899 
900 	/* Gametel game controller */
901 	{ .driver_data = MT_CLS_DEFAULT,
902 		MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
903 			USB_DEVICE_ID_GAMETEL_MT_MODE) },
904 
905 	/* GoodTouch panels */
906 	{ .driver_data = MT_CLS_DEFAULT,
907 		MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
908 			USB_DEVICE_ID_GOODTOUCH_000f) },
909 
910 	/* Hanvon panels */
911 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
912 		MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
913 			USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
914 
915 	/* Ideacom panel */
916 	{ .driver_data = MT_CLS_SERIAL,
917 		MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
918 			USB_DEVICE_ID_IDEACOM_IDC6650) },
919 	{ .driver_data = MT_CLS_SERIAL,
920 		MT_USB_DEVICE(USB_VENDOR_ID_IDEACOM,
921 			USB_DEVICE_ID_IDEACOM_IDC6651) },
922 
923 	/* Ilitek dual touch panel */
924 	{  .driver_data = MT_CLS_DEFAULT,
925 		MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
926 			USB_DEVICE_ID_ILITEK_MULTITOUCH) },
927 
928 	/* IRTOUCH panels */
929 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
930 		MT_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS,
931 			USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
932 
933 	/* LG Display panels */
934 	{ .driver_data = MT_CLS_DEFAULT,
935 		MT_USB_DEVICE(USB_VENDOR_ID_LG,
936 			USB_DEVICE_ID_LG_MULTITOUCH) },
937 
938 	/* Lumio panels */
939 	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
940 		MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
941 			USB_DEVICE_ID_CRYSTALTOUCH) },
942 	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
943 		MT_USB_DEVICE(USB_VENDOR_ID_LUMIO,
944 			USB_DEVICE_ID_CRYSTALTOUCH_DUAL) },
945 
946 	/* MosArt panels */
947 	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
948 		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
949 			USB_DEVICE_ID_ASUS_T91MT)},
950 	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
951 		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
952 			USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
953 	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
954 		MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
955 			USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
956 
957 	/* Panasonic panels */
958 	{ .driver_data = MT_CLS_PANASONIC,
959 		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
960 			USB_DEVICE_ID_PANABOARD_UBT780) },
961 	{ .driver_data = MT_CLS_PANASONIC,
962 		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
963 			USB_DEVICE_ID_PANABOARD_UBT880) },
964 
965 	/* Novatek Panel */
966 	{ .driver_data = MT_CLS_DEFAULT,
967 		MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
968 			USB_DEVICE_ID_NOVATEK_PCT) },
969 
970 	/* PenMount panels */
971 	{ .driver_data = MT_CLS_CONFIDENCE,
972 		MT_USB_DEVICE(USB_VENDOR_ID_PENMOUNT,
973 			USB_DEVICE_ID_PENMOUNT_PCI) },
974 
975 	/* PixArt optical touch screen */
976 	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
977 		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
978 			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
979 	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
980 		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
981 			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
982 	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
983 		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
984 			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
985 
986 	/* PixCir-based panels */
987 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
988 		MT_USB_DEVICE(USB_VENDOR_ID_HANVON,
989 			USB_DEVICE_ID_HANVON_MULTITOUCH) },
990 	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
991 		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
992 			USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
993 
994 	/* Quanta-based panels */
995 	{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
996 		MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
997 			USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
998 	{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
999 		MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1000 			USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1001 	{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1002 		MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1003 			USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008) },
1004 
1005 	/* Stantum panels */
1006 	{ .driver_data = MT_CLS_CONFIDENCE,
1007 		MT_USB_DEVICE(USB_VENDOR_ID_STANTUM,
1008 			USB_DEVICE_ID_MTP)},
1009 	{ .driver_data = MT_CLS_CONFIDENCE,
1010 		MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1011 			USB_DEVICE_ID_MTP_STM)},
1012 	{ .driver_data = MT_CLS_CONFIDENCE,
1013 		MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX,
1014 			USB_DEVICE_ID_MTP_SITRONIX)},
1015 
1016 	/* TopSeed panels */
1017 	{ .driver_data = MT_CLS_TOPSEED,
1018 		MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
1019 			USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },
1020 
1021 	/* Touch International panels */
1022 	{ .driver_data = MT_CLS_DEFAULT,
1023 		MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
1024 			USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
1025 
1026 	/* Unitec panels */
1027 	{ .driver_data = MT_CLS_DEFAULT,
1028 		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1029 			USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
1030 	{ .driver_data = MT_CLS_DEFAULT,
1031 		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1032 			USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1033 	/* XAT */
1034 	{ .driver_data = MT_CLS_DEFAULT,
1035 		MT_USB_DEVICE(USB_VENDOR_ID_XAT,
1036 			USB_DEVICE_ID_XAT_CSR) },
1037 
1038 	/* Xiroku */
1039 	{ .driver_data = MT_CLS_DEFAULT,
1040 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1041 			USB_DEVICE_ID_XIROKU_SPX) },
1042 	{ .driver_data = MT_CLS_DEFAULT,
1043 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1044 			USB_DEVICE_ID_XIROKU_MPX) },
1045 	{ .driver_data = MT_CLS_DEFAULT,
1046 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1047 			USB_DEVICE_ID_XIROKU_CSR) },
1048 	{ .driver_data = MT_CLS_DEFAULT,
1049 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1050 			USB_DEVICE_ID_XIROKU_SPX1) },
1051 	{ .driver_data = MT_CLS_DEFAULT,
1052 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1053 			USB_DEVICE_ID_XIROKU_MPX1) },
1054 	{ .driver_data = MT_CLS_DEFAULT,
1055 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1056 			USB_DEVICE_ID_XIROKU_CSR1) },
1057 	{ .driver_data = MT_CLS_DEFAULT,
1058 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1059 			USB_DEVICE_ID_XIROKU_SPX2) },
1060 	{ .driver_data = MT_CLS_DEFAULT,
1061 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1062 			USB_DEVICE_ID_XIROKU_MPX2) },
1063 	{ .driver_data = MT_CLS_DEFAULT,
1064 		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1065 			USB_DEVICE_ID_XIROKU_CSR2) },
1066 
1067 	/* Zytronic panels */
1068 	{ .driver_data = MT_CLS_SERIAL,
1069 		MT_USB_DEVICE(USB_VENDOR_ID_ZYTRONIC,
1070 			USB_DEVICE_ID_ZYTRONIC_ZXY100) },
1071 
1072 	/* Generic MT device */
1073 	{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1074 	{ }
1075 };
1076 MODULE_DEVICE_TABLE(hid, mt_devices);
1077 
1078 static const struct hid_usage_id mt_grabbed_usages[] = {
1079 	{ HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
1080 	{ HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
1081 };
1082 
1083 static struct hid_driver mt_driver = {
1084 	.name = "hid-multitouch",
1085 	.id_table = mt_devices,
1086 	.probe = mt_probe,
1087 	.remove = mt_remove,
1088 	.input_mapping = mt_input_mapping,
1089 	.input_mapped = mt_input_mapped,
1090 	.feature_mapping = mt_feature_mapping,
1091 	.usage_table = mt_grabbed_usages,
1092 	.event = mt_event,
1093 #ifdef CONFIG_PM
1094 	.reset_resume = mt_reset_resume,
1095 #endif
1096 };
1097 
1098 static int __init mt_init(void)
1099 {
1100 	return hid_register_driver(&mt_driver);
1101 }
1102 
1103 static void __exit mt_exit(void)
1104 {
1105 	hid_unregister_driver(&mt_driver);
1106 }
1107 
1108 module_init(mt_init);
1109 module_exit(mt_exit);
1110