Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

HID: multitouch: Keep latency normal on deactivate for reactivation gesture

Uniwill devices have a built in gesture in the touchpad to de- and
reactivate it by double taping the upper left corner. This gesture stops
working when latency is set to high, so this patch keeps the latency on
normal.

Cc: stable@vger.kernel.org
Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
[jkosina@suse.com: change bit from 24 to 25]
[jkosina@suse.com: update shortlog]
Signed-off-by: Jiri Kosina <jkosina@suse.com>

authored by

Werner Sembach and committed by
Jiri Kosina
ec3070f0 7c698de0

+29 -3
+29 -3
drivers/hid/hid-multitouch.c
··· 77 77 #define MT_QUIRK_ORIENTATION_INVERT BIT(22) 78 78 #define MT_QUIRK_APPLE_TOUCHBAR BIT(23) 79 79 #define MT_QUIRK_YOGABOOK9I BIT(24) 80 + #define MT_QUIRK_KEEP_LATENCY_ON_CLOSE BIT(25) 80 81 81 82 #define MT_INPUTMODE_TOUCHSCREEN 0x02 82 83 #define MT_INPUTMODE_TOUCHPAD 0x03 ··· 215 214 #define MT_CLS_WIN_8_DISABLE_WAKEUP 0x0016 216 215 #define MT_CLS_WIN_8_NO_STICKY_FINGERS 0x0017 217 216 #define MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU 0x0018 217 + #define MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE 0x0019 218 218 219 219 /* vendor specific classes */ 220 220 #define MT_CLS_3M 0x0101 ··· 336 334 MT_QUIRK_HOVERING | 337 335 MT_QUIRK_CONTACT_CNT_ACCURATE | 338 336 MT_QUIRK_WIN8_PTP_BUTTONS, 337 + .export_all_inputs = true }, 338 + { .name = MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE, 339 + .quirks = MT_QUIRK_ALWAYS_VALID | 340 + MT_QUIRK_IGNORE_DUPLICATES | 341 + MT_QUIRK_HOVERING | 342 + MT_QUIRK_CONTACT_CNT_ACCURATE | 343 + MT_QUIRK_STICKY_FINGERS | 344 + MT_QUIRK_WIN8_PTP_BUTTONS | 345 + MT_QUIRK_KEEP_LATENCY_ON_CLOSE, 339 346 .export_all_inputs = true }, 340 347 341 348 /* ··· 866 855 if ((cls->name == MT_CLS_WIN_8 || 867 856 cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT || 868 857 cls->name == MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU || 869 - cls->name == MT_CLS_WIN_8_DISABLE_WAKEUP) && 858 + cls->name == MT_CLS_WIN_8_DISABLE_WAKEUP || 859 + cls->name == MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE) && 870 860 (field->application == HID_DG_TOUCHPAD || 871 861 field->application == HID_DG_TOUCHSCREEN)) 872 862 app->quirks |= MT_QUIRK_CONFIDENCE; ··· 1780 1768 int ret; 1781 1769 1782 1770 if (td->is_haptic_touchpad && (td->mtclass.name == MT_CLS_WIN_8 || 1783 - td->mtclass.name == MT_CLS_WIN_8_FORCE_MULTI_INPUT)) { 1771 + td->mtclass.name == MT_CLS_WIN_8_FORCE_MULTI_INPUT || 1772 + td->mtclass.name == MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE)) { 1784 1773 if (hid_haptic_input_configured(hdev, td->haptic, hi) == 0) 1785 1774 td->is_haptic_touchpad = false; 1786 1775 } else { ··· 2094 2081 2095 2082 static void mt_on_hid_hw_close(struct hid_device *hdev) 2096 2083 { 2097 - mt_set_modes(hdev, HID_LATENCY_HIGH, TOUCHPAD_REPORT_NONE); 2084 + struct mt_device *td = hid_get_drvdata(hdev); 2085 + 2086 + if (td->mtclass.quirks & MT_QUIRK_KEEP_LATENCY_ON_CLOSE) 2087 + mt_set_modes(hdev, HID_LATENCY_NORMAL, TOUCHPAD_REPORT_NONE); 2088 + else 2089 + mt_set_modes(hdev, HID_LATENCY_HIGH, TOUCHPAD_REPORT_NONE); 2098 2090 } 2099 2091 2100 2092 /* ··· 2485 2467 { .driver_data = MT_CLS_NSMU, 2486 2468 MT_USB_DEVICE(USB_VENDOR_ID_UNITEC, 2487 2469 USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) }, 2470 + 2471 + /* Uniwill touchpads */ 2472 + { .driver_data = MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE, 2473 + HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, 2474 + USB_VENDOR_ID_PIXART, 0x0255) }, 2475 + { .driver_data = MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE, 2476 + HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, 2477 + USB_VENDOR_ID_PIXART, 0x0274) }, 2488 2478 2489 2479 /* VTL panels */ 2490 2480 { .driver_data = MT_CLS_VTL,