hid-multitouch.c 45.6 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

166
#define MT_DEFAULT_MAXCONTACT	10
167
#define MT_MAX_MAXCONTACT	250
168

169 170 171
#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)

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

177 178 179 180 181 182 183 184
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;
}

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

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

271 272 273 274 275 276
	{ .name = MT_CLS_FLATFROG,
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
			MT_QUIRK_NO_AREA,
		.sn_move = 2048,
		.maxcontacts = 40,
	},
277 278 279 280 281 282
	{ .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 },
283 284 285 286 287
	{ .name = MT_CLS_VTL,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE |
			MT_QUIRK_FORCE_GET_FEATURE,
	},
288
	{ }
289 290
};

291 292 293 294
static ssize_t mt_show_quirks(struct device *dev,
			   struct device_attribute *attr,
			   char *buf)
{
G
Geliang Tang 已提交
295
	struct hid_device *hdev = to_hid_device(dev);
296 297 298 299 300 301 302 303 304
	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 已提交
305
	struct hid_device *hdev = to_hid_device(dev);
306 307 308 309 310 311 312 313 314
	struct mt_device *td = hid_get_drvdata(hdev);

	unsigned long val;

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

	td->mtclass.quirks = val;

315
	if (td->cc_index < 0)
316 317
		td->mtclass.quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;

318 319 320 321 322 323 324 325 326 327 328 329 330 331
	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
};

332 333 334 335 336 337 338
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;

	/*
339 340
	 * Do not fetch the feature report if the device has been explicitly
	 * marked as non-capable.
341
	 */
342
	if (td->initial_quirks & HID_QUIRK_NO_INIT_REPORTS)
343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
		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);
}

364
static void mt_feature_mapping(struct hid_device *hdev,
365 366
		struct hid_field *field, struct hid_usage *usage)
{
367 368 369 370
	struct mt_device *td = hid_get_drvdata(hdev);

	switch (usage->hid) {
	case HID_DG_INPUTMODE:
371 372 373 374
		/* 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;
375 376
		}

377 378 379 380 381 382 383 384 385 386 387 388 389
		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");
		}
390

391 392
		break;
	case HID_DG_CONTACTMAX:
393 394
		mt_get_feature(hdev, field->report);

395
		td->maxcontact_report_id = field->report->id;
396
		td->maxcontacts = field->value[0];
397 398 399
		if (!td->maxcontacts &&
		    field->logical_maximum <= MT_MAX_MAXCONTACT)
			td->maxcontacts = field->logical_maximum;
400
		if (td->mtclass.maxcontacts)
401
			/* check if the maxcontacts is given by the class */
402
			td->maxcontacts = td->mtclass.maxcontacts;
403

404 405 406 407 408 409 410
		break;
	case HID_DG_BUTTONTYPE:
		if (usage->usage_index >= field->report_count) {
			dev_err(&hdev->dev, "HID_DG_BUTTONTYPE out of range\n");
			break;
		}

411
		mt_get_feature(hdev, field->report);
412 413 414
		if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
			td->is_buttonpad = true;

415
		break;
416 417 418 419 420
	case 0xff0000c5:
		/* Retrieve the Win8 blob once to enable some devices */
		if (usage->usage_index == 0)
			mt_get_feature(hdev, field->report);
		break;
421 422 423 424 425 426 427 428 429 430
	}
}

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);
431
	input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
432 433
}

434
static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
435 436
		struct hid_input *hi)
{
437 438 439 440 441 442
	struct mt_fields *f = td->fields;

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

	f->usages[f->length++] = usage->hid;
443 444
}

445
static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
446 447 448 449
		struct hid_field *field, struct hid_usage *usage,
		unsigned long **bit, int *max)
{
	struct mt_device *td = hid_get_drvdata(hdev);
450
	struct mt_class *cls = &td->mtclass;
451
	int code;
452
	struct hid_usage *prev_usage = NULL;
453

454
	if (field->application == HID_DG_TOUCHSCREEN)
455
		td->mt_flags |= INPUT_MT_DIRECT;
456

457 458
	/*
	 * Model touchscreens providing buttons as touchpads.
459 460
	 */
	if (field->application == HID_DG_TOUCHPAD ||
461
	    (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
462
		td->mt_flags |= INPUT_MT_POINTER;
463 464
		td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
	}
465

466 467 468 469
	/* count the buttons on touchpads */
	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
		td->buttons_count++;

470 471 472
	if (usage->usage_index)
		prev_usage = &field->usage[usage->usage_index - 1];

473 474 475 476 477
	switch (usage->hid & HID_USAGE_PAGE) {

	case HID_UP_GENDESK:
		switch (usage->hid) {
		case HID_GD_X:
478 479 480 481 482 483 484
			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,
485
					EV_ABS, ABS_MT_POSITION_X);
486 487 488 489
				set_abs(hi->input, ABS_MT_POSITION_X, field,
					cls->sn_move);
			}

490
			mt_store_field(usage, td, hi);
491 492
			return 1;
		case HID_GD_Y:
493 494 495 496 497 498 499
			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,
500
					EV_ABS, ABS_MT_POSITION_Y);
501 502 503 504
				set_abs(hi->input, ABS_MT_POSITION_Y, field,
					cls->sn_move);
			}

505
			mt_store_field(usage, td, hi);
506 507 508 509 510 511 512
			return 1;
		}
		return 0;

	case HID_UP_DIGITIZER:
		switch (usage->hid) {
		case HID_DG_INRANGE:
513 514 515 516 517 518
			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);
			}
519
			mt_store_field(usage, td, hi);
520 521
			return 1;
		case HID_DG_CONFIDENCE:
522 523
			if ((cls->name == MT_CLS_WIN_8 ||
				cls->name == MT_CLS_WIN_8_DUAL) &&
524 525
				field->application == HID_DG_TOUCHPAD)
				cls->quirks |= MT_QUIRK_CONFIDENCE;
526
			mt_store_field(usage, td, hi);
527 528 529 530
			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);
531
			mt_store_field(usage, td, hi);
532 533
			return 1;
		case HID_DG_CONTACTID:
534
			mt_store_field(usage, td, hi);
535
			td->touches_by_report++;
536
			td->mt_report_id = field->report->id;
537 538 539 540
			return 1;
		case HID_DG_WIDTH:
			hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOUCH_MAJOR);
541 542 543
			if (!(cls->quirks & MT_QUIRK_NO_AREA))
				set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
					cls->sn_width);
544
			mt_store_field(usage, td, hi);
545 546 547 548
			return 1;
		case HID_DG_HEIGHT:
			hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOUCH_MINOR);
549 550 551 552
			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,
553
					ABS_MT_ORIENTATION, 0, 1, 0, 0);
554
			}
555
			mt_store_field(usage, td, hi);
556 557 558 559 560 561
			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);
562
			mt_store_field(usage, td, hi);
563 564
			return 1;
		case HID_DG_CONTACTCOUNT:
565 566 567 568
			/* Ignore if indexes are out of bounds. */
			if (field->index >= field->report->maxfield ||
			    usage->usage_index >= field->report_count)
				return 1;
569 570
			td->cc_index = field->index;
			td->cc_value_index = usage->usage_index;
571 572 573 574 575
			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;
576 577 578 579
		case HID_DG_TOUCH:
			/* Legacy devices use TIPSWITCH and not TOUCH.
			 * Let's just ignore this field. */
			return -1;
580
		}
581 582 583
		/* let hid-input decide for the others */
		return 0;

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

599 600 601 602 603 604 605 606
	case 0xff000000:
		/* we do not want to map these: no input-oriented meaning */
		return -1;
	}

	return 0;
}

607
static int mt_touch_input_mapped(struct hid_device *hdev, struct hid_input *hi,
608 609 610 611 612 613 614 615 616
		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;
}

617
static int mt_compute_slot(struct mt_device *td, struct input_dev *input)
618
{
619
	__s32 quirks = td->mtclass.quirks;
620

621 622
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
		return td->curdata.contactid;
623

624
	if (quirks & MT_QUIRK_CYPRESS)
625 626
		return cypress_compute_slot(td);

627 628
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
		return td->num_received;
629

630 631 632
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
		return td->curdata.contactid - 1;

633
	return input_mt_get_slot_by_key(input, td->curdata.contactid);
634 635 636 637 638 639
}

/*
 * 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
 */
640
static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
641
{
642 643 644 645
	if ((td->mtclass.quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
	    td->num_received >= td->num_expected)
		return;

646
	if (td->curvalid || (td->mtclass.quirks & MT_QUIRK_ALWAYS_VALID)) {
647
		int active;
648 649
		int slotnum = mt_compute_slot(td, input);
		struct mt_slot *s = &td->curdata;
650
		struct input_mt *mt = input->mt;
651

652 653
		if (slotnum < 0 || slotnum >= td->maxcontacts)
			return;
654

655 656 657 658 659 660 661
		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;
		}

662 663 664 665 666
		if (!(td->mtclass.quirks & MT_QUIRK_CONFIDENCE))
			s->confidence_state = 1;
		active = (s->touch_state || s->inrange_state) &&
							s->confidence_state;

667
		input_mt_slot(input, slotnum);
668 669
		input_mt_report_slot_state(input, MT_TOOL_FINGER, active);
		if (active) {
670
			/* this finger is in proximity of the sensor */
671
			int wide = (s->w > s->h);
672 673 674 675 676 677 678 679 680 681 682
			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;
			}
683

684 685
			input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);
			input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);
686 687
			input_event(input, EV_ABS, ABS_MT_TOOL_X, s->cx);
			input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy);
688 689
			input_event(input, EV_ABS, ABS_MT_DISTANCE,
				!s->touch_state);
690
			input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
691
			input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
692 693
			input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
			input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
694
		}
695 696
	}

697 698 699 700 701 702 703 704 705
	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)
{
706
	input_mt_sync_frame(input);
707 708 709 710
	input_sync(input);
	td->num_received = 0;
}

711
static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
712
				struct hid_usage *usage, __s32 value)
713 714 715 716 717 718 719 720 721 722
{
	/* 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)
723 724
{
	struct mt_device *td = hid_get_drvdata(hid);
725
	__s32 quirks = td->mtclass.quirks;
726
	struct input_dev *input = field->hidinput->input;
727

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

		default:
778 779 780
			if (usage->type)
				input_event(input, usage->type, usage->code,
						value);
781
			return;
782 783
		}

784 785 786 787 788
		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);
		}
789

790
	}
791
}
792

793
static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
794 795 796 797 798
{
	struct mt_device *td = hid_get_drvdata(hid);
	struct hid_field *field;
	unsigned count;
	int r, n;
799

800 801 802 803
	/*
	 * Includes multi-packet support where subsequent
	 * packets are sent with zero contactcount.
	 */
804 805 806 807 808 809
	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;
	}
810

811 812 813 814 815 816 817 818 819 820 821
	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]);
	}
822 823 824

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

827
static int mt_touch_input_configured(struct hid_device *hdev,
828 829 830 831 832
					struct hid_input *hi)
{
	struct mt_device *td = hid_get_drvdata(hdev);
	struct mt_class *cls = &td->mtclass;
	struct input_dev *input = hi->input;
833
	int ret;
834 835 836 837 838 839 840 841 842 843 844 845 846 847

	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;

848 849
	/* check for clickpads */
	if ((td->mt_flags & INPUT_MT_POINTER) && (td->buttons_count == 1))
850 851 852
		td->is_buttonpad = true;

	if (td->is_buttonpad)
853 854
		__set_bit(INPUT_PROP_BUTTONPAD, input->propbit);

855 856 857
	ret = input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
	if (ret)
		return ret;
858 859

	td->mt_flags = 0;
860
	return 0;
861 862 863 864 865 866
}

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)
{
867 868 869 870 871 872 873 874 875 876
	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 &&
877
	    field->application != HID_DG_PEN &&
878 879 880
	    field->application != HID_DG_TOUCHPAD &&
	    field->application != HID_GD_KEYBOARD &&
	    field->application != HID_CP_CONSUMER_CONTROL)
