hid-multitouch.c 45.9 KB
Newer Older
1 2 3
/*
 *  HID driver for multitouch panels
 *
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 10 11 12 13 14
 *  This code is partly based on hid-egalax.c:
 *
 *  Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
 *  Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
 *  Copyright (c) 2010 Canonical, Ltd.
 *
15 16 17 18 19 20
 *  This code is partly based on hid-3m-pct.c:
 *
 *  Copyright (c) 2009-2010 Stephane Chatty <chatty@enac.fr>
 *  Copyright (c) 2010      Henrik Rydberg <rydberg@euromail.se>
 *  Copyright (c) 2010      Canonical, Ltd.
 *
21 22 23 24 25 26 27 28 29
 */

/*
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 2 of the License, or (at your option)
 * any later version.
 */

30 31 32 33 34 35 36 37 38 39 40
/*
 * This driver is regularly tested thanks to the tool hid-test[1].
 * This tool relies on hid-replay[2] and a database of hid devices[3].
 * Please run these regression tests before patching this module so that
 * your patch won't break existing known devices.
 *
 * [1] https://github.com/bentiss/hid-test
 * [2] https://github.com/bentiss/hid-replay
 * [3] https://github.com/bentiss/hid-devices
 */

41 42 43 44 45
#include <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/input/mt.h>
46
#include <linux/string.h>
47 48 49


MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
50
MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
51 52 53 54 55 56 57 58
MODULE_DESCRIPTION("HID multitouch panels");
MODULE_LICENSE("GPL");

#include "hid-ids.h"

/* quirks to control the device */
#define MT_QUIRK_NOT_SEEN_MEANS_UP	(1 << 0)
#define MT_QUIRK_SLOT_IS_CONTACTID	(1 << 1)
59
#define MT_QUIRK_CYPRESS		(1 << 2)
60
#define MT_QUIRK_SLOT_IS_CONTACTNUMBER	(1 << 3)
61 62 63
#define MT_QUIRK_ALWAYS_VALID		(1 << 4)
#define MT_QUIRK_VALID_IS_INRANGE	(1 << 5)
#define MT_QUIRK_VALID_IS_CONFIDENCE	(1 << 6)
64
#define MT_QUIRK_CONFIDENCE		(1 << 7)
65
#define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE	(1 << 8)
66
#define MT_QUIRK_NO_AREA		(1 << 9)
67
#define MT_QUIRK_IGNORE_DUPLICATES	(1 << 10)
68
#define MT_QUIRK_HOVERING		(1 << 11)
69
#define MT_QUIRK_CONTACT_CNT_ACCURATE	(1 << 12)
70
#define MT_QUIRK_FORCE_GET_FEATURE	(1 << 13)
71
#define MT_QUIRK_FIX_CONST_CONTACT_ID	(1 << 14)
72
#define MT_QUIRK_TOUCH_SIZE_SCALING	(1 << 15)
73

74 75 76
#define MT_INPUTMODE_TOUCHSCREEN	0x02
#define MT_INPUTMODE_TOUCHPAD		0x03

77 78
#define MT_BUTTONTYPE_CLICKPAD		0

79
struct mt_slot {
80
	__s32 x, y, cx, cy, p, w, h;
81 82
	__s32 contactid;	/* the device ContactID assigned to this slot */
	bool touch_state;	/* is the touch valid? */
83
	bool inrange_state;	/* is the finger in proximity of the sensor? */
84
	bool confidence_state;  /* is the touch made by a finger? */
85 86
};

87 88 89 90 91 92 93 94
struct mt_class {
	__s32 name;	/* MT_CLS */
	__s32 quirks;
	__s32 sn_move;	/* Signal/noise ratio for move events */
	__s32 sn_width;	/* Signal/noise ratio for width events */
	__s32 sn_height;	/* Signal/noise ratio for height events */
	__s32 sn_pressure;	/* Signal/noise ratio for pressure events */
	__u8 maxcontacts;
95
	bool is_indirect;	/* true for touchpads */
96
	bool export_all_inputs;	/* do not ignore mouse, keyboards, etc... */
97 98
};

99 100 101 102 103
struct mt_fields {
	unsigned usages[HID_MAX_FIELDS];
	unsigned int length;
};

104 105
struct mt_device {
	struct mt_slot curdata;	/* placeholder of incoming data */
106
	struct mt_class mtclass;	/* our mt device class */
107 108
	struct mt_fields *fields;	/* temporary placeholder for storing the
					   multitouch fields */
109 110
	int cc_index;	/* contact count field index in the report */
	int cc_value_index;	/* contact count value index in the field */
111
	unsigned last_slot_field;	/* the last field of a slot */
112
	unsigned mt_report_id;	/* the report ID of the multitouch device */
113
	unsigned long initial_quirks;	/* initial quirks state */
114 115 116
	__s16 inputmode;	/* InputMode HID feature, -1 if non-existent */
	__s16 inputmode_index;	/* InputMode HID feature index in the report */
	__s16 maxcontact_report_id;	/* Maximum Contact Number HID feature,
117
				   -1 if non-existent */
118
	__u8 inputmode_value;  /* InputMode HID feature value */
119 120
	__u8 num_received;	/* how many contacts we received */
	__u8 num_expected;	/* expected last contact index */
121
	__u8 maxcontacts;
122 123 124
	__u8 touches_by_report;	/* how many touches are present in one report:
				* 1 means we should use a serial protocol
				* > 1 means hybrid (multitouch) protocol */
125
	__u8 buttons_count;	/* number of physical buttons per touchpad */
126
	bool is_buttonpad;	/* is this device a button pad? */
127
	bool serial_maybe;	/* need to check for serial protocol */
128
	bool curvalid;		/* is the current contact valid? */
129
	unsigned mt_flags;	/* flags to pass to input-mt */
130 131
};

132 133 134
static void mt_post_parse_default_settings(struct mt_device *td);
static void mt_post_parse(struct mt_device *td);

135
/* classes of device behavior */
136 137
#define MT_CLS_DEFAULT				0x0001

138 139
#define MT_CLS_SERIAL				0x0002
#define MT_CLS_CONFIDENCE			0x0003
140 141 142 143
#define MT_CLS_CONFIDENCE_CONTACT_ID		0x0004
#define MT_CLS_CONFIDENCE_MINUS_ONE		0x0005
#define MT_CLS_DUAL_INRANGE_CONTACTID		0x0006
#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER	0x0007
144
/* reserved					0x0008 */
145
#define MT_CLS_INRANGE_CONTACTNUMBER		0x0009
146
#define MT_CLS_NSMU				0x000a
147 148
/* reserved					0x0010 */
/* reserved					0x0011 */
149
#define MT_CLS_WIN_8				0x0012
150
#define MT_CLS_EXPORT_ALL_INPUTS		0x0013
151
#define MT_CLS_WIN_8_DUAL			0x0014
152 153 154

