quo / ithc-linux

Linux driver for Intel Touch Host Controller
37 stars 7 forks source link

Supported devices #5

Open quo opened 2 years ago

quo commented 2 years ago

If you've tested the driver and it doesn't work, please open a new issue if one doesn't already exist for your device.

If the driver works (or at least appears to do something in dmesg), please reply here with the following information (especially if the device still has question marks in the table below or is not listed at all):

  1. Device name.
  2. Full output of sudo dmesg (or at least the output of sudo dmesg | grep -Ei 'ithc|linux version|dmi:|class 0x0901').
  3. Whether you had to use intremap=nosid, poll, or any other workarounds.
  4. Whether multitouch and/or pen work using the latest iptsd: https://github.com/linux-surface/iptsd/
Device PCI VID:DID Subsystem VID:DID Touch VID:PID Notes
Surface Pro 7+ 8086:a0d0 1414:0056 045e:0c1a Requires nosid
Surface Pro 8 8086:a0d0 1414:0055 045e:0c37 Requires nosid
Surface Pro 9 8086:51d0 1414:0064 045e:0c52 nosid not needed
Surface Pro 10 8086:7e49 1414:0086 045e:0c7f QuickSPI mode
Surface Laptop 4 8086:a0d0 1414:0052, 1414:0053 045e:0c31 Requires nosid
Surface Laptop 5 8086:51d0 1414:0071 045e:0c59 nosid not needed
Surface Laptop 6 8086:7e49 1414:0089, 1414:0090 045e:0c88, 045e:0c89 QuickSPI mode
Surface Laptop Studio 8086:a0d0 1414:0049 045e:0c1b Requires nosid
Surface Laptop Studio 2 Touchscreen 8086:51d0 1414:0077 045e:0c5d QuickSPI mode
Surface Laptop Studio 2 Touchpad 8086:51d1 8086:7270 045e:0c46 QuickSPI mode
Lenovo X1 Fold 8086:98d0 none 056a:5102 Requires nosid, does not need iptsd
Lenovo ThinkBook 13x G4 IMH 8086:7e49 8086:7270 04f3:427a QuickSPI mode
Intel NUC M15 LAPBC510/LAPBC710
(aka XPG Xenia Xe, Schenker VISION 15, Avell B.ON, ...)
8086:a0d0 8086:2097 ? ?
Intel NUC M15 LAPRC710 8086:51d0 none ? ?
HP ENVY x360 8086:51d0 103c:8a28 ? ?

Raw config samples:

       state             bufsizes touchcfg          "$TIC"   spicfg   pid vid  rev      fwid?             fwmode
SP7+   e0000402 00000000 000a00ff 0000001c 0000001c 43495424 fda00a2e 0c1a045e 00000001 05008a8b 00000000 00000000 00000000 0404035e 000001c0 00000002
SP8    e0000002 00000000 001fc0ff 00000010 00000014 43495424 08e300e8 0c37045e 00000001 0c3c4bea fb190781 00000000 e8d1154a 00040302 62f02ab8 628c8830
SP9    e0000002 00000000 001fc0ff 00000010 00000014 43495424 0ce3f5e8 0c52045e 00000001 c0d97627 fd3b7fc1 00000000 9ec337a3 00040302 64dec79e 58095491
SL4    e0000402 00000000 000a00ff 0000001c 0000001c 43495424 ffa00a28 0c31045e 00000001 0700648b 00000000 00000000 00000000 0404035e 000001c0 00000002
SL5    e0000002 00000000 001fc0ff 00000010 00000014 43495424 09e3d2e8 0c59045e 00000001 30354141 5e7b5d98 00000000 b9be6b38 00040302 c8c4c4e1 0592c2fb
SLS    e0000002 00000000 001fc0ff 00000010 00000014 43495424 0ce3a3e8 0c1b045e 00000001 473e2e89 7030bc6f 00000000 a2a137f3 00040302 70159f6b 47ed5bb1
X1Fold e0000002 00000000 0001c08b 00000004 00000014 43495424 70060a6a 5102056a 00000001 00040050 00000000 00000000 00000000 0004035e 00000000 00000000
NP-chaonay commented 2 years ago

TODO: retest something and change unupdated date

Warning: testing is not completely done. Comment can be updated soon. Also the test only control factor of Wayland/X11; I found later that kernel is also affect the result, which be later re-test.

Device: Surface Laptop Studio PCI VID:DID: 8086:a0d0 (from lspci -D -n 3rd column) Touch VID:PID: 045E:0C1B (from output of ipstd) dmesg log: dmesg.log Workaround used: intremap=nosid Whether multitouch and/or pen work using the experimental iptsd:

Without IPTSD (kernel version factor is not in controlled, require re-test): Single touch work as touch event Tested on: Ubuntu 22.04 LTS with Linux Surface Kernel GNOME-Shell Wayland and X11 raw config on dmesg: same as specified above ipts.conf: InvertX,InvertY=False; Screen size is set to default (since no matched config file at that time, so value will be 0 for both Width/Heigth)

For more information (such as: other issues) see #8

quo commented 2 years ago

Thanks! I've opened separate issues for the bugs. I will look into the truncated prd error later. Can you test the workaround for the suspend bug I've posted in https://github.com/quo/ithc-linux/issues/9?

csdvrx commented 2 years ago

Lenovo X1 Fold: works with modprobe ithc hid=1 poll=1 showing hid-generic 0001:056A:5102.000B in dmesg

I'm using a vanilla Ubuntu 22.04, and trying to compile a 5.17.11 kernel in case more recent drivers are required for other things (ex: i915) After the kernel is compiled, I will try without poll.

Right now, with poll, the Lenovo Wacom pen works (both point and click) but single touch finger doesn't seem to work.

For multitouch, I can't use iptsd due to illegal instruction errors so my test are limited.

The single touch issue may be due to a lack of config as xinput shows various devices including Touchscreen pad, touch and pad.

Furthermore, evtest on xinput device 13 (Touchscreen) shows on-screen textual activity synchronized with the movement of the finger on the screen, including EV_KEY ... BTN_TOUCH when touching the screen - though no mouse click happens.

I'd be happy to try more things as soon as I can find instructions on how to configure the xinput HID devices on Ubuntu to produce mouse movements and clicks.

NP-chaonay commented 2 years ago

9?

@quo the test result is there.

quo commented 2 years ago

@csdvrx Thanks! It sounds like the device uses standard HID (possibly with some nonstandard Wacom things?) instead of the MS Surface HID protocol. This means that you probably don't need iptsd.

