HID: multitouch: disable sticky fingers for UPERFECT Y
authorJosé Expósito <jose.exposito89@gmail.com>
Fri, 1 Oct 2021 17:25:14 +0000 (19:25 +0200)
committerJiri Kosina <jkosina@suse.cz>
Thu, 7 Oct 2021 12:05:30 +0000 (14:05 +0200)
When a finger is on the screen, the UPERFECT Y portable touchscreen
monitor reports a contact in the first place. However, after this
initial report, contacts are not reported at the refresh rate of the
screen as required by the Windows 8 specs.

This behaviour triggers the release_timer, removing the fingers even
though they are still present.

To avoid it, add a new class, similar to MT_CLS_WIN_8 but without the
MT_QUIRK_STICKY_FINGERS quirk for this device.

Suggested-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-ids.h
drivers/hid/hid-multitouch.c

index 29564b3..3706c63 100644 (file)
 #define        USB_DEVICE_ID_WEIDA_8752        0xC300
 #define        USB_DEVICE_ID_WEIDA_8755        0xC301
 
+#define USB_VENDOR_ID_WINBOND          0x0416
+#define USB_DEVICE_ID_TSTP_MTOUCH      0xc168
+
 #define USB_VENDOR_ID_WISEGROUP                0x0925
 #define USB_DEVICE_ID_SMARTJOY_PLUS    0x0005
 #define USB_DEVICE_ID_SUPER_JOY_BOX_3  0x8888
index 3ea7cb1..e1afddb 100644 (file)
@@ -193,6 +193,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
 /* reserved                                    0x0014 */
 #define MT_CLS_WIN_8_FORCE_MULTI_INPUT         0x0015
 #define MT_CLS_WIN_8_DISABLE_WAKEUP            0x0016
+#define MT_CLS_WIN_8_NO_STICKY_FINGERS         0x0017
 
 /* vendor specific classes */
 #define MT_CLS_3M                              0x0101
@@ -294,6 +295,13 @@ static const struct mt_class mt_classes[] = {
                        MT_QUIRK_WIN8_PTP_BUTTONS |
                        MT_QUIRK_DISABLE_WAKEUP,
                .export_all_inputs = true },
+       { .name = MT_CLS_WIN_8_NO_STICKY_FINGERS,
+               .quirks = MT_QUIRK_ALWAYS_VALID |
+                       MT_QUIRK_IGNORE_DUPLICATES |
+                       MT_QUIRK_HOVERING |
+                       MT_QUIRK_CONTACT_CNT_ACCURATE |
+                       MT_QUIRK_WIN8_PTP_BUTTONS,
+               .export_all_inputs = true },
 
        /*
         * vendor specific classes
@@ -2120,6 +2128,11 @@ static const struct hid_device_id mt_devices[] = {
                MT_USB_DEVICE(USB_VENDOR_ID_VTL,
                        USB_DEVICE_ID_VTL_MULTITOUCH_FF3F) },
 
+       /* Winbond Electronics Corp. */
+       { .driver_data = MT_CLS_WIN_8_NO_STICKY_FINGERS,
+               HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH_WIN_8,
+                          USB_VENDOR_ID_WINBOND, USB_DEVICE_ID_TSTP_MTOUCH) },
+
        /* Wistron panels */
        { .driver_data = MT_CLS_NSMU,
                MT_USB_DEVICE(USB_VENDOR_ID_WISTRON,