/* vendor specific classes */
#define MT_CLS_3M				0x0101
155
/* reserved					0x0102 */
156
#define MT_CLS_EGALAX				0x0103
157
#define MT_CLS_EGALAX_SERIAL			0x0104
158
#define MT_CLS_TOPSEED				0x0105
159
#define MT_CLS_PANASONIC			0x0106
160
#define MT_CLS_FLATFROG				0x0107
161 162
#define MT_CLS_GENERALTOUCH_TWOFINGERS		0x0108
#define MT_CLS_GENERALTOUCH_PWT_TENFINGERS	0x0109
163
#define MT_CLS_LG				0x010a
164
#define MT_CLS_VTL				0x0110
165
#define MT_CLS_GOOGLE				0x0111
166

167
#define MT_DEFAULT_MAXCONTACT	10
168
#define MT_MAX_MAXCONTACT	250
169

170 171 172
#define MT_USB_DEVICE(v, p)	HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)
#define MT_BT_DEVICE(v, p)	HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)

173 174 175 176 177
/*
 * these device-dependent functions determine what slot corresponds
 * to a valid contact that was just read.
 */

178 179 180 181 182 183 184 185
static int cypress_compute_slot(struct mt_device *td)
{
	if (td->curdata.contactid != 0 || td->num_received == 0)
		return td->curdata.contactid;
	else
		return -1;
}

186
static struct mt_class mt_classes[] = {
187
	{ .name = MT_CLS_DEFAULT,
188 189 190
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE },
	{ .name = MT_CLS_NSMU,
191
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
192 193
	{ .name = MT_CLS_SERIAL,
		.quirks = MT_QUIRK_ALWAYS_VALID},
194 195
	{ .name = MT_CLS_CONFIDENCE,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
196 197 198
	{ .name = MT_CLS_CONFIDENCE_CONTACT_ID,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
			MT_QUIRK_SLOT_IS_CONTACTID },
199 200 201
	{ .name = MT_CLS_CONFIDENCE_MINUS_ONE,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
			MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
202
	{ .name = MT_CLS_DUAL_INRANGE_CONTACTID,
203 204 205
		.quirks = MT_QUIRK_VALID_IS_INRANGE |
			MT_QUIRK_SLOT_IS_CONTACTID,
		.maxcontacts = 2 },
206
	{ .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
207 208 209
		.quirks = MT_QUIRK_VALID_IS_INRANGE |
			MT_QUIRK_SLOT_IS_CONTACTNUMBER,
		.maxcontacts = 2 },
210 211 212
	{ .name = MT_CLS_INRANGE_CONTACTNUMBER,
		.quirks = MT_QUIRK_VALID_IS_INRANGE |
			MT_QUIRK_SLOT_IS_CONTACTNUMBER },
213 214 215 216 217
	{ .name = MT_CLS_WIN_8,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_IGNORE_DUPLICATES |
			MT_QUIRK_HOVERING |
			MT_QUIRK_CONTACT_CNT_ACCURATE },
218 219 220 221
	{ .name = MT_CLS_EXPORT_ALL_INPUTS,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE,
		.export_all_inputs = true },
222 223 224 225 226 227
	{ .name = MT_CLS_WIN_8_DUAL,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_IGNORE_DUPLICATES |
			MT_QUIRK_HOVERING |
			MT_QUIRK_CONTACT_CNT_ACCURATE,
		.export_all_inputs = true },
228 229 230 231 232 233

	/*
	 * vendor specific classes
	 */
	{ .name = MT_CLS_3M,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
234 235
			MT_QUIRK_SLOT_IS_CONTACTID |
			MT_QUIRK_TOUCH_SIZE_SCALING,
236 237
		.sn_move = 2048,
		.sn_width = 128,
238 239 240
		.sn_height = 128,
		.maxcontacts = 60,
	},
241 242
	{ .name = MT_CLS_EGALAX,
		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
243
			MT_QUIRK_VALID_IS_INRANGE,
244 245 246
		.sn_move = 4096,
		.sn_pressure = 32,
	},
247 248 249
	{ .name = MT_CLS_EGALAX_SERIAL,
		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
			MT_QUIRK_ALWAYS_VALID,
250 251 252
		.sn_move = 4096,
		.sn_pressure = 32,
	},
253 254 255 256 257
	{ .name = MT_CLS_TOPSEED,
		.quirks = MT_QUIRK_ALWAYS_VALID,
		.is_indirect = true,
		.maxcontacts = 2,
	},
258 259 260
	{ .name = MT_CLS_PANASONIC,
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
		.maxcontacts = 4 },
261 262 263
	{ .name	= MT_CLS_GENERALTOUCH_TWOFINGERS,
		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
			MT_QUIRK_VALID_IS_INRANGE |
264
			MT_QUIRK_SLOT_IS_CONTACTID,
265 266 267 268
		.maxcontacts = 2
	},
	{ .name	= MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
269
			MT_QUIRK_SLOT_IS_CONTACTID
270
	},
271

272 273 274 275 276 277
	{ .name = MT_CLS_FLATFROG,
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
			MT_QUIRK_NO_AREA,
		.sn_move = 2048,
		.maxcontacts = 40,
	},
278 279 280 281 282 283
	{ .name = MT_CLS_LG,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_FIX_CONST_CONTACT_ID |
			MT_QUIRK_IGNORE_DUPLICATES |
			MT_QUIRK_HOVERING |
			MT_QUIRK_CONTACT_CNT_ACCURATE },
284 285 286 287 288
	{ .name = MT_CLS_VTL,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE |
			MT_QUIRK_FORCE_GET_FEATURE,
	},
289 290 291 292 293 294
	{ .name = MT_CLS_GOOGLE,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE |
			MT_QUIRK_SLOT_IS_CONTACTID |
			MT_QUIRK_HOVERING
	},
295
	{ }
296 297
};

298 299 300 301
static ssize_t mt_show_quirks(struct device *dev,
			   struct device_attribute *attr,
			   char *buf)
{
G
Geliang Tang 已提交
302
	struct hid_device *hdev = to_hid_device(dev);
303 304 305 306 307 308 309 310 311
	struct mt_device *td = hid_get_drvdata(hdev);

	return sprintf(buf, "%u\n", td->mtclass.quirks);
}

static ssize_t mt_set_quirks(struct device *dev,
			  struct device_attribute *attr,
			  const char *buf, size_t count)
{
G
Geliang Tang 已提交
312
	struct hid_device *hdev = to_hid_device(dev);
313 314 315 316 317 318 319 320 321
	struct mt_device *td = hid_get_drvdata(hdev);

	unsigned long val;

	if (kstrtoul(buf, 0, &val))
		return -EINVAL;

	td->mtclass.quirks = val;

322
	if (td->cc_index < 0)
323 324
		td->mtclass.quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;

325 326 327 328 329 330 331 332 333 334 335 336 337 338
	return count;
}

static DEVICE_ATTR(quirks, S_IWUSR | S_IRUGO, mt_show_quirks, mt_set_quirks);

static struct attribute *sysfs_attrs[] = {
	&dev_attr_quirks.attr,
	NULL
};

static struct attribute_group mt_attribute_group = {
	.attrs = sysfs_attrs
};

339 340 341 342 343 344 345
static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)
{
	struct mt_device *td = hid_get_drvdata(hdev);
	int ret, size = hid_report_len(report);
	u8 *buf;

	/*
346 347
	 * Do not fetch the feature report if the device has been explicitly
	 * marked as non-capable.
348
	 */
349
	if (td->initial_quirks & HID_QUIRK_NO_INIT_REPORTS)
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
		return;

	buf = hid_alloc_report_buf(report, GFP_KERNEL);
	if (!buf)
		return;

	ret = hid_hw_raw_request(hdev, report->id, buf, size,
				 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
	if (ret < 0) {
		dev_warn(&hdev->dev, "failed to fetch feature %d\n",
			 report->id);
	} else {
		ret = hid_report_raw_event(hdev, HID_FEATURE_REPORT, buf,
					   size, 0);
		if (ret)
			dev_warn(&hdev->dev, "failed to report feature\n");
	}

	kfree(buf);
}

371
static void mt_feature_mapping(struct hid_device *hdev,
372 373
		struct hid_field *field, struct hid_usage *usage)
{
374 375 376 377
	struct mt_device *td = hid_get_drvdata(hdev);

	switch (usage->hid) {
	case HID_DG_INPUTMODE:
378 379 380 381
		/* Ignore if value index is out of bounds. */
		if (usage->usage_index >= field->report_count) {
			dev_err(&hdev->dev, "HID_DG_INPUTMODE out of range\n");
			break;
382 383
		}

384 385 386 387 388 389 390 391 392 393 394 395 396
		if (td->inputmode < 0) {
			td->inputmode = field->report->id;
			td->inputmode_index = usage->usage_index;
		} else {
			/*
			 * Some elan panels wrongly declare 2 input mode
			 * features, and silently ignore when we set the
			 * value in the second field. Skip the second feature
			 * and hope for the best.
			 */
			dev_info(&hdev->dev,
				 "Ignoring the extra HID_DG_INPUTMODE\n");
		}
397

398 399
		break;
	case HID_DG_CONTACTMAX:
400 401
		mt_get_feature(hdev, field->report);

402
		td->maxcontact_report_id = field->report->id;
403
		td->maxcontacts = field->value[0];
404 405 406
		if (!td->maxcontacts &&
		    field->logical_maximum <= MT_MAX_MAXCONTACT)
			td->maxcontacts = field->logical_maximum;
407
		if (td->mtclass.maxcontacts)
408
			/* check if the maxcontacts is given by the class */
409
			td->maxcontacts = td->mtclass.maxcontacts;
410

411 412 413 414 415 416 417
		break;
	case HID_DG_BUTTONTYPE:
		if (usage->usage_index >= field->report_count) {
			dev_err(&hdev->dev, "HID_DG_BUTTONTYPE out of range\n");
			break;
		}

418
		mt_get_feature(hdev, field->report);
419 420 421
		if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
			td->is_buttonpad = true;

422
		break;
423 424 425 426 427
	case 0xff0000c5:
		/* Retrieve the Win8 blob once to enable some devices */
		if (usage->usage_index == 0)
			mt_get_feature(hdev, field->report);
		break;
428 429 430 431 432 433 434 435 436 437
	}
}

static void set_abs(struct input_dev *input, unsigned int code,
		struct hid_field *field, int snratio)
{
	int fmin = field->logical_minimum;
	int fmax = field->logical_maximum;
	int fuzz = snratio ? (fmax - fmin) / snratio : 0;
	input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
438
	input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
439 440
}

441
static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
442 443
		struct hid_input *hi)
{
444 445 446 447 448 449
	struct mt_fields *f = td->fields;

	if (f->length >= HID_MAX_FIELDS)
		return;

	f->usages[f->length++] = usage->hid;
450 451
}

452
static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
453 454 455 456
		struct hid_field *field, struct hid_usage *usage,
		unsigned long **bit, int *max)
{
	struct mt_device *td = hid_get_drvdata(hdev);
457
	struct mt_class *cls = &td->mtclass;
458
	int code;
459
	struct hid_usage *prev_usage = NULL;
460

461
	if (field->application == HID_DG_TOUCHSCREEN)
462
		td->mt_flags |= INPUT_MT_DIRECT;
463

464 465
	/*
	 * Model touchscreens providing buttons as touchpads.
466 467
	 */
	if (field->application == HID_DG_TOUCHPAD ||
468
	    (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
469
		td->mt_flags |= INPUT_MT_POINTER;
470 471
		td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
	}
472

473 474 475 476
	/* count the buttons on touchpads */
	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
		td->buttons_count++;

477 478 479
	if (usage->usage_index)
		prev_usage = &field->usage[usage->usage_index - 1];

480 481 482 483 484
	switch (usage->hid & HID_USAGE_PAGE) {

	case HID_UP_GENDESK:
		switch (usage->hid) {
		case HID_GD_X:
485 486 487 488 489 490 491
			if (prev_usage && (prev_usage->hid == usage->hid)) {
				hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOOL_X);
				set_abs(hi->input, ABS_MT_TOOL_X, field,
					cls->sn_move);
			} else {
				hid_map_usage(hi, usage, bit, max,
492
					EV_ABS, ABS_MT_POSITION_X);
493 494 495 496
				set_abs(hi->input, ABS_MT_POSITION_X, field,
					cls->sn_move);
			}

497
			mt_store_field(usage, td, hi);
498 499
			return 1;
		case HID_GD_Y:
500 501 502 503 504 505 506
			if (prev_usage && (prev_usage->hid == usage->hid)) {
				hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOOL_Y);
				set_abs(hi->input, ABS_MT_TOOL_Y, field,
					cls->sn_move);
			} else {
				hid_map_usage(hi, usage, bit, max,
507
					EV_ABS, ABS_MT_POSITION_Y);
508 509 510 511
				set_abs(hi->input, ABS_MT_POSITION_Y, field,
					cls->sn_move);
			}

512
			mt_store_field(usage, td, hi);
513 514 515 516 517 518 519
			return 1;
		}
		return 0;

	case HID_UP_DIGITIZER:
		switch (usage->hid) {
		case HID_DG_INRANGE:
520 521 522 523 524 525
			if (cls->quirks & MT_QUIRK_HOVERING) {
				hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_DISTANCE);
				input_set_abs_params(hi->input,
					ABS_MT_DISTANCE, 0, 1, 0, 0);
			}
526
			mt_store_field(usage, td, hi);
527 528
			return 1;
		case HID_DG_CONFIDENCE:
529 530
			if ((cls->name == MT_CLS_WIN_8 ||
				cls->name == MT_CLS_WIN_8_DUAL) &&
531 532
				field->application == HID_DG_TOUCHPAD)
				cls->quirks |= MT_QUIRK_CONFIDENCE;
533
			mt_store_field(usage, td, hi);
534 535 536 537
			return 1;
		case HID_DG_TIPSWITCH:
			hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
			input_set_capability(hi->input, EV_KEY, BTN_TOUCH);
538
			mt_store_field(usage, td, hi);
539 540
			return 1;
		case HID_DG_CONTACTID:
541
			mt_store_field(usage, td, hi);
542
			td->touches_by_report++;
543
			td->mt_report_id = field->report->id;
544 545 546 547
			return 1;
		case HID_DG_WIDTH:
			hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOUCH_MAJOR);
548 549 550
			if (!(cls->quirks & MT_QUIRK_NO_AREA))
				set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
					cls->sn_width);
