cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hid-multitouch.c (63254B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *  HID driver for multitouch panels
      4 *
      5 *  Copyright (c) 2010-2012 Stephane Chatty <chatty@enac.fr>
      6 *  Copyright (c) 2010-2013 Benjamin Tissoires <benjamin.tissoires@gmail.com>
      7 *  Copyright (c) 2010-2012 Ecole Nationale de l'Aviation Civile, France
      8 *  Copyright (c) 2012-2013 Red Hat, Inc
      9 *
     10 *  This code is partly based on hid-egalax.c:
     11 *
     12 *  Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
     13 *  Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
     14 *  Copyright (c) 2010 Canonical, Ltd.
     15 *
     16 *  This code is partly based on hid-3m-pct.c:
     17 *
     18 *  Copyright (c) 2009-2010 Stephane Chatty <chatty@enac.fr>
     19 *  Copyright (c) 2010      Henrik Rydberg <rydberg@euromail.se>
     20 *  Copyright (c) 2010      Canonical, Ltd.
     21 */
     22
     23/*
     24 */
     25
     26/*
     27 * This driver is regularly tested thanks to the test suite in hid-tools[1].
     28 * Please run these regression tests before patching this module so that
     29 * your patch won't break existing known devices.
     30 *
     31 * [1] https://gitlab.freedesktop.org/libevdev/hid-tools
     32 */
     33
     34#include <linux/device.h>
     35#include <linux/hid.h>
     36#include <linux/module.h>
     37#include <linux/slab.h>
     38#include <linux/input/mt.h>
     39#include <linux/jiffies.h>
     40#include <linux/string.h>
     41#include <linux/timer.h>
     42
     43
     44MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
     45MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
     46MODULE_DESCRIPTION("HID multitouch panels");
     47MODULE_LICENSE("GPL");
     48
     49#include "hid-ids.h"
     50
     51/* quirks to control the device */
     52#define MT_QUIRK_NOT_SEEN_MEANS_UP	BIT(0)
     53#define MT_QUIRK_SLOT_IS_CONTACTID	BIT(1)
     54#define MT_QUIRK_CYPRESS		BIT(2)
     55#define MT_QUIRK_SLOT_IS_CONTACTNUMBER	BIT(3)
     56#define MT_QUIRK_ALWAYS_VALID		BIT(4)
     57#define MT_QUIRK_VALID_IS_INRANGE	BIT(5)
     58#define MT_QUIRK_VALID_IS_CONFIDENCE	BIT(6)
     59#define MT_QUIRK_CONFIDENCE		BIT(7)
     60#define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE	BIT(8)
     61#define MT_QUIRK_NO_AREA		BIT(9)
     62#define MT_QUIRK_IGNORE_DUPLICATES	BIT(10)
     63#define MT_QUIRK_HOVERING		BIT(11)
     64#define MT_QUIRK_CONTACT_CNT_ACCURATE	BIT(12)
     65#define MT_QUIRK_FORCE_GET_FEATURE	BIT(13)
     66#define MT_QUIRK_FIX_CONST_CONTACT_ID	BIT(14)
     67#define MT_QUIRK_TOUCH_SIZE_SCALING	BIT(15)
     68#define MT_QUIRK_STICKY_FINGERS		BIT(16)
     69#define MT_QUIRK_ASUS_CUSTOM_UP		BIT(17)
     70#define MT_QUIRK_WIN8_PTP_BUTTONS	BIT(18)
     71#define MT_QUIRK_SEPARATE_APP_REPORT	BIT(19)
     72#define MT_QUIRK_FORCE_MULTI_INPUT	BIT(20)
     73#define MT_QUIRK_DISABLE_WAKEUP		BIT(21)
     74
     75#define MT_INPUTMODE_TOUCHSCREEN	0x02
     76#define MT_INPUTMODE_TOUCHPAD		0x03
     77
     78#define MT_BUTTONTYPE_CLICKPAD		0
     79
     80enum latency_mode {
     81	HID_LATENCY_NORMAL = 0,
     82	HID_LATENCY_HIGH = 1,
     83};
     84
     85#define MT_IO_FLAGS_RUNNING		0
     86#define MT_IO_FLAGS_ACTIVE_SLOTS	1
     87#define MT_IO_FLAGS_PENDING_SLOTS	2
     88
     89static const bool mtrue = true;		/* default for true */
     90static const bool mfalse;		/* default for false */
     91static const __s32 mzero;		/* default for 0 */
     92
     93#define DEFAULT_TRUE	((void *)&mtrue)
     94#define DEFAULT_FALSE	((void *)&mfalse)
     95#define DEFAULT_ZERO	((void *)&mzero)
     96
     97struct mt_usages {
     98	struct list_head list;
     99	__s32 *x, *y, *cx, *cy, *p, *w, *h, *a;
    100	__s32 *contactid;	/* the device ContactID assigned to this slot */
    101	bool *tip_state;	/* is the touch valid? */
    102	bool *inrange_state;	/* is the finger in proximity of the sensor? */
    103	bool *confidence_state;	/* is the touch made by a finger? */
    104};
    105
    106struct mt_application {
    107	struct list_head list;
    108	unsigned int application;
    109	unsigned int report_id;
    110	struct list_head mt_usages;	/* mt usages list */
    111
    112	__s32 quirks;
    113
    114	__s32 *scantime;		/* scantime reported */
    115	__s32 scantime_logical_max;	/* max value for raw scantime */
    116
    117	__s32 *raw_cc;			/* contact count in the report */
    118	int left_button_state;		/* left button state */
    119	unsigned int mt_flags;		/* flags to pass to input-mt */
    120
    121	unsigned long *pending_palm_slots;	/* slots where we reported palm
    122						 * and need to release */
    123
    124	__u8 num_received;	/* how many contacts we received */
    125	__u8 num_expected;	/* expected last contact index */
    126	__u8 buttons_count;	/* number of physical buttons per touchpad */
    127	__u8 touches_by_report;	/* how many touches are present in one report:
    128				 * 1 means we should use a serial protocol
    129				 * > 1 means hybrid (multitouch) protocol
    130				 */
    131
    132	__s32 dev_time;		/* the scan time provided by the device */
    133	unsigned long jiffies;	/* the frame's jiffies */
    134	int timestamp;		/* the timestamp to be sent */
    135	int prev_scantime;		/* scantime reported previously */
    136
    137	bool have_contact_count;
    138};
    139
    140struct mt_class {
    141	__s32 name;	/* MT_CLS */
    142	__s32 quirks;
    143	__s32 sn_move;	/* Signal/noise ratio for move events */
    144	__s32 sn_width;	/* Signal/noise ratio for width events */
    145	__s32 sn_height;	/* Signal/noise ratio for height events */
    146	__s32 sn_pressure;	/* Signal/noise ratio for pressure events */
    147	__u8 maxcontacts;
    148	bool is_indirect;	/* true for touchpads */
    149	bool export_all_inputs;	/* do not ignore mouse, keyboards, etc... */
    150};
    151
    152struct mt_report_data {
    153	struct list_head list;
    154	struct hid_report *report;
    155	struct mt_application *application;
    156	bool is_mt_collection;
    157};
    158
    159struct mt_device {
    160	struct mt_class mtclass;	/* our mt device class */
    161	struct timer_list release_timer;	/* to release sticky fingers */
    162	struct hid_device *hdev;	/* hid_device we're attached to */
    163	unsigned long mt_io_flags;	/* mt flags (MT_IO_FLAGS_*) */
    164	__u8 inputmode_value;	/* InputMode HID feature value */
    165	__u8 maxcontacts;
    166	bool is_buttonpad;	/* is this device a button pad? */
    167	bool serial_maybe;	/* need to check for serial protocol */
    168
    169	struct list_head applications;
    170	struct list_head reports;
    171};
    172
    173static void mt_post_parse_default_settings(struct mt_device *td,
    174					   struct mt_application *app);
    175static void mt_post_parse(struct mt_device *td, struct mt_application *app);
    176
    177/* classes of device behavior */
    178#define MT_CLS_DEFAULT				0x0001
    179
    180#define MT_CLS_SERIAL				0x0002
    181#define MT_CLS_CONFIDENCE			0x0003
    182#define MT_CLS_CONFIDENCE_CONTACT_ID		0x0004
    183#define MT_CLS_CONFIDENCE_MINUS_ONE		0x0005
    184#define MT_CLS_DUAL_INRANGE_CONTACTID		0x0006
    185#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER	0x0007
    186/* reserved					0x0008 */
    187#define MT_CLS_INRANGE_CONTACTNUMBER		0x0009
    188#define MT_CLS_NSMU				0x000a
    189/* reserved					0x0010 */
    190/* reserved					0x0011 */
    191#define MT_CLS_WIN_8				0x0012
    192#define MT_CLS_EXPORT_ALL_INPUTS		0x0013
    193/* reserved					0x0014 */
    194#define MT_CLS_WIN_8_FORCE_MULTI_INPUT		0x0015
    195#define MT_CLS_WIN_8_DISABLE_WAKEUP		0x0016
    196#define MT_CLS_WIN_8_NO_STICKY_FINGERS		0x0017
    197
    198/* vendor specific classes */
    199#define MT_CLS_3M				0x0101
    200/* reserved					0x0102 */
    201#define MT_CLS_EGALAX				0x0103
    202#define MT_CLS_EGALAX_SERIAL			0x0104
    203#define MT_CLS_TOPSEED				0x0105
    204#define MT_CLS_PANASONIC			0x0106
    205#define MT_CLS_FLATFROG				0x0107
    206#define MT_CLS_GENERALTOUCH_TWOFINGERS		0x0108
    207#define MT_CLS_GENERALTOUCH_PWT_TENFINGERS	0x0109
    208#define MT_CLS_LG				0x010a
    209#define MT_CLS_ASUS				0x010b
    210#define MT_CLS_VTL				0x0110
    211#define MT_CLS_GOOGLE				0x0111
    212#define MT_CLS_RAZER_BLADE_STEALTH		0x0112
    213#define MT_CLS_SMART_TECH			0x0113
    214
    215#define MT_DEFAULT_MAXCONTACT	10
    216#define MT_MAX_MAXCONTACT	250
    217
    218/*
    219 * Resync device and local timestamps after that many microseconds without
    220 * receiving data.
    221 */
    222#define MAX_TIMESTAMP_INTERVAL	1000000
    223
    224#define MT_USB_DEVICE(v, p)	HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)
    225#define MT_BT_DEVICE(v, p)	HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)
    226
    227/*
    228 * these device-dependent functions determine what slot corresponds
    229 * to a valid contact that was just read.
    230 */
    231
    232static int cypress_compute_slot(struct mt_application *application,
    233				struct mt_usages *slot)
    234{
    235	if (*slot->contactid != 0 || application->num_received == 0)
    236		return *slot->contactid;
    237	else
    238		return -1;
    239}
    240
    241static const struct mt_class mt_classes[] = {
    242	{ .name = MT_CLS_DEFAULT,
    243		.quirks = MT_QUIRK_ALWAYS_VALID |
    244			MT_QUIRK_CONTACT_CNT_ACCURATE },
    245	{ .name = MT_CLS_NSMU,
    246		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
    247	{ .name = MT_CLS_SERIAL,
    248		.quirks = MT_QUIRK_ALWAYS_VALID},
    249	{ .name = MT_CLS_CONFIDENCE,
    250		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
    251	{ .name = MT_CLS_CONFIDENCE_CONTACT_ID,
    252		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
    253			MT_QUIRK_SLOT_IS_CONTACTID },
    254	{ .name = MT_CLS_CONFIDENCE_MINUS_ONE,
    255		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
    256			MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
    257	{ .name = MT_CLS_DUAL_INRANGE_CONTACTID,
    258		.quirks = MT_QUIRK_VALID_IS_INRANGE |
    259			MT_QUIRK_SLOT_IS_CONTACTID,
    260		.maxcontacts = 2 },
    261	{ .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
    262		.quirks = MT_QUIRK_VALID_IS_INRANGE |
    263			MT_QUIRK_SLOT_IS_CONTACTNUMBER,
    264		.maxcontacts = 2 },
    265	{ .name = MT_CLS_INRANGE_CONTACTNUMBER,
    266		.quirks = MT_QUIRK_VALID_IS_INRANGE |
    267			MT_QUIRK_SLOT_IS_CONTACTNUMBER },
    268	{ .name = MT_CLS_WIN_8,
    269		.quirks = MT_QUIRK_ALWAYS_VALID |
    270			MT_QUIRK_IGNORE_DUPLICATES |
    271			MT_QUIRK_HOVERING |
    272			MT_QUIRK_CONTACT_CNT_ACCURATE |
    273			MT_QUIRK_STICKY_FINGERS |
    274			MT_QUIRK_WIN8_PTP_BUTTONS,
    275		.export_all_inputs = true },
    276	{ .name = MT_CLS_EXPORT_ALL_INPUTS,
    277		.quirks = MT_QUIRK_ALWAYS_VALID |
    278			MT_QUIRK_CONTACT_CNT_ACCURATE,
    279		.export_all_inputs = true },
    280	{ .name = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
    281		.quirks = MT_QUIRK_ALWAYS_VALID |
    282			MT_QUIRK_IGNORE_DUPLICATES |
    283			MT_QUIRK_HOVERING |
    284			MT_QUIRK_CONTACT_CNT_ACCURATE |
    285			MT_QUIRK_STICKY_FINGERS |
    286			MT_QUIRK_WIN8_PTP_BUTTONS |
    287			MT_QUIRK_FORCE_MULTI_INPUT,
    288		.export_all_inputs = true },
    289	{ .name = MT_CLS_WIN_8_DISABLE_WAKEUP,
    290		.quirks = MT_QUIRK_ALWAYS_VALID |
    291			MT_QUIRK_IGNORE_DUPLICATES |
    292			MT_QUIRK_HOVERING |
    293			MT_QUIRK_CONTACT_CNT_ACCURATE |
    294			MT_QUIRK_STICKY_FINGERS |
    295			MT_QUIRK_WIN8_PTP_BUTTONS |
    296			MT_QUIRK_DISABLE_WAKEUP,
    297		.export_all_inputs = true },
    298	{ .name = MT_CLS_WIN_8_NO_STICKY_FINGERS,
    299		.quirks = MT_QUIRK_ALWAYS_VALID |
    300			MT_QUIRK_IGNORE_DUPLICATES |
    301			MT_QUIRK_HOVERING |
    302			MT_QUIRK_CONTACT_CNT_ACCURATE |
    303			MT_QUIRK_WIN8_PTP_BUTTONS,
    304		.export_all_inputs = true },
    305
    306	/*
    307	 * vendor specific classes
    308	 */
    309	{ .name = MT_CLS_3M,
    310		.quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
    311			MT_QUIRK_SLOT_IS_CONTACTID |
    312			MT_QUIRK_TOUCH_SIZE_SCALING,
    313		.sn_move = 2048,
    314		.sn_width = 128,
    315		.sn_height = 128,
    316		.maxcontacts = 60,
    317	},
    318	{ .name = MT_CLS_EGALAX,
    319		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
    320			MT_QUIRK_VALID_IS_INRANGE,
    321		.sn_move = 4096,
    322		.sn_pressure = 32,
    323	},
    324	{ .name = MT_CLS_EGALAX_SERIAL,
    325		.quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
    326			MT_QUIRK_ALWAYS_VALID,
    327		.sn_move = 4096,
    328		.sn_pressure = 32,
    329	},
    330	{ .name = MT_CLS_TOPSEED,
    331		.quirks = MT_QUIRK_ALWAYS_VALID,
    332		.is_indirect = true,
    333		.maxcontacts = 2,
    334	},
    335	{ .name = MT_CLS_PANASONIC,
    336		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
    337		.maxcontacts = 4 },
    338	{ .name	= MT_CLS_GENERALTOUCH_TWOFINGERS,
    339		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
    340			MT_QUIRK_VALID_IS_INRANGE |
    341			MT_QUIRK_SLOT_IS_CONTACTID,
    342		.maxcontacts = 2
    343	},
    344	{ .name	= MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
    345		.quirks	= MT_QUIRK_NOT_SEEN_MEANS_UP |
    346			MT_QUIRK_SLOT_IS_CONTACTID
    347	},
    348
    349	{ .name = MT_CLS_FLATFROG,
    350		.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
    351			MT_QUIRK_NO_AREA,
    352		.sn_move = 2048,
    353		.maxcontacts = 40,
    354	},
    355	{ .name = MT_CLS_LG,
    356		.quirks = MT_QUIRK_ALWAYS_VALID |
    357			MT_QUIRK_FIX_CONST_CONTACT_ID |
    358			MT_QUIRK_IGNORE_DUPLICATES |
    359			MT_QUIRK_HOVERING |
    360			MT_QUIRK_CONTACT_CNT_ACCURATE },
    361	{ .name = MT_CLS_ASUS,
    362		.quirks = MT_QUIRK_ALWAYS_VALID |
    363			MT_QUIRK_CONTACT_CNT_ACCURATE |
    364			MT_QUIRK_ASUS_CUSTOM_UP },
    365	{ .name = MT_CLS_VTL,
    366		.quirks = MT_QUIRK_ALWAYS_VALID |
    367			MT_QUIRK_CONTACT_CNT_ACCURATE |
    368			MT_QUIRK_FORCE_GET_FEATURE,
    369	},
    370	{ .name = MT_CLS_GOOGLE,
    371		.quirks = MT_QUIRK_ALWAYS_VALID |
    372			MT_QUIRK_CONTACT_CNT_ACCURATE |
    373			MT_QUIRK_SLOT_IS_CONTACTID |
    374			MT_QUIRK_HOVERING
    375	},
    376	{ .name = MT_CLS_RAZER_BLADE_STEALTH,
    377		.quirks = MT_QUIRK_ALWAYS_VALID |
    378			MT_QUIRK_IGNORE_DUPLICATES |
    379			MT_QUIRK_HOVERING |
    380			MT_QUIRK_CONTACT_CNT_ACCURATE |
    381			MT_QUIRK_WIN8_PTP_BUTTONS,
    382	},
    383	{ .name = MT_CLS_SMART_TECH,
    384		.quirks = MT_QUIRK_ALWAYS_VALID |
    385			MT_QUIRK_IGNORE_DUPLICATES |
    386			MT_QUIRK_CONTACT_CNT_ACCURATE |
    387			MT_QUIRK_SEPARATE_APP_REPORT,
    388	},
    389	{ }
    390};
    391
    392static ssize_t mt_show_quirks(struct device *dev,
    393			   struct device_attribute *attr,
    394			   char *buf)
    395{
    396	struct hid_device *hdev = to_hid_device(dev);
    397	struct mt_device *td = hid_get_drvdata(hdev);
    398
    399	return sprintf(buf, "%u\n", td->mtclass.quirks);
    400}
    401
    402static ssize_t mt_set_quirks(struct device *dev,
    403			  struct device_attribute *attr,
    404			  const char *buf, size_t count)
    405{
    406	struct hid_device *hdev = to_hid_device(dev);
    407	struct mt_device *td = hid_get_drvdata(hdev);
    408	struct mt_application *application;
    409
    410	unsigned long val;
    411
    412	if (kstrtoul(buf, 0, &val))
    413		return -EINVAL;
    414
    415	td->mtclass.quirks = val;
    416
    417	list_for_each_entry(application, &td->applications, list) {
    418		application->quirks = val;
    419		if (!application->have_contact_count)
    420			application->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
    421	}
    422
    423	return count;
    424}
    425
    426static DEVICE_ATTR(quirks, S_IWUSR | S_IRUGO, mt_show_quirks, mt_set_quirks);
    427
    428static struct attribute *sysfs_attrs[] = {
    429	&dev_attr_quirks.attr,
    430	NULL
    431};
    432
    433static const struct attribute_group mt_attribute_group = {
    434	.attrs = sysfs_attrs
    435};
    436
    437static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)
    438{
    439	int ret;
    440	u32 size = hid_report_len(report);
    441	u8 *buf;
    442
    443	/*
    444	 * Do not fetch the feature report if the device has been explicitly
    445	 * marked as non-capable.
    446	 */
    447	if (hdev->quirks & HID_QUIRK_NO_INIT_REPORTS)
    448		return;
    449
    450	buf = hid_alloc_report_buf(report, GFP_KERNEL);
    451	if (!buf)
    452		return;
    453
    454	ret = hid_hw_raw_request(hdev, report->id, buf, size,
    455				 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
    456	if (ret < 0) {
    457		dev_warn(&hdev->dev, "failed to fetch feature %d\n",
    458			 report->id);
    459	} else {
    460		ret = hid_report_raw_event(hdev, HID_FEATURE_REPORT, buf,
    461					   size, 0);
    462		if (ret)
    463			dev_warn(&hdev->dev, "failed to report feature\n");
    464	}
    465
    466	kfree(buf);
    467}
    468
    469static void mt_feature_mapping(struct hid_device *hdev,
    470		struct hid_field *field, struct hid_usage *usage)
    471{
    472	struct mt_device *td = hid_get_drvdata(hdev);
    473
    474	switch (usage->hid) {
    475	case HID_DG_CONTACTMAX:
    476		mt_get_feature(hdev, field->report);
    477
    478		td->maxcontacts = field->value[0];
    479		if (!td->maxcontacts &&
    480		    field->logical_maximum <= MT_MAX_MAXCONTACT)
    481			td->maxcontacts = field->logical_maximum;
    482		if (td->mtclass.maxcontacts)
    483			/* check if the maxcontacts is given by the class */
    484			td->maxcontacts = td->mtclass.maxcontacts;
    485
    486		break;
    487	case HID_DG_BUTTONTYPE:
    488		if (usage->usage_index >= field->report_count) {
    489			dev_err(&hdev->dev, "HID_DG_BUTTONTYPE out of range\n");
    490			break;
    491		}
    492
    493		mt_get_feature(hdev, field->report);
    494		if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
    495			td->is_buttonpad = true;
    496
    497		break;
    498	case 0xff0000c5:
    499		/* Retrieve the Win8 blob once to enable some devices */
    500		if (usage->usage_index == 0)
    501			mt_get_feature(hdev, field->report);
    502		break;
    503	}
    504}
    505
    506static void set_abs(struct input_dev *input, unsigned int code,
    507		struct hid_field *field, int snratio)
    508{
    509	int fmin = field->logical_minimum;
    510	int fmax = field->logical_maximum;
    511	int fuzz = snratio ? (fmax - fmin) / snratio : 0;
    512	input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
    513	input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
    514}
    515
    516static struct mt_usages *mt_allocate_usage(struct hid_device *hdev,
    517					   struct mt_application *application)
    518{
    519	struct mt_usages *usage;
    520
    521	usage = devm_kzalloc(&hdev->dev, sizeof(*usage), GFP_KERNEL);
    522	if (!usage)
    523		return NULL;
    524
    525	/* set some defaults so we do not need to check for null pointers */
    526	usage->x = DEFAULT_ZERO;
    527	usage->y = DEFAULT_ZERO;
    528	usage->cx = DEFAULT_ZERO;
    529	usage->cy = DEFAULT_ZERO;
    530	usage->p = DEFAULT_ZERO;
    531	usage->w = DEFAULT_ZERO;
    532	usage->h = DEFAULT_ZERO;
    533	usage->a = DEFAULT_ZERO;
    534	usage->contactid = DEFAULT_ZERO;
    535	usage->tip_state = DEFAULT_FALSE;
    536	usage->inrange_state = DEFAULT_FALSE;
    537	usage->confidence_state = DEFAULT_TRUE;
    538
    539	list_add_tail(&usage->list, &application->mt_usages);
    540
    541	return usage;
    542}
    543
    544static struct mt_application *mt_allocate_application(struct mt_device *td,
    545						      struct hid_report *report)
    546{
    547	unsigned int application = report->application;
    548	struct mt_application *mt_application;
    549
    550	mt_application = devm_kzalloc(&td->hdev->dev, sizeof(*mt_application),
    551				      GFP_KERNEL);
    552	if (!mt_application)
    553		return NULL;
    554
    555	mt_application->application = application;
    556	INIT_LIST_HEAD(&mt_application->mt_usages);
    557
    558	if (application == HID_DG_TOUCHSCREEN)
    559		mt_application->mt_flags |= INPUT_MT_DIRECT;
    560
    561	/*
    562	 * Model touchscreens providing buttons as touchpads.
    563	 */
    564	if (application == HID_DG_TOUCHPAD) {
    565		mt_application->mt_flags |= INPUT_MT_POINTER;
    566		td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
    567	}
    568
    569	mt_application->scantime = DEFAULT_ZERO;
    570	mt_application->raw_cc = DEFAULT_ZERO;
    571	mt_application->quirks = td->mtclass.quirks;
    572	mt_application->report_id = report->id;
    573
    574	list_add_tail(&mt_application->list, &td->applications);
    575
    576	return mt_application;
    577}
    578
    579static struct mt_application *mt_find_application(struct mt_device *td,
    580						  struct hid_report *report)
    581{
    582	unsigned int application = report->application;
    583	struct mt_application *tmp, *mt_application = NULL;
    584
    585	list_for_each_entry(tmp, &td->applications, list) {
    586		if (application == tmp->application) {
    587			if (!(td->mtclass.quirks & MT_QUIRK_SEPARATE_APP_REPORT) ||
    588			    tmp->report_id == report->id) {
    589				mt_application = tmp;
    590				break;
    591			}
    592		}
    593	}
    594
    595	if (!mt_application)
    596		mt_application = mt_allocate_application(td, report);
    597
    598	return mt_application;
    599}
    600
    601static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
    602						      struct hid_report *report)
    603{
    604	struct mt_report_data *rdata;
    605	struct hid_field *field;
    606	int r, n;
    607
    608	rdata = devm_kzalloc(&td->hdev->dev, sizeof(*rdata), GFP_KERNEL);
    609	if (!rdata)
    610		return NULL;
    611
    612	rdata->report = report;
    613	rdata->application = mt_find_application(td, report);
    614
    615	if (!rdata->application) {
    616		devm_kfree(&td->hdev->dev, rdata);
    617		return NULL;
    618	}
    619
    620	for (r = 0; r < report->maxfield; r++) {
    621		field = report->field[r];
    622
    623		if (!(HID_MAIN_ITEM_VARIABLE & field->flags))
    624			continue;
    625
    626		if (field->logical == HID_DG_FINGER || td->hdev->group != HID_GROUP_MULTITOUCH_WIN_8) {
    627			for (n = 0; n < field->report_count; n++) {
    628				if (field->usage[n].hid == HID_DG_CONTACTID) {
    629					rdata->is_mt_collection = true;
    630					break;
    631				}
    632			}
    633		}
    634	}
    635
    636	list_add_tail(&rdata->list, &td->reports);
    637
    638	return rdata;
    639}
    640
    641static struct mt_report_data *mt_find_report_data(struct mt_device *td,
    642						  struct hid_report *report)
    643{
    644	struct mt_report_data *tmp, *rdata = NULL;
    645
    646	list_for_each_entry(tmp, &td->reports, list) {
    647		if (report == tmp->report) {
    648			rdata = tmp;
    649			break;
    650		}
    651	}
    652
    653	if (!rdata)
    654		rdata = mt_allocate_report_data(td, report);
    655
    656	return rdata;
    657}
    658
    659static void mt_store_field(struct hid_device *hdev,
    660			   struct mt_application *application,
    661			   __s32 *value,
    662			   size_t offset)
    663{
    664	struct mt_usages *usage;
    665	__s32 **target;
    666
    667	if (list_empty(&application->mt_usages))
    668		usage = mt_allocate_usage(hdev, application);
    669	else
    670		usage = list_last_entry(&application->mt_usages,
    671					struct mt_usages,
    672					list);
    673
    674	if (!usage)
    675		return;
    676
    677	target = (__s32 **)((char *)usage + offset);
    678
    679	/* the value has already been filled, create a new slot */
    680	if (*target != DEFAULT_TRUE &&
    681	    *target != DEFAULT_FALSE &&
    682	    *target != DEFAULT_ZERO) {
    683		if (usage->contactid == DEFAULT_ZERO ||
    684		    usage->x == DEFAULT_ZERO ||
    685		    usage->y == DEFAULT_ZERO) {
    686			hid_dbg(hdev,
    687				"ignoring duplicate usage on incomplete");
    688			return;
    689		}
    690		usage = mt_allocate_usage(hdev, application);
    691		if (!usage)
    692			return;
    693
    694		target = (__s32 **)((char *)usage + offset);
    695	}
    696
    697	*target = value;
    698}
    699
    700#define MT_STORE_FIELD(__name)						\
    701	mt_store_field(hdev, app,					\
    702		       &field->value[usage->usage_index],		\
    703		       offsetof(struct mt_usages, __name))
    704
    705static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
    706		struct hid_field *field, struct hid_usage *usage,
    707		unsigned long **bit, int *max, struct mt_application *app)
    708{
    709	struct mt_device *td = hid_get_drvdata(hdev);
    710	struct mt_class *cls = &td->mtclass;
    711	int code;
    712	struct hid_usage *prev_usage = NULL;
    713
    714	/*
    715	 * Model touchscreens providing buttons as touchpads.
    716	 */
    717	if (field->application == HID_DG_TOUCHSCREEN &&
    718	    (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
    719		app->mt_flags |= INPUT_MT_POINTER;
    720		td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
    721	}
    722
    723	/* count the buttons on touchpads */
    724	if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
    725		app->buttons_count++;
    726
    727	if (usage->usage_index)
    728		prev_usage = &field->usage[usage->usage_index - 1];
    729
    730	switch (usage->hid & HID_USAGE_PAGE) {
    731
    732	case HID_UP_GENDESK:
    733		switch (usage->hid) {
    734		case HID_GD_X:
    735			if (prev_usage && (prev_usage->hid == usage->hid)) {
    736				code = ABS_MT_TOOL_X;
    737				MT_STORE_FIELD(cx);
    738			} else {
    739				code = ABS_MT_POSITION_X;
    740				MT_STORE_FIELD(x);
    741			}
    742
    743			set_abs(hi->input, code, field, cls->sn_move);
    744
    745			/*
    746			 * A system multi-axis that exports X and Y has a high
    747			 * chance of being used directly on a surface
    748			 */
    749			if (field->application == HID_GD_SYSTEM_MULTIAXIS) {
    750				__set_bit(INPUT_PROP_DIRECT,
    751					  hi->input->propbit);
    752				input_set_abs_params(hi->input,
    753						     ABS_MT_TOOL_TYPE,
    754						     MT_TOOL_DIAL,
    755						     MT_TOOL_DIAL, 0, 0);
    756			}
    757
    758			return 1;
    759		case HID_GD_Y:
    760			if (prev_usage && (prev_usage->hid == usage->hid)) {
    761				code = ABS_MT_TOOL_Y;
    762				MT_STORE_FIELD(cy);
    763			} else {
    764				code = ABS_MT_POSITION_Y;
    765				MT_STORE_FIELD(y);
    766			}
    767
    768			set_abs(hi->input, code, field, cls->sn_move);
    769
    770			return 1;
    771		}
    772		return 0;
    773
    774	case HID_UP_DIGITIZER:
    775		switch (usage->hid) {
    776		case HID_DG_INRANGE:
    777			if (app->quirks & MT_QUIRK_HOVERING) {
    778				input_set_abs_params(hi->input,
    779					ABS_MT_DISTANCE, 0, 1, 0, 0);
    780			}
    781			MT_STORE_FIELD(inrange_state);
    782			return 1;
    783		case HID_DG_CONFIDENCE:
    784			if ((cls->name == MT_CLS_WIN_8 ||
    785			     cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT ||
    786			     cls->name == MT_CLS_WIN_8_DISABLE_WAKEUP) &&
    787				(field->application == HID_DG_TOUCHPAD ||
    788				 field->application == HID_DG_TOUCHSCREEN))
    789				app->quirks |= MT_QUIRK_CONFIDENCE;
    790
    791			if (app->quirks & MT_QUIRK_CONFIDENCE)
    792				input_set_abs_params(hi->input,
    793						     ABS_MT_TOOL_TYPE,
    794						     MT_TOOL_FINGER,
    795						     MT_TOOL_PALM, 0, 0);
    796
    797			MT_STORE_FIELD(confidence_state);
    798			return 1;
    799		case HID_DG_TIPSWITCH:
    800			if (field->application != HID_GD_SYSTEM_MULTIAXIS)
    801				input_set_capability(hi->input,
    802						     EV_KEY, BTN_TOUCH);
    803			MT_STORE_FIELD(tip_state);
    804			return 1;
    805		case HID_DG_CONTACTID:
    806			MT_STORE_FIELD(contactid);
    807			app->touches_by_report++;
    808			return 1;
    809		case HID_DG_WIDTH:
    810			if (!(app->quirks & MT_QUIRK_NO_AREA))
    811				set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
    812					cls->sn_width);
    813			MT_STORE_FIELD(w);
    814			return 1;
    815		case HID_DG_HEIGHT:
    816			if (!(app->quirks & MT_QUIRK_NO_AREA)) {
    817				set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
    818					cls->sn_height);
    819
    820				/*
    821				 * Only set ABS_MT_ORIENTATION if it is not
    822				 * already set by the HID_DG_AZIMUTH usage.
    823				 */
    824				if (!test_bit(ABS_MT_ORIENTATION,
    825						hi->input->absbit))
    826					input_set_abs_params(hi->input,
    827						ABS_MT_ORIENTATION, 0, 1, 0, 0);
    828			}
    829			MT_STORE_FIELD(h);
    830			return 1;
    831		case HID_DG_TIPPRESSURE:
    832			set_abs(hi->input, ABS_MT_PRESSURE, field,
    833				cls->sn_pressure);
    834			MT_STORE_FIELD(p);
    835			return 1;
    836		case HID_DG_SCANTIME:
    837			input_set_capability(hi->input, EV_MSC, MSC_TIMESTAMP);
    838			app->scantime = &field->value[usage->usage_index];
    839			app->scantime_logical_max = field->logical_maximum;
    840			return 1;
    841		case HID_DG_CONTACTCOUNT:
    842			app->have_contact_count = true;
    843			app->raw_cc = &field->value[usage->usage_index];
    844			return 1;
    845		case HID_DG_AZIMUTH:
    846			/*
    847			 * Azimuth has the range of [0, MAX) representing a full
    848			 * revolution. Set ABS_MT_ORIENTATION to a quarter of
    849			 * MAX according the definition of ABS_MT_ORIENTATION
    850			 */
    851			input_set_abs_params(hi->input, ABS_MT_ORIENTATION,
    852				-field->logical_maximum / 4,
    853				field->logical_maximum / 4,
    854				cls->sn_move ?
    855				field->logical_maximum / cls->sn_move : 0, 0);
    856			MT_STORE_FIELD(a);
    857			return 1;
    858		case HID_DG_CONTACTMAX:
    859			/* contact max are global to the report */
    860			return -1;
    861		case HID_DG_TOUCH:
    862			/* Legacy devices use TIPSWITCH and not TOUCH.
    863			 * Let's just ignore this field. */
    864			return -1;
    865		}
    866		/* let hid-input decide for the others */
    867		return 0;
    868
    869	case HID_UP_BUTTON:
    870		code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
    871		/*
    872		 * MS PTP spec says that external buttons left and right have
    873		 * usages 2 and 3.
    874		 */
    875		if ((app->quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
    876		    field->application == HID_DG_TOUCHPAD &&
    877		    (usage->hid & HID_USAGE) > 1)
    878			code--;
    879
    880		if (field->application == HID_GD_SYSTEM_MULTIAXIS)
    881			code = BTN_0  + ((usage->hid - 1) & HID_USAGE);
    882
    883		hid_map_usage(hi, usage, bit, max, EV_KEY, code);
    884		if (!*bit)
    885			return -1;
    886		input_set_capability(hi->input, EV_KEY, code);
    887		return 1;
    888
    889	case 0xff000000:
    890		/* we do not want to map these: no input-oriented meaning */
    891		return -1;
    892	}
    893
    894	return 0;
    895}
    896
    897static int mt_compute_slot(struct mt_device *td, struct mt_application *app,
    898			   struct mt_usages *slot,
    899			   struct input_dev *input)
    900{
    901	__s32 quirks = app->quirks;
    902
    903	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
    904		return *slot->contactid;
    905
    906	if (quirks & MT_QUIRK_CYPRESS)
    907		return cypress_compute_slot(app, slot);
    908
    909	if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
    910		return app->num_received;
    911
    912	if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
    913		return *slot->contactid - 1;
    914
    915	return input_mt_get_slot_by_key(input, *slot->contactid);
    916}
    917
    918static void mt_release_pending_palms(struct mt_device *td,
    919				     struct mt_application *app,
    920				     struct input_dev *input)
    921{
    922	int slotnum;
    923	bool need_sync = false;
    924
    925	for_each_set_bit(slotnum, app->pending_palm_slots, td->maxcontacts) {
    926		clear_bit(slotnum, app->pending_palm_slots);
    927
    928		input_mt_slot(input, slotnum);
    929		input_mt_report_slot_inactive(input);
    930
    931		need_sync = true;
    932	}
    933
    934	if (need_sync) {
    935		input_mt_sync_frame(input);
    936		input_sync(input);
    937	}
    938}
    939
    940/*
    941 * this function is called when a whole packet has been received and processed,
    942 * so that it can decide what to send to the input layer.
    943 */
    944static void mt_sync_frame(struct mt_device *td, struct mt_application *app,
    945			  struct input_dev *input)
    946{
    947	if (app->quirks & MT_QUIRK_WIN8_PTP_BUTTONS)
    948		input_event(input, EV_KEY, BTN_LEFT, app->left_button_state);
    949
    950	input_mt_sync_frame(input);
    951	input_event(input, EV_MSC, MSC_TIMESTAMP, app->timestamp);
    952	input_sync(input);
    953
    954	mt_release_pending_palms(td, app, input);
    955
    956	app->num_received = 0;
    957	app->left_button_state = 0;
    958
    959	if (test_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags))
    960		set_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
    961	else
    962		clear_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
    963	clear_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags);
    964}
    965
    966static int mt_compute_timestamp(struct mt_application *app, __s32 value)
    967{
    968	long delta = value - app->prev_scantime;
    969	unsigned long jdelta = jiffies_to_usecs(jiffies - app->jiffies);
    970
    971	app->jiffies = jiffies;
    972
    973	if (delta < 0)
    974		delta += app->scantime_logical_max;
    975
    976	/* HID_DG_SCANTIME is expressed in 100us, we want it in us. */
    977	delta *= 100;
    978
    979	if (jdelta > MAX_TIMESTAMP_INTERVAL)
    980		/* No data received for a while, resync the timestamp. */
    981		return 0;
    982	else
    983		return app->timestamp + delta;
    984}
    985
    986static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
    987				struct hid_usage *usage, __s32 value)
    988{
    989	/* we will handle the hidinput part later, now remains hiddev */
    990	if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
    991		hid->hiddev_hid_event(hid, field, usage, value);
    992
    993	return 1;
    994}
    995
    996static int mt_process_slot(struct mt_device *td, struct input_dev *input,
    997			    struct mt_application *app,
    998			    struct mt_usages *slot)
    999{
   1000	struct input_mt *mt = input->mt;
   1001	__s32 quirks = app->quirks;
   1002	bool valid = true;
   1003	bool confidence_state = true;
   1004	bool inrange_state = false;
   1005	int active;
   1006	int slotnum;
   1007	int tool = MT_TOOL_FINGER;
   1008
   1009	if (!slot)
   1010		return -EINVAL;
   1011
   1012	if ((quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
   1013	    app->num_received >= app->num_expected)
   1014		return -EAGAIN;
   1015
   1016	if (!(quirks & MT_QUIRK_ALWAYS_VALID)) {
   1017		if (quirks & MT_QUIRK_VALID_IS_INRANGE)
   1018			valid = *slot->inrange_state;
   1019		if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
   1020			valid = *slot->tip_state;
   1021		if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
   1022			valid = *slot->confidence_state;
   1023
   1024		if (!valid)
   1025			return 0;
   1026	}
   1027
   1028	slotnum = mt_compute_slot(td, app, slot, input);
   1029	if (slotnum < 0 || slotnum >= td->maxcontacts)
   1030		return 0;
   1031
   1032	if ((quirks & MT_QUIRK_IGNORE_DUPLICATES) && mt) {
   1033		struct input_mt_slot *i_slot = &mt->slots[slotnum];
   1034
   1035		if (input_mt_is_active(i_slot) &&
   1036		    input_mt_is_used(mt, i_slot))
   1037			return -EAGAIN;
   1038	}
   1039
   1040	if (quirks & MT_QUIRK_CONFIDENCE)
   1041		confidence_state = *slot->confidence_state;
   1042
   1043	if (quirks & MT_QUIRK_HOVERING)
   1044		inrange_state = *slot->inrange_state;
   1045
   1046	active = *slot->tip_state || inrange_state;
   1047
   1048	if (app->application == HID_GD_SYSTEM_MULTIAXIS)
   1049		tool = MT_TOOL_DIAL;
   1050	else if (unlikely(!confidence_state)) {
   1051		tool = MT_TOOL_PALM;
   1052		if (!active && mt &&
   1053		    input_mt_is_active(&mt->slots[slotnum])) {
   1054			/*
   1055			 * The non-confidence was reported for
   1056			 * previously valid contact that is also no
   1057			 * longer valid. We can't simply report
   1058			 * lift-off as userspace will not be aware
   1059			 * of non-confidence, so we need to split
   1060			 * it into 2 events: active MT_TOOL_PALM
   1061			 * and a separate liftoff.
   1062			 */
   1063			active = true;
   1064			set_bit(slotnum, app->pending_palm_slots);
   1065		}
   1066	}
   1067
   1068	input_mt_slot(input, slotnum);
   1069	input_mt_report_slot_state(input, tool, active);
   1070	if (active) {
   1071		/* this finger is in proximity of the sensor */
   1072		int wide = (*slot->w > *slot->h);
   1073		int major = max(*slot->w, *slot->h);
   1074		int minor = min(*slot->w, *slot->h);
   1075		int orientation = wide;
   1076		int max_azimuth;
   1077		int azimuth;
   1078
   1079		if (slot->a != DEFAULT_ZERO) {
   1080			/*
   1081			 * Azimuth is counter-clockwise and ranges from [0, MAX)
   1082			 * (a full revolution). Convert it to clockwise ranging
   1083			 * [-MAX/2, MAX/2].
   1084			 *
   1085			 * Note that ABS_MT_ORIENTATION require us to report
   1086			 * the limit of [-MAX/4, MAX/4], but the value can go
   1087			 * out of range to [-MAX/2, MAX/2] to report an upside
   1088			 * down ellipsis.
   1089			 */
   1090			azimuth = *slot->a;
   1091			max_azimuth = input_abs_get_max(input,
   1092							ABS_MT_ORIENTATION);
   1093			if (azimuth > max_azimuth * 2)
   1094				azimuth -= max_azimuth * 4;
   1095			orientation = -azimuth;
   1096		}
   1097
   1098		if (quirks & MT_QUIRK_TOUCH_SIZE_SCALING) {
   1099			/*
   1100			 * divided by two to match visual scale of touch
   1101			 * for devices with this quirk
   1102			 */
   1103			major = major >> 1;
   1104			minor = minor >> 1;
   1105		}
   1106
   1107		input_event(input, EV_ABS, ABS_MT_POSITION_X, *slot->x);
   1108		input_event(input, EV_ABS, ABS_MT_POSITION_Y, *slot->y);
   1109		input_event(input, EV_ABS, ABS_MT_TOOL_X, *slot->cx);
   1110		input_event(input, EV_ABS, ABS_MT_TOOL_Y, *slot->cy);
   1111		input_event(input, EV_ABS, ABS_MT_DISTANCE, !*slot->tip_state);
   1112		input_event(input, EV_ABS, ABS_MT_ORIENTATION, orientation);
   1113		input_event(input, EV_ABS, ABS_MT_PRESSURE, *slot->p);
   1114		input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
   1115		input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
   1116
   1117		set_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags);
   1118	}
   1119
   1120	return 0;
   1121}
   1122
   1123static void mt_process_mt_event(struct hid_device *hid,
   1124				struct mt_application *app,
   1125				struct hid_field *field,
   1126				struct hid_usage *usage,
   1127				__s32 value,
   1128				bool first_packet)
   1129{
   1130	__s32 quirks = app->quirks;
   1131	struct input_dev *input = field->hidinput->input;
   1132
   1133	if (!usage->type || !(hid->claimed & HID_CLAIMED_INPUT))
   1134		return;
   1135
   1136	if (quirks & MT_QUIRK_WIN8_PTP_BUTTONS) {
   1137
   1138		/*
   1139		 * For Win8 PTP touchpads we should only look at
   1140		 * non finger/touch events in the first_packet of a
   1141		 * (possible) multi-packet frame.
   1142		 */
   1143		if (!first_packet)
   1144			return;
   1145
   1146		/*
   1147		 * For Win8 PTP touchpads we map both the clickpad click
   1148		 * and any "external" left buttons to BTN_LEFT if a
   1149		 * device claims to have both we need to report 1 for
   1150		 * BTN_LEFT if either is pressed, so we or all values
   1151		 * together and report the result in mt_sync_frame().
   1152		 */
   1153		if (usage->type == EV_KEY && usage->code == BTN_LEFT) {
   1154			app->left_button_state |= value;
   1155			return;
   1156		}
   1157	}
   1158
   1159	input_event(input, usage->type, usage->code, value);
   1160}
   1161
   1162static void mt_touch_report(struct hid_device *hid,
   1163			    struct mt_report_data *rdata)
   1164{
   1165	struct mt_device *td = hid_get_drvdata(hid);
   1166	struct hid_report *report = rdata->report;
   1167	struct mt_application *app = rdata->application;
   1168	struct hid_field *field;
   1169	struct input_dev *input;
   1170	struct mt_usages *slot;
   1171	bool first_packet;
   1172	unsigned count;
   1173	int r, n;
   1174	int scantime = 0;
   1175	int contact_count = -1;
   1176
   1177	/* sticky fingers release in progress, abort */
   1178	if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
   1179		return;
   1180
   1181	scantime = *app->scantime;
   1182	app->timestamp = mt_compute_timestamp(app, scantime);
   1183	if (app->raw_cc != DEFAULT_ZERO)
   1184		contact_count = *app->raw_cc;
   1185
   1186	/*
   1187	 * Includes multi-packet support where subsequent
   1188	 * packets are sent with zero contactcount.
   1189	 */
   1190	if (contact_count >= 0) {
   1191		/*
   1192		 * For Win8 PTPs the first packet (td->num_received == 0) may
   1193		 * have a contactcount of 0 if there only is a button event.
   1194		 * We double check that this is not a continuation packet
   1195		 * of a possible multi-packet frame be checking that the
   1196		 * timestamp has changed.
   1197		 */
   1198		if ((app->quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
   1199		    app->num_received == 0 &&
   1200		    app->prev_scantime != scantime)
   1201			app->num_expected = contact_count;
   1202		/* A non 0 contact count always indicates a first packet */
   1203		else if (contact_count)
   1204			app->num_expected = contact_count;
   1205	}
   1206	app->prev_scantime = scantime;
   1207
   1208	first_packet = app->num_received == 0;
   1209
   1210	input = report->field[0]->hidinput->input;
   1211
   1212	list_for_each_entry(slot, &app->mt_usages, list) {
   1213		if (!mt_process_slot(td, input, app, slot))
   1214			app->num_received++;
   1215	}
   1216
   1217	for (r = 0; r < report->maxfield; r++) {
   1218		field = report->field[r];
   1219		count = field->report_count;
   1220
   1221		if (!(HID_MAIN_ITEM_VARIABLE & field->flags))
   1222			continue;
   1223
   1224		for (n = 0; n < count; n++)
   1225			mt_process_mt_event(hid, app, field,
   1226					    &field->usage[n], field->value[n],
   1227					    first_packet);
   1228	}
   1229
   1230	if (app->num_received >= app->num_expected)
   1231		mt_sync_frame(td, app, input);
   1232
   1233	/*
   1234	 * Windows 8 specs says 2 things:
   1235	 * - once a contact has been reported, it has to be reported in each
   1236	 *   subsequent report
   1237	 * - the report rate when fingers are present has to be at least
   1238	 *   the refresh rate of the screen, 60 or 120 Hz
   1239	 *
   1240	 * I interprete this that the specification forces a report rate of
   1241	 * at least 60 Hz for a touchscreen to be certified.
   1242	 * Which means that if we do not get a report whithin 16 ms, either
   1243	 * something wrong happens, either the touchscreen forgets to send
   1244	 * a release. Taking a reasonable margin allows to remove issues
   1245	 * with USB communication or the load of the machine.
   1246	 *
   1247	 * Given that Win 8 devices are forced to send a release, this will
   1248	 * only affect laggish machines and the ones that have a firmware
   1249	 * defect.
   1250	 */
   1251	if (app->quirks & MT_QUIRK_STICKY_FINGERS) {
   1252		if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
   1253			mod_timer(&td->release_timer,
   1254				  jiffies + msecs_to_jiffies(100));
   1255		else
   1256			del_timer(&td->release_timer);
   1257	}
   1258
   1259	clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
   1260}
   1261
   1262static int mt_touch_input_configured(struct hid_device *hdev,
   1263				     struct hid_input *hi,
   1264				     struct mt_application *app)
   1265{
   1266	struct mt_device *td = hid_get_drvdata(hdev);
   1267	struct mt_class *cls = &td->mtclass;
   1268	struct input_dev *input = hi->input;
   1269	int ret;
   1270
   1271	if (!td->maxcontacts)
   1272		td->maxcontacts = MT_DEFAULT_MAXCONTACT;
   1273
   1274	mt_post_parse(td, app);
   1275	if (td->serial_maybe)
   1276		mt_post_parse_default_settings(td, app);
   1277
   1278	if (cls->is_indirect)
   1279		app->mt_flags |= INPUT_MT_POINTER;
   1280
   1281	if (app->quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
   1282		app->mt_flags |= INPUT_MT_DROP_UNUSED;
   1283
   1284	/* check for clickpads */
   1285	if ((app->mt_flags & INPUT_MT_POINTER) &&
   1286	    (app->buttons_count == 1))
   1287		td->is_buttonpad = true;
   1288
   1289	if (td->is_buttonpad)
   1290		__set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
   1291
   1292	app->pending_palm_slots = devm_kcalloc(&hi->input->dev,
   1293					       BITS_TO_LONGS(td->maxcontacts),
   1294					       sizeof(long),
   1295					       GFP_KERNEL);
   1296	if (!app->pending_palm_slots)
   1297		return -ENOMEM;
   1298
   1299	ret = input_mt_init_slots(input, td->maxcontacts, app->mt_flags);
   1300	if (ret)
   1301		return ret;
   1302
   1303	app->mt_flags = 0;
   1304	return 0;
   1305}
   1306
   1307#define mt_map_key_clear(c)	hid_map_usage_clear(hi, usage, bit, \
   1308						    max, EV_KEY, (c))
   1309static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
   1310		struct hid_field *field, struct hid_usage *usage,
   1311		unsigned long **bit, int *max)
   1312{
   1313	struct mt_device *td = hid_get_drvdata(hdev);
   1314	struct mt_application *application;
   1315	struct mt_report_data *rdata;
   1316
   1317	rdata = mt_find_report_data(td, field->report);
   1318	if (!rdata) {
   1319		hid_err(hdev, "failed to allocate data for report\n");
   1320		return 0;
   1321	}
   1322
   1323	application = rdata->application;
   1324
   1325	/*
   1326	 * If mtclass.export_all_inputs is not set, only map fields from
   1327	 * TouchScreen or TouchPad collections. We need to ignore fields
   1328	 * that belong to other collections such as Mouse that might have
   1329	 * the same GenericDesktop usages.
   1330	 */
   1331	if (!td->mtclass.export_all_inputs &&
   1332	    field->application != HID_DG_TOUCHSCREEN &&
   1333	    field->application != HID_DG_PEN &&
   1334	    field->application != HID_DG_TOUCHPAD &&
   1335	    field->application != HID_GD_KEYBOARD &&
   1336	    field->application != HID_GD_SYSTEM_CONTROL &&
   1337	    field->application != HID_CP_CONSUMER_CONTROL &&
   1338	    field->application != HID_GD_WIRELESS_RADIO_CTLS &&
   1339	    field->application != HID_GD_SYSTEM_MULTIAXIS &&
   1340	    !(field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
   1341	      application->quirks & MT_QUIRK_ASUS_CUSTOM_UP))
   1342		return -1;
   1343
   1344	/*
   1345	 * Some Asus keyboard+touchpad devices have the hotkeys defined in the
   1346	 * touchpad report descriptor. We need to treat these as an array to
   1347	 * map usages to input keys.
   1348	 */
   1349	if (field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
   1350	    application->quirks & MT_QUIRK_ASUS_CUSTOM_UP &&
   1351	    (usage->hid & HID_USAGE_PAGE) == HID_UP_CUSTOM) {
   1352		set_bit(EV_REP, hi->input->evbit);
   1353		if (field->flags & HID_MAIN_ITEM_VARIABLE)
   1354			field->flags &= ~HID_MAIN_ITEM_VARIABLE;
   1355		switch (usage->hid & HID_USAGE) {
   1356		case 0x10: mt_map_key_clear(KEY_BRIGHTNESSDOWN);	break;
   1357		case 0x20: mt_map_key_clear(KEY_BRIGHTNESSUP);		break;
   1358		case 0x35: mt_map_key_clear(KEY_DISPLAY_OFF);		break;
   1359		case 0x6b: mt_map_key_clear(KEY_F21);			break;
   1360		case 0x6c: mt_map_key_clear(KEY_SLEEP);			break;
   1361		default:
   1362			return -1;
   1363		}
   1364		return 1;
   1365	}
   1366
   1367	if (rdata->is_mt_collection)
   1368		return mt_touch_input_mapping(hdev, hi, field, usage, bit, max,
   1369					      application);
   1370
   1371	/*
   1372	 * some egalax touchscreens have "application == DG_TOUCHSCREEN"
   1373	 * for the stylus. Overwrite the hid_input application
   1374	 */
   1375	if (field->physical == HID_DG_STYLUS)
   1376		hi->application = HID_DG_STYLUS;
   1377
   1378	/* let hid-core decide for the others */
   1379	return 0;
   1380}
   1381
   1382static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
   1383		struct hid_field *field, struct hid_usage *usage,
   1384		unsigned long **bit, int *max)
   1385{
   1386	struct mt_device *td = hid_get_drvdata(hdev);
   1387	struct mt_report_data *rdata;
   1388
   1389	rdata = mt_find_report_data(td, field->report);
   1390	if (rdata && rdata->is_mt_collection) {
   1391		/* We own these mappings, tell hid-input to ignore them */
   1392		return -1;
   1393	}
   1394
   1395	/* let hid-core decide for the others */
   1396	return 0;
   1397}
   1398
   1399static int mt_event(struct hid_device *hid, struct hid_field *field,
   1400				struct hid_usage *usage, __s32 value)
   1401{
   1402	struct mt_device *td = hid_get_drvdata(hid);
   1403	struct mt_report_data *rdata;
   1404
   1405	rdata = mt_find_report_data(td, field->report);
   1406	if (rdata && rdata->is_mt_collection)
   1407		return mt_touch_event(hid, field, usage, value);
   1408
   1409	return 0;
   1410}
   1411
   1412static void mt_report(struct hid_device *hid, struct hid_report *report)
   1413{
   1414	struct mt_device *td = hid_get_drvdata(hid);
   1415	struct hid_field *field = report->field[0];
   1416	struct mt_report_data *rdata;
   1417
   1418	if (!(hid->claimed & HID_CLAIMED_INPUT))
   1419		return;
   1420
   1421	rdata = mt_find_report_data(td, report);
   1422	if (rdata && rdata->is_mt_collection)
   1423		return mt_touch_report(hid, rdata);
   1424
   1425	if (field && field->hidinput && field->hidinput->input)
   1426		input_sync(field->hidinput->input);
   1427}
   1428
   1429static bool mt_need_to_apply_feature(struct hid_device *hdev,
   1430				     struct hid_field *field,
   1431				     struct hid_usage *usage,
   1432				     enum latency_mode latency,
   1433				     bool surface_switch,
   1434				     bool button_switch,
   1435				     bool *inputmode_found)
   1436{
   1437	struct mt_device *td = hid_get_drvdata(hdev);
   1438	struct mt_class *cls = &td->mtclass;
   1439	struct hid_report *report = field->report;
   1440	unsigned int index = usage->usage_index;
   1441	char *buf;
   1442	u32 report_len;
   1443	int max;
   1444
   1445	switch (usage->hid) {
   1446	case HID_DG_INPUTMODE:
   1447		/*
   1448		 * Some elan panels wrongly declare 2 input mode features,
   1449		 * and silently ignore when we set the value in the second
   1450		 * field. Skip the second feature and hope for the best.
   1451		 */
   1452		if (*inputmode_found)
   1453			return false;
   1454
   1455		if (cls->quirks & MT_QUIRK_FORCE_GET_FEATURE) {
   1456			report_len = hid_report_len(report);
   1457			buf = hid_alloc_report_buf(report, GFP_KERNEL);
   1458			if (!buf) {
   1459				hid_err(hdev,
   1460					"failed to allocate buffer for report\n");
   1461				return false;
   1462			}
   1463			hid_hw_raw_request(hdev, report->id, buf, report_len,
   1464					   HID_FEATURE_REPORT,
   1465					   HID_REQ_GET_REPORT);
   1466			kfree(buf);
   1467		}
   1468
   1469		field->value[index] = td->inputmode_value;
   1470		*inputmode_found = true;
   1471		return true;
   1472
   1473	case HID_DG_CONTACTMAX:
   1474		if (cls->maxcontacts) {
   1475			max = min_t(int, field->logical_maximum,
   1476				    cls->maxcontacts);
   1477			if (field->value[index] != max) {
   1478				field->value[index] = max;
   1479				return true;
   1480			}
   1481		}
   1482		break;
   1483
   1484	case HID_DG_LATENCYMODE:
   1485		field->value[index] = latency;
   1486		return true;
   1487
   1488	case HID_DG_SURFACESWITCH:
   1489		field->value[index] = surface_switch;
   1490		return true;
   1491
   1492	case HID_DG_BUTTONSWITCH:
   1493		field->value[index] = button_switch;
   1494		return true;
   1495	}
   1496
   1497	return false; /* no need to update the report */
   1498}
   1499
   1500static void mt_set_modes(struct hid_device *hdev, enum latency_mode latency,
   1501			 bool surface_switch, bool button_switch)
   1502{
   1503	struct hid_report_enum *rep_enum;
   1504	struct hid_report *rep;
   1505	struct hid_usage *usage;
   1506	int i, j;
   1507	bool update_report;
   1508	bool inputmode_found = false;
   1509
   1510	rep_enum = &hdev->report_enum[HID_FEATURE_REPORT];
   1511	list_for_each_entry(rep, &rep_enum->report_list, list) {
   1512		update_report = false;
   1513
   1514		for (i = 0; i < rep->maxfield; i++) {
   1515			/* Ignore if report count is out of bounds. */
   1516			if (rep->field[i]->report_count < 1)
   1517				continue;
   1518
   1519			for (j = 0; j < rep->field[i]->maxusage; j++) {
   1520				usage = &rep->field[i]->usage[j];
   1521
   1522				if (mt_need_to_apply_feature(hdev,
   1523							     rep->field[i],
   1524							     usage,
   1525							     latency,
   1526							     surface_switch,
   1527							     button_switch,
   1528							     &inputmode_found))
   1529					update_report = true;
   1530			}
   1531		}
   1532
   1533		if (update_report)
   1534			hid_hw_request(hdev, rep, HID_REQ_SET_REPORT);
   1535	}
   1536}
   1537
   1538static void mt_post_parse_default_settings(struct mt_device *td,
   1539					   struct mt_application *app)
   1540{
   1541	__s32 quirks = app->quirks;
   1542
   1543	/* unknown serial device needs special quirks */
   1544	if (list_is_singular(&app->mt_usages)) {
   1545		quirks |= MT_QUIRK_ALWAYS_VALID;
   1546		quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
   1547		quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
   1548		quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
   1549		quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
   1550	}
   1551
   1552	app->quirks = quirks;
   1553}
   1554
   1555static void mt_post_parse(struct mt_device *td, struct mt_application *app)
   1556{
   1557	if (!app->have_contact_count)
   1558		app->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
   1559}
   1560
   1561static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
   1562{
   1563	struct mt_device *td = hid_get_drvdata(hdev);
   1564	char *name;
   1565	const char *suffix = NULL;
   1566	struct mt_report_data *rdata;
   1567	struct mt_application *mt_application = NULL;
   1568	struct hid_report *report;
   1569	int ret;
   1570
   1571	list_for_each_entry(report, &hi->reports, hidinput_list) {
   1572		rdata = mt_find_report_data(td, report);
   1573		if (!rdata) {
   1574			hid_err(hdev, "failed to allocate data for report\n");
   1575			return -ENOMEM;
   1576		}
   1577
   1578		mt_application = rdata->application;
   1579
   1580		if (rdata->is_mt_collection) {
   1581			ret = mt_touch_input_configured(hdev, hi,
   1582							mt_application);
   1583			if (ret)
   1584				return ret;
   1585		}
   1586	}
   1587
   1588	switch (hi->application) {
   1589	case HID_GD_KEYBOARD:
   1590	case HID_GD_KEYPAD:
   1591	case HID_GD_MOUSE:
   1592	case HID_DG_TOUCHPAD:
   1593	case HID_GD_SYSTEM_CONTROL:
   1594	case HID_CP_CONSUMER_CONTROL:
   1595	case HID_GD_WIRELESS_RADIO_CTLS:
   1596	case HID_GD_SYSTEM_MULTIAXIS:
   1597		/* already handled by hid core */
   1598		break;
   1599	case HID_DG_TOUCHSCREEN:
   1600		/* we do not set suffix = "Touchscreen" */
   1601		hi->input->name = hdev->name;
   1602		break;
   1603	case HID_VD_ASUS_CUSTOM_MEDIA_KEYS:
   1604		suffix = "Custom Media Keys";
   1605		break;
   1606	case HID_DG_STYLUS:
   1607		/* force BTN_STYLUS to allow tablet matching in udev */
   1608		__set_bit(BTN_STYLUS, hi->input->keybit);
   1609		break;
   1610	default:
   1611		suffix = "UNKNOWN";
   1612		break;
   1613	}
   1614
   1615	if (suffix) {
   1616		name = devm_kzalloc(&hi->input->dev,
   1617				    strlen(hdev->name) + strlen(suffix) + 2,
   1618				    GFP_KERNEL);
   1619		if (name) {
   1620			sprintf(name, "%s %s", hdev->name, suffix);
   1621			hi->input->name = name;
   1622		}
   1623	}
   1624
   1625	return 0;
   1626}
   1627
   1628static void mt_fix_const_field(struct hid_field *field, unsigned int usage)
   1629{
   1630	if (field->usage[0].hid != usage ||
   1631	    !(field->flags & HID_MAIN_ITEM_CONSTANT))
   1632		return;
   1633
   1634	field->flags &= ~HID_MAIN_ITEM_CONSTANT;
   1635	field->flags |= HID_MAIN_ITEM_VARIABLE;
   1636}
   1637
   1638static void mt_fix_const_fields(struct hid_device *hdev, unsigned int usage)
   1639{
   1640	struct hid_report *report;
   1641	int i;
   1642
   1643	list_for_each_entry(report,
   1644			    &hdev->report_enum[HID_INPUT_REPORT].report_list,
   1645			    list) {
   1646
   1647		if (!report->maxfield)
   1648			continue;
   1649
   1650		for (i = 0; i < report->maxfield; i++)
   1651			if (report->field[i]->maxusage >= 1)
   1652				mt_fix_const_field(report->field[i], usage);
   1653	}
   1654}
   1655
   1656static void mt_release_contacts(struct hid_device *hid)
   1657{
   1658	struct hid_input *hidinput;
   1659	struct mt_application *application;
   1660	struct mt_device *td = hid_get_drvdata(hid);
   1661
   1662	list_for_each_entry(hidinput, &hid->inputs, list) {
   1663		struct input_dev *input_dev = hidinput->input;
   1664		struct input_mt *mt = input_dev->mt;
   1665		int i;
   1666
   1667		if (mt) {
   1668			for (i = 0; i < mt->num_slots; i++) {
   1669				input_mt_slot(input_dev, i);
   1670				input_mt_report_slot_inactive(input_dev);
   1671			}
   1672			input_mt_sync_frame(input_dev);
   1673			input_sync(input_dev);
   1674		}
   1675	}
   1676
   1677	list_for_each_entry(application, &td->applications, list) {
   1678		application->num_received = 0;
   1679	}
   1680}
   1681
   1682static void mt_expired_timeout(struct timer_list *t)
   1683{
   1684	struct mt_device *td = from_timer(td, t, release_timer);
   1685	struct hid_device *hdev = td->hdev;
   1686
   1687	/*
   1688	 * An input report came in just before we release the sticky fingers,
   1689	 * it will take care of the sticky fingers.
   1690	 */
   1691	if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
   1692		return;
   1693	if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
   1694		mt_release_contacts(hdev);
   1695	clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
   1696}
   1697
   1698static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
   1699{
   1700	int ret, i;
   1701	struct mt_device *td;
   1702	const struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */
   1703
   1704	for (i = 0; mt_classes[i].name ; i++) {
   1705		if (id->driver_data == mt_classes[i].name) {
   1706			mtclass = &(mt_classes[i]);
   1707			break;
   1708		}
   1709	}
   1710
   1711	td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
   1712	if (!td) {
   1713		dev_err(&hdev->dev, "cannot allocate multitouch data\n");
   1714		return -ENOMEM;
   1715	}
   1716	td->hdev = hdev;
   1717	td->mtclass = *mtclass;
   1718	td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
   1719	hid_set_drvdata(hdev, td);
   1720
   1721	INIT_LIST_HEAD(&td->applications);
   1722	INIT_LIST_HEAD(&td->reports);
   1723
   1724	if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
   1725		td->serial_maybe = true;
   1726
   1727	/* This allows the driver to correctly support devices
   1728	 * that emit events over several HID messages.
   1729	 */
   1730	hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
   1731
   1732	/*
   1733	 * This allows the driver to handle different input sensors
   1734	 * that emits events through different applications on the same HID
   1735	 * device.
   1736	 */
   1737	hdev->quirks |= HID_QUIRK_INPUT_PER_APP;
   1738
   1739	if (id->group != HID_GROUP_MULTITOUCH_WIN_8)
   1740		hdev->quirks |= HID_QUIRK_MULTI_INPUT;
   1741
   1742	if (mtclass->quirks & MT_QUIRK_FORCE_MULTI_INPUT) {
   1743		hdev->quirks &= ~HID_QUIRK_INPUT_PER_APP;
   1744		hdev->quirks |= HID_QUIRK_MULTI_INPUT;
   1745	}
   1746
   1747	timer_setup(&td->release_timer, mt_expired_timeout, 0);
   1748
   1749	ret = hid_parse(hdev);
   1750	if (ret != 0)
   1751		return ret;
   1752
   1753	if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
   1754		mt_fix_const_fields(hdev, HID_DG_CONTACTID);
   1755
   1756	ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
   1757	if (ret)
   1758		return ret;
   1759
   1760	ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
   1761	if (ret)
   1762		dev_warn(&hdev->dev, "Cannot allocate sysfs group for %s\n",
   1763				hdev->name);
   1764
   1765	mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
   1766
   1767	return 0;
   1768}
   1769
   1770#ifdef CONFIG_PM
   1771static int mt_suspend(struct hid_device *hdev, pm_message_t state)
   1772{
   1773	struct mt_device *td = hid_get_drvdata(hdev);
   1774
   1775	/* High latency is desirable for power savings during S3/S0ix */
   1776	if ((td->mtclass.quirks & MT_QUIRK_DISABLE_WAKEUP) ||
   1777	    !hid_hw_may_wakeup(hdev))
   1778		mt_set_modes(hdev, HID_LATENCY_HIGH, false, false);
   1779	else
   1780		mt_set_modes(hdev, HID_LATENCY_HIGH, true, true);
   1781
   1782	return 0;
   1783}
   1784
   1785static int mt_reset_resume(struct hid_device *hdev)
   1786{
   1787	mt_release_contacts(hdev);
   1788	mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
   1789	return 0;
   1790}
   1791
   1792static int mt_resume(struct hid_device *hdev)
   1793{
   1794	/* Some Elan legacy devices require SET_IDLE to be set on resume.
   1795	 * It should be safe to send it to other devices too.
   1796	 * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */
   1797
   1798	hid_hw_idle(hdev, 0, 0, HID_REQ_SET_IDLE);
   1799
   1800	mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
   1801
   1802	return 0;
   1803}
   1804#endif
   1805
   1806static void mt_remove(struct hid_device *hdev)
   1807{
   1808	struct mt_device *td = hid_get_drvdata(hdev);
   1809
   1810	del_timer_sync(&td->release_timer);
   1811
   1812	sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
   1813	hid_hw_stop(hdev);
   1814}
   1815
   1816/*
   1817 * This list contains only:
   1818 * - VID/PID of products not working with the default multitouch handling
   1819 * - 2 generic rules.
   1820 * So there is no point in adding here any device with MT_CLS_DEFAULT.
   1821 */
   1822static const struct hid_device_id mt_devices[] = {
   1823
   1824	/* 3M panels */
   1825	{ .driver_data = MT_CLS_3M,
   1826		MT_USB_DEVICE(USB_VENDOR_ID_3M,
   1827			USB_DEVICE_ID_3M1968) },
   1828	{ .driver_data = MT_CLS_3M,
   1829		MT_USB_DEVICE(USB_VENDOR_ID_3M,
   1830			USB_DEVICE_ID_3M2256) },
   1831	{ .driver_data = MT_CLS_3M,
   1832		MT_USB_DEVICE(USB_VENDOR_ID_3M,
   1833			USB_DEVICE_ID_3M3266) },
   1834
   1835	/* Anton devices */
   1836	{ .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
   1837		MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
   1838			USB_DEVICE_ID_ANTON_TOUCH_PAD) },
   1839
   1840	/* Asus T101HA */
   1841	{ .driver_data = MT_CLS_WIN_8_DISABLE_WAKEUP,
   1842		HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
   1843			   USB_VENDOR_ID_ASUSTEK,
   1844			   USB_DEVICE_ID_ASUSTEK_T101HA_KEYBOARD) },
   1845
   1846	/* Asus T304UA */
   1847	{ .driver_data = MT_CLS_ASUS,
   1848		HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
   1849			USB_VENDOR_ID_ASUSTEK,
   1850			USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD) },
   1851
   1852	/* Atmel panels */
   1853	{ .driver_data = MT_CLS_SERIAL,
   1854		MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
   1855			USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
   1856
   1857	/* Baanto multitouch devices */
   1858	{ .driver_data = MT_CLS_NSMU,
   1859		MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
   1860			USB_DEVICE_ID_BAANTO_MT_190W2) },
   1861
   1862	/* Cando panels */
   1863	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
   1864		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
   1865			USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
   1866	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
   1867		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
   1868			USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
   1869
   1870	/* Chunghwa Telecom touch panels */
   1871	{  .driver_data = MT_CLS_NSMU,
   1872		MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
   1873			USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },
   1874
   1875	/* CJTouch panels */
   1876	{ .driver_data = MT_CLS_NSMU,
   1877		MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
   1878			USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0020) },
   1879	{ .driver_data = MT_CLS_NSMU,
   1880		MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
   1881			USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0040) },
   1882
   1883	/* CVTouch panels */
   1884	{ .driver_data = MT_CLS_NSMU,
   1885		MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
   1886			USB_DEVICE_ID_CVTOUCH_SCREEN) },
   1887
   1888	/* eGalax devices (SAW) */
   1889	{ .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
   1890		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1891			USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
   1892
   1893	/* eGalax devices (resistive) */
   1894	{ .driver_data = MT_CLS_EGALAX,
   1895		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1896			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
   1897	{ .driver_data = MT_CLS_EGALAX,
   1898		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1899			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
   1900
   1901	/* eGalax devices (capacitive) */
   1902	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1903		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1904			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
   1905	{ .driver_data = MT_CLS_EGALAX,
   1906		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1907			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
   1908	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1909		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1910			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
   1911	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1912		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1913			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
   1914	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1915		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1916			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
   1917	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1918		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1919			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
   1920	{ .driver_data = MT_CLS_EGALAX,
   1921		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1922			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
   1923	{ .driver_data = MT_CLS_EGALAX,
   1924		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1925			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
   1926	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1927		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1928			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
   1929	{ .driver_data = MT_CLS_EGALAX,
   1930		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1931			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4) },
   1932	{ .driver_data = MT_CLS_EGALAX,
   1933		HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1934			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0) },
   1935	{ .driver_data = MT_CLS_EGALAX,
   1936		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1937			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
   1938	{ .driver_data = MT_CLS_EGALAX,
   1939		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1940			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
   1941	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1942		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1943			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
   1944	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1945		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1946			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
   1947	{ .driver_data = MT_CLS_EGALAX_SERIAL,
   1948		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1949			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
   1950	{ .driver_data = MT_CLS_EGALAX,
   1951		MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
   1952			USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002) },
   1953
   1954	/* Elan devices */
   1955	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
   1956		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
   1957			USB_VENDOR_ID_ELAN, 0x313a) },
   1958
   1959	/* Elitegroup panel */
   1960	{ .driver_data = MT_CLS_SERIAL,
   1961		MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
   1962			USB_DEVICE_ID_ELITEGROUP_05D8) },
   1963
   1964	/* Flatfrog Panels */
   1965	{ .driver_data = MT_CLS_FLATFROG,
   1966		MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
   1967			USB_DEVICE_ID_MULTITOUCH_3200) },
   1968
   1969	/* FocalTech Panels */
   1970	{ .driver_data = MT_CLS_SERIAL,
   1971		MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
   1972			USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },
   1973
   1974	/* GeneralTouch panel */
   1975	{ .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
   1976		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
   1977			USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
   1978	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
   1979		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
   1980			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
   1981	{ .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
   1982		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
   1983			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0101) },
   1984	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
   1985		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
   1986			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0102) },
   1987	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
   1988		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
   1989			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0106) },
   1990	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
   1991		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
   1992			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A) },
   1993	{ .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
   1994		MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
   1995			USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100) },
   1996
   1997	/* Gametel game controller */
   1998	{ .driver_data = MT_CLS_NSMU,
   1999		MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
   2000			USB_DEVICE_ID_GAMETEL_MT_MODE) },
   2001
   2002	/* GoodTouch panels */
   2003	{ .driver_data = MT_CLS_NSMU,
   2004		MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
   2005			USB_DEVICE_ID_GOODTOUCH_000f) },
   2006
   2007	/* Hanvon panels */
   2008	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
   2009		MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
   2010			USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
   2011
   2012	/* Ilitek dual touch panel */
   2013	{  .driver_data = MT_CLS_NSMU,
   2014		MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
   2015			USB_DEVICE_ID_ILITEK_MULTITOUCH) },
   2016
   2017	/* LG Melfas panel */
   2018	{ .driver_data = MT_CLS_LG,
   2019		HID_USB_DEVICE(USB_VENDOR_ID_LG,
   2020			USB_DEVICE_ID_LG_MELFAS_MT) },
   2021	{ .driver_data = MT_CLS_LG,
   2022		HID_DEVICE(BUS_I2C, HID_GROUP_GENERIC,
   2023			USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_7010) },
   2024
   2025	/* Lenovo X1 TAB Gen 2 */
   2026	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
   2027		HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
   2028			   USB_VENDOR_ID_LENOVO,
   2029			   USB_DEVICE_ID_LENOVO_X1_TAB) },
   2030
   2031	/* Lenovo X1 TAB Gen 3 */
   2032	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
   2033		HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
   2034			   USB_VENDOR_ID_LENOVO,
   2035			   USB_DEVICE_ID_LENOVO_X1_TAB3) },
   2036
   2037	/* Lenovo X12 TAB Gen 1 */
   2038	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
   2039		HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
   2040			   USB_VENDOR_ID_LENOVO,
   2041			   USB_DEVICE_ID_LENOVO_X12_TAB) },
   2042
   2043	/* MosArt panels */
   2044	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
   2045		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
   2046			USB_DEVICE_ID_ASUS_T91MT)},
   2047	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
   2048		MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
   2049			USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
   2050	{ .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
   2051		MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
   2052			USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
   2053
   2054	/* Novatek Panel */
   2055	{ .driver_data = MT_CLS_NSMU,
   2056		MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
   2057			USB_DEVICE_ID_NOVATEK_PCT) },
   2058
   2059	/* Ntrig Panel */
   2060	{ .driver_data = MT_CLS_NSMU,
   2061		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
   2062			USB_VENDOR_ID_NTRIG, 0x1b05) },
   2063
   2064	/* Panasonic panels */
   2065	{ .driver_data = MT_CLS_PANASONIC,
   2066		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
   2067			USB_DEVICE_ID_PANABOARD_UBT780) },
   2068	{ .driver_data = MT_CLS_PANASONIC,
   2069		MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
   2070			USB_DEVICE_ID_PANABOARD_UBT880) },
   2071
   2072	/* PixArt optical touch screen */
   2073	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
   2074		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
   2075			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
   2076	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
   2077		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
   2078			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
   2079	{ .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
   2080		MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
   2081			USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
   2082
   2083	/* PixCir-based panels */
   2084	{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
   2085		MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
   2086			USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
   2087
   2088	/* Quanta-based panels */
   2089	{ .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
   2090		MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
   2091			USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
   2092
   2093	/* Razer touchpads */
   2094	{ .driver_data = MT_CLS_RAZER_BLADE_STEALTH,
   2095		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
   2096			USB_VENDOR_ID_SYNAPTICS, 0x8323) },
   2097
   2098	/* Smart Tech panels */
   2099	{ .driver_data = MT_CLS_SMART_TECH,
   2100		MT_USB_DEVICE(0x0b8c, 0x0092)},
   2101
   2102	/* Stantum panels */
   2103	{ .driver_data = MT_CLS_CONFIDENCE,
   2104		MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
   2105			USB_DEVICE_ID_MTP_STM)},
   2106
   2107	/* Synaptics devices */
   2108	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
   2109		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
   2110			USB_VENDOR_ID_SYNAPTICS, 0xce08) },
   2111
   2112	{ .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
   2113		HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
   2114			USB_VENDOR_ID_SYNAPTICS, 0xce09) },
   2115
   2116	/* TopSeed panels */
   2117	{ .driver_data = MT_CLS_TOPSEED,
   2118		MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
   2119			USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },
   2120
   2121	/* Touch International panels */
   2122	{ .driver_data = MT_CLS_NSMU,
   2123		MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
   2124			USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
   2125
   2126	/* Unitec panels */
   2127	{ .driver_data = MT_CLS_NSMU,
   2128		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
   2129			USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
   2130	{ .driver_data = MT_CLS_NSMU,
   2131		MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
   2132			USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
   2133
   2134	/* VTL panels */
   2135	{ .driver_data = MT_CLS_VTL,
   2136		MT_USB_DEVICE(USB_VENDOR_ID_VTL,
   2137			USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },
   2138
   2139	/* Winbond Electronics Corp. */
   2140	{ .driver_data = MT_CLS_WIN_8_NO_STICKY_FINGERS,
   2141		HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
   2142			   USB_VENDOR_ID_WINBOND, USB_DEVICE_ID_TSTP_MTOUCH) },
   2143
   2144	/* Wistron panels */
   2145	{ .driver_data = MT_CLS_NSMU,
   2146		MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
   2147			USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },
   2148
   2149	/* XAT */
   2150	{ .driver_data = MT_CLS_NSMU,
   2151		MT_USB_DEVICE(USB_VENDOR_ID_XAT,
   2152			USB_DEVICE_ID_XAT_CSR) },
   2153
   2154	/* Xiroku */
   2155	{ .driver_data = MT_CLS_NSMU,
   2156		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2157			USB_DEVICE_ID_XIROKU_SPX) },
   2158	{ .driver_data = MT_CLS_NSMU,
   2159		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2160			USB_DEVICE_ID_XIROKU_MPX) },
   2161	{ .driver_data = MT_CLS_NSMU,
   2162		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2163			USB_DEVICE_ID_XIROKU_CSR) },
   2164	{ .driver_data = MT_CLS_NSMU,
   2165		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2166			USB_DEVICE_ID_XIROKU_SPX1) },
   2167	{ .driver_data = MT_CLS_NSMU,
   2168		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2169			USB_DEVICE_ID_XIROKU_MPX1) },
   2170	{ .driver_data = MT_CLS_NSMU,
   2171		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2172			USB_DEVICE_ID_XIROKU_CSR1) },
   2173	{ .driver_data = MT_CLS_NSMU,
   2174		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2175			USB_DEVICE_ID_XIROKU_SPX2) },
   2176	{ .driver_data = MT_CLS_NSMU,
   2177		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2178			USB_DEVICE_ID_XIROKU_MPX2) },
   2179	{ .driver_data = MT_CLS_NSMU,
   2180		MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
   2181			USB_DEVICE_ID_XIROKU_CSR2) },
   2182
   2183	/* Google MT devices */
   2184	{ .driver_data = MT_CLS_GOOGLE,
   2185		HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
   2186			USB_DEVICE_ID_GOOGLE_TOUCH_ROSE) },
   2187	{ .driver_data = MT_CLS_GOOGLE,
   2188		HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8, USB_VENDOR_ID_GOOGLE,
   2189			USB_DEVICE_ID_GOOGLE_WHISKERS) },
   2190
   2191	/* Generic MT device */
   2192	{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
   2193
   2194	/* Generic Win 8 certified MT device */
   2195	{  .driver_data = MT_CLS_WIN_8,
   2196		HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
   2197			HID_ANY_ID, HID_ANY_ID) },
   2198	{ }
   2199};
   2200MODULE_DEVICE_TABLE(hid, mt_devices);
   2201
   2202static const struct hid_usage_id mt_grabbed_usages[] = {
   2203	{ HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
   2204	{ HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
   2205};
   2206
   2207static struct hid_driver mt_driver = {
   2208	.name = "hid-multitouch",
   2209	.id_table = mt_devices,
   2210	.probe = mt_probe,
   2211	.remove = mt_remove,
   2212	.input_mapping = mt_input_mapping,
   2213	.input_mapped = mt_input_mapped,
   2214	.input_configured = mt_input_configured,
   2215	.feature_mapping = mt_feature_mapping,
   2216	.usage_table = mt_grabbed_usages,
   2217	.event = mt_event,
   2218	.report = mt_report,
   2219#ifdef CONFIG_PM
   2220	.suspend = mt_suspend,
   2221	.reset_resume = mt_reset_resume,
   2222	.resume = mt_resume,
   2223#endif
   2224};
   2225module_hid_driver(mt_driver);