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