hid-multitouch.c 42.8 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 64
#define MT_QUIRK_ALWAYS_VALID		(1 << 4)
#define MT_QUIRK_VALID_IS_INRANGE	(1 << 5)
#define MT_QUIRK_VALID_IS_CONFIDENCE	(1 << 6)
#define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE	(1 << 8)
65
#define MT_QUIRK_NO_AREA		(1 << 9)
66
#define MT_QUIRK_IGNORE_DUPLICATES	(1 << 10)
67
#define MT_QUIRK_HOVERING		(1 << 11)
68
#define MT_QUIRK_CONTACT_CNT_ACCURATE	(1 << 12)
69
#define MT_QUIRK_FORCE_GET_FEATURE	(1 << 13)
70

71 72 73
#define MT_INPUTMODE_TOUCHSCREEN	0x02
#define MT_INPUTMODE_TOUCHPAD		0x03

74 75
#define MT_BUTTONTYPE_CLICKPAD		0

76
struct mt_slot {
77
	__s32 x, y, cx, cy, p, w, h;
78 79
	__s32 contactid;	/* the device ContactID assigned to this slot */
	bool touch_state;	/* is the touch valid? */
80
	bool inrange_state;	/* is the finger in proximity of the sensor? */
81 82
};

83 84 85 86 87 88 89 90
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;
91
	bool is_indirect;	/* true for touchpads */
92
	bool export_all_inputs;	/* do not ignore mouse, keyboards, etc... */
93 94
};

95 96 97 98 99
struct mt_fields {
	unsigned usages[HID_MAX_FIELDS];
	unsigned int length;
};

100 101
struct mt_device {
	struct mt_slot curdata;	/* placeholder of incoming data */
102
	struct mt_class mtclass;	/* our mt device class */
103 104
	struct mt_fields *fields;	/* temporary placeholder for storing the
					   multitouch fields */
105 106
	int cc_index;	/* contact count field index in the report */
	int cc_value_index;	/* contact count value index in the field */
107
	unsigned last_slot_field;	/* the last field of a slot */
108
	unsigned mt_report_id;	/* the report ID of the multitouch device */
109 110 111
	__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,
112
				   -1 if non-existent */
113
	__u8 inputmode_value;  /* InputMode HID feature value */
114 115
	__u8 num_received;	/* how many contacts we received */
	__u8 num_expected;	/* expected last contact index */
116
	__u8 maxcontacts;
117 118 119
	__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 */
120
	__u8 buttons_count;	/* number of physical buttons per touchpad */
121
	bool is_buttonpad;	/* is this device a button pad? */
122
	bool serial_maybe;	/* need to check for serial protocol */
123
	bool curvalid;		/* is the current contact valid? */
124
	unsigned mt_flags;	/* flags to pass to input-mt */
125 126
};

127 128 129
static void mt_post_parse_default_settings(struct mt_device *td);
static void mt_post_parse(struct mt_device *td);

130
/* classes of device behavior */
131 132
#define MT_CLS_DEFAULT				0x0001

133 134
#define MT_CLS_SERIAL				0x0002
#define MT_CLS_CONFIDENCE			0x0003
135 136 137 138
#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
139
/* reserved					0x0008 */
140
#define MT_CLS_INRANGE_CONTACTNUMBER		0x0009
141
#define MT_CLS_NSMU				0x000a
142 143
/* reserved					0x0010 */
/* reserved					0x0011 */
144
#define MT_CLS_WIN_8				0x0012
145
#define MT_CLS_EXPORT_ALL_INPUTS		0x0013
146 147 148

/* vendor specific classes */
#define MT_CLS_3M				0x0101
149
/* reserved					0x0102 */
150
#define MT_CLS_EGALAX				0x0103
151
#define MT_CLS_EGALAX_SERIAL			0x0104
152
#define MT_CLS_TOPSEED				0x0105
153
#define MT_CLS_PANASONIC			0x0106
154
#define MT_CLS_FLATFROG				0x0107
155 156
#define MT_CLS_GENERALTOUCH_TWOFINGERS		0x0108
#define MT_CLS_GENERALTOUCH_PWT_TENFINGERS	0x0109
157
#define MT_CLS_VTL				0x0110
158

159
#define MT_DEFAULT_MAXCONTACT	10
160
#define MT_MAX_MAXCONTACT	250
161

162 163 164
#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)

165 166 167 168 169
/*
 * these device-dependent functions determine what slot corresponds
 * to a valid contact that was just read.
 */

170 171 172 173 174 175 176 177
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;
}

178
static struct mt_class mt_classes[] = {
179
	{ .name = MT_CLS_DEFAULT,
180 181 182
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE },
	{ .name = MT_CLS_NSMU,
183
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
184 185
	{ .name = MT_CLS_SERIAL,
		.quirks = MT_QUIRK_ALWAYS_VALID},
186 187
	{ .name = MT_CLS_CONFIDENCE,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
188 189 190
	{ .name = MT_CLS_CONFIDENCE_CONTACT_ID,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
			MT_QUIRK_SLOT_IS_CONTACTID },
191 192 193
	{ .name = MT_CLS_CONFIDENCE_MINUS_ONE,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
			MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
194
	{ .name = MT_CLS_DUAL_INRANGE_CONTACTID,
195 196 197
		.quirks = MT_QUIRK_VALID_IS_INRANGE |
			MT_QUIRK_SLOT_IS_CONTACTID,
		.maxcontacts = 2 },
198
	{ .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
199 200 201
		.quirks = MT_QUIRK_VALID_IS_INRANGE |
			MT_QUIRK_SLOT_IS_CONTACTNUMBER,
		.maxcontacts = 2 },
202 203 204
	{ .name = MT_CLS_INRANGE_CONTACTNUMBER,
		.quirks = MT_QUIRK_VALID_IS_INRANGE |
			MT_QUIRK_SLOT_IS_CONTACTNUMBER },
205 206 207 208 209
	{ .name = MT_CLS_WIN_8,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_IGNORE_DUPLICATES |
			MT_QUIRK_HOVERING |
			MT_QUIRK_CONTACT_CNT_ACCURATE },
210 211 212 213
	{ .name = MT_CLS_EXPORT_ALL_INPUTS,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE,
		.export_all_inputs = true },
214 215 216 217 218 219 220 221 222

	/*
	 * vendor specific classes
	 */
	{ .name = MT_CLS_3M,
		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
			MT_QUIRK_SLOT_IS_CONTACTID,
		.sn_move = 2048,
		.sn_width = 128,
223 224 225
		.sn_height = 128,
		.maxcontacts = 60,
	},
226 227
	{ .name = MT_CLS_EGALAX,
		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
228
			MT_QUIRK_VALID_IS_INRANGE,
229 230 231
		.sn_move = 4096,
		.sn_pressure = 32,
	},
232 233 234
	{ .name = MT_CLS_EGALAX_SERIAL,
		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
			MT_QUIRK_ALWAYS_VALID,
235 236 237
		.sn_move = 4096,
		.sn_pressure = 32,
	},
238 239 240 241 242
	{ .name = MT_CLS_TOPSEED,
		.quirks = MT_QUIRK_ALWAYS_VALID,
		.is_indirect = true,
		.maxcontacts = 2,
	},
243 244 245
	{ .name = MT_CLS_PANASONIC,
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
		.maxcontacts = 4 },
246 247 248
	{ .name	= MT_CLS_GENERALTOUCH_TWOFINGERS,
		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
			MT_QUIRK_VALID_IS_INRANGE |
249
			MT_QUIRK_SLOT_IS_CONTACTID,
250 251 252 253
		.maxcontacts = 2
	},
	{ .name	= MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
254
			MT_QUIRK_SLOT_IS_CONTACTID
255
	},
256

257 258 259 260 261 262
	{ .name = MT_CLS_FLATFROG,
		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
			MT_QUIRK_NO_AREA,
		.sn_move = 2048,
		.maxcontacts = 40,
	},
263 264 265 266 267
	{ .name = MT_CLS_VTL,
		.quirks = MT_QUIRK_ALWAYS_VALID |
			MT_QUIRK_CONTACT_CNT_ACCURATE |
			MT_QUIRK_FORCE_GET_FEATURE,
	},
268
	{ }
269 270
};

271 272 273 274
static ssize_t mt_show_quirks(struct device *dev,
			   struct device_attribute *attr,
			   char *buf)
{
G
Geliang Tang 已提交
275
	struct hid_device *hdev = to_hid_device(dev);
276 277 278 279 280 281 282 283 284
	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 已提交
285
	struct hid_device *hdev = to_hid_device(dev);
286 287 288 289 290 291 292 293 294
	struct mt_device *td = hid_get_drvdata(hdev);

	unsigned long val;

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

	td->mtclass.quirks = val;

295
	if (td->cc_index < 0)
296 297
		td->mtclass.quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;

298 299 300 301 302 303 304 305 306 307 308 309 310 311
	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
};

312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
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;

	/*
	 * Only fetch the feature report if initial reports are not already
	 * been retrieved. Currently this is only done for Windows 8 touch
	 * devices.
	 */
	if (!(hdev->quirks & HID_QUIRK_NO_INIT_REPORTS))
		return;
	if (td->mtclass.name != MT_CLS_WIN_8)
		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);
}

347
static void mt_feature_mapping(struct hid_device *hdev,
348 349
		struct hid_field *field, struct hid_usage *usage)
{
350 351 352 353
	struct mt_device *td = hid_get_drvdata(hdev);