881
		return -1;
882

883 884 885
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus.
886 887 888
	 * 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.
889
	 */
890
	if (field->physical == HID_DG_STYLUS)
891
		return 0;
892 893 894 895
	else if ((field->physical == 0) &&
		 (field->report->id != td->mt_report_id) &&
		 (td->mt_report_id != -1))
		return 0;
896

897 898 899 900 901 902
	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;
903 904 905 906 907 908
}

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)
{
909 910 911 912
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus.
	 */
913
	if (field->physical == HID_DG_STYLUS)
914
		return 0;
915

916 917 918 919 920 921
	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;
922 923 924 925 926 927 928 929 930 931
}

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);

932
	return 0;
933 934 935 936 937
}

static void mt_report(struct hid_device *hid, struct hid_report *report)
{
	struct mt_device *td = hid_get_drvdata(hid);
938
	struct hid_field *field = report->field[0];
939 940 941 942 943

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

	if (report->id == td->mt_report_id)
944
		return mt_touch_report(hid, report);
945

946 947
	if (field && field->hidinput && field->hidinput->input)
		input_sync(field->hidinput->input);
948 949 950 951 952 953 954
}

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;
955 956 957
	struct mt_class *cls = &td->mtclass;
	char *buf;
	int report_len;
958 959 960 961 962 963 964

	if (td->inputmode < 0)
		return;

	re = &(hdev->report_enum[HID_FEATURE_REPORT]);
	r = re->report_id_hash[td->inputmode];
	if (r) {
965
		if (cls->quirks & MT_QUIRK_FORCE_GET_FEATURE) {
966
			report_len = hid_report_len(r);
967 968 969 970 971 972 973 974 975 976
			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);
		}
977
		r->field[0]->value[td->inputmode_index] = td->inputmode_value;
978
		hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
979 980 981
	}
}

982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002
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;
1003
			hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
1004 1005 1006 1007
		}
	}
}

1008 1009 1010 1011 1012 1013 1014 1015 1016 1017
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;
1018
		quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1019 1020 1021 1022 1023
	}

	td->mtclass.quirks = quirks;
}

1024 1025 1026
static void mt_post_parse(struct mt_device *td)
{
	struct mt_fields *f = td->fields;
1027
	struct mt_class *cls = &td->mtclass;
1028 1029 1030 1031 1032

	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];
	}
1033

1034
	if (td->cc_index < 0)
1035
		cls->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1036 1037
}

1038
static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
1039 1040
{
	struct mt_device *td = hid_get_drvdata(hdev);
1041 1042
	char *name;
	const char *suffix = NULL;
1043
	struct hid_field *field = hi->report->field[0];
1044
	int ret;
1045

1046 1047 1048 1049 1050
	if (hi->report->id == td->mt_report_id) {
		ret = mt_touch_input_configured(hdev, hi);
		if (ret)
			return ret;
	}
1051

1052 1053 1054 1055 1056
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus. Check this first, and then rely on the application
	 * field.
	 */
1057 1058
	if (hi->report->field[0]->physical == HID_DG_STYLUS) {
		suffix = "Pen";
1059 1060
		/* force BTN_STYLUS to allow tablet matching in udev */
		__set_bit(BTN_STYLUS, hi->input->keybit);
1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079
	} 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;
1080 1081 1082
		case HID_DG_TOUCHPAD:
			suffix = "Touchpad";
			break;
1083 1084 1085 1086 1087 1088 1089 1090 1091 1092
		case HID_GD_SYSTEM_CONTROL:
			suffix = "System Control";
			break;
		case HID_CP_CONSUMER_CONTROL:
			suffix = "Consumer Control";
			break;
		default:
			suffix = "UNKNOWN";
			break;
		}
1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103
	}

	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;
		}
	}
1104 1105

	return 0;
1106 1107
}

