国产 Touchpad 在 arch 下偶发无法用手势

5 月 28 日
 richiewu

ricky@archlinux ~> sudo dmesg | grep -i i2c [sudo] password for ricky: [ 0.211745] ACPI BIOS Error (bug): Could not resolve symbol [_SB.PC00.I2C3.TPD0], AE_NOT_FOUND (20251212/dswload2-162) [ 0.211891] ACPI BIOS Error (bug): Could not resolve symbol [_SB.PC00.I2C4.TPL1], AE_NOT_FOUND (20251212/dswload2-162) [ 0.212028] ACPI BIOS Error (bug): Could not resolve symbol [_SB.PC00.I2C5.TPL1], AE_NOT_FOUND (20251212/dswload2-162) [ 0.237528] ACPI: _SB_.PC00.I2C3.PXTC: New power resource [ 0.238649] ACPI: _SB_.PC00.I2C4.PTPL: New power resource [ 0.239054] ACPI: _SB_.PC00.I2C5.PTPL: New power resource [ 1.207616] Modules linked in: i915(+) i2c_algo_bit drm_buddy ttm nvme intel_gtt nvme_core intel_lpss_pci serio_raw video nvme_keyring spi_intel_pci drm_display_helper nvme_auth intel_lpss hkdf spi_intel idma64 wmi cec intel_vsec [ 3.815849] i2c_dev: i2c /dev entries driver [ 4.195336] input: FTSC1000:00 2808:5662 as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-FTSC1000:00/0018:2808:5662.0008/input/input18 [ 4.195401] input: FTSC1000:00 2808:5662 UNKNOWN as /devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-FTSC1000:00/0018:2808:5662.0008/input/input20 [ 4.195467] hid-multitouch 0018:2808:5662.0008: input,hidraw7: I2C HID v1.00 Device [FTSC1000:00 2808:5662] on i2c-FTSC1000:00 [ 4.203661] input: TOPS0102:00 35CC:0104 Consumer Control as /devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1/i2c-TOPS0102:00/0018:35CC:0104.0009/input/input22 [ 4.205224] input: TOPS0102:00 35CC:0104 Touchpad as /devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1i2c-TOPS0102:00/0018:35CC:0104.0009/input/input23 [ 4.205278] hid-multitouch 0018:35CC:0104.0009: input,hidraw8: I2C HID v1.00 Mouse [TOPS0102:00 35CC:0104] on i2c-TOPS0102:00

libinput list-devices 识别为两个设备

Device: TOPS0102:00 35CC:0104 Consumer Control Kernel: /dev/input/event12 Id: i2c:35cc:0104 Group: 5 Seat: seat0, default Capabilities: keyboard pointer Tap-to-click: n/a Tap-and-drag: n/a Tap button map: n/a Tap drag lock: n/a Left-handed: n/a Nat.scrolling: disabled Middle emulation: n/a Calibration: n/a Scroll methods: none Scroll button: n/a Scroll button lock: n/a Click methods: none Clickfinger button map: n/a Disable-w-typing: n/a Disable-w-trackpointing: n/a Accel profiles: n/a Rotation: 0.0 Area rectangle: n/a

Device: TOPS0102:00 35CC:0104 Touchpad Kernel: /dev/input/event13 Id: i2c:35cc:0104 Group: 5 Seat: seat0, default Size: 130x92mm 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: disabled Calibration: n/a Scroll methods: *two-finger edge Scroll button: n/a Scroll button lock: n/a Click methods: *button-areas clickfinger Clickfinger button map: left/right/middle Disable-w-typing: enabled Disable-w-trackpointing: enabled Accel profiles: flat *adaptive custom Rotation: n/a Area rectangle: n/a

尝试过修改启动内核参数 i2c_hid.reset_suspended=1 还有 ignore dmi ,都没用 偶尔冷启动能用手势,重启就没了,监听输入设备事件就只有左键触发,没有手势

10142 次点击
所在节点    Linux
6 条回复
Aixiaoa
6 月 8 日
我好像遇到了类似问题 我的设备是小新 pro14
1 偶发触摸板全部失灵
2 偶发双指手势失灵 可以单指移动光标 不能点击 没有双指滑动手势