	switch (usage->hid) {
	case HID_DG_INPUTMODE:
354 355 356 357
		/* 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;
358 359
		}

360 361 362 363 364 365 366 367 368 369 370 371 372
		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");
		}
373

374 375
		break;
	case HID_DG_CONTACTMAX:
376 377
		mt_get_feature(hdev, field->report);

378
		td->maxcontact_report_id = field->report->id;
379
		td->maxcontacts = field->value[0];
380 381 382
		if (!td->maxcontacts &&
		    field->logical_maximum <= MT_MAX_MAXCONTACT)
			td->maxcontacts = field->logical_maximum;
383
		if (td->mtclass.maxcontacts)
384
			/* check if the maxcontacts is given by the class */
385
			td->maxcontacts = td->mtclass.maxcontacts;
386

387 388 389 390 391 392 393
		break;
	case HID_DG_BUTTONTYPE:
		if (usage->usage_index >= field->report_count) {
			dev_err(&hdev->dev, "HID_DG_BUTTONTYPE out of range\n");
			break;
		}

394
		mt_get_feature(hdev, field->report);
395 396 397
		if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
			td->is_buttonpad = true;

398
		break;
399 400 401 402 403
	case 0xff0000c5:
		/* Retrieve the Win8 blob once to enable some devices */
		if (usage->usage_index == 0)
			mt_get_feature(hdev, field->report);
		break;
404 405 406 407 408 409 410 411 412 413
	}
}

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);
414
	input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
415 416
}

417
static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
418 419
		struct hid_input *hi)
{
420 421 422 423 424 425
	struct mt_fields *f = td->fields;

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

	f->usages[f->length++] = usage->hid;
426 427
}

428
static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
429 430 431 432
		struct hid_field *field, struct hid_usage *usage,
		unsigned long **bit, int *max)
{
	struct mt_device *td = hid_get_drvdata(hdev);
433
	struct mt_class *cls = &td->mtclass;
434
	int code;
435
	struct hid_usage *prev_usage = NULL;
436

437
	if (field->application == HID_DG_TOUCHSCREEN)
438
		td->mt_flags |= INPUT_MT_DIRECT;
439

440 441
	/*
	 * Model touchscreens providing buttons as touchpads.
442 443
	 */
	if (field->application == HID_DG_TOUCHPAD ||
444
	    (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
445
		td->mt_flags |= INPUT_MT_POINTER;
446 447
		td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
	}
448

449 450 451 452
	/* count the buttons on touchpads */
	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
		td->buttons_count++;

453 454 455
	if (usage->usage_index)
		prev_usage = &field->usage[usage->usage_index - 1];

456 457 458 459 460
	switch (usage->hid & HID_USAGE_PAGE) {

	case HID_UP_GENDESK:
		switch (usage->hid) {
		case HID_GD_X:
461 462 463 464 465 466 467
			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,
468
					EV_ABS, ABS_MT_POSITION_X);
469 470 471 472
				set_abs(hi->input, ABS_MT_POSITION_X, field,
					cls->sn_move);
			}

473
			mt_store_field(usage, td, hi);
474 475
			return 1;
		case HID_GD_Y:
476 477 478 479 480 481 482
			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,
483
					EV_ABS, ABS_MT_POSITION_Y);
484 485 486 487
				set_abs(hi->input, ABS_MT_POSITION_Y, field,
					cls->sn_move);
			}

488
			mt_store_field(usage, td, hi);
489 490 491 492 493 494 495
			return 1;
		}
		return 0;

	case HID_UP_DIGITIZER:
		switch (usage->hid) {
		case HID_DG_INRANGE:
496 497 498 499 500 501
			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);
			}
502
			mt_store_field(usage, td, hi);
503 504
			return 1;
		case HID_DG_CONFIDENCE:
505 506 507 508 509
			if (cls->name == MT_CLS_WIN_8 &&
				field->application == HID_DG_TOUCHPAD) {
				cls->quirks &= ~MT_QUIRK_ALWAYS_VALID;
				cls->quirks |= MT_QUIRK_VALID_IS_CONFIDENCE;
			}
510
			mt_store_field(usage, td, hi);
511 512 513 514
			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);
515
			mt_store_field(usage, td, hi);
516 517
			return 1;
		case HID_DG_CONTACTID:
518
			mt_store_field(usage, td, hi);