1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135
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);
	}
}

1136 1137
static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
1138
	int ret, i;
1139
	struct mt_device *td;
1140 1141
	struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */

1142 1143 1144 1145
	for (i = 0; mt_classes[i].name ; i++) {
		if (id->driver_data == mt_classes[i].name) {
			mtclass = &(mt_classes[i]);
			break;
1146 1147
		}
	}
1148

1149
	td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
1150 1151 1152 1153
	if (!td) {
		dev_err(&hdev->dev, "cannot allocate multitouch data\n");
		return -ENOMEM;
	}
1154
	td->mtclass = *mtclass;
1155
	td->inputmode = -1;
1156
	td->maxcontact_report_id = -1;
1157
	td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
1158
	td->cc_index = -1;
1159
	td->mt_report_id = -1;
1160 1161
	hid_set_drvdata(hdev, td);

1162 1163
	td->fields = devm_kzalloc(&hdev->dev, sizeof(struct mt_fields),
				  GFP_KERNEL);
1164 1165
	if (!td->fields) {
		dev_err(&hdev->dev, "cannot allocate multitouch fields data\n");
1166
		return -ENOMEM;
1167 1168
	}

1169 1170 1171
	if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
		td->serial_maybe = true;

1172 1173 1174 1175 1176 1177 1178 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
	/*
	 * 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;

1205 1206
	ret = hid_parse(hdev);
	if (ret != 0)
1207
		return ret;
1208

1209 1210 1211
	if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
		mt_fix_const_fields(hdev, HID_DG_CONTACTID);

1212
	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1213
	if (ret)
1214
		return ret;
1215

1216
	ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
1217 1218 1219
	if (ret)
		dev_warn(&hdev->dev, "Cannot allocate sysfs group for %s\n",
				hdev->name);
1220

1221
	mt_set_maxcontacts(hdev);
1222 1223
	mt_set_input_mode(hdev);

1224 1225
	/* release .fields memory as it is not used anymore */
	devm_kfree(&hdev->dev, td->fields);
1226 1227
	td->fields = NULL;

1228 1229 1230 1231
	return 0;
}

#ifdef CONFIG_PM
1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247
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);
			}
1248
			input_mt_sync_frame(input_dev);
1249 1250 1251 1252 1253
			input_sync(input_dev);
		}
	}
}

1254 1255
static int mt_reset_resume(struct hid_device *hdev)
{
1256
	mt_release_contacts(hdev);
1257
	mt_set_maxcontacts(hdev);
1258 1259 1260
	mt_set_input_mode(hdev);
	return 0;
}
1261 1262 1263 1264 1265 1266 1267

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. */

1268
	hid_hw_idle(hdev, 0, 0, HID_REQ_SET_IDLE);
1269 1270 1271

	return 0;
}
1272 1273 1274 1275
#endif

static void mt_remove(struct hid_device *hdev)
{
1276 1277
	struct mt_device *td = hid_get_drvdata(hdev);

1278
	sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
1279
	hid_hw_stop(hdev);
1280
	hdev->quirks = td->initial_quirks;
1281 1282
}

1283 1284 1285 1286 1287 1288
/*
 * 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.
 */
1289 1290
static const struct hid_device_id mt_devices[] = {

1291 1292
	/* 3M panels */
	{ .driver_data = MT_CLS_3M,
1293
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1294 1295
			USB_DEVICE_ID_3M1968) },
	{ .driver_data = MT_CLS_3M,
1296
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1297
			USB_DEVICE_ID_3M2256) },
1298
	{ .driver_data = MT_CLS_3M,
1299
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1300
			USB_DEVICE_ID_3M3266) },
1301

1302 1303 1304 1305 1306 1307 1308 1309 1310 1311
	/* 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) },

1312 1313 1314 1315
	/* Anton devices */
	{ .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
		MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
			USB_DEVICE_ID_ANTON_TOUCH_PAD) },
1316

1317
	/* Atmel panels */