我用的 omarchy 里面附带了一个重启触摸板的功能。我用这个可以恢复。但是觉得太麻烦 想着找个一劳永逸的办法
我在内核里改了参数 用了几天。暂时没出现问题了。

主要是我最近才有这问题。这系统装了挺久的了。之前都没问题。
richiewu
6 月 8 日
是的,一开始好好的,用着用着就出问题,我问大模型也改了一些启动参数没用
你改了哪些呢 @Aixiaoa
Aixiaoa
6 月 9 日
@richiewu 抱歉回复这么晚

我的修复方案是这个

第 1 步:创建新的 cmdline 内容(去掉冗余,加入 acpi_osi 伪装)
sudo sh -c 'printf " rtc_cmos.use_acpi_alarm=1 resume=/dev/mapper/root resume_offset=21427144 quiet splash cryptdevice=PARTUUID=11b635b3-5873-4e5a-bd2f-fd5b18017601:root root=/dev/mapper/root zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs acpi_osi=! acpi_osi=\"Windows 2015\"\n" > /tmp/new_cmdline.bin && dd if=/dev/zero bs=1 count=1 >> /tmp/new_cmdline.bin 2>/dev/null && truncate -s 302 /tmp/new_cmdline.bin'

第 2 步:用 objcopy 替换 UKI 中的 .cmdline 段
sudo objcopy --update-section .cmdline=/tmp/new_cmdline.bin /boot/EFI/Linux/omarchy_linux.efi /tmp/omarchy_linux_fixed.efi && sudo cp /tmp/omarchy_linux_fixed.efi /boot/EFI/Linux/omarchy_linux.efi

重启后触摸板应该就正常了。
原理:删除 cmdline 末尾的 90 字节重复参数,腾出空间加入 `acpi_osi=! acpi_osi="Windows 2015"`,让 BIOS 以为启动的是 Windows 10 ,从而暴露被隐藏的触摸板 I2C 端点。

以下是我用于测试的不重启办法
sudo sh -c 'echo "Windows 2015" > /sys/module/acpi/parameters/osi'

然后检查状态:
cat /sys/bus/acpi/devices/PNP0C50:00/status

如果返回 `15`( 0xF )就说明被 BIOS 隐藏的触摸板已经暴露出来了。


我描述一下我的情况供你参考
我的设备是小新 PRO14IHU 2021 ,内核版本 Linux 7.0.9-arch2-1 ,最近一段时间出现的这个问题,之前是正常的。

最开始我以为是电源管理把触摸板设备挂起的问题,禁用了电源管理但是未修复,重启后还是会失效,失效前有一小段时间可用,具体时长不固定。

但是我驱动复位重新初始化触摸板设备能修复失效问题,猜测和 omarchy 自带的重置触摸板功能应该是相同的,不过我并未去查看 omarchy 对这块的处理是啥。

后续出现失效,我的触摸板从启动就失效,ACPI 中没有触摸板存在。

我就去找有没有人和我碰见一样的情况,毕竟之前正常的。我认为应该是更新导致的问题。
在 CachyOS 的 issue 中找到了#817 ,其中提到内核 7.0.0 移除了针对特定硬件的 ACPI DMI quirk ,I2C 触摸板会被隐藏。和我的症状相符 (PNP0C50:00 的 _STA 返回 0),BIOS 对 Windows 返回 0xF (设备存在),对 Linux 返回 0 (隐藏)。
https://github.com/CachyOS/linux-cachyos/issues/817

希望我的办法能对你有用。
richiewu
6 月 9 日
@Aixiaoa 今天测试了确实能用了,我再观察几天,感谢
richiewu
6 月 10 日
@Aixiaoa 加了这两个参数,今天又不行了,还是间歇性抽风
[I] ricky@archlinux ~ [2]> cat /proc/cmdline
root=PARTUUID=be904e89-f55e-42ff-b346-7e1fa3ae992c zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs i2c_hid.reset_suspended=1 acpi_osi=! acpi_osi="Windows 2015" usbcore.autosuspend=-1
richiewu
6 月 26 日
国产触控板驱动就是依托答辩,还是换了妙控板解决了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1216141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX