linux/drivers/hid/hid-multitouch.c
<<
>>
Prefs
   1/*
   2 *  HID driver for multitouch panels
   3 *
   4 *  Copyright (c) 2010-2012 Stephane Chatty <chatty@enac.fr>
   5 *  Copyright (c) 2010-2013 Benjamin Tissoires <benjamin.tissoires@gmail.com>
   6 *  Copyright (c) 2010-2012 Ecole Nationale de l'Aviation Civile, France
   7 *  Copyright (c) 2012-2013 Red Hat, Inc
   8 *
   9 *  This code is partly based on hid-egalax.c:
  10 *
  11 *  Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
  12 *  Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
  13 *  Copyright (c) 2010 Canonical, Ltd.
  14 *
  15 *  This code is partly based on hid-3m-pct.c:
  16 *
  17 *  Copyright (c) 2009-2010 Stephane Chatty <chatty@enac.fr>
  18 *  Copyright (c) 2010      Henrik Rydberg <rydberg@euromail.se>
  19 *  Copyright (c) 2010      Canonical, Ltd.
  20 *
  21 */
  22
  23/*
  24 * This program is free software; you can redistribute it and/or modify it
  25 * under the terms of the GNU General Public License as published by the Free
  26 * Software Foundation; either version 2 of the License, or (at your option)
  27 * any later version.
  28 */
  29
  30/*
  31 * This driver is regularly tested thanks to the tool hid-test[1].
  32 * This tool relies on hid-replay[2] and a database of hid devices[3].
  33 * Please run these regression tests before patching this module so that
  34 * your patch won't break existing known devices.
  35 *
  36 * [1] https://github.com/bentiss/hid-test
  37 * [2] https://github.com/bentiss/hid-replay
  38 * [3] https://github.com/bentiss/hid-devices
  39 */
  40
  41#include <linux/device.h>
  42#include <linux/hid.h>
  43#include <linux/module.h>
  44#include <linux/slab.h>
  45#include <linux/input/mt.h>
  46#include <linux/string.h>
  47#include <linux/timer.h>
  48
  49
  50MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
  51MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
  52MODULE_DESCRIPTION("HID multitouch panels");
  53MODULE_LICENSE("GPL");
  54
  55#include "hid-ids.h"
  56
  57/* quirks to control the device */
  58#define MT_QUIRK_NOT_SEEN_MEANS_UP      BIT(0)
  59#define MT_QUIRK_SLOT_IS_CONTACTID      BIT(1)
  60#define MT_QUIRK_CYPRESS                BIT(2)
  61#define MT_QUIRK_SLOT_IS_CONTACTNUMBER  BIT(3)
  62#define MT_QUIRK_ALWAYS_VALID           BIT(4)
  63#define MT_QUIRK_VALID_IS_INRANGE       BIT(5)
  64#define MT_QUIRK_VALID_IS_CONFIDENCE    BIT(6)
  65#define MT_QUIRK_CONFIDENCE             BIT(7)
  66#define MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE    BIT(8)
  67#define MT_QUIRK_NO_AREA                BIT(9)
  68#define MT_QUIRK_IGNORE_DUPLICATES      BIT(10)
  69#define MT_QUIRK_HOVERING               BIT(11)
  70#define MT_QUIRK_CONTACT_CNT_ACCURATE   BIT(12)
  71#define MT_QUIRK_FORCE_GET_FEATURE      BIT(13)
  72#define MT_QUIRK_FIX_CONST_CONTACT_ID   BIT(14)
  73#define MT_QUIRK_TOUCH_SIZE_SCALING     BIT(15)
  74#define MT_QUIRK_STICKY_FINGERS         BIT(16)
  75#define MT_QUIRK_ASUS_CUSTOM_UP         BIT(17)
  76
  77#define MT_INPUTMODE_TOUCHSCREEN        0x02
  78#define MT_INPUTMODE_TOUCHPAD           0x03
  79
  80#define MT_BUTTONTYPE_CLICKPAD          0
  81
  82#define MT_IO_FLAGS_RUNNING             0
  83#define MT_IO_FLAGS_ACTIVE_SLOTS        1
  84#define MT_IO_FLAGS_PENDING_SLOTS       2
  85
  86struct mt_slot {
  87        __s32 x, y, cx, cy, p, w, h;
  88        __s32 contactid;        /* the device ContactID assigned to this slot */
  89        bool touch_state;       /* is the touch valid? */
  90        bool inrange_state;     /* is the finger in proximity of the sensor? */
  91        bool confidence_state;  /* is the touch made by a finger? */
  92};
  93
  94struct mt_class {
  95        __s32 name;     /* MT_CLS */
  96        __s32 quirks;
  97        __s32 sn_move;  /* Signal/noise ratio for move events */
  98        __s32 sn_width; /* Signal/noise ratio for width events */
  99        __s32 sn_height;        /* Signal/noise ratio for height events */
 100        __s32 sn_pressure;      /* Signal/noise ratio for pressure events */
 101        __u8 maxcontacts;
 102        bool is_indirect;       /* true for touchpads */
 103        bool export_all_inputs; /* do not ignore mouse, keyboards, etc... */
 104};
 105
 106struct mt_fields {
 107        unsigned usages[HID_MAX_FIELDS];
 108        unsigned int length;
 109};
 110
 111struct mt_device {
 112        struct mt_slot curdata; /* placeholder of incoming data */
 113        struct mt_class mtclass;        /* our mt device class */
 114        struct timer_list release_timer;        /* to release sticky fingers */
 115        struct mt_fields *fields;       /* temporary placeholder for storing the
 116                                           multitouch fields */
 117        unsigned long mt_io_flags;      /* mt flags (MT_IO_FLAGS_*) */
 118        int cc_index;   /* contact count field index in the report */
 119        int cc_value_index;     /* contact count value index in the field */
 120        unsigned last_slot_field;       /* the last field of a slot */
 121        unsigned mt_report_id;  /* the report ID of the multitouch device */
 122        unsigned long initial_quirks;   /* initial quirks state */
 123        __s16 inputmode;        /* InputMode HID feature, -1 if non-existent */
 124        __s16 inputmode_index;  /* InputMode HID feature index in the report */
 125        __s16 maxcontact_report_id;     /* Maximum Contact Number HID feature,
 126                                   -1 if non-existent */
 127        __u8 inputmode_value;  /* InputMode HID feature value */
 128        __u8 num_received;      /* how many contacts we received */
 129        __u8 num_expected;      /* expected last contact index */
 130        __u8 maxcontacts;
 131        __u8 touches_by_report; /* how many touches are present in one report:
 132                                * 1 means we should use a serial protocol
 133                                * > 1 means hybrid (multitouch) protocol */
 134        __u8 buttons_count;     /* number of physical buttons per touchpad */
 135        bool is_buttonpad;      /* is this device a button pad? */
 136        bool serial_maybe;      /* need to check for serial protocol */
 137        bool curvalid;          /* is the current contact valid? */
 138        unsigned mt_flags;      /* flags to pass to input-mt */
 139};
 140
 141static void mt_post_parse_default_settings(struct mt_device *td);
 142static void mt_post_parse(struct mt_device *td);
 143
 144/* classes of device behavior */
 145#define MT_CLS_DEFAULT                          0x0001
 146
 147#define MT_CLS_SERIAL                           0x0002
 148#define MT_CLS_CONFIDENCE                       0x0003
 149#define MT_CLS_CONFIDENCE_CONTACT_ID            0x0004
 150#define MT_CLS_CONFIDENCE_MINUS_ONE             0x0005
 151#define MT_CLS_DUAL_INRANGE_CONTACTID           0x0006
 152#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER       0x0007
 153/* reserved                                     0x0008 */
 154#define MT_CLS_INRANGE_CONTACTNUMBER            0x0009
 155#define MT_CLS_NSMU                             0x000a
 156/* reserved                                     0x0010 */
 157/* reserved                                     0x0011 */
 158#define MT_CLS_WIN_8                            0x0012
 159#define MT_CLS_EXPORT_ALL_INPUTS                0x0013
 160#define MT_CLS_WIN_8_DUAL                       0x0014
 161
 162/* vendor specific classes */
 163#define MT_CLS_3M                               0x0101
 164/* reserved                                     0x0102 */
 165#define MT_CLS_EGALAX                           0x0103
 166#define MT_CLS_EGALAX_SERIAL                    0x0104
 167#define MT_CLS_TOPSEED                          0x0105
 168#define MT_CLS_PANASONIC                        0x0106
 169#define MT_CLS_FLATFROG                         0x0107
 170#define MT_CLS_GENERALTOUCH_TWOFINGERS          0x0108
 171#define MT_CLS_GENERALTOUCH_PWT_TENFINGERS      0x0109
 172#define MT_CLS_LG                               0x010a
 173#define MT_CLS_ASUS                             0x010b
 174#define MT_CLS_VTL                              0x0110
 175#define MT_CLS_GOOGLE                           0x0111
 176
 177#define MT_DEFAULT_MAXCONTACT   10
 178#define MT_MAX_MAXCONTACT       250
 179
 180#define MT_USB_DEVICE(v, p)     HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)
 181#define MT_BT_DEVICE(v, p)      HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)
 182
 183/*
 184 * these device-dependent functions determine what slot corresponds
 185 * to a valid contact that was just read.
 186 */
 187
 188static int cypress_compute_slot(struct mt_device *td)
 189{
 190        if (td->curdata.contactid != 0 || td->num_received == 0)
 191                return td->curdata.contactid;
 192        else
 193                return -1;
 194}
 195
 196static struct mt_class mt_classes[] = {
 197        { .name = MT_CLS_DEFAULT,
 198                .quirks = MT_QUIRK_ALWAYS_VALID |
 199                        MT_QUIRK_CONTACT_CNT_ACCURATE },
 200        { .name = MT_CLS_NSMU,
 201                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP },
 202        { .name = MT_CLS_SERIAL,
 203                .quirks = MT_QUIRK_ALWAYS_VALID},
 204        { .name = MT_CLS_CONFIDENCE,
 205                .quirks = MT_QUIRK_VALID_IS_CONFIDENCE },
 206        { .name = MT_CLS_CONFIDENCE_CONTACT_ID,
 207                .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
 208                        MT_QUIRK_SLOT_IS_CONTACTID },
 209        { .name = MT_CLS_CONFIDENCE_MINUS_ONE,
 210                .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
 211                        MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE },
 212        { .name = MT_CLS_DUAL_INRANGE_CONTACTID,
 213                .quirks = MT_QUIRK_VALID_IS_INRANGE |
 214                        MT_QUIRK_SLOT_IS_CONTACTID,
 215                .maxcontacts = 2 },
 216        { .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
 217                .quirks = MT_QUIRK_VALID_IS_INRANGE |
 218                        MT_QUIRK_SLOT_IS_CONTACTNUMBER,
 219                .maxcontacts = 2 },
 220        { .name = MT_CLS_INRANGE_CONTACTNUMBER,
 221                .quirks = MT_QUIRK_VALID_IS_INRANGE |
 222                        MT_QUIRK_SLOT_IS_CONTACTNUMBER },
 223        { .name = MT_CLS_WIN_8,
 224                .quirks = MT_QUIRK_ALWAYS_VALID |
 225                        MT_QUIRK_IGNORE_DUPLICATES |
 226                        MT_QUIRK_HOVERING |
 227                        MT_QUIRK_CONTACT_CNT_ACCURATE |
 228                        MT_QUIRK_STICKY_FINGERS },
 229        { .name = MT_CLS_EXPORT_ALL_INPUTS,
 230                .quirks = MT_QUIRK_ALWAYS_VALID |
 231                        MT_QUIRK_CONTACT_CNT_ACCURATE,
 232                .export_all_inputs = true },
 233        { .name = MT_CLS_WIN_8_DUAL,
 234                .quirks = MT_QUIRK_ALWAYS_VALID |
 235                        MT_QUIRK_IGNORE_DUPLICATES |
 236                        MT_QUIRK_HOVERING |
 237                        MT_QUIRK_CONTACT_CNT_ACCURATE,
 238                .export_all_inputs = true },
 239
 240        /*
 241         * vendor specific classes
 242         */
 243        { .name = MT_CLS_3M,
 244                .quirks = MT_QUIRK_VALID_IS_CONFIDENCE |
 245                        MT_QUIRK_SLOT_IS_CONTACTID |
 246                        MT_QUIRK_TOUCH_SIZE_SCALING,
 247                .sn_move = 2048,
 248                .sn_width = 128,
 249                .sn_height = 128,
 250                .maxcontacts = 60,
 251        },
 252        { .name = MT_CLS_EGALAX,
 253                .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
 254                        MT_QUIRK_VALID_IS_INRANGE,
 255                .sn_move = 4096,
 256                .sn_pressure = 32,
 257        },
 258        { .name = MT_CLS_EGALAX_SERIAL,
 259                .quirks =  MT_QUIRK_SLOT_IS_CONTACTID |
 260                        MT_QUIRK_ALWAYS_VALID,
 261                .sn_move = 4096,
 262                .sn_pressure = 32,
 263        },
 264        { .name = MT_CLS_TOPSEED,
 265                .quirks = MT_QUIRK_ALWAYS_VALID,
 266                .is_indirect = true,
 267                .maxcontacts = 2,
 268        },
 269        { .name = MT_CLS_PANASONIC,
 270                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
 271                .maxcontacts = 4 },
 272        { .name = MT_CLS_GENERALTOUCH_TWOFINGERS,
 273                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
 274                        MT_QUIRK_VALID_IS_INRANGE |
 275                        MT_QUIRK_SLOT_IS_CONTACTID,
 276                .maxcontacts = 2
 277        },
 278        { .name = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
 279                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
 280                        MT_QUIRK_SLOT_IS_CONTACTID
 281        },
 282
 283        { .name = MT_CLS_FLATFROG,
 284                .quirks = MT_QUIRK_NOT_SEEN_MEANS_UP |
 285                        MT_QUIRK_NO_AREA,
 286                .sn_move = 2048,
 287                .maxcontacts = 40,
 288        },
 289        { .name = MT_CLS_LG,
 290                .quirks = MT_QUIRK_ALWAYS_VALID |
 291                        MT_QUIRK_FIX_CONST_CONTACT_ID |
 292                        MT_QUIRK_IGNORE_DUPLICATES |
 293                        MT_QUIRK_HOVERING |
 294                        MT_QUIRK_CONTACT_CNT_ACCURATE },
 295        { .name = MT_CLS_ASUS,
 296                .quirks = MT_QUIRK_ALWAYS_VALID |
 297                        MT_QUIRK_CONTACT_CNT_ACCURATE |
 298                        MT_QUIRK_ASUS_CUSTOM_UP },
 299        { .name = MT_CLS_VTL,
 300                .quirks = MT_QUIRK_ALWAYS_VALID |
 301                        MT_QUIRK_CONTACT_CNT_ACCURATE |
 302                        MT_QUIRK_FORCE_GET_FEATURE,
 303        },
 304        { .name = MT_CLS_GOOGLE,
 305                .quirks = MT_QUIRK_ALWAYS_VALID |
 306                        MT_QUIRK_CONTACT_CNT_ACCURATE |
 307                        MT_QUIRK_SLOT_IS_CONTACTID |
 308                        MT_QUIRK_HOVERING
 309        },
 310        { }
 311};
 312
 313static ssize_t mt_show_quirks(struct device *dev,
 314                           struct device_attribute *attr,
 315                           char *buf)
 316{
 317        struct hid_device *hdev = to_hid_device(dev);
 318        struct mt_device *td = hid_get_drvdata(hdev);
 319
 320        return sprintf(buf, "%u\n", td->mtclass.quirks);
 321}
 322
 323static ssize_t mt_set_quirks(struct device *dev,
 324                          struct device_attribute *attr,
 325                          const char *buf, size_t count)
 326{
 327        struct hid_device *hdev = to_hid_device(dev);
 328        struct mt_device *td = hid_get_drvdata(hdev);
 329
 330        unsigned long val;
 331
 332        if (kstrtoul(buf, 0, &val))
 333                return -EINVAL;
 334
 335        td->mtclass.quirks = val;
 336
 337        if (td->cc_index < 0)
 338                td->mtclass.quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
 339
 340        return count;
 341}
 342
 343static DEVICE_ATTR(quirks, S_IWUSR | S_IRUGO, mt_show_quirks, mt_set_quirks);
 344
 345static struct attribute *sysfs_attrs[] = {
 346        &dev_attr_quirks.attr,
 347        NULL
 348};
 349
 350static const struct attribute_group mt_attribute_group = {
 351        .attrs = sysfs_attrs
 352};
 353
 354static void mt_get_feature(struct hid_device *hdev, struct hid_report *report)
 355{
 356        struct mt_device *td = hid_get_drvdata(hdev);
 357        int ret, size = hid_report_len(report);
 358        u8 *buf;
 359
 360        /*
 361         * Do not fetch the feature report if the device has been explicitly
 362         * marked as non-capable.
 363         */
 364        if (td->initial_quirks & HID_QUIRK_NO_INIT_REPORTS)
 365                return;
 366
 367        buf = hid_alloc_report_buf(report, GFP_KERNEL);
 368        if (!buf)
 369                return;
 370
 371        ret = hid_hw_raw_request(hdev, report->id, buf, size,
 372                                 HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
 373        if (ret < 0) {
 374                dev_warn(&hdev->dev, "failed to fetch feature %d\n",
 375                         report->id);
 376        } else {
 377                ret = hid_report_raw_event(hdev, HID_FEATURE_REPORT, buf,
 378                                           size, 0);
 379                if (ret)
 380                        dev_warn(&hdev->dev, "failed to report feature\n");
 381        }
 382
 383        kfree(buf);
 384}
 385
 386static void mt_feature_mapping(struct hid_device *hdev,
 387                struct hid_field *field, struct hid_usage *usage)
 388{
 389        struct mt_device *td = hid_get_drvdata(hdev);
 390
 391        switch (usage->hid) {
 392        case HID_DG_INPUTMODE:
 393                /* Ignore if value index is out of bounds. */
 394                if (usage->usage_index >= field->report_count) {
 395                        dev_err(&hdev->dev, "HID_DG_INPUTMODE out of range\n");
 396                        break;
 397                }
 398
 399                if (td->inputmode < 0) {
 400                        td->inputmode = field->report->id;
 401                        td->inputmode_index = usage->usage_index;
 402                } else {
 403                        /*
 404                         * Some elan panels wrongly declare 2 input mode
 405                         * features, and silently ignore when we set the
 406                         * value in the second field. Skip the second feature
 407                         * and hope for the best.
 408                         */
 409                        dev_info(&hdev->dev,
 410                                 "Ignoring the extra HID_DG_INPUTMODE\n");
 411                }
 412
 413                break;
 414        case HID_DG_CONTACTMAX:
 415                mt_get_feature(hdev, field->report);
 416
 417                td->maxcontact_report_id = field->report->id;
 418                td->maxcontacts = field->value[0];
 419                if (!td->maxcontacts &&
 420                    field->logical_maximum <= MT_MAX_MAXCONTACT)
 421                        td->maxcontacts = field->logical_maximum;
 422                if (td->mtclass.maxcontacts)
 423                        /* check if the maxcontacts is given by the class */
 424                        td->maxcontacts = td->mtclass.maxcontacts;
 425
 426                break;
 427        case HID_DG_BUTTONTYPE:
 428                if (usage->usage_index >= field->report_count) {
 429                        dev_err(&hdev->dev, "HID_DG_BUTTONTYPE out of range\n");
 430                        break;
 431                }
 432
 433                mt_get_feature(hdev, field->report);
 434                if (field->value[usage->usage_index] == MT_BUTTONTYPE_CLICKPAD)
 435                        td->is_buttonpad = true;
 436
 437                break;
 438        case 0xff0000c5:
 439                /* Retrieve the Win8 blob once to enable some devices */
 440                if (usage->usage_index == 0)
 441                        mt_get_feature(hdev, field->report);
 442                break;
 443        }
 444}
 445
 446static void set_abs(struct input_dev *input, unsigned int code,
 447                struct hid_field *field, int snratio)
 448{
 449        int fmin = field->logical_minimum;
 450        int fmax = field->logical_maximum;
 451        int fuzz = snratio ? (fmax - fmin) / snratio : 0;
 452        input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
 453        input_abs_set_res(input, code, hidinput_calc_abs_res(field, code));
 454}
 455
 456static void mt_store_field(struct hid_usage *usage, struct mt_device *td,
 457                struct hid_input *hi)
 458{
 459        struct mt_fields *f = td->fields;
 460
 461        if (f->length >= HID_MAX_FIELDS)
 462                return;
 463
 464        f->usages[f->length++] = usage->hid;
 465}
 466
 467static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
 468                struct hid_field *field, struct hid_usage *usage,
 469                unsigned long **bit, int *max)
 470{
 471        struct mt_device *td = hid_get_drvdata(hdev);
 472        struct mt_class *cls = &td->mtclass;
 473        int code;
 474        struct hid_usage *prev_usage = NULL;
 475
 476        if (field->application == HID_DG_TOUCHSCREEN)
 477                td->mt_flags |= INPUT_MT_DIRECT;
 478
 479        /*
 480         * Model touchscreens providing buttons as touchpads.
 481         */
 482        if (field->application == HID_DG_TOUCHPAD ||
 483            (usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
 484                td->mt_flags |= INPUT_MT_POINTER;
 485                td->inputmode_value = MT_INPUTMODE_TOUCHPAD;
 486        }
 487
 488        /* count the buttons on touchpads */
 489        if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON)
 490                td->buttons_count++;
 491
 492        if (usage->usage_index)
 493                prev_usage = &field->usage[usage->usage_index - 1];
 494
 495        switch (usage->hid & HID_USAGE_PAGE) {
 496
 497        case HID_UP_GENDESK:
 498                switch (usage->hid) {
 499                case HID_GD_X:
 500                        if (prev_usage && (prev_usage->hid == usage->hid)) {
 501                                hid_map_usage(hi, usage, bit, max,
 502                                        EV_ABS, ABS_MT_TOOL_X);
 503                                set_abs(hi->input, ABS_MT_TOOL_X, field,
 504                                        cls->sn_move);
 505                        } else {
 506                                hid_map_usage(hi, usage, bit, max,
 507                                        EV_ABS, ABS_MT_POSITION_X);
 508                                set_abs(hi->input, ABS_MT_POSITION_X, field,
 509                                        cls->sn_move);
 510                        }
 511
 512                        mt_store_field(usage, td, hi);
 513                        return 1;
 514                case HID_GD_Y:
 515                        if (prev_usage && (prev_usage->hid == usage->hid)) {
 516                                hid_map_usage(hi, usage, bit, max,
 517                                        EV_ABS, ABS_MT_TOOL_Y);
 518                                set_abs(hi->input, ABS_MT_TOOL_Y, field,
 519                                        cls->sn_move);
 520                        } else {
 521                                hid_map_usage(hi, usage, bit, max,
 522                                        EV_ABS, ABS_MT_POSITION_Y);
 523                                set_abs(hi->input, ABS_MT_POSITION_Y, field,
 524                                        cls->sn_move);
 525                        }
 526
 527                        mt_store_field(usage, td, hi);
 528                        return 1;
 529                }
 530                return 0;
 531
 532        case HID_UP_DIGITIZER:
 533                switch (usage->hid) {
 534                case HID_DG_INRANGE:
 535                        if (cls->quirks & MT_QUIRK_HOVERING) {
 536                                hid_map_usage(hi, usage, bit, max,
 537                                        EV_ABS, ABS_MT_DISTANCE);
 538                                input_set_abs_params(hi->input,
 539                                        ABS_MT_DISTANCE, 0, 1, 0, 0);
 540                        }
 541                        mt_store_field(usage, td, hi);
 542                        return 1;
 543                case HID_DG_CONFIDENCE:
 544                        if ((cls->name == MT_CLS_WIN_8 ||
 545                                cls->name == MT_CLS_WIN_8_DUAL) &&
 546                                field->application == HID_DG_TOUCHPAD)
 547                                cls->quirks |= MT_QUIRK_CONFIDENCE;
 548                        mt_store_field(usage, td, hi);
 549                        return 1;
 550                case HID_DG_TIPSWITCH:
 551                        hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
 552                        input_set_capability(hi->input, EV_KEY, BTN_TOUCH);
 553                        mt_store_field(usage, td, hi);
 554                        return 1;
 555                case HID_DG_CONTACTID:
 556                        mt_store_field(usage, td, hi);
 557                        td->touches_by_report++;
 558                        td->mt_report_id = field->report->id;
 559                        return 1;
 560                case HID_DG_WIDTH:
 561                        hid_map_usage(hi, usage, bit, max,
 562                                        EV_ABS, ABS_MT_TOUCH_MAJOR);
 563                        if (!(cls->quirks & MT_QUIRK_NO_AREA))
 564                                set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
 565                                        cls->sn_width);
 566                        mt_store_field(usage, td, hi);
 567                        return 1;
 568                case HID_DG_HEIGHT:
 569                        hid_map_usage(hi, usage, bit, max,
 570                                        EV_ABS, ABS_MT_TOUCH_MINOR);
 571                        if (!(cls->quirks & MT_QUIRK_NO_AREA)) {
 572                                set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
 573                                        cls->sn_height);
 574                                input_set_abs_params(hi->input,
 575                                        ABS_MT_ORIENTATION, 0, 1, 0, 0);
 576                        }
 577                        mt_store_field(usage, td, hi);
 578                        return 1;
 579                case HID_DG_TIPPRESSURE:
 580                        hid_map_usage(hi, usage, bit, max,
 581                                        EV_ABS, ABS_MT_PRESSURE);
 582                        set_abs(hi->input, ABS_MT_PRESSURE, field,
 583                                cls->sn_pressure);
 584                        mt_store_field(usage, td, hi);
 585                        return 1;
 586                case HID_DG_CONTACTCOUNT:
 587                        /* Ignore if indexes are out of bounds. */
 588                        if (field->index >= field->report->maxfield ||
 589                            usage->usage_index >= field->report_count)
 590                                return 1;
 591                        td->cc_index = field->index;
 592                        td->cc_value_index = usage->usage_index;
 593                        return 1;
 594                case HID_DG_CONTACTMAX:
 595                        /* we don't set td->last_slot_field as contactcount and
 596                         * contact max are global to the report */
 597                        return -1;
 598                case HID_DG_TOUCH:
 599                        /* Legacy devices use TIPSWITCH and not TOUCH.
 600                         * Let's just ignore this field. */
 601                        return -1;
 602                }
 603                /* let hid-input decide for the others */
 604                return 0;
 605
 606        case HID_UP_BUTTON:
 607                code = BTN_MOUSE + ((usage->hid - 1) & HID_USAGE);
 608                /*
 609                 * MS PTP spec says that external buttons left and right have
 610                 * usages 2 and 3.
 611                 */
 612                if ((cls->name == MT_CLS_WIN_8 ||
 613                        cls->name == MT_CLS_WIN_8_DUAL) &&
 614                    field->application == HID_DG_TOUCHPAD &&
 615                    (usage->hid & HID_USAGE) > 1)
 616                        code--;
 617                hid_map_usage(hi, usage, bit, max, EV_KEY, code);
 618                input_set_capability(hi->input, EV_KEY, code);
 619                return 1;
 620
 621        case 0xff000000:
 622                /* we do not want to map these: no input-oriented meaning */
 623                return -1;
 624        }
 625
 626        return 0;
 627}
 628
 629static int mt_compute_slot(struct mt_device *td, struct input_dev *input)
 630{
 631        __s32 quirks = td->mtclass.quirks;
 632
 633        if (quirks & MT_QUIRK_SLOT_IS_CONTACTID)
 634                return td->curdata.contactid;
 635
 636        if (quirks & MT_QUIRK_CYPRESS)
 637                return cypress_compute_slot(td);
 638
 639        if (quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER)
 640                return td->num_received;
 641
 642        if (quirks & MT_QUIRK_SLOT_IS_CONTACTID_MINUS_ONE)
 643                return td->curdata.contactid - 1;
 644
 645        return input_mt_get_slot_by_key(input, td->curdata.contactid);
 646}
 647
 648/*
 649 * this function is called when a whole contact has been processed,
 650 * so that it can assign it to a slot and store the data there
 651 */
 652static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
 653{
 654        if ((td->mtclass.quirks & MT_QUIRK_CONTACT_CNT_ACCURATE) &&
 655            td->num_received >= td->num_expected)
 656                return;
 657
 658        if (td->curvalid || (td->mtclass.quirks & MT_QUIRK_ALWAYS_VALID)) {
 659                int active;
 660                int slotnum = mt_compute_slot(td, input);
 661                struct mt_slot *s = &td->curdata;
 662                struct input_mt *mt = input->mt;
 663
 664                if (slotnum < 0 || slotnum >= td->maxcontacts)
 665                        return;
 666
 667                if ((td->mtclass.quirks & MT_QUIRK_IGNORE_DUPLICATES) && mt) {
 668                        struct input_mt_slot *slot = &mt->slots[slotnum];
 669                        if (input_mt_is_active(slot) &&
 670                            input_mt_is_used(mt, slot))
 671                                return;
 672                }
 673
 674                if (!(td->mtclass.quirks & MT_QUIRK_CONFIDENCE))
 675                        s->confidence_state = 1;
 676                active = (s->touch_state || s->inrange_state) &&
 677                                                        s->confidence_state;
 678
 679                input_mt_slot(input, slotnum);
 680                input_mt_report_slot_state(input, MT_TOOL_FINGER, active);
 681                if (active) {
 682                        /* this finger is in proximity of the sensor */
 683                        int wide = (s->w > s->h);
 684                        int major = max(s->w, s->h);
 685                        int minor = min(s->w, s->h);
 686
 687                        /*
 688                         * divided by two to match visual scale of touch
 689                         * for devices with this quirk
 690                         */
 691                        if (td->mtclass.quirks & MT_QUIRK_TOUCH_SIZE_SCALING) {
 692                                major = major >> 1;
 693                                minor = minor >> 1;
 694                        }
 695
 696                        input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);
 697                        input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);
 698                        input_event(input, EV_ABS, ABS_MT_TOOL_X, s->cx);
 699                        input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy);
 700                        input_event(input, EV_ABS, ABS_MT_DISTANCE,
 701                                !s->touch_state);
 702                        input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide);
 703                        input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
 704                        input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
 705                        input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
 706
 707                        set_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags);
 708                }
 709        }
 710
 711        td->num_received++;
 712}
 713
 714/*
 715 * this function is called when a whole packet has been received and processed,
 716 * so that it can decide what to send to the input layer.
 717 */
 718static void mt_sync_frame(struct mt_device *td, struct input_dev *input)
 719{
 720        input_mt_sync_frame(input);
 721        input_sync(input);
 722        td->num_received = 0;
 723        if (test_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags))
 724                set_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
 725        else
 726                clear_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
 727        clear_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags);
 728}
 729
 730static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
 731                                struct hid_usage *usage, __s32 value)
 732{
 733        /* we will handle the hidinput part later, now remains hiddev */
 734        if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
 735                hid->hiddev_hid_event(hid, field, usage, value);
 736
 737        return 1;
 738}
 739
 740static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
 741                                struct hid_usage *usage, __s32 value)
 742{
 743        struct mt_device *td = hid_get_drvdata(hid);
 744        __s32 quirks = td->mtclass.quirks;
 745        struct input_dev *input = field->hidinput->input;
 746
 747        if (hid->claimed & HID_CLAIMED_INPUT) {
 748                switch (usage->hid) {
 749                case HID_DG_INRANGE:
 750                        if (quirks & MT_QUIRK_VALID_IS_INRANGE)
 751                                td->curvalid = value;
 752                        if (quirks & MT_QUIRK_HOVERING)
 753                                td->curdata.inrange_state = value;
 754                        break;
 755                case HID_DG_TIPSWITCH:
 756                        if (quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
 757                                td->curvalid = value;
 758                        td->curdata.touch_state = value;
 759                        break;
 760                case HID_DG_CONFIDENCE:
 761                        if (quirks & MT_QUIRK_CONFIDENCE)
 762                                td->curdata.confidence_state = value;
 763                        if (quirks & MT_QUIRK_VALID_IS_CONFIDENCE)
 764                                td->curvalid = value;
 765                        break;
 766                case HID_DG_CONTACTID:
 767                        td->curdata.contactid = value;
 768                        break;
 769                case HID_DG_TIPPRESSURE:
 770                        td->curdata.p = value;
 771                        break;
 772                case HID_GD_X:
 773                        if (usage->code == ABS_MT_TOOL_X)
 774                                td->curdata.cx = value;
 775                        else
 776                                td->curdata.x = value;
 777                        break;
 778                case HID_GD_Y:
 779                        if (usage->code == ABS_MT_TOOL_Y)
 780                                td->curdata.cy = value;
 781                        else
 782                                td->curdata.y = value;
 783                        break;
 784                case HID_DG_WIDTH:
 785                        td->curdata.w = value;
 786                        break;
 787                case HID_DG_HEIGHT:
 788                        td->curdata.h = value;
 789                        break;
 790                case HID_DG_CONTACTCOUNT:
 791                        break;
 792                case HID_DG_TOUCH:
 793                        /* do nothing */
 794                        break;
 795
 796                default:
 797                        if (usage->type)
 798                                input_event(input, usage->type, usage->code,
 799                                                value);
 800                        return;
 801                }
 802
 803                if (usage->usage_index + 1 == field->report_count) {
 804                        /* we only take into account the last report. */
 805                        if (usage->hid == td->last_slot_field)
 806                                mt_complete_slot(td, field->hidinput->input);
 807                }
 808
 809        }
 810}
 811
 812static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
 813{
 814        struct mt_device *td = hid_get_drvdata(hid);
 815        struct hid_field *field;
 816        unsigned count;
 817        int r, n;
 818
 819        /* sticky fingers release in progress, abort */
 820        if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
 821                return;
 822
 823        /*
 824         * Includes multi-packet support where subsequent
 825         * packets are sent with zero contactcount.
 826         */
 827        if (td->cc_index >= 0) {
 828                struct hid_field *field = report->field[td->cc_index];
 829                int value = field->value[td->cc_value_index];
 830                if (value)
 831                        td->num_expected = value;
 832        }
 833
 834        for (r = 0; r < report->maxfield; r++) {
 835                field = report->field[r];
 836                count = field->report_count;
 837
 838                if (!(HID_MAIN_ITEM_VARIABLE & field->flags))
 839                        continue;
 840
 841                for (n = 0; n < count; n++)
 842                        mt_process_mt_event(hid, field, &field->usage[n],
 843                                        field->value[n]);
 844        }
 845
 846        if (td->num_received >= td->num_expected)
 847                mt_sync_frame(td, report->field[0]->hidinput->input);
 848
 849        /*
 850         * Windows 8 specs says 2 things:
 851         * - once a contact has been reported, it has to be reported in each
 852         *   subsequent report
 853         * - the report rate when fingers are present has to be at least
 854         *   the refresh rate of the screen, 60 or 120 Hz
 855         *
 856         * I interprete this that the specification forces a report rate of
 857         * at least 60 Hz for a touchscreen to be certified.
 858         * Which means that if we do not get a report whithin 16 ms, either
 859         * something wrong happens, either the touchscreen forgets to send
 860         * a release. Taking a reasonable margin allows to remove issues
 861         * with USB communication or the load of the machine.
 862         *
 863         * Given that Win 8 devices are forced to send a release, this will
 864         * only affect laggish machines and the ones that have a firmware
 865         * defect.
 866         */
 867        if (td->mtclass.quirks & MT_QUIRK_STICKY_FINGERS) {
 868                if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
 869                        mod_timer(&td->release_timer,
 870                                  jiffies + msecs_to_jiffies(100));
 871                else
 872                        del_timer(&td->release_timer);
 873        }
 874
 875        clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
 876}
 877
 878static int mt_touch_input_configured(struct hid_device *hdev,
 879                                        struct hid_input *hi)
 880{
 881        struct mt_device *td = hid_get_drvdata(hdev);
 882        struct mt_class *cls = &td->mtclass;
 883        struct input_dev *input = hi->input;
 884        int ret;
 885
 886        if (!td->maxcontacts)
 887                td->maxcontacts = MT_DEFAULT_MAXCONTACT;
 888
 889        mt_post_parse(td);
 890        if (td->serial_maybe)
 891                mt_post_parse_default_settings(td);
 892
 893        if (cls->is_indirect)
 894                td->mt_flags |= INPUT_MT_POINTER;
 895
 896        if (cls->quirks & MT_QUIRK_NOT_SEEN_MEANS_UP)
 897                td->mt_flags |= INPUT_MT_DROP_UNUSED;
 898
 899        /* check for clickpads */
 900        if ((td->mt_flags & INPUT_MT_POINTER) && (td->buttons_count == 1))
 901                td->is_buttonpad = true;
 902
 903        if (td->is_buttonpad)
 904                __set_bit(INPUT_PROP_BUTTONPAD, input->propbit);
 905
 906        ret = input_mt_init_slots(input, td->maxcontacts, td->mt_flags);
 907        if (ret)
 908                return ret;
 909
 910        td->mt_flags = 0;
 911        return 0;
 912}
 913
 914#define mt_map_key_clear(c)     hid_map_usage_clear(hi, usage, bit, \
 915                                                    max, EV_KEY, (c))
 916static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
 917                struct hid_field *field, struct hid_usage *usage,
 918                unsigned long **bit, int *max)
 919{
 920        struct mt_device *td = hid_get_drvdata(hdev);
 921
 922        /*
 923         * If mtclass.export_all_inputs is not set, only map fields from
 924         * TouchScreen or TouchPad collections. We need to ignore fields
 925         * that belong to other collections such as Mouse that might have
 926         * the same GenericDesktop usages.
 927         */
 928        if (!td->mtclass.export_all_inputs &&
 929            field->application != HID_DG_TOUCHSCREEN &&
 930            field->application != HID_DG_PEN &&
 931            field->application != HID_DG_TOUCHPAD &&
 932            field->application != HID_GD_KEYBOARD &&
 933            field->application != HID_GD_SYSTEM_CONTROL &&
 934            field->application != HID_CP_CONSUMER_CONTROL &&
 935            field->application != HID_GD_WIRELESS_RADIO_CTLS &&
 936            !(field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
 937              td->mtclass.quirks & MT_QUIRK_ASUS_CUSTOM_UP))
 938                return -1;
 939
 940        /*
 941         * Some Asus keyboard+touchpad devices have the hotkeys defined in the
 942         * touchpad report descriptor. We need to treat these as an array to
 943         * map usages to input keys.
 944         */
 945        if (field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
 946            td->mtclass.quirks & MT_QUIRK_ASUS_CUSTOM_UP &&
 947            (usage->hid & HID_USAGE_PAGE) == HID_UP_CUSTOM) {
 948                set_bit(EV_REP, hi->input->evbit);
 949                if (field->flags & HID_MAIN_ITEM_VARIABLE)
 950                        field->flags &= ~HID_MAIN_ITEM_VARIABLE;
 951                switch (usage->hid & HID_USAGE) {
 952                case 0x10: mt_map_key_clear(KEY_BRIGHTNESSDOWN);        break;
 953                case 0x20: mt_map_key_clear(KEY_BRIGHTNESSUP);          break;
 954                case 0x35: mt_map_key_clear(KEY_DISPLAY_OFF);           break;
 955                case 0x6b: mt_map_key_clear(KEY_F21);                   break;
 956                case 0x6c: mt_map_key_clear(KEY_SLEEP);                 break;
 957                default:
 958                        return -1;
 959                }
 960                return 1;
 961        }
 962
 963        /*
 964         * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
 965         * for the stylus.
 966         * The check for mt_report_id ensures we don't process
 967         * HID_DG_CONTACTCOUNT from the pen report as it is outside the physical
 968         * collection, but within the report ID.
 969         */
 970        if (field->physical == HID_DG_STYLUS)
 971                return 0;
 972        else if ((field->physical == 0) &&
 973                 (field->report->id != td->mt_report_id) &&
 974                 (td->mt_report_id != -1))
 975                return 0;
 976
 977        if (field->application == HID_DG_TOUCHSCREEN ||
 978            field->application == HID_DG_TOUCHPAD)
 979                return mt_touch_input_mapping(hdev, hi, field, usage, bit, max);
 980
 981        /* let hid-core decide for the others */
 982        return 0;
 983}
 984
 985static int mt_input_mapped(struct hid_device *hdev, struct hid_input *hi,
 986                struct hid_field *field, struct hid_usage *usage,
 987                unsigned long **bit, int *max)
 988{
 989        /*
 990         * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
 991         * for the stylus.
 992         */
 993        if (field->physical == HID_DG_STYLUS)
 994                return 0;
 995
 996        if (field->application == HID_DG_TOUCHSCREEN ||
 997            field->application == HID_DG_TOUCHPAD) {
 998                /* We own these mappings, tell hid-input to ignore them */
 999                return -1;
1000        }
1001
1002        /* let hid-core decide for the others */
1003        return 0;
1004}
1005
1006static int mt_event(struct hid_device *hid, struct hid_field *field,
1007                                struct hid_usage *usage, __s32 value)
1008{
1009        struct mt_device *td = hid_get_drvdata(hid);
1010
1011        if (field->report->id == td->mt_report_id)
1012                return mt_touch_event(hid, field, usage, value);
1013
1014        return 0;
1015}
1016
1017static void mt_report(struct hid_device *hid, struct hid_report *report)
1018{
1019        struct mt_device *td = hid_get_drvdata(hid);
1020        struct hid_field *field = report->field[0];
1021
1022        if (!(hid->claimed & HID_CLAIMED_INPUT))
1023                return;
1024
1025        if (report->id == td->mt_report_id)
1026                return mt_touch_report(hid, report);
1027
1028        if (field && field->hidinput && field->hidinput->input)
1029                input_sync(field->hidinput->input);
1030}
1031
1032static void mt_set_input_mode(struct hid_device *hdev)
1033{
1034        struct mt_device *td = hid_get_drvdata(hdev);
1035        struct hid_report *r;
1036        struct hid_report_enum *re;
1037        struct mt_class *cls = &td->mtclass;
1038        char *buf;
1039        int report_len;
1040
1041        if (td->inputmode < 0)
1042                return;
1043
1044        re = &(hdev->report_enum[HID_FEATURE_REPORT]);
1045        r = re->report_id_hash[td->inputmode];
1046        if (r) {
1047                if (cls->quirks & MT_QUIRK_FORCE_GET_FEATURE) {
1048                        report_len = hid_report_len(r);
1049                        buf = hid_alloc_report_buf(r, GFP_KERNEL);
1050                        if (!buf) {
1051                                hid_err(hdev, "failed to allocate buffer for report\n");
1052                                return;
1053                        }
1054                        hid_hw_raw_request(hdev, r->id, buf, report_len,
1055                                           HID_FEATURE_REPORT,
1056                                           HID_REQ_GET_REPORT);
1057                        kfree(buf);
1058                }
1059                r->field[0]->value[td->inputmode_index] = td->inputmode_value;
1060                hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
1061        }
1062}
1063
1064static void mt_set_maxcontacts(struct hid_device *hdev)
1065{
1066        struct mt_device *td = hid_get_drvdata(hdev);
1067        struct hid_report *r;
1068        struct hid_report_enum *re;
1069        int fieldmax, max;
1070
1071        if (td->maxcontact_report_id < 0)
1072                return;
1073
1074        if (!td->mtclass.maxcontacts)
1075                return;
1076
1077        re = &hdev->report_enum[HID_FEATURE_REPORT];
1078        r = re->report_id_hash[td->maxcontact_report_id];
1079        if (r) {
1080                max = td->mtclass.maxcontacts;
1081                fieldmax = r->field[0]->logical_maximum;
1082                max = min(fieldmax, max);
1083                if (r->field[0]->value[0] != max) {
1084                        r->field[0]->value[0] = max;
1085                        hid_hw_request(hdev, r, HID_REQ_SET_REPORT);
1086                }
1087        }
1088}
1089
1090static void mt_post_parse_default_settings(struct mt_device *td)
1091{
1092        __s32 quirks = td->mtclass.quirks;
1093
1094        /* unknown serial device needs special quirks */
1095        if (td->touches_by_report == 1) {
1096                quirks |= MT_QUIRK_ALWAYS_VALID;
1097                quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
1098                quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
1099                quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
1100                quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1101        }
1102
1103        td->mtclass.quirks = quirks;
1104}
1105
1106static void mt_post_parse(struct mt_device *td)
1107{
1108        struct mt_fields *f = td->fields;
1109        struct mt_class *cls = &td->mtclass;
1110
1111        if (td->touches_by_report > 0) {
1112                int field_count_per_touch = f->length / td->touches_by_report;
1113                td->last_slot_field = f->usages[field_count_per_touch - 1];
1114        }
1115
1116        if (td->cc_index < 0)
1117                cls->quirks &= ~MT_QUIRK_CONTACT_CNT_ACCURATE;
1118}
1119
1120static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi)
1121{
1122        struct mt_device *td = hid_get_drvdata(hdev);
1123        char *name;
1124        const char *suffix = NULL;
1125        struct hid_field *field = hi->report->field[0];
1126        int ret;
1127
1128        if (hi->report->id == td->mt_report_id) {
1129                ret = mt_touch_input_configured(hdev, hi);
1130                if (ret)
1131                        return ret;
1132        }
1133
1134        /*
1135         * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN"
1136         * for the stylus. Check this first, and then rely on the application
1137         * field.
1138         */
1139        if (hi->report->field[0]->physical == HID_DG_STYLUS) {
1140                suffix = "Pen";
1141                /* force BTN_STYLUS to allow tablet matching in udev */
1142                __set_bit(BTN_STYLUS, hi->input->keybit);
1143        } else {
1144                switch (field->application) {
1145                case HID_GD_KEYBOARD:
1146                        suffix = "Keyboard";
1147                        break;
1148                case HID_GD_KEYPAD:
1149                        suffix = "Keypad";
1150                        break;
1151                case HID_GD_MOUSE:
1152                        suffix = "Mouse";
1153                        break;
1154                case HID_DG_STYLUS:
1155                        suffix = "Pen";
1156                        /* force BTN_STYLUS to allow tablet matching in udev */
1157                        __set_bit(BTN_STYLUS, hi->input->keybit);
1158                        break;
1159                case HID_DG_TOUCHSCREEN:
1160                        /* we do not set suffix = "Touchscreen" */
1161                        break;
1162                case HID_DG_TOUCHPAD:
1163                        suffix = "Touchpad";
1164                        break;
1165                case HID_GD_SYSTEM_CONTROL:
1166                        suffix = "System Control";
1167                        break;
1168                case HID_CP_CONSUMER_CONTROL:
1169                        suffix = "Consumer Control";
1170                        break;
1171                case HID_GD_WIRELESS_RADIO_CTLS:
1172                        suffix = "Wireless Radio Control";
1173                        break;
1174                case HID_VD_ASUS_CUSTOM_MEDIA_KEYS:
1175                        suffix = "Custom Media Keys";
1176                        break;
1177                default:
1178                        suffix = "UNKNOWN";
1179                        break;
1180                }
1181        }
1182
1183        if (suffix) {
1184                name = devm_kzalloc(&hi->input->dev,
1185                                    strlen(hdev->name) + strlen(suffix) + 2,
1186                                    GFP_KERNEL);
1187                if (name) {
1188                        sprintf(name, "%s %s", hdev->name, suffix);
1189                        hi->input->name = name;
1190                }
1191        }
1192
1193        return 0;
1194}
1195
1196static void mt_fix_const_field(struct hid_field *field, unsigned int usage)
1197{
1198        if (field->usage[0].hid != usage ||
1199            !(field->flags & HID_MAIN_ITEM_CONSTANT))
1200                return;
1201
1202        field->flags &= ~HID_MAIN_ITEM_CONSTANT;
1203        field->flags |= HID_MAIN_ITEM_VARIABLE;
1204}
1205
1206static void mt_fix_const_fields(struct hid_device *hdev, unsigned int usage)
1207{
1208        struct hid_report *report;
1209        int i;
1210
1211        list_for_each_entry(report,
1212                            &hdev->report_enum[HID_INPUT_REPORT].report_list,
1213                            list) {
1214
1215                if (!report->maxfield)
1216                        continue;
1217
1218                for (i = 0; i < report->maxfield; i++)
1219                        if (report->field[i]->maxusage >= 1)
1220                                mt_fix_const_field(report->field[i], usage);
1221        }
1222}
1223
1224static void mt_release_contacts(struct hid_device *hid)
1225{
1226        struct hid_input *hidinput;
1227        struct mt_device *td = hid_get_drvdata(hid);
1228
1229        list_for_each_entry(hidinput, &hid->inputs, list) {
1230                struct input_dev *input_dev = hidinput->input;
1231                struct input_mt *mt = input_dev->mt;
1232                int i;
1233
1234                if (mt) {
1235                        for (i = 0; i < mt->num_slots; i++) {
1236                                input_mt_slot(input_dev, i);
1237                                input_mt_report_slot_state(input_dev,
1238                                                           MT_TOOL_FINGER,
1239                                                           false);
1240                        }
1241                        input_mt_sync_frame(input_dev);
1242                        input_sync(input_dev);
1243                }
1244        }
1245
1246        td->num_received = 0;
1247}
1248
1249static void mt_expired_timeout(unsigned long arg)
1250{
1251        struct hid_device *hdev = (void *)arg;
1252        struct mt_device *td = hid_get_drvdata(hdev);
1253
1254        /*
1255         * An input report came in just before we release the sticky fingers,
1256         * it will take care of the sticky fingers.
1257         */
1258        if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
1259                return;
1260        if (test_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags))
1261                mt_release_contacts(hdev);
1262        clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
1263}
1264
1265static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
1266{
1267        int ret, i;
1268        struct mt_device *td;
1269        struct mt_class *mtclass = mt_classes; /* MT_CLS_DEFAULT */
1270
1271        for (i = 0; mt_classes[i].name ; i++) {
1272                if (id->driver_data == mt_classes[i].name) {
1273                        mtclass = &(mt_classes[i]);
1274                        break;
1275                }
1276        }
1277
1278        td = devm_kzalloc(&hdev->dev, sizeof(struct mt_device), GFP_KERNEL);
1279        if (!td) {
1280                dev_err(&hdev->dev, "cannot allocate multitouch data\n");
1281                return -ENOMEM;
1282        }
1283        td->mtclass = *mtclass;
1284        td->inputmode = -1;
1285        td->maxcontact_report_id = -1;
1286        td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
1287        td->cc_index = -1;
1288        td->mt_report_id = -1;
1289        hid_set_drvdata(hdev, td);
1290
1291        td->fields = devm_kzalloc(&hdev->dev, sizeof(struct mt_fields),
1292                                  GFP_KERNEL);
1293        if (!td->fields) {
1294                dev_err(&hdev->dev, "cannot allocate multitouch fields data\n");
1295                return -ENOMEM;
1296        }
1297
1298        if (id->vendor == HID_ANY_ID && id->product == HID_ANY_ID)
1299                td->serial_maybe = true;
1300
1301        /*
1302         * Store the initial quirk state
1303         */
1304        td->initial_quirks = hdev->quirks;
1305
1306        /* This allows the driver to correctly support devices
1307         * that emit events over several HID messages.
1308         */
1309        hdev->quirks |= HID_QUIRK_NO_INPUT_SYNC;
1310
1311        /*
1312         * This allows the driver to handle different input sensors
1313         * that emits events through different reports on the same HID
1314         * device.
1315         */
1316        hdev->quirks |= HID_QUIRK_MULTI_INPUT;
1317        hdev->quirks |= HID_QUIRK_NO_EMPTY_INPUT;
1318
1319        /*
1320         * Some multitouch screens do not like to be polled for input
1321         * reports. Fortunately, the Win8 spec says that all touches
1322         * should be sent during each report, making the initialization
1323         * of input reports unnecessary. For Win7 devices, well, let's hope
1324         * they will still be happy (this is only be a problem if a touch
1325         * was already there while probing the device).
1326         *
1327         * In addition some touchpads do not behave well if we read
1328         * all feature reports from them. Instead we prevent
1329         * initial report fetching and then selectively fetch each
1330         * report we are interested in.
1331         */
1332        hdev->quirks |= HID_QUIRK_NO_INIT_REPORTS;
1333
1334        setup_timer(&td->release_timer, mt_expired_timeout, (long)hdev);
1335
1336        ret = hid_parse(hdev);
1337        if (ret != 0)
1338                return ret;
1339
1340        if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
1341                mt_fix_const_fields(hdev, HID_DG_CONTACTID);
1342
1343        ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
1344        if (ret)
1345                return ret;
1346
1347        ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
1348        if (ret)
1349                dev_warn(&hdev->dev, "Cannot allocate sysfs group for %s\n",
1350                                hdev->name);
1351
1352        mt_set_maxcontacts(hdev);
1353        mt_set_input_mode(hdev);
1354
1355        /* release .fields memory as it is not used anymore */
1356        devm_kfree(&hdev->dev, td->fields);
1357        td->fields = NULL;
1358
1359        return 0;
1360}
1361
1362#ifdef CONFIG_PM
1363static int mt_reset_resume(struct hid_device *hdev)
1364{
1365        mt_release_contacts(hdev);
1366        mt_set_maxcontacts(hdev);
1367        mt_set_input_mode(hdev);
1368        return 0;
1369}
1370
1371static int mt_resume(struct hid_device *hdev)
1372{
1373        /* Some Elan legacy devices require SET_IDLE to be set on resume.
1374         * It should be safe to send it to other devices too.
1375         * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */
1376
1377        hid_hw_idle(hdev, 0, 0, HID_REQ_SET_IDLE);
1378
1379        return 0;
1380}
1381#endif
1382
1383static void mt_remove(struct hid_device *hdev)
1384{
1385        struct mt_device *td = hid_get_drvdata(hdev);
1386
1387        del_timer_sync(&td->release_timer);
1388
1389        sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
1390        hid_hw_stop(hdev);
1391        hdev->quirks = td->initial_quirks;
1392}
1393
1394/*
1395 * This list contains only:
1396 * - VID/PID of products not working with the default multitouch handling
1397 * - 2 generic rules.
1398 * So there is no point in adding here any device with MT_CLS_DEFAULT.
1399 */
1400static const struct hid_device_id mt_devices[] = {
1401
1402        /* 3M panels */
1403        { .driver_data = MT_CLS_3M,
1404                MT_USB_DEVICE(USB_VENDOR_ID_3M,
1405                        USB_DEVICE_ID_3M1968) },
1406        { .driver_data = MT_CLS_3M,
1407                MT_USB_DEVICE(USB_VENDOR_ID_3M,
1408                        USB_DEVICE_ID_3M2256) },
1409        { .driver_data = MT_CLS_3M,
1410                MT_USB_DEVICE(USB_VENDOR_ID_3M,
1411                        USB_DEVICE_ID_3M3266) },
1412
1413        /* Alps devices */
1414        { .driver_data = MT_CLS_WIN_8_DUAL,
1415                HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1416                        USB_VENDOR_ID_ALPS_JP,
1417                        HID_DEVICE_ID_ALPS_U1_DUAL_PTP) },
1418        { .driver_data = MT_CLS_WIN_8_DUAL,
1419                HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1420                        USB_VENDOR_ID_ALPS_JP,
1421                        HID_DEVICE_ID_ALPS_U1_DUAL_3BTN_PTP) },
1422
1423        /* Lenovo X1 TAB Gen 2 */
1424        { .driver_data = MT_CLS_WIN_8_DUAL,
1425                HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
1426                           USB_VENDOR_ID_LENOVO,
1427                           USB_DEVICE_ID_LENOVO_X1_TAB) },
1428
1429        /* Anton devices */
1430        { .driver_data = MT_CLS_EXPORT_ALL_INPUTS,
1431                MT_USB_DEVICE(USB_VENDOR_ID_ANTON,
1432                        USB_DEVICE_ID_ANTON_TOUCH_PAD) },
1433
1434        /* Asus T304UA */
1435        { .driver_data = MT_CLS_ASUS,
1436                HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8,
1437                        USB_VENDOR_ID_ASUSTEK,
1438                        USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD) },
1439
1440        /* Atmel panels */
1441        { .driver_data = MT_CLS_SERIAL,
1442                MT_USB_DEVICE(USB_VENDOR_ID_ATMEL,
1443                        USB_DEVICE_ID_ATMEL_MXT_DIGITIZER) },
1444
1445        /* Baanto multitouch devices */
1446        { .driver_data = MT_CLS_NSMU,
1447                MT_USB_DEVICE(USB_VENDOR_ID_BAANTO,
1448                        USB_DEVICE_ID_BAANTO_MT_190W2) },
1449
1450        /* Cando panels */
1451        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1452                MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1453                        USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
1454        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
1455                MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1456                        USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
1457
1458        /* Chunghwa Telecom touch panels */
1459        {  .driver_data = MT_CLS_NSMU,
1460                MT_USB_DEVICE(USB_VENDOR_ID_CHUNGHWAT,
1461                        USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH) },
1462
1463        /* CJTouch panels */
1464        { .driver_data = MT_CLS_NSMU,
1465                MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
1466                        USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0020) },
1467        { .driver_data = MT_CLS_NSMU,
1468                MT_USB_DEVICE(USB_VENDOR_ID_CJTOUCH,
1469                        USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0040) },
1470
1471        /* CVTouch panels */
1472        { .driver_data = MT_CLS_NSMU,
1473                MT_USB_DEVICE(USB_VENDOR_ID_CVTOUCH,
1474                        USB_DEVICE_ID_CVTOUCH_SCREEN) },
1475
1476        /* eGalax devices (resistive) */
1477        { .driver_data = MT_CLS_EGALAX,
1478                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1479                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
1480        { .driver_data = MT_CLS_EGALAX,
1481                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1482                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
1483
1484        /* eGalax devices (capacitive) */
1485        { .driver_data = MT_CLS_EGALAX_SERIAL,
1486                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1487                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7207) },
1488        { .driver_data = MT_CLS_EGALAX,
1489                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1490                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
1491        { .driver_data = MT_CLS_EGALAX_SERIAL,
1492                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1493                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7224) },
1494        { .driver_data = MT_CLS_EGALAX_SERIAL,
1495                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1496                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_722A) },
1497        { .driver_data = MT_CLS_EGALAX_SERIAL,
1498                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1499                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_725E) },
1500        { .driver_data = MT_CLS_EGALAX_SERIAL,
1501                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1502                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7262) },
1503        { .driver_data = MT_CLS_EGALAX,
1504                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1505                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
1506        { .driver_data = MT_CLS_EGALAX,
1507                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1508                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
1509        { .driver_data = MT_CLS_EGALAX_SERIAL,
1510                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1511                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72AA) },
1512        { .driver_data = MT_CLS_EGALAX,
1513                HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
1514                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72C4) },
1515        { .driver_data = MT_CLS_EGALAX,
1516                HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
1517                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72D0) },
1518        { .driver_data = MT_CLS_EGALAX,
1519                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1520                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA) },
1521        { .driver_data = MT_CLS_EGALAX,
1522                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1523                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
1524        { .driver_data = MT_CLS_EGALAX_SERIAL,
1525                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1526                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7349) },
1527        { .driver_data = MT_CLS_EGALAX_SERIAL,
1528                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1529                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_73F7) },
1530        { .driver_data = MT_CLS_EGALAX_SERIAL,
1531                MT_USB_DEVICE(USB_VENDOR_ID_DWAV,
1532                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
1533
1534        /* Elitegroup panel */
1535        { .driver_data = MT_CLS_SERIAL,
1536                MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
1537                        USB_DEVICE_ID_ELITEGROUP_05D8) },
1538
1539        /* Flatfrog Panels */
1540        { .driver_data = MT_CLS_FLATFROG,
1541                MT_USB_DEVICE(USB_VENDOR_ID_FLATFROG,
1542                        USB_DEVICE_ID_MULTITOUCH_3200) },
1543
1544        /* FocalTech Panels */
1545        { .driver_data = MT_CLS_SERIAL,
1546                MT_USB_DEVICE(USB_VENDOR_ID_CYGNAL,
1547                        USB_DEVICE_ID_FOCALTECH_FTXXXX_MULTITOUCH) },
1548
1549        /* GeneralTouch panel */
1550        { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1551                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1552                        USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
1553        { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1554                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1555                        USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PWT_TENFINGERS) },
1556        { .driver_data = MT_CLS_GENERALTOUCH_TWOFINGERS,
1557                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1558                        USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0101) },
1559        { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1560                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1561                        USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0102) },
1562        { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1563                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1564                        USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_0106) },
1565        { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1566                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1567                        USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A) },
1568        { .driver_data = MT_CLS_GENERALTOUCH_PWT_TENFINGERS,
1569                MT_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
1570                        USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100) },
1571
1572        /* Gametel game controller */
1573        { .driver_data = MT_CLS_NSMU,
1574                MT_BT_DEVICE(USB_VENDOR_ID_FRUCTEL,
1575                        USB_DEVICE_ID_GAMETEL_MT_MODE) },
1576
1577        /* GoodTouch panels */
1578        { .driver_data = MT_CLS_NSMU,
1579                MT_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH,
1580                        USB_DEVICE_ID_GOODTOUCH_000f) },
1581
1582        /* Hanvon panels */
1583        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1584                MT_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT,
1585                        USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
1586
1587        /* Ilitek dual touch panel */
1588        {  .driver_data = MT_CLS_NSMU,
1589                MT_USB_DEVICE(USB_VENDOR_ID_ILITEK,
1590                        USB_DEVICE_ID_ILITEK_MULTITOUCH) },
1591
1592        /* LG Melfas panel */
1593        { .driver_data = MT_CLS_LG,
1594                HID_USB_DEVICE(USB_VENDOR_ID_LG,
1595                        USB_DEVICE_ID_LG_MELFAS_MT) },
1596
1597        /* MosArt panels */
1598        { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1599                MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1600                        USB_DEVICE_ID_ASUS_T91MT)},
1601        { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1602                MT_USB_DEVICE(USB_VENDOR_ID_ASUS,
1603                        USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
1604        { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
1605                MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1606                        USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
1607
1608        /* Panasonic panels */
1609        { .driver_data = MT_CLS_PANASONIC,
1610                MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1611                        USB_DEVICE_ID_PANABOARD_UBT780) },
1612        { .driver_data = MT_CLS_PANASONIC,
1613                MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1614                        USB_DEVICE_ID_PANABOARD_UBT880) },
1615
1616        /* Novatek Panel */
1617        { .driver_data = MT_CLS_NSMU,
1618                MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
1619                        USB_DEVICE_ID_NOVATEK_PCT) },
1620
1621        /* Ntrig Panel */
1622        { .driver_data = MT_CLS_NSMU,
1623                HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1624                        USB_VENDOR_ID_NTRIG, 0x1b05) },
1625
1626        /* PixArt optical touch screen */
1627        { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1628                MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1629                        USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
1630        { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1631                MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1632                        USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
1633        { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1634                MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
1635                        USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
1636
1637        /* PixCir-based panels */
1638        { .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
1639                MT_USB_DEVICE(USB_VENDOR_ID_CANDO,
1640                        USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
1641
1642        /* Quanta-based panels */
1643        { .driver_data = MT_CLS_CONFIDENCE_CONTACT_ID,
1644                MT_USB_DEVICE(USB_VENDOR_ID_QUANTA,
1645                        USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001) },
1646
1647        /* Stantum panels */
1648        { .driver_data = MT_CLS_CONFIDENCE,
1649                MT_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM,
1650                        USB_DEVICE_ID_MTP_STM)},
1651
1652        /* TopSeed panels */
1653        { .driver_data = MT_CLS_TOPSEED,
1654                MT_USB_DEVICE(USB_VENDOR_ID_TOPSEED2,
1655                        USB_DEVICE_ID_TOPSEED2_PERIPAD_701) },
1656
1657        /* Touch International panels */
1658        { .driver_data = MT_CLS_NSMU,
1659                MT_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL,
1660                        USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
1661
1662        /* Unitec panels */
1663        { .driver_data = MT_CLS_NSMU,
1664                MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1665                        USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
1666        { .driver_data = MT_CLS_NSMU,
1667                MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
1668                        USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
1669
1670        /* VTL panels */
1671        { .driver_data = MT_CLS_VTL,
1672                MT_USB_DEVICE(USB_VENDOR_ID_VTL,
1673                        USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },
1674
1675        /* Wistron panels */
1676        { .driver_data = MT_CLS_NSMU,
1677                MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,
1678                        USB_DEVICE_ID_WISTRON_OPTICAL_TOUCH) },
1679
1680        /* XAT */
1681        { .driver_data = MT_CLS_NSMU,
1682                MT_USB_DEVICE(USB_VENDOR_ID_XAT,
1683                        USB_DEVICE_ID_XAT_CSR) },
1684
1685        /* Xiroku */
1686        { .driver_data = MT_CLS_NSMU,
1687                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1688                        USB_DEVICE_ID_XIROKU_SPX) },
1689        { .driver_data = MT_CLS_NSMU,
1690                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1691                        USB_DEVICE_ID_XIROKU_MPX) },
1692        { .driver_data = MT_CLS_NSMU,
1693                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1694                        USB_DEVICE_ID_XIROKU_CSR) },
1695        { .driver_data = MT_CLS_NSMU,
1696                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1697                        USB_DEVICE_ID_XIROKU_SPX1) },
1698        { .driver_data = MT_CLS_NSMU,
1699                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1700                        USB_DEVICE_ID_XIROKU_MPX1) },
1701        { .driver_data = MT_CLS_NSMU,
1702                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1703                        USB_DEVICE_ID_XIROKU_CSR1) },
1704        { .driver_data = MT_CLS_NSMU,
1705                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1706                        USB_DEVICE_ID_XIROKU_SPX2) },
1707        { .driver_data = MT_CLS_NSMU,
1708                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1709                        USB_DEVICE_ID_XIROKU_MPX2) },
1710        { .driver_data = MT_CLS_NSMU,
1711                MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
1712                        USB_DEVICE_ID_XIROKU_CSR2) },
1713
1714        /* Google MT devices */
1715        { .driver_data = MT_CLS_GOOGLE,
1716                HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
1717                        USB_DEVICE_ID_GOOGLE_TOUCH_ROSE) },
1718
1719        /* Generic MT device */
1720        { HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
1721
1722        /* Generic Win 8 certified MT device */
1723        {  .driver_data = MT_CLS_WIN_8,
1724                HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
1725                        HID_ANY_ID, HID_ANY_ID) },
1726        { }
1727};
1728MODULE_DEVICE_TABLE(hid, mt_devices);
1729
1730static const struct hid_usage_id mt_grabbed_usages[] = {
1731        { HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
1732        { HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
1733};
1734
1735static struct hid_driver mt_driver = {
1736        .name = "hid-multitouch",
1737        .id_table = mt_devices,
1738        .probe = mt_probe,
1739        .remove = mt_remove,
1740        .input_mapping = mt_input_mapping,
1741        .input_mapped = mt_input_mapped,
1742        .input_configured = mt_input_configured,
1743        .feature_mapping = mt_feature_mapping,
1744        .usage_table = mt_grabbed_usages,
1745        .event = mt_event,
1746        .report = mt_report,
1747#ifdef CONFIG_PM
1748        .reset_resume = mt_reset_resume,
1749        .resume = mt_resume,
1750#endif
1751};
1752module_hid_driver(mt_driver);
1753