HID: multitouch: Disable touchpad on firmware level while not in use
authorWerner Sembach <wse@tuxedocomputers.com>
Tue, 11 Feb 2025 13:39:06 +0000 (14:39 +0100)
committerBenjamin Tissoires <bentiss@kernel.org>
Tue, 13 May 2025 13:59:29 +0000 (15:59 +0200)
Using the new on_hid_hw_open and on_hid_hw_close functions to disable the
touchpad on firmware level while not being in use.

This safes some battery and triggers touchpad-disabled-leds hardwired to
the touchpads firmware, that exist for example on some TongFang barebones.

For a lengthy discussion with all the details see
https://gitlab.freedesktop.org/libinput/libinput/-/issues/558

Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
Link: https://patch.msgid.link/20250211133950.422232-2-wse@tuxedocomputers.com
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
drivers/hid/hid-multitouch.c

index e50887a6d22c24c5272c692a2b29e42aee7b0087..a8d0ef04d5aac4facb491388cd51bca3e6f6b189 100644 (file)
@@ -1887,6 +1887,16 @@ static void mt_remove(struct hid_device *hdev)
        hid_hw_stop(hdev);
 }
 
+static void mt_on_hid_hw_open(struct hid_device *hdev)
+{
+       mt_set_modes(hdev, HID_LATENCY_NORMAL, TOUCHPAD_REPORT_ALL);
+}
+
+static void mt_on_hid_hw_close(struct hid_device *hdev)
+{
+       mt_set_modes(hdev, HID_LATENCY_HIGH, TOUCHPAD_REPORT_NONE);
+}
+
 /*
  * This list contains only:
  * - VID/PID of products not working with the default multitouch handling
@@ -2354,5 +2364,7 @@ static struct hid_driver mt_driver = {
        .suspend = pm_ptr(mt_suspend),
        .reset_resume = pm_ptr(mt_reset_resume),
        .resume = pm_ptr(mt_resume),
+       .on_hid_hw_open = mt_on_hid_hw_open,
+       .on_hid_hw_close = mt_on_hid_hw_close,
 };
 module_hid_driver(mt_driver);