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