519
			td->touches_by_report++;
520
			td->mt_report_id = field->report->id;
521 522 523 524
			return 1;
		case HID_DG_WIDTH:
			hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOUCH_MAJOR);
525 526 527
			if (!(cls->quirks & MT_QUIRK_NO_AREA))
				set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
					cls->sn_width);
528
			mt_store_field(usage, td, hi);
529 530 531 532
			return 1;
		case HID_DG_HEIGHT:
			hid_map_usage(hi, usage, bit, max,
					EV_ABS, ABS_MT_TOUCH_MINOR);
533 534 535 536
			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,
537
					ABS_MT_ORIENTATION, 0, 1, 0, 0);
538
			}
539
			mt_store_field(usage, td, hi);
540 541 542 543 544 545
			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);
546
			mt_store_field(usage, td, hi);
547 548
			return 1;
		case HID_DG_CONTACTCOUNT:
549 550 551 552
			/* Ignore if indexes are out of bounds. */
			if (field->index >= field->report->maxfield ||
			    usage->usage_index >= field->report_count)
				return 1;
553 554
			td->cc_index = field->index;
			td->cc_value_index = usage->usage_index;
555 556 557 558 559
			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;
560 561 562 563
		case HID_DG_TOUCH:
			/* Legacy devices use TIPSWITCH and not TOUCH.
			 * Let's just ignore this field. */
			return -1;
564
		}
565 566 567
		/* let hid-input decide for the others */
		return 0;

568 569 570 571 572 573
	case HID_UP_BUTTON:
		code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
		hid_map_usage(hi, usage, bit, max, EV_KEY, code);
		input_set_capability(hi->input, EV_KEY, code);
		return 1;

574 575 576 577 578 579 580 581
	case 0xff000000:
		/* we do not want to map these: no input-oriented meaning */
		return -1;
	}

	return 0;
}

582
static int mt_touch_input_mapped(struct hid_device *hdev, struct hid_input *hi,
583 584 585 586 587 588 589 590 591
		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;
}

592
static int mt_compute_slot(struct mt_device *td, struct input_dev *input)
593
{
594
	__s32 quirks = td->mtclass.quirks;
595

596 597
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
		return td->curdata.contactid;
598

599
	if (quirks & MT_QUIRK_CYPRESS)
600 601
		return cypress_compute_slot(td);

602 603
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
		return td->num_received;
604

605 606 607
	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
		return td->curdata.contactid - 1;

608
	return input_mt_get_slot_by_key(input, td->curdata.contactid);
609 610 611 612 613 614
}

/*
 * 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
 */
615
static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
616
{
617 618 619 620
	if ((td->mtclass.quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
	    td->num_received >= td->num_expected)
		return;

621
	if (td->curvalid || (td->mtclass.quirks & MT_QUIRK_ALWAYS_VALID)) {
622 623
		int slotnum = mt_compute_slot(td, input);
		struct mt_slot *s = &td->curdata;
624
		struct input_mt *mt = input->mt;
625

626 627
		if (slotnum < 0 || slotnum >= td->maxcontacts)
			return;
628

629 630 631 632 633 634 635
		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;
		}

636
		input_mt_slot(input, slotnum);
637
		input_mt_report_slot_state(input, MT_TOOL_FINGER,
638 639 640
			s->touch_state || s->inrange_state);
		if (s->touch_state || s->inrange_state) {
			/* this finger is in proximity of the sensor */
641 642 643 644 645
			int wide = (s->w > s->h);
			/* divided by two to match visual scale of touch */
			int major = max(s->w, s->h) >> 1;
			int minor = min(s->w, s->h) >> 1;

646 647
			input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);
			input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);
648 649
			input_event(input, EV_ABS, ABS_MT_TOOL_X, s->cx);
			input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy);
650 651
			input_event(input, EV_ABS, ABS_MT_DISTANCE,
				!s->touch_state);
652
			input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
653
			input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
654 655
			input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
			input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
656
		}
657 658
	}

659 660 661 662 663 664 665 666 667
	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)
{
668
	input_mt_sync_frame(input);
669 670 671 672
	input_sync(input);
	td->num_received = 0;
}

673
static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
674
				struct hid_usage *usage, __s32 value)
675 676 677 678 679 680 681 682 683 684
{
	/* 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)
685 686
{
	struct mt_device *td = hid_get_drvdata(hid);
687
	__s32 quirks = td->mtclass.quirks;
688
	struct input_dev *input = field->hidinput->input;
689

690
	if (hid->claimed & HID_CLAIMED_INPUT) {
691 692
		switch (usage->hid) {
		case HID_DG_INRANGE:
693
			if (quirks & MT_QUIRK_VALID_IS_INRANGE)
694
				td->curvalid = value;
695 696
			if (quirks & MT_QUIRK_HOVERING)
				td->curdata.inrange_state = value;
697 698
			break;
		case HID_DG_TIPSWITCH:
699 700
			if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
				td->curvalid = value;
701 702 703
			td->curdata.touch_state = value;
			break;
		case HID_DG_CONFIDENCE:
704 705
			if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
				td->curvalid = value;
706 707 708 709 710 711 712 713
			break;
		case HID_DG_CONTACTID:
			td->curdata.contactid = value;
			break;
		case HID_DG_TIPPRESSURE:
			td->curdata.p = value;
			break;
		case HID_GD_X:
714 715 716 717
			if (usage->code == ABS_MT_TOOL_X)
				td->curdata.cx = value;
			else
				td->curdata.x = value;
718 719
			break;
		case HID_GD_Y:
720 721 722 723
			if (usage->code == ABS_MT_TOOL_Y)
				td->curdata.cy = value;
			else
				td->curdata.y = value;
724 725 726 727 728 729 730 731 732
			break;
		case HID_DG_WIDTH:
			td->curdata.w = value;
			break;
		case HID_DG_HEIGHT:
			td->curdata.h = value;
			break;
		case HID_DG_CONTACTCOUNT:
			break;
733 734 735
		case HID_DG_TOUCH:
			/* do nothing */
			break;
736 737

		default:
738 739 740
			if (usage->type)
				input_event(input, usage->type, usage->code,
						value);
741
			return;
742 743
		}

744 745 746 747 748
		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);
		}
749

750
	}
751
}
752

753
static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
754 755 756 757 758
{
	struct mt_device *td = hid_get_drvdata(hid);
	struct hid_field *field;
	unsigned count;
	int r, n;
759

760 761 762 763
	/*
	 * Includes multi-packet support where subsequent
	 * packets are sent with zero contactcount.
	 */
764 765 766 767 768 769
	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;
	}
770

771 772 773 774 775 776 777 778 779 780 781
	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]);
	}
782 783 784

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

787
static int mt_touch_input_configured(struct hid_device *hdev,
788 789 790 791 792
					struct hid_input *hi)
{
	struct mt_device *td = hid_get_drvdata(hdev);
	struct mt_class *cls = &td->mtclass;
	struct input_dev *input = hi->input;
793
	int ret;
794 795 796 797 798 799 800 801 802 803 804 805 806 807

	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;

808 809
	/* check for clickpads */
	if ((td->mt_flags & INPUT_MT_POINTER) && (td->buttons_count == 1))
810 811 812
		td->is_buttonpad = true;

	if (td->is_buttonpad)
813 814
		__set_bit(INPUT_PROP_BUTTONPAD, input->propbit);

815 816 817
	ret = input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
	if (ret)
		return ret;
818 819

	td->mt_flags = 0;
820
	return 0;
821 822 823 824 825 826
}

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)
{
827 828 829 830 831 832 833 834 835 836
	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 &&
837
	    field->application != HID_DG_PEN &&
838
	    field->application != HID_DG_TOUCHPAD)
839
		return -1;
840

841 842 843
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus.
844 845 846
	 * 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.
847
	 */
848
	if (field->physical == HID_DG_STYLUS)
849
		return 0;
850 851 852 853
	else if ((field->physical == 0) &&
		 (field->report->id != td->mt_report_id) &&
		 (td->mt_report_id != -1))
		return 0;
854

855 856 857 858 859 860
	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;
861 862 863 864 865 866
}

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)
{
867 868 869 870
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus.
	 */
871
	if (field->physical == HID_DG_STYLUS)
872
		return 0;
873

874 875 876 877 878 879
	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;
880 881 882 883 884 885 886 887 888 889
}

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

890
	return 0;
891 892 893 894 895
}

static void mt_report(struct hid_device *hid, struct hid_report *report)
{
	struct mt_device *td = hid_get_drvdata(hid);
896
	struct hid_field *field = report->field[0];
897 898 899 900 901

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

	if (report->id == td->mt_report_id)
902
		return mt_touch_report(hid, report);
903

904 905
	if (field && field->hidinput && field->hidinput->input)
		input_sync(field->hidinput->input);
906 907 908 909 910 911 912
}

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;
913 914 915
	struct mt_class *cls = &td->mtclass;
	char *buf;
	int report_len;
916 917 918 919 920 921 922

	if (td->inputmode < 0)
		return;

	re = &(hdev->report_enum[HID_FEATURE_REPORT]);
	r = re->report_id_hash[td->inputmode];
	if (r) {
923
		if (cls->quirks & MT_QUIRK_FORCE_GET_FEATURE) {
924
			report_len = hid_report_len(r);
925 926 927 928 929 930 931 932 933 934
			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);
		}