551
			mt_store_field(usage, td, hi);
552 553 554 555
			return 1;
		case HID_DG_HEIGHT:
			hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOUCH_MINOR);
556 557 558 559
			if (!(cls->quirks & MT_QUIRK_NO_AREA)) {
				set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
					cls->sn_height);
				input_set_abs_params(hi->input,
560
					ABS_MT_ORIENTATION, 0, 1, 0, 0);
561
			}
562
			mt_store_field(usage, td, hi);
563 564 565 566 567 568
			return 1;
		case HID_DG_TIPPRESSURE:
			hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_PRESSURE);
			set_abs(hi->input, ABS_MT_PRESSURE, field,
				cls->sn_pressure);
569
			mt_store_field(usage, td, hi);
570 571
			return 1;
		case HID_DG_CONTACTCOUNT:
572 573 574 575
			/* Ignore if indexes are out of bounds. */
			if (field->index >= field->report->maxfield ||
			    usage->usage_index >= field->report_count)
				return 1;
576 577
			td->cc_index = field->index;
			td->cc_value_index = usage->usage_index;
578 579 580 581 582
			return 1;
		case HID_DG_CONTACTMAX:
			/* we don't set td->last_slot_field as contactcount and
			 * contact max are global to the report */
			return -1;
583 584 585 586
		case HID_DG_TOUCH:
			/* Legacy devices use TIPSWITCH and not TOUCH.
			 * Let's just ignore this field. */
			return -1;
587
		}
588 589 590
		/* let hid-input decide for the others */
		return 0;

591 592
	case HID_UP_BUTTON:
		code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
593 594 595 596
		/*
		 * MS PTP spec says that external buttons left and right have
		 * usages 2 and 3.
		 */
597 598
		if ((cls->name == MT_CLS_WIN_8 ||
			cls->name == MT_CLS_WIN_8_DUAL) &&
599 600 601
		    field->application == HID_DG_TOUCHPAD &&
		    (usage->hid & HID_USAGE) > 1)
			code--;
602 603 604 605
		hid_map_usage(hi, usage, bit, max, EV_KEY, code);
		input_set_capability(hi->input, EV_KEY, code);
		return 1;

606 607 608 609 610 611 612 613
	case 0xff000000:
		/* we do not want to map these: no input-oriented meaning */
		return -1;
	}

	return 0;
}

614
static int mt_touch_input_mapped(struct hid_device *hdev, struct hid_input *hi,
615 616 617 618 619 620 621 622 623
		struct hid_field *field, struct hid_usage *usage,
		unsigned long **bit, int *max)
{
	if (usage->type == EV_KEY || usage->type == EV_ABS)
		set_bit(usage->type, hi->input->evbit);

	return -1;
}

624
static int mt_compute_slot(struct mt_device *td, struct input_dev *input)
625
{
626
	__s32 quirks = td->mtclass.quirks;
627

628 629
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
		return td->curdata.contactid;
630

631
	if (quirks & MT_QUIRK_CYPRESS)
632 633
		return cypress_compute_slot(td);

634 635
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
		return td->num_received;
636

637 638 639
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
		return td->curdata.contactid - 1;

640
	return input_mt_get_slot_by_key(input, td->curdata.contactid);
641 642 643 644 645 646
}

/*
 * this function is called when a whole contact has been processed,
 * so that it can assign it to a slot and store the data there
 */
647
static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
648
{
649 650 651 652
	if ((td->mtclass.quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
	    td->num_received >= td->num_expected)
		return;

653
	if (td->curvalid || (td->mtclass.quirks & MT_QUIRK_ALWAYS_VALID)) {
654
		int active;
655 656
		int slotnum = mt_compute_slot(td, input);
		struct mt_slot *s = &td->curdata;
657
		struct input_mt *mt = input->mt;
658

659 660
		if (slotnum < 0 || slotnum >= td->maxcontacts)
			return;
661

662 663 664 665 666 667 668
		if ((td->mtclass.quirks & MT_QUIRK_IGNORE_DUPLICATES) && mt) {
			struct input_mt_slot *slot = &mt->slots[slotnum];
			if (input_mt_is_active(slot) &&
			    input_mt_is_used(mt, slot))
				return;
		}

669 670 671 672 673
		if (!(td->mtclass.quirks & MT_QUIRK_CONFIDENCE))
			s->confidence_state = 1;
		active = (s->touch_state || s->inrange_state) &&
							s->confidence_state;

674
		input_mt_slot(input, slotnum);
675 676
		input_mt_report_slot_state(input, MT_TOOL_FINGER, active);
		if (active) {
677
			/* this finger is in proximity of the sensor */
678
			int wide = (s->w > s->h);
679 680 681 682 683 684 685 686 687 688 689
			int major = max(s->w, s->h);
			int minor = min(s->w, s->h);

			/*
			 * divided by two to match visual scale of touch
			 * for devices with this quirk
			 */
			if (td->mtclass.quirks & MT_QUIRK_TOUCH_SIZE_SCALING) {
				major = major >> 1;
				minor = minor >> 1;
			}
690

691 692
			input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);
			input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);
693 694
			input_event(input, EV_ABS, ABS_MT_TOOL_X, s->cx);
			input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy);
695 696
			input_event(input, EV_ABS, ABS_MT_DISTANCE,
				!s->touch_state);
697
			input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
698
			input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
699 700
			input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
			input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
701
		}
702 703
	}

704 705 706 707 708 709 710 711 712
	td->num_received++;
}

/*
 * this function is called when a whole packet has been received and processed,
 * so that it can decide what to send to the input layer.
 */
static void mt_sync_frame(struct mt_device *td, struct input_dev *input)
{
713
	input_mt_sync_frame(input);
714 715 716 717
	input_sync(input);
	td->num_received = 0;
}

718
static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
719
				struct hid_usage *usage, __s32 value)
720 721 722 723 724 725 726 727 728 729
{
	/* we will handle the hidinput part later, now remains hiddev */
	if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
		hid->hiddev_hid_event(hid, field, usage, value);

	return 1;
}

static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
				struct hid_usage *usage, __s32 value)