Can you please:

  1. Post sudo dmesg output.
  2. Run cat /sys/class/misc/ithc/device/*/report_descriptor > ithc-x1-desc.dat, and include the generated ithc-x1-desc.dat file (this is the HID report descriptor which should tell us the format of the data that the Wacom device is generating).

Thanks again.

csdvrx commented 2 years ago

@quo thanks a lot for fixing the AVX512 issue on iptsd; I understand this CPU is a bit exotic which is why I provided the details :)

On yesterday ithc, there's no such descriptor, so after recompiling with:

git pull ; dkms uninstall ithc -v 0.1 ; dkms remove ithc -v 0.1 ; make dkms-install

dmesg entries added by ithc from 20220602 cb8671a47f5f645542573ca24fd568d6309e63d6

[ 1442.463344] ithc 0000:00:11.0: config: e0000002 00000000 0001c08b 00000004 00000014 43495424 70060a6a 5102056a 00000001 00040050 00000000 00000000 00000000 0004035e 00000000 00000000
[ 1442.464441] ithc 0000:00:11.0: registered device ithc
[ 1442.464511] ithc 0000:00:11.0: using polling instead of irq
[ 1442.586017] input: Intel Touch Host Controller Touchscreen as /devices/pci0000:00/0000:00:11.0/0001:056A:5102.000A/input/input17
[ 1442.586212] input: Intel Touch Host Controller as /devices/pci0000:00/0000:00:11.0/0001:056A:5102.000A/input/input18
[ 1442.586296] input: Intel Touch Host Controller Stylus as /devices/pci0000:00/0000:00:11.0/0001:056A:5102.000A/input/input19
[ 1442.586457] input: Intel Touch Host Controller as /devices/pci0000:00/0000:00:11.0/0001:056A:5102.000A/input/input20
[ 1442.586605] input: Intel Touch Host Controller Mouse as /devices/pci0000:00/0000:00:11.0/0001:056A:5102.000A/input/input21
[ 1442.586948] hid-generic 0001:056A:5102.000A: input,hidraw5: <UNKNOWN> HID v1.00 Mouse [Intel Touch Host Controller] on pci-0000:00:11.0/ithc

Descriptor file

ithc-x1.zip

PCI devices

lspci -vn ``` 00:00.0 0600: 8086:9800 (rev 02) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IOMMU group 0 Capabilities: [e0] Vendor Specific Information: Len=14 00:02.0 0300: 8086:9840 (rev 03) (prog-if 00 [VGA controller]) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IRQ 255 Memory at b0000000 (64-bit, non-prefetchable) [size=16M] Memory at a0000000 (64-bit, prefetchable) [size=256M] I/O ports at 3000 [disabled] [size=64] Expansion ROM at 000c0000 [virtual] [disabled] [size=128K] Capabilities: [40] Vendor Specific Information: Len=0c Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00 Capabilities: [ac] MSI: Enable- Count=1/1 Maskable+ 64bit- Capabilities: [d0] Power Management version 2 Capabilities: [100] Process Address Space ID (PASID) Capabilities: [200] Address Translation Service (ATS) Capabilities: [300] Page Request Interface (PRI) 00:04.0 1180: 8086:9820 (rev 02) Subsystem: 17aa:22c6 Flags: fast devsel, IRQ 255, IOMMU group 1 Memory at b1300000 (64-bit, non-prefetchable) [disabled] [size=64K] Capabilities: [90] MSI: Enable- Count=1/1 Maskable- 64bit- Capabilities: [d0] Power Management version 3 Capabilities: [e0] Vendor Specific Information: Len=0c 00:11.0 0901: 8086:98d0 (rev 12) Flags: bus master, medium devsel, latency 0, IRQ 23, IOMMU group 2 Memory at b1330000 (64-bit, non-prefetchable) [size=32K] Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [70] Power Management version 3 Kernel driver in use: ithc Kernel modules: ithc 00:12.0 0700: 8086:98fc (rev 12) (prog-if 00 [8250]) Subsystem: 17aa:22c6 Flags: fast devsel, IRQ 26, IOMMU group 3 Memory at b1310000 (64-bit, non-prefetchable) [size=64K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 00:14.0 0c03: 8086:98ed (rev 12) (prog-if 30 [XHCI]) Subsystem: 17aa:22c6 Flags: bus master, medium devsel, latency 0, IRQ 125, IOMMU group 4 Memory at b1320000 (64-bit, non-prefetchable) [size=64K] Capabilities: [70] Power Management version 2 Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+ Capabilities: [90] Vendor Specific Information: Len=14 Capabilities: [b0] Vendor Specific Information: Len=00 Kernel driver in use: xhci_hcd Kernel modules: xhci_pci 00:14.2 0500: 8086:98ef (rev 12) Flags: fast devsel, IOMMU group 4 Memory at b133c000 (64-bit, non-prefetchable) [disabled] [size=8K] Memory at b133e000 (64-bit, non-prefetchable) [disabled] [size=4K] Capabilities: [80] Power Management version 3 00:15.0 0c80: 8086:98e8 (rev 12) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IRQ 16, IOMMU group 5 Memory at 90800000 (64-bit, non-prefetchable) [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:15.1 0c80: 8086:98e9 (rev 12) Flags: bus master, fast devsel, latency 0, IRQ 17, IOMMU group 5 Memory at 90801000 (64-bit, non-prefetchable) [virtual] [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:15.3 0c80: 8086:98eb (rev 12) Flags: bus master, fast devsel, latency 0, IRQ 19, IOMMU group 5 Memory at 90802000 (64-bit, non-prefetchable) [virtual] [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:16.0 0780: 8086:98e0 (rev 12) Subsystem: 17aa:22c6 Flags: fast devsel, IRQ 255, IOMMU group 6 Memory at b1342000 (64-bit, non-prefetchable) [disabled] [size=4K] Capabilities: [50] Power Management version 3 Capabilities: [8c] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [a4] Vendor Specific Information: Len=14 00:19.0 0c80: 8086:98c5 (rev 12) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IRQ 32, IOMMU group 7 Memory at 90803000 (64-bit, non-prefetchable) [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:19.1 0c80: 8086:98c6 (rev 12) Flags: bus master, fast devsel, latency 0, IRQ 33, IOMMU group 7 Memory at 90804000 (64-bit, non-prefetchable) [virtual] [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:1c.0 0604: 8086:98b8 (rev 12) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0, IRQ 122, IOMMU group 8 Bus: primary=00, secondary=01, subordinate=01, sec-latency=0 I/O behind bridge: [disabled] Memory behind bridge: [disabled] Prefetchable memory behind bridge: [disabled] Capabilities: [40] Express Root Port (Slot+), MSI 00 Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit- Capabilities: [90] Subsystem: 17aa:22c6 Capabilities: [a0] Power Management version 3 Kernel driver in use: pcieport 00:1c.2 0604: 8086:98ba (rev 12) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0, IRQ 123, IOMMU group 9 Bus: primary=00, secondary=02, subordinate=02, sec-latency=0 I/O behind bridge: [disabled] Memory behind bridge: b1200000-b12fffff [size=1M] Prefetchable memory behind bridge: [disabled] Capabilities: [40] Express Root Port (Slot+), MSI 00 Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit- Capabilities: [90] Subsystem: 17aa:22c6 Capabilities: [a0] Power Management version 3 Capabilities: [100] Advanced Error Reporting Capabilities: [220] Access Control Services Capabilities: [200] L1 PM Substates Capabilities: [a30] Secondary PCI Express Capabilities: [a00] Downstream Port Containment Kernel driver in use: pcieport 00:1c.4 0604: 8086:98bc (rev 12) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0, IRQ 124, IOMMU group 10 Bus: primary=00, secondary=03, subordinate=03, sec-latency=0 I/O behind bridge: [disabled] Memory behind bridge: b1100000-b11fffff [size=1M] Prefetchable memory behind bridge: [disabled] Capabilities: [40] Express Root Port (Slot+), MSI 00 Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit- Capabilities: [90] Subsystem: 17aa:22c6 Capabilities: [a0] Power Management version 3 Capabilities: [100] Advanced Error Reporting Capabilities: [220] Access Control Services Capabilities: [200] L1 PM Substates Capabilities: [a30] Secondary PCI Express Capabilities: [a00] Downstream Port Containment Kernel driver in use: pcieport 00:1e.0 0780: 8086:98a8 (rev 12) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IRQ 20, IOMMU group 11 Memory at 90805000 (64-bit, non-prefetchable) [virtual] [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:1e.1 0780: 8086:98a9 (rev 12) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IRQ 21, IOMMU group 11 Memory at 90806000 (64-bit, non-prefetchable) [virtual] [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:1e.2 0c80: 8086:98aa (rev 12) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IRQ 46, IOMMU group 11 Memory at 90807000 (64-bit, non-prefetchable) [virtual] [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 Kernel driver in use: intel-lpss Kernel modules: intel_lpss_pci 00:1e.3 0c80: 8086:98ab (rev 12) Flags: fast devsel, IRQ 255, IOMMU group 11 Memory at 90808000 (64-bit, non-prefetchable) [disabled] [size=4K] Capabilities: [80] Power Management version 3 Capabilities: [90] Vendor Specific Information: Len=14 00:1f.0 0601: 8086:9885 (rev 12) Subsystem: 17aa:22c6 Flags: bus master, medium devsel, latency 0, IOMMU group 12 00:1f.3 0401: 8086:98c8 (rev 12) Subsystem: 17aa:22c6 Flags: bus master, fast devsel, latency 0, IRQ 255, IOMMU group 12 Memory at b1338000 (64-bit, non-prefetchable) [size=16K] Memory at b1000000 (64-bit, non-prefetchable) [size=1M] Capabilities: [50] Power Management version 3 Capabilities: [80] Vendor Specific Information: Len=14 Capabilities: [60] MSI: Enable- Count=1/1 Maskable- 64bit+ 00:1f.5 0c80: 8086:98a4 (rev 12) Subsystem: 17aa:22c6 Flags: fast devsel, IOMMU group 12 Memory at 90809000 (32-bit, non-prefetchable) [size=4K] 02:00.0 0108: 1cc4:6202 (rev 03) (prog-if 02 [NVM Express]) Subsystem: 1cc4:1cc4 Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0, IOMMU group 13 Memory at b1200000 (64-bit, non-prefetchable) [size=16K] Capabilities: [40] Power Management version 3 Capabilities: [50] MSI: Enable- Count=1/8 Maskable+ 64bit+ Capabilities: [70] Express Endpoint, MSI 00 Capabilities: [b0] MSI-X: Enable+ Count=16 Masked- Capabilities: [100] Advanced Error Reporting Capabilities: [158] Secondary PCI Express Capabilities: [178] Latency Tolerance Reporting Capabilities: [180] L1 PM Substates Kernel driver in use: nvme Kernel modules: nvme 03:00.0 0280: 8086:2723 (rev 1a) Subsystem: 8086:008c Flags: bus master, fast devsel, latency 0, IRQ 19, IOMMU group 14 Memory at b1100000 (64-bit, non-prefetchable) [size=16K] Capabilities: [c8] Power Management version 3 Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [40] Express Endpoint, MSI 00 Capabilities: [80] MSI-X: Enable+ Count=16 Masked- Capabilities: [100] Advanced Error Reporting Capabilities: [14c] Latency Tolerance Reporting Capabilities: [154] L1 PM Substates Kernel driver in use: iwlwifi Kernel modules: iwlwifi ```

HID tests

Since yesterday, the pen stopped working (both hover and clicking were working): even if it's listed as entry 19 in the dmesg, it's not shown in xinput list anymore.

However, now one finger is now working finger (finger actions bring up Ubuntu OSK)

I'll now try to test iptsd

quo commented 2 years ago

@csdvrx As I suspected, according to the descriptor the data on the X1 Fold is just normal HID data. The reason iptsd gives the 'block' errors is because it can't understand this data, it only works for MS Surface HID data. But the good news is that everything should just work out of the box, without iptsd, because the Linux kernel already has built-in drivers for normal HID and also for Wacom specifically.

I compared the X1 Fold HID descriptor with some of the descriptors from the linuxwacom project: https://github.com/linuxwacom/wacom-hid-descriptors I didn't find an exact match, but it looks like the descriptor is very similar to some other descriptors, e.g. the one from the X1 Yoga 6.

If you still have issues, please update the ithc driver, because I did fix a small HID bug yesterday. If that doesn't help, you could try asking the linuxwacom people if they have any ideas.

dr-Styki commented 2 years ago

Thank you for the driver, I tested it on my SP8 and it works very well.

The only issue I'm facing off is that the touchscreen doesn't work after waking-up from hibernation. As a workaround I added a script in /usr/lib/systemd/system-sleep/

case $1/$2 in
    post/hibernate)
        systemctl stop iptsd
        modprobe -r ithc
        modprobe ithc
        ;;
esac
Device informations: Device PCI VID:DID Touch VID:PID Notes Raw config sample
Surface Pro 8 8086:a0d0 045E:0C37 Requires nosid e0000002 00000000 001fc0ff 00000010 00000014 43495424 09e337e8 0c37045e 00000001 809336c3 2a57a27a 00000000 47a9bdfc 00040302 5e491251 2ba14ad2

dmesg:

[    0.000000] Linux version 5.18.4-arch1-1-surface (linux-surface@archlinux) (gcc (GCC) 12.1.0, GNU ld (GNU Binutils) 2.38) #1 SMP PREEMPT_DYNAMIC Thu, 16 Jun 2022 16:56:46 +0000
[    0.000000] DMI: Microsoft Corporation Surface Pro 8/Surface Pro 8, BIOS 18.102.141 12/15/2021
[    0.467458] pci 0000:00:10.6: [8086:a0d0] type 00 class 0x090100
[    3.433002] ithc: loading out-of-tree module taints kernel.
[    3.448702] ithc: module verification failed: signature and/or required key missing - tainting kernel
[    3.450445] ithc 0000:00:10.6: enabling device (0000 -> 0002)
[    3.668686] ithc 0000:00:10.6: config: e0000002 00000000 001fc0ff 00000010 00000014 43495424 09e337e8 0c37045e 00000001 809336c3 2a57a27a 00000000 47a9bdfc 00040302 5e491251 2ba14ad2
[    3.669115] ithc 0000:00:10.6: registered device ithc
[    3.925189] ithc 0000:00:10.6: enabling multi-touch mode

lspci:

00:10.6 Digitizer Pen: Intel Corporation Device a0d0 (rev 20)
    Subsystem: Microsoft Corporation Device 0055
    Flags: bus master, medium devsel, latency 0, IRQ 159, IOMMU group 7
    Memory at 603e160000 (64-bit, non-prefetchable) [size=32K]
    Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [70] Power Management version 3
    Kernel driver in use: ithc
    Kernel modules: ithc
ishtob commented 2 years ago

@csdvrx @quo I have a x1 fold as well and just installed the ithc. after putting in nosid, pen input works. I am unable to get single touch working even after rebuilding the ithc. am I missing a step somewhere?

csdvrx commented 2 years ago

In my past attempts, when the pen was working, I had problems with touch - and likewise the other way.

The x1 fold might be slightly different and require tweaks to get both working at the same time.

Then there's multi-touch: 3 fingers gestures in windows 11 shows it must be possible with the hardware.

Maybe we should explore more how the Fold differs from Surfaces?

(I'm still working on power savings: I can now get closer to 0.4%/h on S01x in Windows 11, like this weekend I measured 21h of sleep drawing 8%. I need to know how low it can be to first try to match that baseline in Linux before trying to improve it)

Faexa commented 2 years ago

Hello, thank you for the driver, working fine on Surface Pro 7+

Surface pro 7+ / 16Go Debian 11 Linux version 5.18.10-surface Wayland

using nosid (mandatory), didn't try poll

Pen is working with quo/iptsd driver (built / not the iptsd driver from deb packages of linux-surface repo)

On screen: touch et multitouch

simple touch working, double touch, selecting (in nautilus), dragging does not in nautilus right clic by pressing long simple touch works only in firefox, but does not in nautilus (it opens 'new favorite' [nouveau signet]), what is the input sent by a long press ?

With pen

simple touch working, double clic too, hovering, selecting but not dragging too in nautilus long press does not give me right clic using the right clic with the dedicated button gives me this clic but on hoovering : without clicking I get right clic

PS: how can I test which event is sent by each action ? I use Wayland And Is it remapable : for example, is there a possibility to get right clic with a single long clic ?

In firefox : touching with finger make me scroll the page; but with pen it selects the text. This behavior is editable ?

Suspend / hibernate

dmesg ``` [ 0.000000] Linux version 5.18.10-surface (root@4fd420784964) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #1 SMP PREEMPT_DYNAMIC Fri Jul 8 01:54:13 UTC 2022 [ 0.000000] DMI: Microsoft Corporation Surface Pro 7+/Surface Pro 7+, BIOS 18.102.143 03/07/2022 [ 0.265288] pci 0000:00:10.6: [8086:a0d0] type 00 class 0x090100 [ 10.684911] ithc: loading out-of-tree module taints kernel. [ 10.690334] ithc: module verification failed: signature and/or required key missing - tainting kernel [ 10.694999] ithc 0000:00:10.6: enabling device (0000 -> 0002) [ 10.811265] ithc 0000:00:10.6: config: e0000402 00000000 000a00ff 0000001c 0000001c 43495424 fda00a2e 0c1a045e 00000001 05008d8b 00000000 00000000 00000000 0404035e 000001c0 00000002 [ 10.820512] ithc 0000:00:10.6: registered device ithc [ 11.295688] ithc 0000:00:10.6: enabling multi-touch mode ```
lspci ``` 00:10.6 Digitizer Pen: Intel Corporation Device a0d0 (rev 20) Subsystem: Microsoft Corporation Device 0056 Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- SERR-
NP-chaonay commented 2 years ago

Faexa

long press does not give me right clic

for pen on windows/linux, it dont apply right click when long press by pem. and I think it is normal behaviour and should be the good behaviour because long press using pen is quite not good as pen is should be more precise and not optimized for long press like touch.

NP-chaonay commented 2 years ago

Faexa

https://github.com/quo/iptsd/issues/5 maybe you could test this, test on what I test in 1st message.

I think If I not guess it wrong you should have all or almost same test result.

aj3423 commented 2 years ago

It works with Surface Pro 9.



- Whether multitouch and/or pen work using the experimental iptsd
  Tried the latest  `iptsd_0.5.1-1_amd64.deb` from [actions page](https://github.com/linux-surface/iptsd/actions/runs/3401872458)
  - Pen not tested, don't have one.
  - Singletouch works for both laptop/tablet mode.
  - Multitouch not work
    Tested with X11.
    - Tried to zoom-in web page in firefox with two fingers, not work. Firefox is launched with environment variable `MOZ_USE_XINPUT2=1`. 
    - Also Tried launch VSCode with param `--touch-events`, cannot zoom-in documents with two fingers.
NP-chaonay commented 2 years ago

Outdated Warning: using iptsd from linux-surface/iptsd instead of quo/iptsd

When iptsd from software repo can be used for ithc, will be reported inplace and new comment

NP-chaonay commented 2 years ago

@aj3423

Pls see https://github.com/linux-surface/linux-surface/wiki/Installation-and-Setup at section Touch control

You seem to have enable X11 touch in Firefox first, unless using on Wayland (Firefox must also run as Wayland mode)

aj3423 commented 2 years ago

@NP-chaonay Comment updated.

quo commented 2 years ago

Thanks. I've added the new PCI ids in 31ad276. The fact that single touch works means that ithc is working fine. So if multitouch doesn't work, iptsd might need some changes.

EDIT: For iptsd, you'll probably have to add a config file. See here: https://github.com/linux-surface/iptsd/tree/master/etc/config You could also try this branch, which tries to read the relevant config parameters from the device: https://github.com/quo/iptsd/tree/pr-metadata

NP-chaonay commented 2 years ago

Thanks quo, however I personally suggest the first approach. But I like the metadata function btw.

@aj3423 could you edit some portion of the /etc/ipts.conf to these:

InvertX = false
InvertY = false

Width = 27.40
Height = 18.27

Noted that you have to adjust screen size later but for now these 4 required to work since configuration file does exist.

If it work then using that config, until there is configuration file for your device in https://github.com/linux-surface/iptsd/tree/master/etc/config

So after that, you can revert change in that 4 lines

aj3423 commented 2 years ago

@NP-chaonay The config file /etc/ipts.conf already exists, I tried the 4 lines of code, then changed the screen resolution after that, but still not work

@quo I tried the pr-metadata, and then change the screen resolution, the multitouch WORKS now. It works when zoom-in pages in brave-browser, but not work for firefox/vscode. Some output:

~/Downloads/iptsd > ./build/src/daemon/iptsd /dev/hidraw8
[15:06:18.533] [info] Metadata: rows=46, columns=68, width=27389, height=18259, transform=[408.79105, 0, 0, 0, 405.75555, 0], unknown=1, [178, 182, 180, 1, 178, 182, 180, 1, 90, 171, 100, 20, 172, 177, 175, 2]
[15:06:18.534] [info] Connected to device 045E:0C52
NP-chaonay commented 2 years ago
aj3423 commented 2 years ago

@NP-chaonay I did set environment variable MOZ_USE_XINPUT2=1 for firefox, and launched vscode with code ... --touch-events

jim-davenport commented 2 years ago

Surface Laptop 4 Intel - Linux Mint 21 I did use intremap=nosid Multitouch works (I don't have a pen) using the latest iptsd: https://github.com/linux-surface/iptsd/

sudo dmesg | grep -Ei 'ithc|linux version|dmi:|class 0x0901' [ 0.000000] Linux version 6.0.8-surface (root@031da3e085d3) (gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #3 SMP PREEMPT_DYNAMIC Sun Nov 13 20:13:58 UTC 2022 [ 0.000000] DMI: Microsoft Corporation Surface Laptop 4/Surface Laptop 4, BIOS 18.301.143 03/30/2022 [ 0.277570] pci 0000:00:10.6: [8086:a0d0] type 00 class 0x090100 [ 4.190917] ithc: loading out-of-tree module taints kernel. [ 4.193105] ithc 0000:00:10.6: enabling device (0000 -> 0002) [ 4.316093] ithc 0000:00:10.6: config: e0000402 00000000 000a00ff 0000001c 0000001c 43495424 ffa00a28 0c31045e 00000001 0700648b 00000000 00000000 00000000 0404035e 000001c0 00000002 [ 4.316508] ithc 0000:00:10.6: registered device ithc [ 4.487803] hid-generic 0001:045E:0C31.0003: input,hidraw2: HID v1.00 Device [Intel Touch Host Controller] on pci-0000:00:10.6/ithc

quo commented 2 years ago

Awesome, thanks!

HunJanLiu commented 1 year ago

Hi first time and im new into all of that sec year Student hope i post the right things and try for your help, im on a surface pro 8, used ntremap=nosid and no iptsd downloaded Bildschirmfoto vom 2022-12-01 22-05-15

NP-chaonay commented 1 year ago

@HunJanLiu Thanks, btw SP8 have been reported before and it all work.

So you might try these

1) check if you using intremap not ntremap 2) At this moment, you must install iptsd from github repo of linux-surface/iptsd but you instead click on action tab, select latest sucessful workflow and download the debian package and (but before install see below first) install it.

3) if you have install iptsd from source, you have to remove it first, btw the iptsd from apt install isnt be affected.

4) after 2) , you can config something in /etc/ipts.conf (config something you seem know, and leave some not know meaning) and then reboot to test it. btw it should work

HunJanLiu commented 1 year ago

did now it works thx

quo commented 1 year ago

@mnilsson76 (or anyone else with a Surface Laptop 5) I would appreciate it if you could test the current ithc version on the SL5 and report the results here. I'm especially interested if the nosid workaround if still needed on the SL5. If you've already applied the workaround, please remove it again, reboot and retest. Thanks in advance!

mnilsson76 commented 1 year ago

@mnilsson76 (or anyone else with a Surface Laptop 5) I would appreciate it if you could test the current ithc version on the SL5 and report the results here. I'm especially interested if the nosid workaround if still needed on the SL5. If you've already applied the workaround, please remove it again, reboot and retest. Thanks in advance!

I'll get that done tonight

mnilsson76 commented 1 year ago

@mnilsson76 (or anyone else with a Surface Laptop 5) I would appreciate it if you could test the current ithc version on the SL5 and report the results here. I'm especially interested if the nosid workaround if still needed on the SL5. If you've already applied the workaround, please remove it again, reboot and retest. Thanks in advance!

I'll get that done tonight

Ok, here we go:

[ 0.000000] Linux version 6.0.12-surface (root@a4c646d9329b) (gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #5 SMP PREEMPT_DYNAMIC Sun Dec 11 14:19:44 UTC 2022 [ 0.000000] DMI: Microsoft Corporation Surface Laptop 5/Surface Laptop 5, BIOS 7.10.143 08/29/2022 [ 0.482760] pci 0000:00:10.6: [8086:51d0] type 00 class 0x090100 [ 87.201759] ithc: loading out-of-tree module taints kernel. [ 87.201878] ithc: module verification failed: signature and/or required key missing - tainting kernel [ 87.203758] ithc 0000:00:10.6: enabling device (0000 -> 0002) [ 87.437780] ithc 0000:00:10.6: config: e0000002 00000000 001fc0ff 00000010 00000014 43495424 09e3d2e8 0c59045e 00000001 30354141 5e7b5d98 00000000 b9be6b38 00040302 c8c4c4e1 0592c2fb [ 87.438768] ithc 0000:00:10.6: registered device ithc [ 87.566722] hid-generic 0001:045E:0C59.0005: input,hidraw4: <UNKNOWN> HID v1.00 Device [Intel Touch Host Controller] on pci-0000:00:10.6/ithc [ 100.554682] ithc 0000:00:10.6: config: e0000002 00000000 001fc0ff 00000010 00000014 43495424 09e3d2e8 0c59045e 00000001 10354141 5c7b5d88 00000000 b9beeb38 00040302 c0c4c4e1 05d2c2fb [ 100.555615] ithc 0000:00:10.6: registered device ithc [ 100.682393] hid-generic 0001:045E:0C59.0006: input,hidraw4: <UNKNOWN> HID v1.00 Device [Intel Touch Host Controller] on pci-0000:00:10.6/ithc

The touchscreen works with the latest ithc without nosid. I've also been able to get multitouch working somewhat with iptsd from the newest workflow. The released iptsd 0.5.1 doesn't seem to work though.

quo commented 1 year ago

Great, thanks! I guess that confirms that the source ID issue was a hardware bug that's been fixed with Alder Lake.

craigcabrey commented 5 months ago

I have a ThinkBook 13x Gen 4 in hand, the driver fails to initialize the touchscreen:

[    0.000000] Linux version 6.8.11-300.fc40.x86_64 (mockbuild@f09cc32e12c24ed6a1a66c2a2e9f1728) (gcc (GCC) 14.1.1 20240522 (Red Hat 14.1.1-4), GNU ld version 2.41-37.fc40) #1 SMP PREEMPT_DYNAMIC Mon May 27 14:53:33 UTC 2024
[    0.000000] DMI: LENOVO 21KR/LNVNB161216, BIOS MTCN43WW 02/29/2024
[    0.283665] pci 0000:00:10.0: [8086:7e49] type 00 class 0x090100 conventional PCI endpoint
[ 8475.268177] ithc 0000:00:10.0: enabling device (0000 -> 0002)
[ 8475.271468] ithc 0000:00:10.0: ACPI config: InputHeaderAddr=0x1000 InputBodyAddr=0x1100 OutputBodyAddr=0x2000 ReadOpcode=0x0b WriteOpcode=0x02 ReadMode=0 WriteMode=0 Frequency=16000000 LimitPacketSize=0 TxDelay=0 ActiveLTR=1023 IdleLTR=1023
[ 8475.592545] ithc 0000:00:10.0: received type 255 instead of reset response
[ 8475.592551] ithc 0000:00:10.0: ithc_quickspi_init: ithc_quickspi_init_hidspi failed with -42
[ 8475.592553] ithc 0000:00:10.0: ithc_init_device: ithc_quickspi_init failed with -42
[ 8475.592555] ithc 0000:00:10.0: ithc_start: ithc_init_device failed with -42
[ 8475.592559] ithc: probe of 0000:00:10.0 failed with error -42

Is there any information I should collect?

quo commented 5 months ago

@craigcabrey Thanks for testing! Can you try the sl6 branch? It has some changes that are probably also necessary for the ThinkBook.

craigcabrey commented 5 months ago

I am happy to report that (at least on 6.8.11), that branch works!

quo commented 5 months ago

Awesome! Can you post the "device descriptor" line from dmesg?

craigcabrey commented 5 months ago
[ 1204.423167] ithc 0000:00:10.0: enabling device (0000 -> 0002)
[ 1204.424420] ithc 0000:00:10.0: ACPI config: InputHeaderAddr=0x1000 InputBodyAddr=0x1100 OutputBodyAddr=0x2000 ReadOpcode=0x0b WriteOpcode=0x02 ReadMode=0 WriteMode=0 Frequency=16000000 LimitPacketSize=0 TxDelay=0 ActiveLTR=1023 IdleLTR=1023
[ 1204.743332] ithc 0000:00:10.0: Device descriptor: bcdVersion=0x0300 wReportDescLength=563 wMaxInputLength=8192 wMaxOutputLength=8192 wMaxFragmentLength=4096 wVendorID=0x04f3 wProductID=0x427a wVersionID=0x6712 wFlags=0x0000 dwReserved=0x427a0000
[ 1205.777839] hid-multitouch 0001:04F3:427A.0003: failed to fetch feature 68
[ 1205.777912] input: Intel Touch Host Controller as /devices/pci0000:00/0000:00:10.0/0001:04F3:427A.0003/input/input17
[ 1205.778202] input: Intel Touch Host Controller UNKNOWN as /devices/pci0000:00/0000:00:10.0/0001:04F3:427A.0003/input/input18
[ 1205.778225] input: Intel Touch Host Controller UNKNOWN as /devices/pci0000:00/0000:00:10.0/0001:04F3:427A.0003/input/input19
[ 1205.778278] hid-multitouch 0001:04F3:427A.0003: input,hidraw2: <UNKNOWN> HID v1.00 Device [Intel Touch Host Controller] on pci-0000:00:10.0/ithc
quo commented 5 months ago

Thanks. I'll merge those changes into master once it's been confirmed that they also work on the Surface Laptop 6.

failed to fetch feature 68

That's curious. Looks like a timeout since there's a one second gap in the timestamps. Feature reports work with ithc on Surface devices, so maybe its just this device being weird.

Can you maybe upload the report descriptor (should be at /sys/devices/pci0000:00/0000:00:10.0/0001:04F3:427A.0003/report_descriptor)? Just so I can check what feature 68 is.

craigcabrey commented 5 months ago

report_descriptor.zip from /sys/devices/pci0000\:00/0000\:00\:10.0/0001\:04F3\:427A.0004/report_descriptor

craigcabrey commented 5 months ago

I also installed 6.9.3-200.fc40.x86_64, works on that kernel too.

quo commented 5 months ago

So feature report 68 is the Microsoft Certification data. I'm surprised that Linux would even try to access that, but apparently it does that to make some Synaptics devices work: https://github.com/torvalds/linux/commit/45c5c6828214605eaefa6755c47bd1a2c7eb203e

The kernel should also load feature report 10 (contact max), and that doesn't seem to cause an error. So my guess is that despite being listed in the descriptor, report 68 simply isn't actually implemented in the device. Maybe on Windows, they use a filter driver or some other hack to provide the Certification blob.

In any case, if the touchscreen works then we can ignore that error.