lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <9f690ec1-9e8b-4862-b1f2-2b68f9be9fb2@tuxedocomputers.com>
Date: Wed, 10 Dec 2025 15:12:21 +0100
From: Werner Sembach <wse@...edocomputers.com>
To: Jiri Kosina <jikos@...nel.org>, Benjamin Tissoires <bentiss@...nel.org>
Cc: linux-input@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3] hid/hid-multitouch: Keep latency normal on deactivate
 for reactivation gesture

Hi,

Am 12.11.25 um 16:51 schrieb Werner Sembach:
>
> Am 12.11.25 um 15:47 schrieb Werner Sembach:
>> 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.
Just wanna make sure this doesn't get missed for the 6.19 cycle.
>>
>> Signed-off-by: Werner Sembach <wse@...edocomputers.com>
>> Cc: stable@...r.kernel.org
>> ---
>> V1->V2: Use a quirk to narrow down the devices this is applied to.
>> V2->V3: Fix this patch breaking touchpads on some devices.
>>          Add another device ID.
>>
>> I have three Uniwill devices at hand right now that have at least two
>> physically different touchpads, but same Vendor + Product ID combination.
>> Maybe the vendor uses this product ID for all i2c connected touchpads, or
>> it is used as some kind of subvendor ID to indicate Uniwill?
>>
>> To be able to really narrow it down to Uniwill only devices I would need to
>> check DMI strings, but then I will probably narrow it down to much as I
>> only know what we at TUXEDO use there.
>>
>>   drivers/hid/hid-multitouch.c | 26 +++++++++++++++++++++++++-
>>   1 file changed, 25 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
>> index 179dc316b4b51..ed9eb4e0d5038 100644
>> --- a/drivers/hid/hid-multitouch.c
>> +++ b/drivers/hid/hid-multitouch.c
>> @@ -76,6 +76,7 @@ MODULE_LICENSE("GPL");
>>   #define MT_QUIRK_DISABLE_WAKEUP        BIT(21)
>>   #define MT_QUIRK_ORIENTATION_INVERT    BIT(22)
>>   #define MT_QUIRK_APPLE_TOUCHBAR        BIT(23)
>> +#define MT_QUIRK_KEEP_LATENCY_ON_CLOSE    BIT(24)
>>     #define MT_INPUTMODE_TOUCHSCREEN    0x02
>>   #define MT_INPUTMODE_TOUCHPAD        0x03
>> @@ -211,6 +212,7 @@ static void mt_post_parse(struct mt_device *td, struct 
>> mt_application *app);
>>   #define MT_CLS_WIN_8_DISABLE_WAKEUP        0x0016
>>   #define MT_CLS_WIN_8_NO_STICKY_FINGERS        0x0017
>>   #define MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU    0x0018
>> +#define MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE    0x0019
> A college realized that at some points in the code some, but not all, of the 
> MT_CLS_WIN_8* classes are checked for directly. Should I add my new class 
> there too?
>>     /* vendor specific classes */
>>   #define MT_CLS_3M                0x0101
>> @@ -330,6 +332,15 @@ static const struct mt_class mt_classes[] = {
>>               MT_QUIRK_CONTACT_CNT_ACCURATE |
>>               MT_QUIRK_WIN8_PTP_BUTTONS,
>>           .export_all_inputs = true },
>> +    { .name = MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE,
>> +        .quirks = MT_QUIRK_ALWAYS_VALID |
>> +            MT_QUIRK_IGNORE_DUPLICATES |
>> +            MT_QUIRK_HOVERING |
>> +            MT_QUIRK_CONTACT_CNT_ACCURATE |
>> +            MT_QUIRK_STICKY_FINGERS |
>> +            MT_QUIRK_WIN8_PTP_BUTTONS |
>> +            MT_QUIRK_KEEP_LATENCY_ON_CLOSE,
>> +        .export_all_inputs = true },
>>         /*
>>        * vendor specific classes
>> @@ -1998,7 +2009,12 @@ static void mt_on_hid_hw_open(struct hid_device *hdev)
>>     static void mt_on_hid_hw_close(struct hid_device *hdev)
>>   {
>> -    mt_set_modes(hdev, HID_LATENCY_HIGH, TOUCHPAD_REPORT_NONE);
>> +    struct mt_device *td = hid_get_drvdata(hdev);
>> +
>> +    if (td->mtclass.quirks & MT_QUIRK_KEEP_LATENCY_ON_CLOSE)
>> +        mt_set_modes(hdev, HID_LATENCY_NORMAL, TOUCHPAD_REPORT_NONE);
>> +    else
>> +        mt_set_modes(hdev, HID_LATENCY_HIGH, TOUCHPAD_REPORT_NONE);
>>   }
>>     /*
>> @@ -2375,6 +2391,14 @@ static const struct hid_device_id mt_devices[] = {
>>           MT_USB_DEVICE(USB_VENDOR_ID_UNITEC,
>>               USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
>>   +    /* Uniwill touchpads */
>> +    { .driver_data = MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE,
>> +        HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
>> +            USB_VENDOR_ID_PIXART, 0x0255) },
>> +    { .driver_data = MT_CLS_WIN_8_KEEP_LATENCY_ON_CLOSE,
>> +        HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
>> +            USB_VENDOR_ID_PIXART, 0x0274) },
>> +
>>       /* VTL panels */
>>       { .driver_data = MT_CLS_VTL,
>>           MT_USB_DEVICE(USB_VENDOR_ID_VTL,

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