[PATCH] HID: multitouch: use Win8 class for ELAN 04F3:3358 (Surface Laptop Ultra)
DORMANTno replies
From: Teo Casares via B4 Relay <devnull+teo.nakora.fi@kernel.org>
Date: 2026-10-18 23:56:52
Also in:
b4-sent, lkml
Subsystem:
hid core layer, the rest · Maintainers:
Jiri Kosina, Benjamin Tissoires, Linus Torvalds
From: Teo Casares <redacted> The Surface Laptop Ultra touchpad declares its PTPHQA blob on the Digitizers usage page (0x000d00c5) instead of the vendor page (0xff0000c5), so it is not detected as a Win8 device and gets the generic class, which ignores Confidence. Palms are then reported as fingers. Add a device entry with MT_CLS_WIN_8 so Confidence maps to MT_TOOL_PALM. The entry matches HID_GROUP_MULTITOUCH on purpose: if the firmware is ever fixed, the generic Win8 entry takes over. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Teo Casares <redacted> --- Report descriptor excerpt (MSHW0734, 1129 bytes): 836: 06 00 ff Usage Page (Vendor 0xff00) 839: 05 0d Usage Page (Digitizers) ... 1060: 85 06 Report ID (6) 1062: 09 c5 Usage (0xc5) ... 1072: 75 08 96 00 01 b1 02 Report Size (8), Report Count (256), Feature The device stays in the generic group, so HID_QUIRK_MULTI_INPUT is still set; as with other PTPs, MT_CLS_WIN_8 also exports the legacy Mouse collection as an extra input node. Haptics are unaffected: the descriptor has no Auto Trigger usage. Tested on a Surface Laptop Ultra running 7.2.8 with the same hunk: the touchpad reports MT_TOOL_PALM for palm contacts, and clicks, click-and-drag and long stationary contacts behave as before. Build-tested on hid.git for-next. Root-cause analysis, patch and changelog were drafted with an LLM coding assistant (Claude Opus 5.5 via Claude Code); I reviewed the change and tested it on the hardware. A HID-BPF descriptor fixup restoring the vendor usage page should also work; happy to send that instead or in addition if preferred. --- drivers/hid/hid-multitouch.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 4e19a0c4d2..4e969438b2 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c@@ -2425,6 +2425,11 @@ static const struct hid_device_id mt_devices[] = { HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, USB_VENDOR_ID_ELAN, 0x32ae) }, + /* Surface Laptop Ultra: PTPHQA blob not on the vendor page */ + { .driver_data = MT_CLS_WIN_8, + HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH, + USB_VENDOR_ID_ELAN, 0x3358) }, + /* Elitegroup panel */ { .driver_data = MT_CLS_SERIAL, MT_USB_DEVICE(USB_VENDOR_ID_ELITEGROUP,
--- base-commit: ae6927c533a4454570950125ca8ba909c45f20f9 change-id: 20261018-elan-3358-dfe4d6890ee4 Best regards, -- Teo Casares [off-list ref]