0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034 #include <linux/device.h>
0035 #include <linux/hid.h>
0036 #include <linux/module.h>
0037 #include <linux/slab.h>
0038 #include <linux/input/mt.h>
0039 #include <linux/jiffies.h>
0040 #include <linux/string.h>
0041 #include <linux/timer.h>
0042
0043
0044 MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
0045 MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
0046 MODULE_DESCRIPTION("HID multitouch panels");
0047 MODULE_LICENSE("GPL");
0048
0049 #include "hid-ids.h"
0050
0051
0052 #define MT_QUIRK_NOT_SEEN_MEANS_UP BIT(0)
0053 #define MT_QUIRK_SLOT_IS_CONTACTID BIT(1)
0054 #define MT_QUIRK_CYPRESS BIT(2)
0055 #define MT_QUIRK_SLOT_IS_CONTACTNUMBER BIT(3)
0056 #define MT_QUIRK_ALWAYS_VALID BIT(4)
0057 #define MT_QUIRK_VALID_IS_INRANGE BIT(5)
0058 #define MT_QUIRK_VALID_IS_CONFIDENCE BIT(6)
0059 #define MT_QUIRK_CONFIDENCE BIT(7)
0060 #define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE BIT(8)
0061 #define MT_QUIRK_NO_AREA BIT(9)
0062 #define MT_QUIRK_IGNORE_DUPLICATES BIT(10)
0063 #define MT_QUIRK_HOVERING BIT(11)
0064 #define MT_QUIRK_CONTACT_CNT_ACCURATE BIT(12)
0065 #define MT_QUIRK_FORCE_GET_FEATURE BIT(13)
0066 #define MT_QUIRK_FIX_CONST_CONTACT_ID BIT(14)
0067 #define MT_QUIRK_TOUCH_SIZE_SCALING BIT(15)
0068 #define MT_QUIRK_STICKY_FINGERS BIT(16)
0069 #define MT_QUIRK_ASUS_CUSTOM_UP BIT(17)
0070 #define MT_QUIRK_WIN8_PTP_BUTTONS BIT(18)
0071 #define MT_QUIRK_SEPARATE_APP_REPORT BIT(19)
0072 #define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)
0073 #define MT_QUIRK_DISABLE_WAKEUP BIT(21)
0074
0075 #define MT_INPUTMODE_TOUCHSCREEN 0x02
0076 #define MT_INPUTMODE_TOUCHPAD 0x03
0077
0078 #define MT_BUTTONTYPE_CLICKPAD 0
0079
0080 enum latency_mode {
0081 HID_LATENCY_NORMAL = 0,
0082 HID_LATENCY_HIGH = 1,
0083 };
0084
0085 #define MT_IO_FLAGS_RUNNING 0
0086 #define MT_IO_FLAGS_ACTIVE_SLOTS 1
0087 #define MT_IO_FLAGS_PENDING_SLOTS 2
0088
0089 static const bool mtrue = true;
0090 static const bool mfalse;
0091 static const __s32 mzero;
0092
0093 #define DEFAULT_TRUE ((void *)&mtrue)
0094 #define DEFAULT_FALSE ((void *)&mfalse)
0095 #define DEFAULT_ZERO ((void *)&mzero)
0096
0097 struct mt_usages {
0098 struct list_head list;
0099 __s32 *x, *y, *cx, *cy, *p, *w, *h, *a;
0100 __s32 *contactid;
0101 bool *tip_state;
0102 bool *inrange_state;
0103 bool *confidence_state;
0104 };
0105
0106 struct mt_application {
0107 struct list_head list;
0108 unsigned int application;
0109 unsigned int report_id;
0110 struct list_head mt_usages;
0111
0112 __s32 quirks;
0113
0114 __s32 *scantime;
0115 __s32 scantime_logical_max;
0116
0117 __s32 *raw_cc;
0118 int left_button_state;
0119 unsigned int mt_flags;
0120
0121 unsigned long *pending_palm_slots;
0122
0123
0124 __u8 num_received;
0125 __u8 num_expected;
0126 __u8 buttons_count;
0127 __u8 touches_by_report;
0128
0129
0130
0131
0132 __s32 dev_time;
0133 unsigned long jiffies;
0134 int timestamp;
0135 int prev_scantime;
0136
0137 bool have_contact_count;
0138 };
0139
0140 struct mt_class {
0141 __s32 name;
0142 __s32 quirks;
0143 __s32 sn_move;
0144 __s32 sn_width;
0145 __s32 sn_height;
0146 __s32 sn_pressure;
0147 __u8 maxcontacts;
0148 bool is_indirect;
0149 bool export_all_inputs;
0150 };
0151
0152 struct mt_report_data {
0153 struct list_head list;
0154 struct hid_report *report;
0155 struct mt_application *application;
0156 bool is_mt_collection;
0157 };
0158
0159 struct mt_device {
0160 struct mt_class mtclass;
0161 struct timer_list release_timer;
0162 struct hid_device *hdev;
0163 unsigned long mt_io_flags;
0164 __u8 inputmode_value;
0165 __u8 maxcontacts;
0166 bool is_buttonpad;
0167 bool serial_maybe;
0168
0169 struct list_head applications;
0170 struct list_head reports;
0171 };
0172
0173 static void mt_post_parse_default_settings(struct mt_device *td,
0174 struct mt_application *app);
0175 static void mt_post_parse(struct mt_device *td, struct mt_application *app);
0176
0177
0178 #define MT_CLS_DEFAULT 0x0001
0179
0180 #define MT_CLS_SERIAL 0x0002
0181 #define MT_CLS_CONFIDENCE 0x0003
0182 #define MT_CLS_CONFIDENCE_CONTACT_ID 0x0004
0183 #define MT_CLS_CONFIDENCE_MINUS_ONE 0x0005
0184 #define MT_CLS_DUAL_INRANGE_CONTACTID 0x0006
0185 #define MT_CLS_DUAL_INRANGE_CONTACTNUMBER 0x0007
0186
0187 #define MT_CLS_INRANGE_CONTACTNUMBER 0x0009
0188 #define MT_CLS_NSMU 0x000a
0189
0190
0191 #define MT_CLS_WIN_8 0x0012
0192 #define MT_CLS_EXPORT_ALL_INPUTS 0x0013
0193
0194 #define MT_CLS_WIN_8_FORCE_MULTI_INPUT 0x0015
0195 #define MT_CLS_WIN_8_DISABLE_WAKEUP 0x0016
0196 #define MT_CLS_WIN_8_NO_STICKY_FINGERS 0x0017
0197 #define MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU 0x0018
0198
0199
0200 #define MT_CLS_3M 0x0101
0201
0202 #define MT_CLS_EGALAX 0x0103
0203 #define MT_CLS_EGALAX_SERIAL 0x0104
0204 #define MT_CLS_TOPSEED 0x0105
0205 #define MT_CLS_PANASONIC 0x0106
0206 #define MT_CLS_FLATFROG 0x0107
0207 #define MT_CLS_GENERALTOUCH_TWOFINGERS 0x0108
0208 #define MT_CLS_GENERALTOUCH_PWT_TENFINGERS 0x0109
0209 #define MT_CLS_LG 0x010a
0210 #define MT_CLS_ASUS 0x010b
0211 #define MT_CLS_VTL 0x0110
0212 #define MT_CLS_GOOGLE 0x0111
0213 #define MT_CLS_RAZER_BLADE_STEALTH 0x0112
0214 #define MT_CLS_SMART_TECH 0x0113
0215
0216 #define MT_DEFAULT_MAXCONTACT 10
0217 #define MT_MAX_MAXCONTACT 250
0218
0219
0220
0221
0222
0223 #define MAX_TIMESTAMP_INTERVAL 1000000
0224
0225 #define MT_USB_DEVICE(v, p) HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)
0226 #define MT_BT_DEVICE(v, p) HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)
0227
0228
0229
0230
0231
0232
0233 static int cypress_compute_slot(struct mt_application *application,
0234 struct mt_usages *slot)
0235 {
0236 if (*slot->contactid != 0 || application->num_received == 0)
0237 return *slot->contactid;
0238 else
0239 return -1;
0240 }
0241
0242 static const struct mt_class mt_classes[] = {
0243 { .name = MT_CLS_DEFAULT,
0244 .quirks = MT_QUIRK_ALWAYS_VALID |
0245 MT_QUIRK_CONTACT_CNT_ACCURATE },
0246 { .name = MT_CLS_NSMU,
0247 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
0248 { .name = MT_CLS_SERIAL,
0249 .quirks = MT_QUIRK_ALWAYS_VALID},
0250 { .name = MT_CLS_CONFIDENCE,
0251 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
0252 { .name = MT_CLS_CONFIDENCE_CONTACT_ID,
0253 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
0254 MT_QUIRK_SLOT_IS_CONTACTID },
0255 { .name = MT_CLS_CONFIDENCE_MINUS_ONE,
0256 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
0257 MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
0258 { .name = MT_CLS_DUAL_INRANGE_CONTACTID,
0259 .quirks = MT_QUIRK_VALID_IS_INRANGE |
0260 MT_QUIRK_SLOT_IS_CONTACTID,
0261 .maxcontacts = 2 },
0262 { .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
0263 .quirks = MT_QUIRK_VALID_IS_INRANGE |
0264 MT_QUIRK_SLOT_IS_CONTACTNUMBER,
0265 .maxcontacts = 2 },
0266 { .name = MT_CLS_INRANGE_CONTACTNUMBER,
0267 .quirks = MT_QUIRK_VALID_IS_INRANGE |
0268 MT_QUIRK_SLOT_IS_CONTACTNUMBER },
0269 { .name = MT_CLS_WIN_8,
0270 .quirks = MT_QUIRK_ALWAYS_VALID |
0271 MT_QUIRK_IGNORE_DUPLICATES |
0272 MT_QUIRK_HOVERING |
0273 MT_QUIRK_CONTACT_CNT_ACCURATE |
0274 MT_QUIRK_STICKY_FINGERS |
0275 MT_QUIRK_WIN8_PTP_BUTTONS,
0276 .export_all_inputs = true },
0277 { .name = MT_CLS_EXPORT_ALL_INPUTS,
0278 .quirks = MT_QUIRK_ALWAYS_VALID |
0279 MT_QUIRK_CONTACT_CNT_ACCURATE,
0280 .export_all_inputs = true },
0281 { .name = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
0282 .quirks = MT_QUIRK_ALWAYS_VALID |
0283 MT_QUIRK_IGNORE_DUPLICATES |
0284 MT_QUIRK_HOVERING |
0285 MT_QUIRK_CONTACT_CNT_ACCURATE |
0286 MT_QUIRK_STICKY_FINGERS |
0287 MT_QUIRK_WIN8_PTP_BUTTONS |
0288 MT_QUIRK_FORCE_MULTI_INPUT,
0289 .export_all_inputs = true },
0290 { .name = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
0291 .quirks = MT_QUIRK_IGNORE_DUPLICATES |
0292 MT_QUIRK_HOVERING |
0293 MT_QUIRK_CONTACT_CNT_ACCURATE |
0294 MT_QUIRK_STICKY_FINGERS |
0295 MT_QUIRK_WIN8_PTP_BUTTONS |
0296 MT_QUIRK_FORCE_MULTI_INPUT |
0297 MT_QUIRK_NOT_SEEN_MEANS_UP,
0298 .export_all_inputs = true },
0299 { .name = MT_CLS_WIN_8_DISABLE_WAKEUP,
0300 .quirks = MT_QUIRK_ALWAYS_VALID |
0301 MT_QUIRK_IGNORE_DUPLICATES |
0302 MT_QUIRK_HOVERING |
0303 MT_QUIRK_CONTACT_CNT_ACCURATE |
0304 MT_QUIRK_STICKY_FINGERS |
0305 MT_QUIRK_WIN8_PTP_BUTTONS |
0306 MT_QUIRK_DISABLE_WAKEUP,
0307 .export_all_inputs = true },
0308 { .name = MT_CLS_WIN_8_NO_STICKY_FINGERS,
0309 .quirks = MT_QUIRK_ALWAYS_VALID |
0310 MT_QUIRK_IGNORE_DUPLICATES |
0311 MT_QUIRK_HOVERING |
0312 MT_QUIRK_CONTACT_CNT_ACCURATE |
0313 MT_QUIRK_WIN8_PTP_BUTTONS,
0314 .export_all_inputs = true },
0315
0316
0317
0318
0319 { .name = MT_CLS_3M,
0320 .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
0321 MT_QUIRK_SLOT_IS_CONTACTID |
0322 MT_QUIRK_TOUCH_SIZE_SCALING,
0323 .sn_move = 2048,
0324 .sn_width = 128,
0325 .sn_height = 128,
0326 .maxcontacts = 60,
0327 },
0328 { .name = MT_CLS_EGALAX,
0329 .quirks = MT_QUIRK_SLOT_IS_CONTACTID |
0330 MT_QUIRK_VALID_IS_INRANGE,
0331 .sn_move = 4096,
0332 .sn_pressure = 32,
0333 },
0334 { .name = MT_CLS_EGALAX_SERIAL,
0335 .quirks = MT_QUIRK_SLOT_IS_CONTACTID |
0336 MT_QUIRK_ALWAYS_VALID,
0337 .sn_move = 4096,
0338 .sn_pressure = 32,
0339 },
0340 { .name = MT_CLS_TOPSEED,
0341 .quirks = MT_QUIRK_ALWAYS_VALID,
0342 .is_indirect = true,
0343 .maxcontacts = 2,
0344 },
0345 { .name = MT_CLS_PANASONIC,
0346 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
0347 .maxcontacts = 4 },
0348 { .name = MT_CLS_GENERALTOUCH_TWOFINGERS,
0349 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
0350 MT_QUIRK_VALID_IS_INRANGE |
0351 MT_QUIRK_SLOT_IS_CONTACTID,
0352 .maxcontacts = 2
0353 },
0354 { .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
0355 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
0356 MT_QUIRK_SLOT_IS_CONTACTID
0357 },
0358
0359 { .name = MT_CLS_FLATFROG,
0360 .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
0361 MT_QUIRK_NO_AREA,
0362 .sn_move = 2048,
0363 .maxcontacts = 40,
0364 },
0365 { .name = MT_CLS_LG,
0366 .quirks = MT_QUIRK_ALWAYS_VALID |
0367 MT_QUIRK_FIX_CONST_CONTACT_ID |
0368 MT_QUIRK_IGNORE_DUPLICATES |
0369 MT_QUIRK_HOVERING |
0370 MT_QUIRK_CONTACT_CNT_ACCURATE },
0371 { .name = MT_CLS_ASUS,
0372 .quirks = MT_QUIRK_ALWAYS_VALID |
0373 MT_QUIRK_CONTACT_CNT_ACCURATE |
0374 MT_QUIRK_ASUS_CUSTOM_UP },
0375 { .name = MT_CLS_VTL,
0376 .quirks = MT_QUIRK_ALWAYS_VALID |
0377 MT_QUIRK_CONTACT_CNT_ACCURATE |
0378 MT_QUIRK_FORCE_GET_FEATURE,
0379 },
0380 { .name = MT_CLS_GOOGLE,
0381 .quirks = MT_QUIRK_ALWAYS_VALID |
0382 MT_QUIRK_CONTACT_CNT_ACCURATE |
0383 MT_QUIRK_SLOT_IS_CONTACTID |
0384 MT_QUIRK_HOVERING
0385 },
0386 { .name = MT_CLS_RAZER_BLADE_STEALTH,
0387 .quirks = MT_QUIRK_ALWAYS_VALID |
0388 MT_QUIRK_IGNORE_DUPLICATES |
0389 MT_QUIRK_HOVERING |
0390 MT_QUIRK_CONTACT_CNT_ACCURATE |
0391 MT_QUIRK_WIN8_PTP_BUTTONS,
0392 },
0393 { .name = MT_CLS_SMART_TECH,
0394 .quirks = MT_QUIRK_ALWAYS_VALID |
0395 MT_QUIRK_IGNORE_DUPLICATES |
0396 MT_QUIRK_CONTACT_CNT_ACCURATE |
0397 MT_QUIRK_SEPARATE_APP_REPORT,
0398 },
0399 { }
0400 };
0401
0402 static ssize_t mt_show_quirks(struct device *dev,
0403 struct device_attribute *attr,
0404 char *buf)
0405 {
0406 struct hid_device *hdev = to_hid_device(dev);
0407 struct mt_device *td = hid_get_drvdata(hdev);
0408
0409 return sprintf(buf, "%u\n", td->mtclass.quirks);
0410 }
0411
0412 static ssize_t mt_set_quirks(struct device *dev,
0413 struct device_attribute *attr,
0414 const char *buf, size_t count)
0415 {
0416 struct hid_device *hdev = to_hid_device(dev);
0417 struct mt_device *td = hid_get_drvdata(hdev);
0418 struct mt_application *application;
0419
0420 unsigned long val;
0421
0422 if (kstrtoul(buf, 0, &val))
0423 return -EINVAL;
0424
0425 td->mtclass.quirks = val;
0426
0427 list_for_each_entry(application, &td->applications, list) {
0428 application->quirks = val;
0429 if (!application->have_contact_count)
0430 application->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
0431 }
0432
0433 return count;
0434 }
0435
0436 static DEVICE_ATTR(quirks, S_IWUSR | S_IRUGO, mt_show_quirks, mt_set_quirks);
0437
0438 static struct attribute *sysfs_attrs[] = {
0439 &dev_attr_quirks.attr,
0440 NULL
0441 };
0442
0443 static const struct attribute_group mt_attribute_group = {
0444 .attrs = sysfs_attrs
0445 };
0446
0447 static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)
0448 {
0449 int ret;
0450 u32 size = hid_report_len(report);
0451 u8 *buf;
0452
0453
0454
0455
0456
0457 if (hdev->quirks & HID_QUIRK_NO_INIT_REPORTS)
0458 return;
0459
0460 buf = hid_alloc_report_buf(report, GFP_KERNEL);
0461 if (!buf)
0462 return;
0463
0464 ret = hid_hw_raw_request(hdev, report->id, buf, size,
0465 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
0466 if (ret < 0) {
0467 dev_warn(&hdev->dev, "failed to fetch feature %d\n",
0468 report->id);
0469 } else {
0470 ret = hid_report_raw_event(hdev, HID_FEATURE_REPORT, buf,
0471 size, 0);
0472 if (ret)
0473 dev_warn(&hdev->dev, "failed to report feature\n");
0474 }
0475
0476 kfree(buf);
0477 }
0478
0479 static void mt_feature_mapping(struct hid_device *hdev,
0480 struct hid_field *field, struct hid_usage *usage)
0481 {
0482 struct mt_device *td = hid_get_drvdata(hdev);
0483
0484 switch (usage->hid) {
0485 case HID_DG_CONTACTMAX:
0486 mt_get_feature(hdev, field->report);
0487
0488 td->maxcontacts = field->value[0];
0489 if (!td->maxcontacts &&
0490 field->logical_maximum <= MT_MAX_MAXCONTACT)
0491 td->maxcontacts = field->logical_maximum;
0492 if (td->mtclass.maxcontacts)
0493
0494 td->maxcontacts = td->mtclass.maxcontacts;
0495
0496 break;
0497 case HID_DG_BUTTONTYPE:
0498 if (usage->usage_index >= field->report_count) {
0499 dev_err(&hdev->dev, "HID_DG_BUTTONTYPE out of range\n");
0500 break;
0501 }
0502
0503 mt_get_feature(hdev, field->report);
0504 if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
0505 td->is_buttonpad = true;
0506
0507 break;
0508 case 0xff0000c5:
0509
0510 if (usage->usage_index == 0)
0511 mt_get_feature(hdev, field->report);
0512 break;
0513 }
0514 }
0515
0516 static void set_abs(struct input_dev *input, unsigned int code,
0517 struct hid_field *field, int snratio)
0518 {
0519 int fmin = field->logical_minimum;
0520 int fmax = field->logical_maximum;
0521 int fuzz = snratio ? (fmax - fmin) / snratio : 0;
0522 input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
0523 input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
0524 }
0525
0526 static struct mt_usages *mt_allocate_usage(struct hid_device *hdev,
0527 struct mt_application *application)
0528 {
0529 struct mt_usages *usage;
0530
0531 usage = devm_kzalloc(&hdev->dev, sizeof(*usage), GFP_KERNEL);
0532 if (!usage)
0533 return NULL;
0534
0535
0536 usage->x = DEFAULT_ZERO;
0537 usage->y = DEFAULT_ZERO;
0538 usage->cx = DEFAULT_ZERO;
0539 usage->cy = DEFAULT_ZERO;
0540 usage->p = DEFAULT_ZERO;
0541 usage->w = DEFAULT_ZERO;
0542 usage->h = DEFAULT_ZERO;
0543 usage->a = DEFAULT_ZERO;
0544 usage->contactid = DEFAULT_ZERO;
0545 usage->tip_state = DEFAULT_FALSE;
0546 usage->inrange_state = DEFAULT_FALSE;
0547 usage->confidence_state = DEFAULT_TRUE;
0548
0549 list_add_tail(&usage->list, &application->mt_usages);
0550
0551 return usage;
0552 }
0553
0554 static struct mt_application *mt_allocate_application(struct mt_device *td,
0555 struct hid_report *report)
0556 {
0557 unsigned int application = report->application;
0558 struct mt_application *mt_application;
0559
0560 mt_application = devm_kzalloc(&td->hdev->dev, sizeof(*mt_application),
0561 GFP_KERNEL);
0562 if (!mt_application)
0563 return NULL;
0564
0565 mt_application->application = application;
0566 INIT_LIST_HEAD(&mt_application->mt_usages);
0567
0568 if (application == HID_DG_TOUCHSCREEN)
0569 mt_application->mt_flags |= INPUT_MT_DIRECT;
0570
0571
0572
0573
0574 if (application == HID_DG_TOUCHPAD) {
0575 mt_application->mt_flags |= INPUT_MT_POINTER;
0576 td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
0577 }
0578
0579 mt_application->scantime = DEFAULT_ZERO;
0580 mt_application->raw_cc = DEFAULT_ZERO;
0581 mt_application->quirks = td->mtclass.quirks;
0582 mt_application->report_id = report->id;
0583
0584 list_add_tail(&mt_application->list, &td->applications);
0585
0586 return mt_application;
0587 }
0588
0589 static struct mt_application *mt_find_application(struct mt_device *td,
0590 struct hid_report *report)
0591 {
0592 unsigned int application = report->application;
0593 struct mt_application *tmp, *mt_application = NULL;
0594
0595 list_for_each_entry(tmp, &td->applications, list) {
0596 if (application == tmp->application) {
0597 if (!(td->mtclass.quirks & MT_QUIRK_SEPARATE_APP_REPORT) ||
0598 tmp->report_id == report->id) {
0599 mt_application = tmp;
0600 break;
0601 }
0602 }
0603 }
0604
0605 if (!mt_application)
0606 mt_application = mt_allocate_application(td, report);
0607
0608 return mt_application;
0609 }
0610
0611 static struct mt_report_data *mt_allocate_report_data(struct mt_device *td,
0612 struct hid_report *report)
0613 {
0614 struct mt_report_data *rdata;
0615 struct hid_field *field;
0616 int r, n;
0617
0618 rdata = devm_kzalloc(&td->hdev->dev, sizeof(*rdata), GFP_KERNEL);
0619 if (!rdata)
0620 return NULL;
0621
0622 rdata->report = report;
0623 rdata->application = mt_find_application(td, report);
0624
0625 if (!rdata->application) {
0626 devm_kfree(&td->hdev->dev, rdata);
0627 return NULL;
0628 }
0629
0630 for (r = 0; r < report->maxfield; r++) {
0631 field = report->field[r];
0632
0633 if (!(HID_MAIN_ITEM_VARIABLE & field->flags))
0634 continue;
0635
0636 if (field->logical == HID_DG_FINGER || td->hdev->group != HID_GROUP_MULTITOUCH_WIN_8) {
0637 for (n = 0; n < field->report_count; n++) {
0638 if (field->usage[n].hid == HID_DG_CONTACTID) {
0639 rdata->is_mt_collection = true;
0640 break;
0641 }
0642 }
0643 }
0644 }
0645
0646 list_add_tail(&rdata->list, &td->reports);
0647
0648 return rdata;
0649 }
0650
0651 static struct mt_report_data *mt_find_report_data(struct mt_device *td,
0652 struct hid_report *report)
0653 {
0654 struct mt_report_data *tmp, *rdata = NULL;
0655
0656 list_for_each_entry(tmp, &td->reports, list) {
0657 if (report == tmp->report) {
0658 rdata = tmp;
0659 break;
0660 }
0661 }
0662
0663 if (!rdata)
0664 rdata = mt_allocate_report_data(td, report);
0665
0666 return rdata;
0667 }
0668
0669 static void mt_store_field(struct hid_device *hdev,
0670 struct mt_application *application,
0671 __s32 *value,
0672 size_t offset)
0673 {
0674 struct mt_usages *usage;
0675 __s32 **target;
0676
0677 if (list_empty(&application->mt_usages))
0678 usage = mt_allocate_usage(hdev, application);
0679 else
0680 usage = list_last_entry(&application->mt_usages,
0681 struct mt_usages,
0682 list);
0683
0684 if (!usage)
0685 return;
0686
0687 target = (__s32 **)((char *)usage + offset);
0688
0689
0690 if (*target != DEFAULT_TRUE &&
0691 *target != DEFAULT_FALSE &&
0692 *target != DEFAULT_ZERO) {
0693 if (usage->contactid == DEFAULT_ZERO ||
0694 usage->x == DEFAULT_ZERO ||
0695 usage->y == DEFAULT_ZERO) {
0696 hid_dbg(hdev,
0697 "ignoring duplicate usage on incomplete");
0698 return;
0699 }
0700 usage = mt_allocate_usage(hdev, application);
0701 if (!usage)
0702 return;
0703
0704 target = (__s32 **)((char *)usage + offset);
0705 }
0706
0707 *target = value;
0708 }
0709
0710 #define MT_STORE_FIELD(__name) \
0711 mt_store_field(hdev, app, \
0712 &field->value[usage->usage_index], \
0713 offsetof(struct mt_usages, __name))
0714
0715 static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
0716 struct hid_field *field, struct hid_usage *usage,
0717 unsigned long **bit, int *max, struct mt_application *app)
0718 {
0719 struct mt_device *td = hid_get_drvdata(hdev);
0720 struct mt_class *cls = &td->mtclass;
0721 int code;
0722 struct hid_usage *prev_usage = NULL;
0723
0724
0725
0726
0727 if (field->application == HID_DG_TOUCHSCREEN &&
0728 (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
0729 app->mt_flags |= INPUT_MT_POINTER;
0730 td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
0731 }
0732
0733
0734 if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
0735 app->buttons_count++;
0736
0737 if (usage->usage_index)
0738 prev_usage = &field->usage[usage->usage_index - 1];
0739
0740 switch (usage->hid & HID_USAGE_PAGE) {
0741
0742 case HID_UP_GENDESK:
0743 switch (usage->hid) {
0744 case HID_GD_X:
0745 if (prev_usage && (prev_usage->hid == usage->hid)) {
0746 code = ABS_MT_TOOL_X;
0747 MT_STORE_FIELD(cx);
0748 } else {
0749 code = ABS_MT_POSITION_X;
0750 MT_STORE_FIELD(x);
0751 }
0752
0753 set_abs(hi->input, code, field, cls->sn_move);
0754
0755
0756
0757
0758
0759 if (field->application == HID_GD_SYSTEM_MULTIAXIS) {
0760 __set_bit(INPUT_PROP_DIRECT,
0761 hi->input->propbit);
0762 input_set_abs_params(hi->input,
0763 ABS_MT_TOOL_TYPE,
0764 MT_TOOL_DIAL,
0765 MT_TOOL_DIAL, 0, 0);
0766 }
0767
0768 return 1;
0769 case HID_GD_Y:
0770 if (prev_usage && (prev_usage->hid == usage->hid)) {
0771 code = ABS_MT_TOOL_Y;
0772 MT_STORE_FIELD(cy);
0773 } else {
0774 code = ABS_MT_POSITION_Y;
0775 MT_STORE_FIELD(y);
0776 }
0777
0778 set_abs(hi->input, code, field, cls->sn_move);
0779
0780 return 1;
0781 }
0782 return 0;
0783
0784 case HID_UP_DIGITIZER:
0785 switch (usage->hid) {
0786 case HID_DG_INRANGE:
0787 if (app->quirks & MT_QUIRK_HOVERING) {
0788 input_set_abs_params(hi->input,
0789 ABS_MT_DISTANCE, 0, 1, 0, 0);
0790 }
0791 MT_STORE_FIELD(inrange_state);
0792 return 1;
0793 case HID_DG_CONFIDENCE:
0794 if ((cls->name == MT_CLS_WIN_8 ||
0795 cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT ||
0796 cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU ||
0797 cls->name == MT_CLS_WIN_8_DISABLE_WAKEUP) &&
0798 (field->application == HID_DG_TOUCHPAD ||
0799 field->application == HID_DG_TOUCHSCREEN))
0800 app->quirks |= MT_QUIRK_CONFIDENCE;
0801
0802 if (app->quirks & MT_QUIRK_CONFIDENCE)
0803 input_set_abs_params(hi->input,
0804 ABS_MT_TOOL_TYPE,
0805 MT_TOOL_FINGER,
0806 MT_TOOL_PALM, 0, 0);
0807
0808 MT_STORE_FIELD(confidence_state);
0809 return 1;
0810 case HID_DG_TIPSWITCH:
0811 if (field->application != HID_GD_SYSTEM_MULTIAXIS)
0812 input_set_capability(hi->input,
0813 EV_KEY, BTN_TOUCH);
0814 MT_STORE_FIELD(tip_state);
0815 return 1;
0816 case HID_DG_CONTACTID:
0817 MT_STORE_FIELD(contactid);
0818 app->touches_by_report++;
0819 return 1;
0820 case HID_DG_WIDTH:
0821 if (!(app->quirks & MT_QUIRK_NO_AREA))
0822 set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
0823 cls->sn_width);
0824 MT_STORE_FIELD(w);
0825 return 1;
0826 case HID_DG_HEIGHT:
0827 if (!(app->quirks & MT_QUIRK_NO_AREA)) {
0828 set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
0829 cls->sn_height);
0830
0831
0832
0833
0834
0835 if (!test_bit(ABS_MT_ORIENTATION,
0836 hi->input->absbit))
0837 input_set_abs_params(hi->input,
0838 ABS_MT_ORIENTATION, 0, 1, 0, 0);
0839 }
0840 MT_STORE_FIELD(h);
0841 return 1;
0842 case HID_DG_TIPPRESSURE:
0843 set_abs(hi->input, ABS_MT_PRESSURE, field,
0844 cls->sn_pressure);
0845 MT_STORE_FIELD(p);
0846 return 1;
0847 case HID_DG_SCANTIME:
0848 input_set_capability(hi->input, EV_MSC, MSC_TIMESTAMP);
0849 app->scantime = &field->value[usage->usage_index];
0850 app->scantime_logical_max = field->logical_maximum;
0851 return 1;
0852 case HID_DG_CONTACTCOUNT:
0853 app->have_contact_count = true;
0854 app->raw_cc = &field->value[usage->usage_index];
0855 return 1;
0856 case HID_DG_AZIMUTH:
0857
0858
0859
0860
0861
0862 input_set_abs_params(hi->input, ABS_MT_ORIENTATION,
0863 -field->logical_maximum / 4,
0864 field->logical_maximum / 4,
0865 cls->sn_move ?
0866 field->logical_maximum / cls->sn_move : 0, 0);
0867 MT_STORE_FIELD(a);
0868 return 1;
0869 case HID_DG_CONTACTMAX:
0870
0871 return -1;
0872 case HID_DG_TOUCH:
0873
0874
0875 return -1;
0876 }
0877
0878 return 0;
0879
0880 case HID_UP_BUTTON:
0881 code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
0882
0883
0884
0885
0886 if ((app->quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
0887 field->application == HID_DG_TOUCHPAD &&
0888 (usage->hid & HID_USAGE) > 1)
0889 code--;
0890
0891 if (field->application == HID_GD_SYSTEM_MULTIAXIS)
0892 code = BTN_0 + ((usage->hid - 1) & HID_USAGE);
0893
0894 hid_map_usage(hi, usage, bit, max, EV_KEY, code);
0895 if (!*bit)
0896 return -1;
0897 input_set_capability(hi->input, EV_KEY, code);
0898 return 1;
0899
0900 case 0xff000000:
0901
0902 return -1;
0903 }
0904
0905 return 0;
0906 }
0907
0908 static int mt_compute_slot(struct mt_device *td, struct mt_application *app,
0909 struct mt_usages *slot,
0910 struct input_dev *input)
0911 {
0912 __s32 quirks = app->quirks;
0913
0914 if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
0915 return *slot->contactid;
0916
0917 if (quirks & MT_QUIRK_CYPRESS)
0918 return cypress_compute_slot(app, slot);
0919
0920 if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
0921 return app->num_received;
0922
0923 if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
0924 return *slot->contactid - 1;
0925
0926 return input_mt_get_slot_by_key(input, *slot->contactid);
0927 }
0928
0929 static void mt_release_pending_palms(struct mt_device *td,
0930 struct mt_application *app,
0931 struct input_dev *input)
0932 {
0933 int slotnum;
0934 bool need_sync = false;
0935
0936 for_each_set_bit(slotnum, app->pending_palm_slots, td->maxcontacts) {
0937 clear_bit(slotnum, app->pending_palm_slots);
0938
0939 input_mt_slot(input, slotnum);
0940 input_mt_report_slot_inactive(input);
0941
0942 need_sync = true;
0943 }
0944
0945 if (need_sync) {
0946 input_mt_sync_frame(input);
0947 input_sync(input);
0948 }
0949 }
0950
0951
0952
0953
0954
0955 static void mt_sync_frame(struct mt_device *td, struct mt_application *app,
0956 struct input_dev *input)
0957 {
0958 if (app->quirks & MT_QUIRK_WIN8_PTP_BUTTONS)
0959 input_event(input, EV_KEY, BTN_LEFT, app->left_button_state);
0960
0961 input_mt_sync_frame(input);
0962 input_event(input, EV_MSC, MSC_TIMESTAMP, app->timestamp);
0963 input_sync(input);
0964
0965 mt_release_pending_palms(td, app, input);
0966
0967 app->num_received = 0;
0968 app->left_button_state = 0;
0969
0970 if (test_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags))
0971 set_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
0972 else
0973 clear_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
0974 clear_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags);
0975 }
0976
0977 static int mt_compute_timestamp(struct mt_application *app, __s32 value)
0978 {
0979 long delta = value - app->prev_scantime;
0980 unsigned long jdelta = jiffies_to_usecs(jiffies - app->jiffies);
0981
0982 app->jiffies = jiffies;
0983
0984 if (delta < 0)
0985 delta += app->scantime_logical_max;
0986
0987
0988 delta *= 100;
0989
0990 if (jdelta > MAX_TIMESTAMP_INTERVAL)
0991
0992 return 0;
0993 else
0994 return app->timestamp + delta;
0995 }
0996
0997 static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
0998 struct hid_usage *usage, __s32 value)
0999 {
1000
1001 if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
1002 hid->hiddev_hid_event(hid, field, usage, value);
1003
1004 return 1;
1005 }
1006
1007 static int mt_process_slot(struct mt_device *td, struct input_dev *input,
1008 struct mt_application *app,
1009 struct mt_usages *slot)
1010 {
1011 struct input_mt *mt = input->mt;
1012 __s32 quirks = app->quirks;
1013 bool valid = true;
1014 bool confidence_state = true;
1015 bool inrange_state = false;
1016 int active;
1017 int slotnum;
1018 int tool = MT_TOOL_FINGER;
1019
1020 if (!slot)
1021 return -EINVAL;
1022
1023 if ((quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
1024 app->num_received >= app->num_expected)
1025 return -EAGAIN;
1026
1027 if (!(quirks & MT_QUIRK_ALWAYS_VALID)) {
1028 if (quirks & MT_QUIRK_VALID_IS_INRANGE)
1029 valid = *slot->inrange_state;
1030 if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
1031 valid = *slot->tip_state;
1032 if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
1033 valid = *slot->confidence_state;
1034
1035 if (!valid)
1036 return 0;
1037 }
1038
1039 slotnum = mt_compute_slot(td, app, slot, input);
1040 if (slotnum < 0 || slotnum >= td->maxcontacts)
1041 return 0;
1042
1043 if ((quirks & MT_QUIRK_IGNORE_DUPLICATES) && mt) {
1044 struct input_mt_slot *i_slot = &mt->slots[slotnum];
1045
1046 if (input_mt_is_active(i_slot) &&
1047 input_mt_is_used(mt, i_slot))
1048 return -EAGAIN;
1049 }
1050
1051 if (quirks & MT_QUIRK_CONFIDENCE)
1052 confidence_state = *slot->confidence_state;
1053
1054 if (quirks & MT_QUIRK_HOVERING)
1055 inrange_state = *slot->inrange_state;
1056
1057 active = *slot->tip_state || inrange_state;
1058
1059 if (app->application == HID_GD_SYSTEM_MULTIAXIS)
1060 tool = MT_TOOL_DIAL;
1061 else if (unlikely(!confidence_state)) {
1062 tool = MT_TOOL_PALM;
1063 if (!active && mt &&
1064 input_mt_is_active(&mt->slots[slotnum])) {
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074 active = true;
1075 set_bit(slotnum, app->pending_palm_slots);
1076 }
1077 }
1078
1079 input_mt_slot(input, slotnum);
1080 input_mt_report_slot_state(input, tool, active);
1081 if (active) {
1082
1083 int wide = (*slot->w > *slot->h);
1084 int major = max(*slot->w, *slot->h);
1085 int minor = min(*slot->w, *slot->h);
1086 int orientation = wide;
1087 int max_azimuth;
1088 int azimuth;
1089
1090 if (slot->a != DEFAULT_ZERO) {
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101 azimuth = *slot->a;
1102 max_azimuth = input_abs_get_max(input,
1103 ABS_MT_ORIENTATION);
1104 if (azimuth > max_azimuth * 2)
1105 azimuth -= max_azimuth * 4;
1106 orientation = -azimuth;
1107 }
1108
1109 if (quirks & MT_QUIRK_TOUCH_SIZE_SCALING) {
1110
1111
1112
1113
1114 major = major >> 1;
1115 minor = minor >> 1;
1116 }
1117
1118 input_event(input, EV_ABS, ABS_MT_POSITION_X, *slot->x);
1119 input_event(input, EV_ABS, ABS_MT_POSITION_Y, *slot->y);
1120 input_event(input, EV_ABS, ABS_MT_TOOL_X, *slot->cx);
1121 input_event(input, EV_ABS, ABS_MT_TOOL_Y, *slot->cy);
1122 input_event(input, EV_ABS, ABS_MT_DISTANCE, !*slot->tip_state);
1123 input_event(input, EV_ABS, ABS_MT_ORIENTATION, orientation);
1124 input_event(input, EV_ABS, ABS_MT_PRESSURE, *slot->p);
1125 input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
1126 input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
1127
1128 set_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags);
1129 }
1130
1131 return 0;
1132 }
1133
1134 static void mt_process_mt_event(struct hid_device *hid,
1135 struct mt_application *app,
1136 struct hid_field *field,
1137 struct hid_usage *usage,
1138 __s32 value,
1139 bool first_packet)
1140 {
1141 __s32 quirks = app->quirks;
1142 struct input_dev *input = field->hidinput->input;
1143
1144 if (!usage->type || !(hid->claimed & HID_CLAIMED_INPUT))
1145 return;
1146
1147 if (quirks & MT_QUIRK_WIN8_PTP_BUTTONS) {
1148
1149
1150
1151
1152
1153
1154 if (!first_packet)
1155 return;
1156
1157
1158
1159
1160
1161
1162
1163
1164 if (usage->type == EV_KEY && usage->code == BTN_LEFT) {
1165 app->left_button_state |= value;
1166 return;
1167 }
1168 }
1169
1170 input_event(input, usage->type, usage->code, value);
1171 }
1172
1173 static void mt_touch_report(struct hid_device *hid,
1174 struct mt_report_data *rdata)
1175 {
1176 struct mt_device *td = hid_get_drvdata(hid);
1177 struct hid_report *report = rdata->report;
1178 struct mt_application *app = rdata->application;
1179 struct hid_field *field;
1180 struct input_dev *input;
1181 struct mt_usages *slot;
1182 bool first_packet;
1183 unsigned count;
1184 int r, n;
1185 int scantime = 0;
1186 int contact_count = -1;
1187
1188
1189 if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
1190 return;
1191
1192 scantime = *app->scantime;
1193 app->timestamp = mt_compute_timestamp(app, scantime);
1194 if (app->raw_cc != DEFAULT_ZERO)
1195 contact_count = *app->raw_cc;
1196
1197
1198
1199
1200
1201 if (contact_count >= 0) {
1202
1203
1204
1205
1206
1207
1208
1209 if ((app->quirks & MT_QUIRK_WIN8_PTP_BUTTONS) &&
1210 app->num_received == 0 &&
1211 app->prev_scantime != scantime)
1212 app->num_expected = contact_count;
1213
1214 else if (contact_count)
1215 app->num_expected = contact_count;
1216 }
1217 app->prev_scantime = scantime;
1218
1219 first_packet = app->num_received == 0;
1220
1221 input = report->field[0]->hidinput->input;
1222
1223 list_for_each_entry(slot, &app->mt_usages, list) {
1224 if (!mt_process_slot(td, input, app, slot))
1225 app->num_received++;
1226 }
1227
1228 for (r = 0; r < report->maxfield; r++) {
1229 field = report->field[r];
1230 count = field->report_count;
1231
1232 if (!(HID_MAIN_ITEM_VARIABLE & field->flags))
1233 continue;
1234
1235 for (n = 0; n < count; n++)
1236 mt_process_mt_event(hid, app, field,
1237 &field->usage[n], field->value[n],
1238 first_packet);
1239 }
1240
1241 if (app->num_received >= app->num_expected)
1242 mt_sync_frame(td, app, input);
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262 if (app->quirks & MT_QUIRK_STICKY_FINGERS) {
1263 if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
1264 mod_timer(&td->release_timer,
1265 jiffies + msecs_to_jiffies(100));
1266 else
1267 del_timer(&td->release_timer);
1268 }
1269
1270 clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
1271 }
1272
1273 static int mt_touch_input_configured(struct hid_device *hdev,
1274 struct hid_input *hi,
1275 struct mt_application *app)
1276 {
1277 struct mt_device *td = hid_get_drvdata(hdev);
1278 struct mt_class *cls = &td->mtclass;
1279 struct input_dev *input = hi->input;
1280 int ret;
1281
1282 if (!td->maxcontacts)
1283 td->maxcontacts = MT_DEFAULT_MAXCONTACT;
1284
1285 mt_post_parse(td, app);
1286 if (td->serial_maybe)
1287 mt_post_parse_default_settings(td, app);
1288
1289 if (cls->is_indirect)
1290 app->mt_flags |= INPUT_MT_POINTER;
1291
1292 if (app->quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
1293 app->mt_flags |= INPUT_MT_DROP_UNUSED;
1294
1295
1296 if ((app->mt_flags & INPUT_MT_POINTER) &&
1297 (app->buttons_count == 1))
1298 td->is_buttonpad = true;
1299
1300 if (td->is_buttonpad)
1301 __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
1302
1303 app->pending_palm_slots = devm_kcalloc(&hi->input->dev,
1304 BITS_TO_LONGS(td->maxcontacts),
1305 sizeof(long),
1306 GFP_KERNEL);
1307 if (!app->pending_palm_slots)
1308 return -ENOMEM;
1309
1310 ret = input_mt_init_slots(input, td->maxcontacts, app->mt_flags);
1311 if (ret)
1312 return ret;
1313
1314 app->mt_flags = 0;
1315 return 0;
1316 }
1317
1318 #define mt_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, \
1319 max, EV_KEY, (c))
1320 static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
1321 struct hid_field *field, struct hid_usage *usage,
1322 unsigned long **bit, int *max)
1323 {
1324 struct mt_device *td = hid_get_drvdata(hdev);
1325 struct mt_application *application;
1326 struct mt_report_data *rdata;
1327
1328 rdata = mt_find_report_data(td, field->report);
1329 if (!rdata) {
1330 hid_err(hdev, "failed to allocate data for report\n");
1331 return 0;
1332 }
1333
1334 application = rdata->application;
1335
1336
1337
1338
1339
1340
1341
1342 if (!td->mtclass.export_all_inputs &&
1343 field->application != HID_DG_TOUCHSCREEN &&
1344 field->application != HID_DG_PEN &&
1345 field->application != HID_DG_TOUCHPAD &&
1346 field->application != HID_GD_KEYBOARD &&
1347 field->application != HID_GD_SYSTEM_CONTROL &&
1348 field->application != HID_CP_CONSUMER_CONTROL &&
1349 field->application != HID_GD_WIRELESS_RADIO_CTLS &&
1350 field->application != HID_GD_SYSTEM_MULTIAXIS &&
1351 !(field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
1352 application->quirks & MT_QUIRK_ASUS_CUSTOM_UP))
1353 return -1;
1354
1355
1356
1357
1358
1359
1360 if (field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
1361 application->quirks & MT_QUIRK_ASUS_CUSTOM_UP &&
1362 (usage->hid & HID_USAGE_PAGE) == HID_UP_CUSTOM) {
1363 set_bit(EV_REP, hi->input->evbit);
1364 if (field->flags & HID_MAIN_ITEM_VARIABLE)
1365 field->flags &= ~HID_MAIN_ITEM_VARIABLE;
1366 switch (usage->hid & HID_USAGE) {
1367 case 0x10: mt_map_key_clear(KEY_BRIGHTNESSDOWN); break;
1368 case 0x20: mt_map_key_clear(KEY_BRIGHTNESSUP); break;
1369 case 0x35: mt_map_key_clear(KEY_DISPLAY_OFF); break;
1370 case 0x6b: mt_map_key_clear(KEY_F21); break;
1371 case 0x6c: mt_map_key_clear(KEY_SLEEP); break;
1372 default:
1373 return -1;
1374 }
1375 return 1;
1376 }
1377
1378 if (rdata->is_mt_collection)
1379 return mt_touch_input_mapping(hdev, hi, field, usage, bit, max,
1380 application);
1381
1382
1383
1384
1385
1386 if (field->physical == HID_DG_STYLUS)
1387 hi->application = HID_DG_STYLUS;
1388
1389
1390 return 0;
1391 }
1392
1393 static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
1394 struct hid_field *field, struct hid_usage *usage,
1395 unsigned long **bit, int *max)
1396 {
1397 struct mt_device *td = hid_get_drvdata(hdev);
1398 struct mt_report_data *rdata;
1399
1400 rdata = mt_find_report_data(td, field->report);
1401 if (rdata && rdata->is_mt_collection) {
1402
1403 return -1;
1404 }
1405
1406
1407 return 0;
1408 }
1409
1410 static int mt_event(struct hid_device *hid, struct hid_field *field,
1411 struct hid_usage *usage, __s32 value)
1412 {
1413 struct mt_device *td = hid_get_drvdata(hid);
1414 struct mt_report_data *rdata;
1415
1416 rdata = mt_find_report_data(td, field->report);
1417 if (rdata && rdata->is_mt_collection)
1418 return mt_touch_event(hid, field, usage, value);
1419
1420 return 0;
1421 }
1422
1423 static void mt_report(struct hid_device *hid, struct hid_report *report)
1424 {
1425 struct mt_device *td = hid_get_drvdata(hid);
1426 struct hid_field *field = report->field[0];
1427 struct mt_report_data *rdata;
1428
1429 if (!(hid->claimed & HID_CLAIMED_INPUT))
1430 return;
1431
1432 rdata = mt_find_report_data(td, report);
1433 if (rdata && rdata->is_mt_collection)
1434 return mt_touch_report(hid, rdata);
1435
1436 if (field && field->hidinput && field->hidinput->input)
1437 input_sync(field->hidinput->input);
1438 }
1439
1440 static bool mt_need_to_apply_feature(struct hid_device *hdev,
1441 struct hid_field *field,
1442 struct hid_usage *usage,
1443 enum latency_mode latency,
1444 bool surface_switch,
1445 bool button_switch,
1446 bool *inputmode_found)
1447 {
1448 struct mt_device *td = hid_get_drvdata(hdev);
1449 struct mt_class *cls = &td->mtclass;
1450 struct hid_report *report = field->report;
1451 unsigned int index = usage->usage_index;
1452 char *buf;
1453 u32 report_len;
1454 int max;
1455
1456 switch (usage->hid) {
1457 case HID_DG_INPUTMODE:
1458
1459
1460
1461
1462
1463 if (*inputmode_found)
1464 return false;
1465
1466 if (cls->quirks & MT_QUIRK_FORCE_GET_FEATURE) {
1467 report_len = hid_report_len(report);
1468 buf = hid_alloc_report_buf(report, GFP_KERNEL);
1469 if (!buf) {
1470 hid_err(hdev,
1471 "failed to allocate buffer for report\n");
1472 return false;
1473 }
1474 hid_hw_raw_request(hdev, report->id, buf, report_len,
1475 HID_FEATURE_REPORT,
1476 HID_REQ_GET_REPORT);
1477 kfree(buf);
1478 }
1479
1480 field->value[index] = td->inputmode_value;
1481 *inputmode_found = true;
1482 return true;
1483
1484 case HID_DG_CONTACTMAX:
1485 if (cls->maxcontacts) {
1486 max = min_t(int, field->logical_maximum,
1487 cls->maxcontacts);
1488 if (field->value[index] != max) {
1489 field->value[index] = max;
1490 return true;
1491 }
1492 }
1493 break;
1494
1495 case HID_DG_LATENCYMODE:
1496 field->value[index] = latency;
1497 return true;
1498
1499 case HID_DG_SURFACESWITCH:
1500 field->value[index] = surface_switch;
1501 return true;
1502
1503 case HID_DG_BUTTONSWITCH:
1504 field->value[index] = button_switch;
1505 return true;
1506 }
1507
1508 return false;
1509 }
1510
1511 static void mt_set_modes(struct hid_device *hdev, enum latency_mode latency,
1512 bool surface_switch, bool button_switch)
1513 {
1514 struct hid_report_enum *rep_enum;
1515 struct hid_report *rep;
1516 struct hid_usage *usage;
1517 int i, j;
1518 bool update_report;
1519 bool inputmode_found = false;
1520
1521 rep_enum = &hdev->report_enum[HID_FEATURE_REPORT];
1522 list_for_each_entry(rep, &rep_enum->report_list, list) {
1523 update_report = false;
1524
1525 for (i = 0; i < rep->maxfield; i++) {
1526
1527 if (rep->field[i]->report_count < 1)
1528 continue;
1529
1530 for (j = 0; j < rep->field[i]->maxusage; j++) {
1531 usage = &rep->field[i]->usage[j];
1532
1533 if (mt_need_to_apply_feature(hdev,
1534 rep->field[i],
1535 usage,
1536 latency,
1537 surface_switch,
1538 button_switch,
1539 &inputmode_found))
1540 update_report = true;
1541 }
1542 }
1543
1544 if (update_report)
1545 hid_hw_request(hdev, rep, HID_REQ_SET_REPORT);
1546 }
1547 }
1548
1549 static void mt_post_parse_default_settings(struct mt_device *td,
1550 struct mt_application *app)
1551 {
1552 __s32 quirks = app->quirks;
1553
1554
1555 if (list_is_singular(&app->mt_usages)) {
1556 quirks |= MT_QUIRK_ALWAYS_VALID;
1557 quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
1558 quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
1559 quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
1560 quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1561 }
1562
1563 app->quirks = quirks;
1564 }
1565
1566 static void mt_post_parse(struct mt_device *td, struct mt_application *app)
1567 {
1568 if (!app->have_contact_count)
1569 app->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1570 }
1571
1572 static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
1573 {
1574 struct mt_device *td = hid_get_drvdata(hdev);
1575 char *name;
1576 const char *suffix = NULL;
1577 struct mt_report_data *rdata;
1578 struct mt_application *mt_application = NULL;
1579 struct hid_report *report;
1580 int ret;
1581
1582 list_for_each_entry(report, &hi->reports, hidinput_list) {
1583 rdata = mt_find_report_data(td, report);
1584 if (!rdata) {
1585 hid_err(hdev, "failed to allocate data for report\n");
1586 return -ENOMEM;
1587 }
1588
1589 mt_application = rdata->application;
1590
1591 if (rdata->is_mt_collection) {
1592 ret = mt_touch_input_configured(hdev, hi,
1593 mt_application);
1594 if (ret)
1595 return ret;
1596 }
1597 }
1598
1599 switch (hi->application) {
1600 case HID_GD_KEYBOARD:
1601 case HID_GD_KEYPAD:
1602 case HID_GD_MOUSE:
1603 case HID_DG_TOUCHPAD:
1604 case HID_GD_SYSTEM_CONTROL:
1605 case HID_CP_CONSUMER_CONTROL:
1606 case HID_GD_WIRELESS_RADIO_CTLS:
1607 case HID_GD_SYSTEM_MULTIAXIS:
1608
1609 break;
1610 case HID_DG_TOUCHSCREEN:
1611
1612 hi->input->name = hdev->name;
1613 break;
1614 case HID_VD_ASUS_CUSTOM_MEDIA_KEYS:
1615 suffix = "Custom Media Keys";
1616 break;
1617 case HID_DG_STYLUS:
1618
1619 __set_bit(BTN_STYLUS, hi->input->keybit);
1620 break;
1621 default:
1622 suffix = "UNKNOWN";
1623 break;
1624 }
1625
1626 if (suffix) {
1627 name = devm_kzalloc(&hi->input->dev,
1628 strlen(hdev->name) + strlen(suffix) + 2,
1629 GFP_KERNEL);
1630 if (name) {
1631 sprintf(name, "%s %s", hdev->name, suffix);
1632 hi->input->name = name;
1633 }
1634 }
1635
1636 return 0;
1637 }
1638
1639 static void mt_fix_const_field(struct hid_field *field, unsigned int usage)
1640 {
1641 if (field->usage[0].hid != usage ||
1642 !(field->flags & HID_MAIN_ITEM_CONSTANT))
1643 return;
1644
1645 field->flags &= ~HID_MAIN_ITEM_CONSTANT;
1646 field->flags |= HID_MAIN_ITEM_VARIABLE;
1647 }
1648
1649 static void mt_fix_const_fields(struct hid_device *hdev, unsigned int usage)
1650 {
1651 struct hid_report *report;
1652 int i;
1653
1654 list_for_each_entry(report,
1655 &hdev->report_enum[HID_INPUT_REPORT].report_list,
1656 list) {
1657
1658 if (!report->maxfield)
1659 continue;
1660
1661 for (i = 0; i < report->maxfield; i++)
1662 if (report->field[i]->maxusage >= 1)
1663 mt_fix_const_field(report->field[i], usage);
1664 }
1665 }
1666
1667 static void mt_release_contacts(struct hid_device *hid)
1668 {
1669 struct hid_input *hidinput;
1670 struct mt_application *application;
1671 struct mt_device *td = hid_get_drvdata(hid);
1672
1673 list_for_each_entry(hidinput, &hid->inputs, list) {
1674 struct input_dev *input_dev = hidinput->input;
1675 struct input_mt *mt = input_dev->mt;
1676 int i;
1677
1678 if (mt) {
1679 for (i = 0; i < mt->num_slots; i++) {
1680 input_mt_slot(input_dev, i);
1681 input_mt_report_slot_inactive(input_dev);
1682 }
1683 input_mt_sync_frame(input_dev);
1684 input_sync(input_dev);
1685 }
1686 }
1687
1688 list_for_each_entry(application, &td->applications, list) {
1689 application->num_received = 0;
1690 }
1691 }
1692
1693 static void mt_expired_timeout(struct timer_list *t)
1694 {
1695 struct mt_device *td = from_timer(td, t, release_timer);
1696 struct hid_device *hdev = td->hdev;
1697
1698
1699
1700
1701
1702 if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
1703 return;
1704 if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
1705 mt_release_contacts(hdev);
1706 clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
1707 }
1708
1709 static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
1710 {
1711 int ret, i;
1712 struct mt_device *td;
1713 const struct mt_class *mtclass = mt_classes;
1714
1715 for (i = 0; mt_classes[i].name ; i++) {
1716 if (id->driver_data == mt_classes[i].name) {
1717 mtclass = &(mt_classes[i]);
1718 break;
1719 }
1720 }
1721
1722 td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
1723 if (!td) {
1724 dev_err(&hdev->dev, "cannot allocate multitouch data\n");
1725 return -ENOMEM;
1726 }
1727 td->hdev = hdev;
1728 td->mtclass = *mtclass;
1729 td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
1730 hid_set_drvdata(hdev, td);
1731
1732 INIT_LIST_HEAD(&td->applications);
1733 INIT_LIST_HEAD(&td->reports);
1734
1735 if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
1736 td->serial_maybe = true;
1737
1738
1739
1740
1741 hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
1742
1743
1744
1745
1746
1747
1748 hdev->quirks |= HID_QUIRK_INPUT_PER_APP;
1749
1750 if (id->group != HID_GROUP_MULTITOUCH_WIN_8)
1751 hdev->quirks |= HID_QUIRK_MULTI_INPUT;
1752
1753 if (mtclass->quirks & MT_QUIRK_FORCE_MULTI_INPUT) {
1754 hdev->quirks &= ~HID_QUIRK_INPUT_PER_APP;
1755 hdev->quirks |= HID_QUIRK_MULTI_INPUT;
1756 }
1757
1758 timer_setup(&td->release_timer, mt_expired_timeout, 0);
1759
1760 ret = hid_parse(hdev);
1761 if (ret != 0)
1762 return ret;
1763
1764 if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
1765 mt_fix_const_fields(hdev, HID_DG_CONTACTID);
1766
1767 ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1768 if (ret)
1769 return ret;
1770
1771 ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
1772 if (ret)
1773 dev_warn(&hdev->dev, "Cannot allocate sysfs group for %s\n",
1774 hdev->name);
1775
1776 mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
1777
1778 return 0;
1779 }
1780
1781 #ifdef CONFIG_PM
1782 static int mt_suspend(struct hid_device *hdev, pm_message_t state)
1783 {
1784 struct mt_device *td = hid_get_drvdata(hdev);
1785
1786
1787 if ((td->mtclass.quirks & MT_QUIRK_DISABLE_WAKEUP) ||
1788 !hid_hw_may_wakeup(hdev))
1789 mt_set_modes(hdev, HID_LATENCY_HIGH, false, false);
1790 else
1791 mt_set_modes(hdev, HID_LATENCY_HIGH, true, true);
1792
1793 return 0;
1794 }
1795
1796 static int mt_reset_resume(struct hid_device *hdev)
1797 {
1798 mt_release_contacts(hdev);
1799 mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
1800 return 0;
1801 }
1802
1803 static int mt_resume(struct hid_device *hdev)
1804 {
1805
1806
1807
1808
1809 hid_hw_idle(hdev, 0, 0, HID_REQ_SET_IDLE);
1810
1811 mt_set_modes(hdev, HID_LATENCY_NORMAL, true, true);
1812
1813 return 0;
1814 }
1815 #endif
1816
1817 static void mt_remove(struct hid_device *hdev)
1818 {
1819 struct mt_device *td = hid_get_drvdata(hdev);
1820
1821 del_timer_sync(&td->release_timer);
1822
1823 sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
1824 hid_hw_stop(hdev);
1825 }
1826
1827
1828
1829
1830
1831
1832
1833 static const struct hid_device_id mt_devices[] = {
1834
1835
1836 { .driver_data = MT_CLS_3M,
1837 MT_USB_DEVICE(USB_VENDOR_ID_3M,
1838 USB_DEVICE_ID_3M1968) },
1839 { .driver_data = MT_CLS_3M,
1840 MT_USB_DEVICE(USB_VENDOR_ID_3M,
1841 USB_DEVICE_ID_3M2256) },
1842 { .driver_data = MT_CLS_3M,
1843 MT_USB_DEVICE(USB_VENDOR_ID_3M,
1844 USB_DEVICE_ID_3M3266) },
1845
1846
1847 { .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
1848 MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
1849 USB_DEVICE_ID_ANTON_TOUCH_PAD) },
1850
1851
1852 { .driver_data = MT_CLS_WIN_8_DISABLE_WAKEUP,
1853 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
1854 USB_VENDOR_ID_ASUSTEK,
1855 USB_DEVICE_ID_ASUSTEK_T101HA_KEYBOARD) },
1856
1857
1858 { .driver_data = MT_CLS_ASUS,
1859 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
1860 USB_VENDOR_ID_ASUSTEK,
1861 USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD) },
1862
1863
1864 { .driver_data = MT_CLS_SERIAL,
1865 MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1866 USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
1867
1868
1869 { .driver_data = MT_CLS_NSMU,
1870 MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
1871 USB_DEVICE_ID_BAANTO_MT_190W2) },
1872
1873
1874 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1875 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1876 USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
1877 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1878 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1879 USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
1880
1881
1882 { .driver_data = MT_CLS_NSMU,
1883 MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
1884 USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },
1885
1886
1887 { .driver_data = MT_CLS_NSMU,
1888 MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
1889 USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0020) },
1890 { .driver_data = MT_CLS_NSMU,
1891 MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
1892 USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0040) },
1893
1894
1895 { .driver_data = MT_CLS_NSMU,
1896 MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
1897 USB_DEVICE_ID_CVTOUCH_SCREEN) },
1898
1899
1900 { .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
1901 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1902 USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER) },
1903
1904
1905 { .driver_data = MT_CLS_EGALAX,
1906 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1907 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
1908 { .driver_data = MT_CLS_EGALAX,
1909 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1910 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
1911
1912
1913 { .driver_data = MT_CLS_EGALAX_SERIAL,
1914 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1915 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
1916 { .driver_data = MT_CLS_EGALAX,
1917 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1918 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
1919 { .driver_data = MT_CLS_EGALAX_SERIAL,
1920 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1921 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
1922 { .driver_data = MT_CLS_EGALAX_SERIAL,
1923 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1924 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
1925 { .driver_data = MT_CLS_EGALAX_SERIAL,
1926 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1927 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
1928 { .driver_data = MT_CLS_EGALAX_SERIAL,
1929 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1930 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
1931 { .driver_data = MT_CLS_EGALAX,
1932 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1933 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
1934 { .driver_data = MT_CLS_EGALAX,
1935 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1936 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
1937 { .driver_data = MT_CLS_EGALAX_SERIAL,
1938 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1939 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
1940 { .driver_data = MT_CLS_EGALAX,
1941 HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
1942 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4) },
1943 { .driver_data = MT_CLS_EGALAX,
1944 HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
1945 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0) },
1946 { .driver_data = MT_CLS_EGALAX,
1947 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1948 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
1949 { .driver_data = MT_CLS_EGALAX,
1950 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1951 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
1952 { .driver_data = MT_CLS_EGALAX_SERIAL,
1953 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1954 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
1955 { .driver_data = MT_CLS_EGALAX_SERIAL,
1956 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1957 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
1958 { .driver_data = MT_CLS_EGALAX_SERIAL,
1959 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1960 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1961 { .driver_data = MT_CLS_EGALAX,
1962 MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1963 USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_C002) },
1964
1965
1966 { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
1967 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1968 USB_VENDOR_ID_ELAN, 0x313a) },
1969
1970
1971 { .driver_data = MT_CLS_SERIAL,
1972 MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
1973 USB_DEVICE_ID_ELITEGROUP_05D8) },
1974
1975
1976 { .driver_data = MT_CLS_FLATFROG,
1977 MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
1978 USB_DEVICE_ID_MULTITOUCH_3200) },
1979
1980
1981 { .driver_data = MT_CLS_SERIAL,
1982 MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
1983 USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },
1984
1985
1986 { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1987 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1988 USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
1989 { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1990 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1991 USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
1992 { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1993 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1994 USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0101) },
1995 { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1996 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1997 USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0102) },
1998 { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1999 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
2000 USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0106) },
2001 { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
2002 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
2003 USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A) },
2004 { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
2005 MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
2006 USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100) },
2007
2008
2009 { .driver_data = MT_CLS_NSMU,
2010 MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
2011 USB_DEVICE_ID_GAMETEL_MT_MODE) },
2012
2013
2014 { .driver_data = MT_CLS_NSMU,
2015 MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
2016 USB_DEVICE_ID_GOODTOUCH_000f) },
2017
2018
2019 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
2020 MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
2021 USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
2022
2023
2024 { .driver_data = MT_CLS_NSMU,
2025 MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
2026 USB_DEVICE_ID_ILITEK_MULTITOUCH) },
2027
2028
2029 { .driver_data = MT_CLS_LG,
2030 HID_USB_DEVICE(USB_VENDOR_ID_LG,
2031 USB_DEVICE_ID_LG_MELFAS_MT) },
2032 { .driver_data = MT_CLS_LG,
2033 HID_DEVICE(BUS_I2C, HID_GROUP_GENERIC,
2034 USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_7010) },
2035
2036
2037 { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
2038 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
2039 USB_VENDOR_ID_LENOVO,
2040 USB_DEVICE_ID_LENOVO_X1_TAB) },
2041
2042
2043 { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
2044 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
2045 USB_VENDOR_ID_LENOVO,
2046 USB_DEVICE_ID_LENOVO_X1_TAB3) },
2047
2048
2049 { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU,
2050 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
2051 USB_VENDOR_ID_LENOVO,
2052 USB_DEVICE_ID_LENOVO_X12_TAB) },
2053
2054
2055 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
2056 MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
2057 USB_DEVICE_ID_ASUS_T91MT)},
2058 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
2059 MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
2060 USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
2061 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
2062 MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
2063 USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
2064
2065
2066 { .driver_data = MT_CLS_NSMU,
2067 MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
2068 USB_DEVICE_ID_NOVATEK_PCT) },
2069
2070
2071 { .driver_data = MT_CLS_NSMU,
2072 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
2073 USB_VENDOR_ID_NTRIG, 0x1b05) },
2074
2075
2076 { .driver_data = MT_CLS_PANASONIC,
2077 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
2078 USB_DEVICE_ID_PANABOARD_UBT780) },
2079 { .driver_data = MT_CLS_PANASONIC,
2080 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
2081 USB_DEVICE_ID_PANABOARD_UBT880) },
2082
2083
2084 { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
2085 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
2086 USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
2087 { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
2088 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
2089 USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
2090 { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
2091 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
2092 USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
2093
2094
2095 { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
2096 MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
2097 USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
2098
2099
2100 { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
2101 MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
2102 USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
2103
2104
2105 { .driver_data = MT_CLS_RAZER_BLADE_STEALTH,
2106 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
2107 USB_VENDOR_ID_SYNAPTICS, 0x8323) },
2108
2109
2110 { .driver_data = MT_CLS_SMART_TECH,
2111 MT_USB_DEVICE(0x0b8c, 0x0092)},
2112
2113
2114 { .driver_data = MT_CLS_CONFIDENCE,
2115 MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
2116 USB_DEVICE_ID_MTP_STM)},
2117
2118
2119 { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
2120 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
2121 USB_VENDOR_ID_SYNAPTICS, 0xce08) },
2122
2123 { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT,
2124 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
2125 USB_VENDOR_ID_SYNAPTICS, 0xce09) },
2126
2127
2128 { .driver_data = MT_CLS_TOPSEED,
2129 MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
2130 USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },
2131
2132
2133 { .driver_data = MT_CLS_NSMU,
2134 MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
2135 USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
2136
2137
2138 { .driver_data = MT_CLS_NSMU,
2139 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
2140 USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
2141 { .driver_data = MT_CLS_NSMU,
2142 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
2143 USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
2144
2145
2146 { .driver_data = MT_CLS_VTL,
2147 MT_USB_DEVICE(USB_VENDOR_ID_VTL,
2148 USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },
2149
2150
2151 { .driver_data = MT_CLS_WIN_8_NO_STICKY_FINGERS,
2152 HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
2153 USB_VENDOR_ID_WINBOND, USB_DEVICE_ID_TSTP_MTOUCH) },
2154
2155
2156 { .driver_data = MT_CLS_NSMU,
2157 MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
2158 USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },
2159
2160
2161 { .driver_data = MT_CLS_NSMU,
2162 MT_USB_DEVICE(USB_VENDOR_ID_XAT,
2163 USB_DEVICE_ID_XAT_CSR) },
2164
2165
2166 { .driver_data = MT_CLS_NSMU,
2167 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2168 USB_DEVICE_ID_XIROKU_SPX) },
2169 { .driver_data = MT_CLS_NSMU,
2170 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2171 USB_DEVICE_ID_XIROKU_MPX) },
2172 { .driver_data = MT_CLS_NSMU,
2173 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2174 USB_DEVICE_ID_XIROKU_CSR) },
2175 { .driver_data = MT_CLS_NSMU,
2176 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2177 USB_DEVICE_ID_XIROKU_SPX1) },
2178 { .driver_data = MT_CLS_NSMU,
2179 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2180 USB_DEVICE_ID_XIROKU_MPX1) },
2181 { .driver_data = MT_CLS_NSMU,
2182 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2183 USB_DEVICE_ID_XIROKU_CSR1) },
2184 { .driver_data = MT_CLS_NSMU,
2185 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2186 USB_DEVICE_ID_XIROKU_SPX2) },
2187 { .driver_data = MT_CLS_NSMU,
2188 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2189 USB_DEVICE_ID_XIROKU_MPX2) },
2190 { .driver_data = MT_CLS_NSMU,
2191 MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
2192 USB_DEVICE_ID_XIROKU_CSR2) },
2193
2194
2195 { .driver_data = MT_CLS_GOOGLE,
2196 HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
2197 USB_DEVICE_ID_GOOGLE_TOUCH_ROSE) },
2198 { .driver_data = MT_CLS_GOOGLE,
2199 HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8, USB_VENDOR_ID_GOOGLE,
2200 USB_DEVICE_ID_GOOGLE_WHISKERS) },
2201
2202
2203 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
2204
2205
2206 { .driver_data = MT_CLS_WIN_8,
2207 HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
2208 HID_ANY_ID, HID_ANY_ID) },
2209 { }
2210 };
2211 MODULE_DEVICE_TABLE(hid, mt_devices);
2212
2213 static const struct hid_usage_id mt_grabbed_usages[] = {
2214 { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
2215 { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
2216 };
2217
2218 static struct hid_driver mt_driver = {
2219 .name = "hid-multitouch",
2220 .id_table = mt_devices,
2221 .probe = mt_probe,
2222 .remove = mt_remove,
2223 .input_mapping = mt_input_mapping,
2224 .input_mapped = mt_input_mapped,
2225 .input_configured = mt_input_configured,
2226 .feature_mapping = mt_feature_mapping,
2227 .usage_table = mt_grabbed_usages,
2228 .event = mt_event,
2229 .report = mt_report,
2230 #ifdef CONFIG_PM
2231 .suspend = mt_suspend,
2232 .reset_resume = mt_reset_resume,
2233 .resume = mt_resume,
2234 #endif
2235 };
2236 module_hid_driver(mt_driver);