730 731
{
	struct mt_device *td = hid_get_drvdata(hid);
732
	__s32 quirks = td->mtclass.quirks;
733
	struct input_dev *input = field->hidinput->input;
734

735
	if (hid->claimed & HID_CLAIMED_INPUT) {
736 737
		switch (usage->hid) {
		case HID_DG_INRANGE:
738
			if (quirks & MT_QUIRK_VALID_IS_INRANGE)
739
				td->curvalid = value;
740 741
			if (quirks & MT_QUIRK_HOVERING)
				td->curdata.inrange_state = value;
742 743
			break;
		case HID_DG_TIPSWITCH:
744 745
			if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
				td->curvalid = value;
746 747 748
			td->curdata.touch_state = value;
			break;
		case HID_DG_CONFIDENCE:
749 750
			if (quirks & MT_QUIRK_CONFIDENCE)
				td->curdata.confidence_state = value;
751 752
			if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
				td->curvalid = value;
753 754 755 756 757 758 759 760
			break;
		case HID_DG_CONTACTID:
			td->curdata.contactid = value;
			break;
		case HID_DG_TIPPRESSURE:
			td->curdata.p = value;
			break;
		case HID_GD_X:
761 762 763 764
			if (usage->code == ABS_MT_TOOL_X)
				td->curdata.cx = value;
			else
				td->curdata.x = value;
765 766
			break;
		case HID_GD_Y:
767 768 769 770
			if (usage->code == ABS_MT_TOOL_Y)
				td->curdata.cy = value;
			else
				td->curdata.y = value;
771 772 773 774 775 776 777 778 779
			break;
		case HID_DG_WIDTH:
			td->curdata.w = value;
			break;
		case HID_DG_HEIGHT:
			td->curdata.h = value;
			break;
		case HID_DG_CONTACTCOUNT:
			break;
780 781 782
		case HID_DG_TOUCH:
			/* do nothing */
			break;
783 784

		default:
785 786 787
			if (usage->type)
				input_event(input, usage->type, usage->code,
						value);
788
			return;
789 790
		}

791 792 793 794 795
		if (usage->usage_index + 1 == field->report_count) {
			/* we only take into account the last report. */
			if (usage->hid == td->last_slot_field)
				mt_complete_slot(td, field->hidinput->input);
		}
796

797
	}
798
}
799

800
static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
801 802 803 804 805
{
	struct mt_device *td = hid_get_drvdata(hid);
	struct hid_field *field;
	unsigned count;
	int r, n;
806

807 808 809 810
	/*
	 * Includes multi-packet support where subsequent
	 * packets are sent with zero contactcount.
	 */
811 812 813 814 815 816
	if (td->cc_index >= 0) {
		struct hid_field *field = report->field[td->cc_index];
		int value = field->value[td->cc_value_index];
		if (value)
			td->num_expected = value;
	}
817

818 819 820 821 822 823 824 825 826 827 828
	for (r = 0; r < report->maxfield; r++) {
		field = report->field[r];
		count = field->report_count;

		if (!(HID_MAIN_ITEM_VARIABLE & field->flags))
			continue;

		for (n = 0; n < count; n++)
			mt_process_mt_event(hid, field, &field->usage[n],
					field->value[n]);
	}
829 830 831

	if (td->num_received >= td->num_expected)
		mt_sync_frame(td, report->field[0]->hidinput->input);
832 833
}

834
static int mt_touch_input_configured(struct hid_device *hdev,
835 836 837 838 839
					struct hid_input *hi)
{
	struct mt_device *td = hid_get_drvdata(hdev);
	struct mt_class *cls = &td->mtclass;
	struct input_dev *input = hi->input;
840
	int ret;
841 842 843 844 845 846 847 848 849 850 851 852 853 854

	if (!td->maxcontacts)
		td->maxcontacts = MT_DEFAULT_MAXCONTACT;

	mt_post_parse(td);
	if (td->serial_maybe)
		mt_post_parse_default_settings(td);

	if (cls->is_indirect)
		td->mt_flags |= INPUT_MT_POINTER;

	if (cls->quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
		td->mt_flags |= INPUT_MT_DROP_UNUSED;

855 856
	/* check for clickpads */
	if ((td->mt_flags & INPUT_MT_POINTER) && (td->buttons_count == 1))
857 858 859
		td->is_buttonpad = true;

	if (td->is_buttonpad)
860 861
		__set_bit(INPUT_PROP_BUTTONPAD, input->propbit);

862 863 864
	ret = input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
	if (ret)
		return ret;
865 866

	td->mt_flags = 0;
867
	return 0;
868 869 870 871 872 873
}

static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
		struct hid_field *field, struct hid_usage *usage,
		unsigned long **bit, int *max)
{
874 875 876 877 878 879 880 881 882 883
	struct mt_device *td = hid_get_drvdata(hdev);

	/*
	 * If mtclass.export_all_inputs is not set, only map fields from
	 * TouchScreen or TouchPad collections. We need to ignore fields
	 * that belong to other collections such as Mouse that might have
	 * the same GenericDesktop usages.
	 */
	if (!td->mtclass.export_all_inputs &&
	    field->application != HID_DG_TOUCHSCREEN &&
884
	    field->application != HID_DG_PEN &&
885 886 887
	    field->application != HID_DG_TOUCHPAD &&
	    field->application != HID_GD_KEYBOARD &&
	    field->application != HID_CP_CONSUMER_CONTROL)
888
		return -1;
889

890 891 892
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus.
893 894 895
	 * The check for mt_report_id ensures we don't process
	 * HID_DG_CONTACTCOUNT from the pen report as it is outside the physical
	 * collection, but within the report ID.
896
	 */
897
	if (field->physical == HID_DG_STYLUS)
898
		return 0;
899 900 901 902
	else if ((field->physical == 0) &&
		 (field->report->id != td->mt_report_id) &&
		 (td->mt_report_id != -1))
		return 0;
903

904 905 906 907 908 909
	if (field->application == HID_DG_TOUCHSCREEN ||
	    field->application == HID_DG_TOUCHPAD)
		return mt_touch_input_mapping(hdev, hi, field, usage, bit, max);

	/* let hid-core decide for the others */
	return 0;
910 911 912 913 914 915
}

static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
		struct hid_field *field, struct hid_usage *usage,
		unsigned long **bit, int *max)
{
916 917 918 919
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus.
	 */
920
	if (field->physical == HID_DG_STYLUS)
921
		return 0;
922

923 924 925 926 927 928
	if (field->application == HID_DG_TOUCHSCREEN ||
	    field->application == HID_DG_TOUCHPAD)
		return mt_touch_input_mapped(hdev, hi, field, usage, bit, max);

	/* let hid-core decide for the others */
	return 0;
929 930 931 932 933 934 935 936 937 938
}

static int mt_event(struct hid_device *hid, struct hid_field *field,
				struct hid_usage *usage, __s32 value)
{
	struct mt_device *td = hid_get_drvdata(hid);

	if (field->report->id == td->mt_report_id)
		return mt_touch_event(hid, field, usage, value);

939
	return 0;
940 941 942 943 944
}

static void mt_report(struct hid_device *hid, struct hid_report *report)
{
	struct mt_device *td = hid_get_drvdata(hid);
945
	struct hid_field *field = report->field[0];
946 947 948 949 950

	if (!(hid->claimed & HID_CLAIMED_INPUT))
		return;

	if (report->id == td->mt_report_id)
951
		return mt_touch_report(hid, report);
952

953 954
	if (field && field->hidinput && field->hidinput->input)
		input_sync(field->hidinput->input);
955 956 957 958 959 960 961
}