935
		r->field[0]->value[td->inputmode_index] = td->inputmode_value;
936
		hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
937 938 939
	}
}

940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960
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;
961
			hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
962 963 964 965
		}
	}
}

966 967 968 969 970 971 972 973 974 975
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;
976
		quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
977 978 979 980 981
	}

	td->mtclass.quirks = quirks;
}

982 983 984
static void mt_post_parse(struct mt_device *td)
{
	struct mt_fields *f = td->fields;
985
	struct mt_class *cls = &td->mtclass;
986 987 988 989 990

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

992
	if (td->cc_index < 0)
993
		cls->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
994 995
}

996
static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
997 998
{
	struct mt_device *td = hid_get_drvdata(hdev);
999 1000
	char *name;
	const char *suffix = NULL;
1001
	struct hid_field *field = hi->report->field[0];
1002
	int ret;
1003

1004 1005 1006 1007 1008
	if (hi->report->id == td->mt_report_id) {
		ret = mt_touch_input_configured(hdev, hi);
		if (ret)
			return ret;
	}
1009

1010 1011 1012 1013 1014
	/*
	 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
	 * for the stylus. Check this first, and then rely on the application
	 * field.
	 */
1015 1016
	if (hi->report->field[0]->physical == HID_DG_STYLUS) {
		suffix = "Pen";
1017 1018
		/* force BTN_STYLUS to allow tablet matching in udev */
		__set_bit(BTN_STYLUS, hi->input->keybit);
1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037
	} 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;
1038 1039 1040
		case HID_DG_TOUCHPAD:
			suffix = "Touchpad";
			break;
1041 1042 1043 1044 1045 1046 1047 1048 1049 1050
		case HID_GD_SYSTEM_CONTROL:
			suffix = "System Control";
			break;
		case HID_CP_CONSUMER_CONTROL:
			suffix = "Consumer Control";
			break;
		default:
			suffix = "UNKNOWN";
			break;
		}
1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061
	}

	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;
		}
	}
1062 1063

	return 0;
1064 1065
}

1066 1067
static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
1068
	int ret, i;
1069
	struct mt_device *td;
1070 1071
	struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */

1072 1073 1074 1075
	for (i = 0; mt_classes[i].name ; i++) {
		if (id->driver_data == mt_classes[i].name) {
			mtclass = &(mt_classes[i]);
			break;
1076 1077
		}
	}
1078

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

1084 1085 1086 1087 1088 1089 1090 1091
	/*
	 * 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;

1092 1093 1094 1095 1096 1097 1098 1099 1100
	/*
	 * Handle special quirks for Windows 8 certified devices.
	 */
	if (id->group == HID_GROUP_MULTITOUCH_WIN_8)
		/*
		 * 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.
1101 1102 1103 1104 1105
		 *
		 * 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.
1106
		 */
1107
		hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
1108

1109
	td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
1110 1111 1112 1113
	if (!td) {
		dev_err(&hdev->dev, "cannot allocate multitouch data\n");
		return -ENOMEM;
	}
1114
	td->mtclass = *mtclass;
1115
	td->inputmode = -1;
1116
	td->maxcontact_report_id = -1;
1117
	td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
1118
	td->cc_index = -1;
1119
	td->mt_report_id = -1;
1120 1121
	hid_set_drvdata(hdev, td);

1122 1123
	td->fields = devm_kzalloc(&hdev->dev, sizeof(struct mt_fields),
				  GFP_KERNEL);
1124 1125
	if (!td->fields) {
		dev_err(&hdev->dev, "cannot allocate multitouch fields data\n");
1126
		return -ENOMEM;
1127 1128
	}

1129 1130 1131
	if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
		td->serial_maybe = true;

1132 1133
	ret = hid_parse(hdev);
	if (ret != 0)
1134
		return ret;
1135 1136

	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1137
	if (ret)
1138
		return ret;
1139

1140
	ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
1141 1142 1143
	if (ret)
		dev_warn(&hdev->dev, "Cannot allocate sysfs group for %s\n",
				hdev->name);
1144

1145
	mt_set_maxcontacts(hdev);
1146 1147
	mt_set_input_mode(hdev);

1148 1149
	/* release .fields memory as it is not used anymore */
	devm_kfree(&hdev->dev, td->fields);
1150 1151
	td->fields = NULL;

1152 1153 1154 1155
	return 0;
}

#ifdef CONFIG_PM
1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176
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);
			}
			input_sync(input_dev);
		}
	}
}

