Multi-touch not working on Surface Laptop 7 with Intel THC driver
- Dominant language
- C
- Stars
- 4
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
_please let me know if this is not the proper place to crate this issue, I have the same issue reported in the IPTSD repo [here](https://github.com/linux-surface/iptsd/issues/192)._
Device: Microsoft Surface Laptop 7 with Intel Ultra 2
Operating System: Fedora 42 Wayland
Kernel Version: Linux mainline 6.14 with Surface Linux Patch and Intel THC drivers
# Issue Description
The touchpad on my Surface Laptop 7 only recognizes single-finger input. Multi-touch gestures like two-finger scrolling are not working. When using `libinput list-devices`, I can see two devices with the same id (`045E:0C9F`), one touchpad and one mouse.
```
Device: quickspi-hid 045E:0C9F Touchpad
Kernel: /dev/input/event5
Id: :045e:0c9f
Group: 3
Seat: seat0, default
Size: 120x80mm
Capabilities: pointer gesture
Tap-to-click: disabled
Tap-and-drag: enabled
Tap button map: left/right/middle
Tap drag lock: disabled
Left-handed: disabled
Nat.scrolling: disabled
Middle emulation: n/a
Calibration: n/a
Scroll methods: *two-finger edge
Scroll button: n/a
Scroll button lock: n/a
Click methods: none
Clickfinger button map: n/a
Disable-w-typing: enabled
Disable-w-trackpointing: enabled
Accel profiles: flat *adaptive custom
Rotation: n/a
Area rectangle: n/a
Device: quickspi-hid 045E:0C9F Mouse
Kernel: /dev/input/event4
Id: :045e:0c9f
Group: 4
Seat: seat0, default
Capabilities: pointer
Tap-to-click: n/a
Tap-and-drag: n/a
Tap button map: n/a
Tap drag lock: n/a
Left-handed: disabled
Nat.scrolling: disabled
Middle emulation: n/a
Calibration: n/a
Scroll methods: button
Scroll button: BTN_RIGHT
Scroll button lock: disabled
Click methods: none
Clickfinger button map: n/a
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles: flat *adaptive custom
Rotation: 0.0
Area rectangle: n/a
```
With `sudo evtest` on these two inputs, only the `quickspi-hid 045E:0C9F Mouse` one respond with events when moving finger on the touchpad. and event stops as soon as two or more fingers were placed on the touchpad.
So my touchpad is acting as a mouse basically, disabling touchpad in GNOME does not disable the touchpad, and any changes in mouse settings affect the touchpad. The exact same issue as [this](https://forum.manjaro.org/t/my-touchpad-was-recognized-as-a-mouse/145157).
# What I have tried
Installing [IPTSD](https://github.com/linux-surface/iptsd) will enable multi-finger gestures, but disable physical clicks on this haptic touchpad.
Updating `/etc/libinput/local-overrides.quirks` to include `ModelPressurePad=1` does not make a difference.
Using `hid-feature` tool to check and set touchpad mode:
```
$ sudo hid-feature list /dev/hidraw4 | grep -i inputmode
840000 | 132 | Digitizers | Inputmode | [ 0, 10] | 1 | 8
```
Attempted to set multi-touch mode with:
```
sudo hid-feature set -f 840000 3 /dev/hidraw4
```
However, this did not change the behavior, and the value doesn't appear to be properly set/maintained.
# Questions
- Can ITHC drivers be patched or edited to support multi-touch on this device?
- Since this laptop houses Lunar lake chip, does this mean that it should use QuickI2C instead of QuickSPI and IPTS for touchpad?
- Based on the document, it IPTS now somehow outdated and replaced by QuickI2C and QuickSPI? Is IPTS / IPTSD still necessary in newer devices like the Surface Laptop7?
I'm trying to bring touchpad support to the SL7 and is stuck here for a long time, really running out of ideas. Any guidance is greatly appreciated and I'm happy to provide `dmesg` or other logs if needed. Thank you!
Contributor guide
Assessment
This issue has not been assessed yet.