static void mt_set_input_mode(struct hid_device *hdev)
{
	struct mt_device *td = hid_get_drvdata(hdev);
	struct hid_report *r;
	struct hid_report_enum *re;
962 963 964
	struct mt_class *cls = &td->mtclass;
	char *buf;
	int report_len;
965 966 967 968 969 970 971

	if (td->inputmode < 0)
		return;

	re = &(hdev->report_enum[HID_FEATURE_REPORT]);
	r = re->report_id_hash[td->inputmode];
	if (r) {
972
		if (cls->quirks & MT_QUIRK_FORCE_GET_FEATURE) {
973
			report_len = hid_report_len(r);
974 975 976 977 978 979 980 981 982 983
			buf = hid_alloc_report_buf(r, GFP_KERNEL);
			if (!buf) {
				hid_err(hdev, "failed to allocate buffer for report\n");
				return;
			}
			hid_hw_raw_request(hdev, r->id, buf, report_len,
					   HID_FEATURE_REPORT,
					   HID_REQ_GET_REPORT);
			kfree(buf);
		}
984
		r->field[0]->value[td->inputmode_index] = td->inputmode_value;
985
		hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
986 987 988
	}
}

989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009
static void mt_set_maxcontacts(struct hid_device *hdev)
{
	struct mt_device *td = hid_get_drvdata(hdev);
	struct hid_report *r;
	struct hid_report_enum *re;
	int fieldmax, max;

	if (td->maxcontact_report_id < 0)
		return;

	if (!td->mtclass.maxcontacts)
		return;

	re = &hdev->report_enum[HID_FEATURE_REPORT];
	r = re->report_id_hash[td->maxcontact_report_id];
	if (r) {
		max = td->mtclass.maxcontacts;
		fieldmax = r->field[0]->logical_maximum;
		max = min(fieldmax, max);
		if (r->field[0]->value[0] != max) {
			r->field[0]->value[0] = max;
1010
			hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
1011 1012 1013 1014
		}
	}
}

1015 1016 1017 1018 1019 1020 1021 1022 1023 1024
static void mt_post_parse_default_settings(struct mt_device *td)
{
	__s32 quirks = td->mtclass.quirks;

	/* unknown serial device needs special quirks */
	if (td->touches_by_report == 1) {
		quirks |= MT_QUIRK_ALWAYS_VALID;
		quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
		quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
		quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
1025
		quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1026 1027 1028 1029 1030
	}

	td->mtclass.quirks = quirks;
}

1031 1032 1033
static void mt_post_parse(struct mt_device *td)
{
	struct mt_fields *f = td->fields;
1034
	struct mt_class *cls = &td->mtclass;
1035 1036 1037 1038 1039

	if (td->touches_by_report > 0) {
		int field_count_per_touch = f->length / td->touches_by_report;
		td->last_slot_field = f->usages[field_count_per_touch - 1];
	}
1040

1041
	if (td->cc_index < 0)
1042
		cls->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1043 1044
}

1045
static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
1046 1047
{
	struct mt_device *td = hid_get_drvdata(hdev);
1048 1049
	char *name;
	const char *suffix = NULL;
1050
	struct hid_field *field = hi->report->field[0];
1051
	int ret;
1052

1053 1054 1055 1056 1057
	if (hi->report->id == td->mt_report_id) {
		ret = mt_touch_input_configured(hdev, hi);
		if (ret)
			return ret;
	}
1058

1059 1060 1061 1062 1063
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus. Check this first, and then rely on the application
	 * field.
	 */
1064 1065
	if (hi->report->field[0]->physical == HID_DG_STYLUS) {
		suffix = "Pen";
1066 1067
		/* force BTN_STYLUS to allow tablet matching in udev */
		__set_bit(BTN_STYLUS, hi->input->keybit);
1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086
	} else {
		switch (field->application) {
		case HID_GD_KEYBOARD:
			suffix = "Keyboard";
			break;
		case HID_GD_KEYPAD:
			suffix = "Keypad";
			break;
		case HID_GD_MOUSE:
			suffix = "Mouse";
			break;
		case HID_DG_STYLUS:
			suffix = "Pen";
			/* force BTN_STYLUS to allow tablet matching in udev */
			__set_bit(BTN_STYLUS, hi->input->keybit);
			break;
		case HID_DG_TOUCHSCREEN:
			/* we do not set suffix = "Touchscreen" */
			break;
1087 1088 1089
		case HID_DG_TOUCHPAD:
			suffix = "Touchpad";
			break;
1090 1091 1092 1093 1094 1095 1096 1097 1098 1099
		case HID_GD_SYSTEM_CONTROL:
			suffix = "System Control";
			break;
		case HID_CP_CONSUMER_CONTROL:
			suffix = "Consumer Control";
			break;
		default:
			suffix = "UNKNOWN";
			break;
		}
1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110
	}

	if (suffix) {
		name = devm_kzalloc(&hi->input->dev,
				    strlen(hdev->name) + strlen(suffix) + 2,
				    GFP_KERNEL);
		if (name) {
			sprintf(name, "%s %s", hdev->name, suffix);
			hi->input->name = name;
		}
	}
1111 1112

	return 0;
1113 1114
}

1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142
static void mt_fix_const_field(struct hid_field *field, unsigned int usage)
{
	if (field->usage[0].hid != usage ||
	    !(field->flags & HID_MAIN_ITEM_CONSTANT))
		return;

	field->flags &= ~HID_MAIN_ITEM_CONSTANT;
	field->flags |= HID_MAIN_ITEM_VARIABLE;
}

static void mt_fix_const_fields(struct hid_device *hdev, unsigned int usage)
{
	struct hid_report *report;
	int i;

	list_for_each_entry(report,
			    &hdev->report_enum[HID_INPUT_REPORT].report_list,
			    list) {

		if (!report->maxfield)
			continue;

		for (i = 0; i < report->maxfield; i++)
			if (report->field[i]->maxusage >= 1)
				mt_fix_const_field(report->field[i], usage);
	}
}

1143 1144
static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
1145
	int ret, i;
1146
	struct mt_device *td;
1147 1148
	struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */

1149 1150 1151 1152
	for (i = 0; mt_classes[i].name ; i++) {
		if (id->driver_data == mt_classes[i].name) {
			mtclass = &(mt_classes[i]);
			break;
1153 1154
		}
	}
1155

1156
	td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
1157 1158 1159 1160
	if (!td) {
		dev_err(&hdev->dev, "cannot allocate multitouch data\n");
		return -ENOMEM;
	}
1161
	td->mtclass = *mtclass;
1162
	td->inputmode = -1;
1163
	td->maxcontact_report_id = -1;
1164
	td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
1165
	td->cc_index = -1;
1166
	td->mt_report_id = -1;
1167 1168
	hid_set_drvdata(hdev, td);

1169 1170
	td->fields = devm_kzalloc(&hdev->dev, sizeof(struct mt_fields),
				  GFP_KERNEL);
1171 1172
	if (!td->fields) {
		dev_err(&hdev->dev, "cannot allocate multitouch fields data\n");
1173
		return -ENOMEM;
1174 1175
	}

