diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-10-25 16:23:07 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-10-25 16:23:07 +0300 |
commit | 96f2f66a985699d201b3a84222b8dd42262a71fe (patch) | |
tree | e957bbf2a361163d34df64c9f20e35fe70a14874 /drivers/hid/hid-multitouch.c | |
parent | 3f2dcb6411eb3fd4a8be5d3713be0e2c1c750d6d (diff) | |
parent | 46011e9755e9af6ef90bb59522d315d781d2307b (diff) | |
download | linux-96f2f66a985699d201b3a84222b8dd42262a71fe.tar.xz |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID updates from Jiri Kosina:
- rumble support for Xbox One S, from Andrey Smirnov
- high-resolution support for Logitech mice, from Harry Cutts
- support for recent devices requiring the HID parse to be able to cope
with tag report sizes > 256
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: (35 commits)
HID: usbhid: Add quirk for Redragon/Dragonrise Seymur 2
HID: wacom: Work around HID descriptor bug in DTK-2451 and DTH-2452
HID: google: add dependency on Cros EC for Hammer
HID: elan: fix spelling mistake "registred" -> "registered"
HID: google: drop superfluous const before SIMPLE_DEV_PM_OPS()
HID: google: add support tablet mode switch for Whiskers
mfd: cros: add "base attached" MKBP switch definition
Input: reserve 2 events code because of HID
HID: magicmouse: add support for Apple Magic Trackpad 2
HID: i2c-hid: override HID descriptors for certain devices
HID: hid-bigbenff: driver for BigBen Interactive PS3OFMINIPAD gamepad
HID: logitech: fix a used uninitialized GCC warning
HID: intel-ish-hid: using list_head for ipc write queue
HID: intel-ish-hid: use resource-managed api
HID: intel_ish-hid: Enhance API to get ring buffer sizes
HID: intel-ish-hid: use helper function to search client id
HID: intel-ish-hid: ishtp: add helper function for client search
HID: intel-ish-hid: use helper function to access client buffer
HID: intel-ish-hid: ishtp: add helper functions for client buffer operation
HID: intel-ish-hid: use helper function for private driver data set/get
...
Diffstat (limited to 'drivers/hid/hid-multitouch.c')
-rw-r--r-- | drivers/hid/hid-multitouch.c | 72 |
1 files changed, 32 insertions, 40 deletions
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index da954f3f4da7..f7c6de2b6730 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -1319,6 +1319,13 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, return mt_touch_input_mapping(hdev, hi, field, usage, bit, max, application); + /* + * some egalax touchscreens have "application == DG_TOUCHSCREEN" + * for the stylus. Overwrite the hid_input application + */ + if (field->physical == HID_DG_STYLUS) + hi->application = HID_DG_STYLUS; + /* let hid-core decide for the others */ return 0; } @@ -1507,14 +1514,12 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi) struct mt_device *td = hid_get_drvdata(hdev); char *name; const char *suffix = NULL; - unsigned int application = 0; struct mt_report_data *rdata; struct mt_application *mt_application = NULL; struct hid_report *report; int ret; list_for_each_entry(report, &hi->reports, hidinput_list) { - application = report->application; rdata = mt_find_report_data(td, report); if (!rdata) { hid_err(hdev, "failed to allocate data for report\n"); @@ -1529,46 +1534,33 @@ static int mt_input_configured(struct hid_device *hdev, struct hid_input *hi) if (ret) return ret; } - - /* - * some egalax touchscreens have "application == DG_TOUCHSCREEN" - * for the stylus. Check this first, and then rely on - * the application field. - */ - if (report->field[0]->physical == HID_DG_STYLUS) { - suffix = "Pen"; - /* force BTN_STYLUS to allow tablet matching in udev */ - __set_bit(BTN_STYLUS, hi->input->keybit); - } } - if (!suffix) { - switch (application) { - case HID_GD_KEYBOARD: - case HID_GD_KEYPAD: - case HID_GD_MOUSE: - case HID_DG_TOUCHPAD: - case HID_GD_SYSTEM_CONTROL: - case HID_CP_CONSUMER_CONTROL: - case HID_GD_WIRELESS_RADIO_CTLS: - case HID_GD_SYSTEM_MULTIAXIS: - /* already handled by hid core */ - break; - case HID_DG_TOUCHSCREEN: - /* we do not set suffix = "Touchscreen" */ - hi->input->name = hdev->name; - break; - case HID_DG_STYLUS: - /* force BTN_STYLUS to allow tablet matching in udev */ - __set_bit(BTN_STYLUS, hi->input->keybit); - break; - case HID_VD_ASUS_CUSTOM_MEDIA_KEYS: - suffix = "Custom Media Keys"; - break; - default: - suffix = "UNKNOWN"; - break; - } + switch (hi->application) { + case HID_GD_KEYBOARD: + case HID_GD_KEYPAD: + case HID_GD_MOUSE: + case HID_DG_TOUCHPAD: + case HID_GD_SYSTEM_CONTROL: + case HID_CP_CONSUMER_CONTROL: + case HID_GD_WIRELESS_RADIO_CTLS: + case HID_GD_SYSTEM_MULTIAXIS: + /* already handled by hid core */ + break; + case HID_DG_TOUCHSCREEN: + /* we do not set suffix = "Touchscreen" */ + hi->input->name = hdev->name; + break; + case HID_DG_STYLUS: + /* force BTN_STYLUS to allow tablet matching in udev */ + __set_bit(BTN_STYLUS, hi->input->keybit); + break; + case HID_VD_ASUS_CUSTOM_MEDIA_KEYS: + suffix = "Custom Media Keys"; + break; + default: + suffix = "UNKNOWN"; + break; } if (suffix) { |