1177 1178
static int mt_reset_resume(struct hid_device *hdev)
{
1179
	mt_release_contacts(hdev);
1180
	mt_set_maxcontacts(hdev);
1181 1182 1183
	mt_set_input_mode(hdev);
	return 0;
}
1184 1185 1186 1187 1188 1189 1190

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

1191
	hid_hw_idle(hdev, 0, 0, HID_REQ_SET_IDLE);
1192 1193 1194

	return 0;
}
1195 1196 1197 1198
#endif

static void mt_remove(struct hid_device *hdev)
{
1199
	sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
1200
	hid_hw_stop(hdev);
1201 1202
}

1203 1204 1205 1206 1207 1208
/*
 * 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.
 */
1209 1210
static const struct hid_device_id mt_devices[] = {

1211 1212
	/* 3M panels */
	{ .driver_data = MT_CLS_3M,
1213
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1214 1215
			USB_DEVICE_ID_3M1968) },
	{ .driver_data = MT_CLS_3M,
1216
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1217
			USB_DEVICE_ID_3M2256) },
1218
	{ .driver_data = MT_CLS_3M,
1219
		MT_USB_DEVICE(USB_VENDOR_ID_3M,
1220
			USB_DEVICE_ID_3M3266) },
1221

1222 1223 1224 1225
	/* Anton devices */
	{ .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
		MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
			USB_DEVICE_ID_ANTON_TOUCH_PAD) },
1226

1227
	/* Atmel panels */
1228
	{ .driver_data = MT_CLS_SERIAL,
1229
		MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1230
			USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
1231

1232
	/* Baanto multitouch devices */
1233
	{ .driver_data = MT_CLS_NSMU,
1234
		MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
1235
			USB_DEVICE_ID_BAANTO_MT_190W2) },
1236

1237 1238
	/* Cando panels */
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1239
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1240 1241
			USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1242
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1243 1244
			USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },

1245
	/* Chunghwa Telecom touch panels */
1246
	{  .driver_data = MT_CLS_NSMU,
1247
		MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
1248 1249
			USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },

1250 1251 1252 1253 1254 1255 1256 1257
	/* 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) },

1258
	/* CVTouch panels */
1259
	{ .driver_data = MT_CLS_NSMU,
1260
		MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
1261 1262
			USB_DEVICE_ID_CVTOUCH_SCREEN) },

1263
	/* eGalax devices (resistive) */
1264
	{ .driver_data = MT_CLS_EGALAX,
1265
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1266 1267
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
	{ .driver_data = MT_CLS_EGALAX,
1268
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1269
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
1270 1271

	/* eGalax devices (capacitive) */
1272
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1273
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1274
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
1275
	{ .driver_data = MT_CLS_EGALAX,
1276
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1277
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
1278
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1279
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1280
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
1281
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1282
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1283
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
1284
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1285
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1286
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
1287
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1288
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1289
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
1290 1291 1292
	{ .driver_data = MT_CLS_EGALAX,
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
1293
	{ .driver_data = MT_CLS_EGALAX,
1294
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1295
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
1296
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1297
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1298
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
1299 1300 1301 1302 1303 1304
	{ .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) },
1305
	{ .driver_data = MT_CLS_EGALAX,
1306
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1307
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
1308
	{ .driver_data = MT_CLS_EGALAX,
1309
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1310
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
1311
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1312
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1313
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
1314
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1315 1316
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
1317
	{ .driver_data = MT_CLS_EGALAX_SERIAL,
1318
		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1319
			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1320

1321 1322 1323 1324 1325
	/* Elitegroup panel */
	{ .driver_data = MT_CLS_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
			USB_DEVICE_ID_ELITEGROUP_05D8) },

1326 1327 1328 1329 1330
	/* Flatfrog Panels */
	{ .driver_data = MT_CLS_FLATFROG,
		MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
			USB_DEVICE_ID_MULTITOUCH_3200) },

1331 1332 1333 1334 1335
	/* FocalTech Panels */
	{ .driver_data = MT_CLS_SERIAL,
		MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
			USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },

1336
	/* GeneralTouch panel */
1337
	{ .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1338
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1339
			USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
1340 1341 1342
	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357
	{ .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) },
1358

1359
	/* Gametel game controller */
1360
	{ .driver_data = MT_CLS_NSMU,
1361
		MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
1362 1363
			USB_DEVICE_ID_GAMETEL_MT_MODE) },

1364
	/* GoodTouch panels */
1365
	{ .driver_data = MT_CLS_NSMU,
1366
		MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
1367 1368
			USB_DEVICE_ID_GOODTOUCH_000f) },

1369 1370
	/* Hanvon panels */
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1371
		MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
1372 1373
			USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },

1374
	/* Ilitek dual touch panel */
1375
	{  .driver_data = MT_CLS_NSMU,
1376
		MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
1377 1378
			USB_DEVICE_ID_ILITEK_MULTITOUCH) },

1379 1380
	/* MosArt panels */
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1381
		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1382 1383
			USB_DEVICE_ID_ASUS_T91MT)},
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1384
		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1385 1386
			USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1387
		MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1388 1389
			USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },

1390 1391
	/* Panasonic panels */
	{ .driver_data = MT_CLS_PANASONIC,
1392
		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1393 1394
			USB_DEVICE_ID_PANABOARD_UBT780) },
	{ .driver_data = MT_CLS_PANASONIC,
1395
		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1396 1397
			USB_DEVICE_ID_PANABOARD_UBT880) },

1398
	/* Novatek Panel */
1399
	{ .driver_data = MT_CLS_NSMU,
1400
		MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
1401 1402
			USB_DEVICE_ID_NOVATEK_PCT) },

1403 1404
	/* PixArt optical touch screen */
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1405
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1406 1407
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1408
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1409 1410
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1411
		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1412 1413
			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },

1414
	/* PixCir-based panels */
1415
	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1416
		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1417 1418
			USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },

1419 1420
	/* Quanta-based panels */
	{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1421
		MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1422
			USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1423

1424
	/* Stantum panels */
1425
	{ .driver_data = MT_CLS_CONFIDENCE,
1426
		MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1427 1428
			USB_DEVICE_ID_MTP_STM)},

1429 1430
	/* TopSeed panels */
	{ .driver_data = MT_CLS_TOPSEED,
1431
		MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
1432 1433
			USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },

1434
	/* Touch International panels */
1435
	{ .driver_data = MT_CLS_NSMU,
1436
		MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
1437 1438
			USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },

1439
	/* Unitec panels */
1440
	{ .driver_data = MT_CLS_NSMU,
1441
		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1442
			USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
1443
	{ .driver_data = MT_CLS_NSMU,
1444
		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1445
			USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1446

1447 1448 1449 1450 1451
	/* VTL panels */
	{ .driver_data = MT_CLS_VTL,
		MT_USB_DEVICE(USB_VENDOR_ID_VTL,
			USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },

1452 1453 1454 1455 1456
	/* Wistron panels */
	{ .driver_data = MT_CLS_NSMU,
		MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
			USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },

1457
	/* XAT */
1458
	{ .driver_data = MT_CLS_NSMU,
1459
		MT_USB_DEVICE(USB_VENDOR_ID_XAT,
1460
			USB_DEVICE_ID_XAT_CSR) },
1461

1462
	/* Xiroku */
1463
	{ .driver_data = MT_CLS_NSMU,
1464
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1465
			USB_DEVICE_ID_XIROKU_SPX) },
1466
	{ .driver_data = MT_CLS_NSMU,
1467
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1468
			USB_DEVICE_ID_XIROKU_MPX) },
1469
	{ .driver_data = MT_CLS_NSMU,
1470
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1471
			USB_DEVICE_ID_XIROKU_CSR) },
1472
	{ .driver_data = MT_CLS_NSMU,
1473
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1474
			USB_DEVICE_ID_XIROKU_SPX1) },
1475
	{ .driver_data = MT_CLS_NSMU,
1476
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1477
			USB_DEVICE_ID_XIROKU_MPX1) },
1478
	{ .driver_data = MT_CLS_NSMU,
1479
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1480
			USB_DEVICE_ID_XIROKU_CSR1) },
1481
	{ .driver_data = MT_CLS_NSMU,
1482
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1483
			USB_DEVICE_ID_XIROKU_SPX2) },
1484
	{ .driver_data = MT_CLS_NSMU,
1485
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1486
			USB_DEVICE_ID_XIROKU_MPX2) },
1487
	{ .driver_data = MT_CLS_NSMU,
1488
		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1489 1490
			USB_DEVICE_ID_XIROKU_CSR2) },

1491 1492
	/* Generic MT device */
	{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1493 1494 1495 1496 1497

	/* 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) },
1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513
	{ }
};
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,
1514
	.input_configured = mt_input_configured,
1515 1516 1517
	.feature_mapping = mt_feature_mapping,
	.usage_table = mt_grabbed_usages,
	.event = mt_event,
1518
	.report = mt_report,
1519 1520
#ifdef CONFIG_PM
	.reset_resume = mt_reset_resume,
1521
	.resume = mt_resume,
1522 1523
#endif
};
1524
module_hid_driver(mt_driver);