1176 1177 1178
	if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
		td->serial_maybe = true;

1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211
	/*
	 * Store the initial quirk state
	 */
	td->initial_quirks = hdev->quirks;

	/* This allows the driver to correctly support devices
	 * that emit events over several HID messages.
	 */
	hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;

	/*
	 * This allows the driver to handle different input sensors
	 * that emits events through different reports on the same HID
	 * device.
	 */
	hdev->quirks |= HID_QUIRK_MULTI_INPUT;
	hdev->quirks |= HID_QUIRK_NO_EMPTY_INPUT;

	/*
	 * Some multitouch screens do not like to be polled for input
	 * reports. Fortunately, the Win8 spec says that all touches
	 * should be sent during each report, making the initialization
	 * of input reports unnecessary. For Win7 devices, well, let's hope
	 * they will still be happy (this is only be a problem if a touch
	 * was already there while probing the device).
	 *
	 * In addition some touchpads do not behave well if we read
	 * all feature reports from them. Instead we prevent
	 * initial report fetching and then selectively fetch each
	 * report we are interested in.
	 */
	hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;

1212 1213
	ret = hid_parse(hdev);
	if (ret != 0)
1214
		return ret;
1215

1216 1217 1218
	if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
		mt_fix_const_fields(hdev, HID_DG_CONTACTID);

1219
	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1220
	if (ret)
1221
		return ret;
1222

1223
	ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
1224 1225 1226
	if (ret)
		dev_warn(&hdev->dev, "Cannot allocate sysfs group for %s\n",
				hdev->name);
1227

1228
	mt_set_maxcontacts(hdev);
1229 1230
	mt_set_input_mode(hdev);

1231 1232
	/* release .fields memory as it is not used anymore */
	devm_kfree(&hdev->dev, td->fields);
1233 1234
	td->fields = NULL;

1235 1236 1237 1238
	return 0;
}

#ifdef CONFIG_PM
1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254
static void mt_release_contacts(struct hid_device *hid)
{
	struct hid_input *hidinput;

	list_for_each_entry(hidinput, &hid->inputs, list) {
		struct input_dev *input_dev = hidinput->input;
		struct input_mt *mt = input_dev->mt;
		int i;

		if (mt) {
			for (i = 0; i < mt->num_slots; i++) {
				input_mt_slot(input_dev, i);
				input_mt_report_slot_state(input_dev,
							   MT_TOOL_FINGER,
							   false);
			}
1255
			input_mt_sync_frame(input_dev);
1256 1257 1258 1259 1260
			input_sync(input_dev);
		}
	}
}

1261 1262
static int mt_reset_resume(struct hid_device *hdev)
{
1263
	mt_release_contacts(hdev);
1264
	mt_set_maxcontacts(hdev);
1265 1266 1267
	mt_set_input_mode(hdev);
	return 0;
}
1268 1269 1270 1271 1272 1273 1274

static int mt_resume(struct hid_device *hdev)
{
	/* Some Elan legacy devices require SET_IDLE to be set on resume.
	 * It should be safe to send it to other devices too.
	 * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */

1275
	hid_hw_idle(hdev, 0, 0, HID_REQ_SET_IDLE);
1276 1277 1278

	return 0;
}
1279 1280 1281 1282
#endif

static void mt_remove(struct hid_device *hdev)
{
1283 1284
	struct mt_device *td = hid_get_drvdata(hdev);

1285
	sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
1286
	hid_hw_stop(hdev);
1287
	hdev->quirks = td->initial_quirks;
1288 1289
}

1290 1291 1292 1293 1294 1295
/*
 * This list contains only:
 * - VID/PID of products not working with the default multitouch handling
 * - 2 generic rules.
 * So there is no point in adding here any device with MT_CLS_DEFAULT.
 */
1296 1297
static const struct hid_device_id mt_devices[] = {

1298 1299
	/* 3M panels */
	{ .driver_data = MT_CLS_3M,
1300
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1301 1302
			USB_DEVICE_ID_3M1968) },
	{ .driver_data = MT_CLS_3M,
1303
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1304
			USB_DEVICE_ID_3M2256) },
1305
	{ .driver_data = MT_CLS_3M,
1306
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1307
			USB_DEVICE_ID_3M3266) },
1308

1309 1310 1311 1312 1313 1314 1315 1316 1317 1318
	/* Alps devices */
	{ .driver_data = MT_CLS_WIN_8_DUAL,
		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
			USB_VENDOR_ID_ALPS_JP,
			HID_DEVICE_ID_ALPS_U1_DUAL_PTP) },
	{ .driver_data = MT_CLS_WIN_8_DUAL,
		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
			USB_VENDOR_ID_ALPS_JP,
			HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) },

1319 1320 1321 1322
	/* Anton devices */
	{ .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
		MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
			USB_DEVICE_ID_ANTON_TOUCH_PAD) },
1323

1324
	/* Atmel panels */
1325
	{ .driver_data = MT_CLS_SERIAL,
1326
		MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1327
			USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
1328

1329
	/* Baanto multitouch devices */
1330
	{ .driver_data = MT_CLS_NSMU,
1331
		MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
1332
			USB_DEVICE_ID_BAANTO_MT_190W2) },
1333

1334 1335
	/* Cando panels */
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1336
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1337 1338
			USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1339
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1340 1341
			USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },

1342
	/* Chunghwa Telecom touch panels */
1343
	{  .driver_data = MT_CLS_NSMU,
1344
		MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
1345 1346
			USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },

1347 1348 1349 1350 1351 1352 1353 1354
	/* CJTouch panels */
	{ .driver_data = MT_CLS_NSMU,
		MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
			USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0020) },
	{ .driver_data = MT_CLS_NSMU,
		MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
			USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0040) },

1355
	/* CVTouch panels */
1356
	{ .driver_data = MT_CLS_NSMU,
1357
		MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
1358 1359
			USB_DEVICE_ID_CVTOUCH_SCREEN) },

1360
	/* eGalax devices (resistive) */
1361
	{ .driver_data = MT_CLS_EGALAX,
1362
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1363 1364
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
	{ .driver_data = MT_CLS_EGALAX,
1365
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1366
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
1367 1368

	/* eGalax devices (capacitive) */
1369
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1370
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1371
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
1372
	{ .driver_data = MT_CLS_EGALAX,
1373
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1374
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
1375
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1376
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1377
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
1378
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1379
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1380
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
1381
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1382
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1383
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
1384
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1385
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1386
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
1387 1388 1389
	{ .driver_data = MT_CLS_EGALAX,
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
1390
	{ .driver_data = MT_CLS_EGALAX,
1391
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1392
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
1393
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1394
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1395
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
1396 1397 1398 1399 1400 1401
	{ .driver_data = MT_CLS_EGALAX,
		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4) },
	{ .driver_data = MT_CLS_EGALAX,
		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0) },
1402
	{ .driver_data = MT_CLS_EGALAX,
1403
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1404
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
1405
	{ .driver_data = MT_CLS_EGALAX,
1406
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1407
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
1408
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1409
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1410
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
1411
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1412 1413
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
1414
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1415
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1416
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1417

1418 1419 1420 1421 1422
	/* Elitegroup panel */
	{ .driver_data = MT_CLS_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
			USB_DEVICE_ID_ELITEGROUP_05D8) },

1423 1424 1425 1426 1427
	/* Flatfrog Panels */
	{ .driver_data = MT_CLS_FLATFROG,
		MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
			USB_DEVICE_ID_MULTITOUCH_3200) },

1428 1429 1430 1431 1432
	/* FocalTech Panels */
	{ .driver_data = MT_CLS_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
			USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },

1433
	/* GeneralTouch panel */
1434
	{ .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1435
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1436
			USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
1437 1438 1439
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454
	{ .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0101) },
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0102) },
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0106) },
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A) },
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100) },
1455