1318
	{ .driver_data = MT_CLS_SERIAL,
1319
		MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1320
			USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
1321

1322
	/* Baanto multitouch devices */
1323
	{ .driver_data = MT_CLS_NSMU,
1324
		MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
1325
			USB_DEVICE_ID_BAANTO_MT_190W2) },
1326

1327 1328
	/* Cando panels */
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1329
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1330 1331
			USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1332
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1333 1334
			USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },

1335
	/* Chunghwa Telecom touch panels */
1336
	{  .driver_data = MT_CLS_NSMU,
1337
		MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
1338 1339
			USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },

1340 1341 1342 1343 1344 1345 1346 1347
	/* 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) },

1348
	/* CVTouch panels */
1349
	{ .driver_data = MT_CLS_NSMU,
1350
		MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
1351 1352
			USB_DEVICE_ID_CVTOUCH_SCREEN) },

1353
	/* eGalax devices (resistive) */
1354
	{ .driver_data = MT_CLS_EGALAX,
1355
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1356 1357
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
	{ .driver_data = MT_CLS_EGALAX,
1358
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1359
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
1360 1361

	/* eGalax devices (capacitive) */
1362
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1363
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1364
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
1365
	{ .driver_data = MT_CLS_EGALAX,
1366
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1367
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
1368
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1369
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1370
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
1371
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1372
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1373
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
1374
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1375
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1376
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
1377
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1378
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1379
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
1380 1381 1382
	{ .driver_data = MT_CLS_EGALAX,
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
1383
	{ .driver_data = MT_CLS_EGALAX,
1384
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1385
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
1386
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1387
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1388
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
1389 1390 1391 1392 1393 1394
	{ .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) },
1395
	{ .driver_data = MT_CLS_EGALAX,
1396
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1397
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
1398
	{ .driver_data = MT_CLS_EGALAX,
1399
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1400
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
1401
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1402
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1403
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
1404
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1405 1406
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
1407
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1408
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1409
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1410

1411 1412 1413 1414 1415
	/* Elitegroup panel */
	{ .driver_data = MT_CLS_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
			USB_DEVICE_ID_ELITEGROUP_05D8) },

1416 1417 1418 1419 1420
	/* Flatfrog Panels */
	{ .driver_data = MT_CLS_FLATFROG,
		MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
			USB_DEVICE_ID_MULTITOUCH_3200) },

1421 1422 1423 1424 1425
	/* FocalTech Panels */
	{ .driver_data = MT_CLS_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
			USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },

1426
	/* GeneralTouch panel */
1427
	{ .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1428
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1429
			USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
1430 1431 1432
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447
	{ .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) },
1448

1449
	/* Gametel game controller */
1450
	{ .driver_data = MT_CLS_NSMU,
1451
		MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
1452 1453
			USB_DEVICE_ID_GAMETEL_MT_MODE) },

1454
	/* GoodTouch panels */
1455
	{ .driver_data = MT_CLS_NSMU,
1456
		MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
1457 1458
			USB_DEVICE_ID_GOODTOUCH_000f) },

1459 1460
	/* Hanvon panels */
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1461
		MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
1462 1463
			USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },

1464
	/* Ilitek dual touch panel */
1465
	{  .driver_data = MT_CLS_NSMU,
1466
		MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
1467 1468
			USB_DEVICE_ID_ILITEK_MULTITOUCH) },

1469 1470 1471 1472 1473
	/* LG Melfas panel */
	{ .driver_data = MT_CLS_LG,
		HID_USB_DEVICE(USB_VENDOR_ID_LG,
			USB_DEVICE_ID_LG_MELFAS_MT) },

1474 1475
	/* MosArt panels */
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1476
		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1477 1478
			USB_DEVICE_ID_ASUS_T91MT)},
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1479
		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1480 1481
			USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1482
		MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1483 1484
			USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },

1485 1486
	/* Panasonic panels */
	{ .driver_data = MT_CLS_PANASONIC,
1487
		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1488 1489
			USB_DEVICE_ID_PANABOARD_UBT780) },
	{ .driver_data = MT_CLS_PANASONIC,
1490
		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1491 1492
			USB_DEVICE_ID_PANABOARD_UBT880) },

1493
	/* Novatek Panel */
1494
	{ .driver_data = MT_CLS_NSMU,
1495
		MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
1496 1497
			USB_DEVICE_ID_NOVATEK_PCT) },

1498 1499 1500 1501 1502
	/* Ntrig Panel */
	{ .driver_data = MT_CLS_NSMU,
		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
			USB_VENDOR_ID_NTRIG, 0x1b05) },

1503 1504
	/* PixArt optical touch screen */
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1505
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1506 1507
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1508
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1509 1510
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1511
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1512 1513
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },

1514
	/* PixCir-based panels */
1515
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1516
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1517 1518
			USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },

1519 1520
	/* Quanta-based panels */
	{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1521
		MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1522
			USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1523

1524
	/* Stantum panels */
1525
	{ .driver_data = MT_CLS_CONFIDENCE,
1526
		MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1527 1528
			USB_DEVICE_ID_MTP_STM)},

1529 1530
	/* TopSeed panels */
	{ .driver_data = MT_CLS_TOPSEED,
1531
		MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
1532 1533
			USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },

1534
	/* Touch International panels */
1535
	{ .driver_data = MT_CLS_NSMU,
1536
		MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
1537 1538
			USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },

1539
	/* Unitec panels */
1540
	{ .driver_data = MT_CLS_NSMU,
1541
		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1542
			USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
1543
	{ .driver_data = MT_CLS_NSMU,
1544
		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1545
			USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1546

1547 1548 1549 1550 1551
	/* VTL panels */
	{ .driver_data = MT_CLS_VTL,
		MT_USB_DEVICE(USB_VENDOR_ID_VTL,
			USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },

1552 1553 1554 1555 1556
	/* Wistron panels */
	{ .driver_data = MT_CLS_NSMU,
		MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
			USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },

1557
	/* XAT */
1558
	{ .driver_data = MT_CLS_NSMU,
1559
		MT_USB_DEVICE(USB_VENDOR_ID_XAT,
1560
			USB_DEVICE_ID_XAT_CSR) },
1561

1562
	/* Xiroku */
1563
	{ .driver_data = MT_CLS_NSMU,
1564
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1565
			USB_DEVICE_ID_XIROKU_SPX) },
1566
	{ .driver_data = MT_CLS_NSMU,
1567
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1568
			USB_DEVICE_ID_XIROKU_MPX) },
1569
	{ .driver_data = MT_CLS_NSMU,
1570
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1571
			USB_DEVICE_ID_XIROKU_CSR) },
1572
	{ .driver_data = MT_CLS_NSMU,
1573
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1574
			USB_DEVICE_ID_XIROKU_SPX1) },
1575
	{ .driver_data = MT_CLS_NSMU,
1576
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1577
			USB_DEVICE_ID_XIROKU_MPX1) },
1578
	{ .driver_data = MT_CLS_NSMU,
1579
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1580
			USB_DEVICE_ID_XIROKU_CSR1) },
1581
	{ .driver_data = MT_CLS_NSMU,
1582
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1583
			USB_DEVICE_ID_XIROKU_SPX2) },
1584
	{ .driver_data = MT_CLS_NSMU,
1585
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1586
			USB_DEVICE_ID_XIROKU_MPX2) },
1587
	{ .driver_data = MT_CLS_NSMU,
1588
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1589 1590
			USB_DEVICE_ID_XIROKU_CSR2) },

1591 1592
	/* Generic MT device */
	{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1593 1594 1595 1596 1597

	/* 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) },
1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613
	{ }
};
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,
1614
	.input_configured = mt_input_configured,
1615 1616 1617
	.feature_mapping = mt_feature_mapping,
	.usage_table = mt_grabbed_usages,
	.event = mt_event,
1618
	.report = mt_report,
1619 1620
#ifdef CONFIG_PM
	.reset_resume = mt_reset_resume,
1621
	.resume = mt_resume,
1622 1623
#endif
};
1624
module_hid_driver(mt_driver);