1456
	/* Gametel game controller */
1457
	{ .driver_data = MT_CLS_NSMU,
1458
		MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
1459 1460
			USB_DEVICE_ID_GAMETEL_MT_MODE) },

1461
	/* GoodTouch panels */
1462
	{ .driver_data = MT_CLS_NSMU,
1463
		MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
1464 1465
			USB_DEVICE_ID_GOODTOUCH_000f) },

1466 1467
	/* Hanvon panels */
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1468
		MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
1469 1470
			USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },

1471
	/* Ilitek dual touch panel */
1472
	{  .driver_data = MT_CLS_NSMU,
1473
		MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
1474 1475
			USB_DEVICE_ID_ILITEK_MULTITOUCH) },

1476 1477 1478 1479 1480
	/* LG Melfas panel */
	{ .driver_data = MT_CLS_LG,
		HID_USB_DEVICE(USB_VENDOR_ID_LG,
			USB_DEVICE_ID_LG_MELFAS_MT) },

1481 1482
	/* MosArt panels */
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1483
		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1484 1485
			USB_DEVICE_ID_ASUS_T91MT)},
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1486
		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1487 1488
			USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1489
		MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1490 1491
			USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },

1492 1493
	/* Panasonic panels */
	{ .driver_data = MT_CLS_PANASONIC,
1494
		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1495 1496
			USB_DEVICE_ID_PANABOARD_UBT780) },
	{ .driver_data = MT_CLS_PANASONIC,
1497
		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1498 1499
			USB_DEVICE_ID_PANABOARD_UBT880) },

1500
	/* Novatek Panel */
1501
	{ .driver_data = MT_CLS_NSMU,
1502
		MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
1503 1504
			USB_DEVICE_ID_NOVATEK_PCT) },

1505 1506 1507 1508 1509
	/* Ntrig Panel */
	{ .driver_data = MT_CLS_NSMU,
		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
			USB_VENDOR_ID_NTRIG, 0x1b05) },

1510 1511
	/* PixArt optical touch screen */
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1512
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1513 1514
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1515
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1516 1517
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1518
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1519 1520
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },

1521
	/* PixCir-based panels */
1522
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1523
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1524 1525
			USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },

1526 1527
	/* Quanta-based panels */
	{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1528
		MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1529
			USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1530

1531
	/* Stantum panels */
1532
	{ .driver_data = MT_CLS_CONFIDENCE,
1533
		MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1534 1535
			USB_DEVICE_ID_MTP_STM)},

1536 1537
	/* TopSeed panels */
	{ .driver_data = MT_CLS_TOPSEED,
1538
		MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
1539 1540
			USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },

1541
	/* Touch International panels */
1542
	{ .driver_data = MT_CLS_NSMU,
1543
		MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
1544 1545
			USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },

1546
	/* Unitec panels */
1547
	{ .driver_data = MT_CLS_NSMU,
1548
		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1549
			USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
1550
	{ .driver_data = MT_CLS_NSMU,
1551
		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1552
			USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1553

1554 1555 1556 1557 1558
	/* VTL panels */
	{ .driver_data = MT_CLS_VTL,
		MT_USB_DEVICE(USB_VENDOR_ID_VTL,
			USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },

1559 1560 1561 1562 1563
	/* Wistron panels */
	{ .driver_data = MT_CLS_NSMU,
		MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
			USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },

1564
	/* XAT */
1565
	{ .driver_data = MT_CLS_NSMU,
1566
		MT_USB_DEVICE(USB_VENDOR_ID_XAT,
1567
			USB_DEVICE_ID_XAT_CSR) },
1568

1569
	/* Xiroku */
1570
	{ .driver_data = MT_CLS_NSMU,
1571
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1572
			USB_DEVICE_ID_XIROKU_SPX) },
1573
	{ .driver_data = MT_CLS_NSMU,
1574
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1575
			USB_DEVICE_ID_XIROKU_MPX) },
1576
	{ .driver_data = MT_CLS_NSMU,
1577
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1578
			USB_DEVICE_ID_XIROKU_CSR) },
1579
	{ .driver_data = MT_CLS_NSMU,
1580
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1581
			USB_DEVICE_ID_XIROKU_SPX1) },
1582
	{ .driver_data = MT_CLS_NSMU,
1583
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1584
			USB_DEVICE_ID_XIROKU_MPX1) },
1585
	{ .driver_data = MT_CLS_NSMU,
1586
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1587
			USB_DEVICE_ID_XIROKU_CSR1) },
1588
	{ .driver_data = MT_CLS_NSMU,
1589
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1590
			USB_DEVICE_ID_XIROKU_SPX2) },
1591
	{ .driver_data = MT_CLS_NSMU,
1592
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1593
			USB_DEVICE_ID_XIROKU_MPX2) },
1594
	{ .driver_data = MT_CLS_NSMU,
1595
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1596 1597
			USB_DEVICE_ID_XIROKU_CSR2) },

1598 1599 1600 1601 1602
	/* Google MT devices */
	{ .driver_data = MT_CLS_GOOGLE,
		HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
			USB_DEVICE_ID_GOOGLE_TOUCH_ROSE) },

1603 1604
	/* Generic MT device */
	{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1605 1606 1607 1608 1609

	/* Generic Win 8 certified MT device */
	{  .driver_data = MT_CLS_WIN_8,
		HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
			HID_ANY_ID, HID_ANY_ID) },
1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625
	{ }
};
MODULE_DEVICE_TABLE(hid, mt_devices);

static const struct hid_usage_id mt_grabbed_usages[] = {
	{ HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
	{ HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
};

static struct hid_driver mt_driver = {
	.name = "hid-multitouch",
	.id_table = mt_devices,
	.probe = mt_probe,
	.remove = mt_remove,
	.input_mapping = mt_input_mapping,
	.input_mapped = mt_input_mapped,
1626
	.input_configured = mt_input_configured,
1627 1628 1629
	.feature_mapping = mt_feature_mapping,
	.usage_table = mt_grabbed_usages,
	.event = mt_event,
1630
	.report = mt_report,
1631 1632
#ifdef CONFIG_PM
	.reset_resume = mt_reset_resume,
1633
	.resume = mt_resume,
1634 1635
#endif
};
1636
module_hid_driver(mt_driver);