Hello,
since I've upgraded my BIOS to a recent version, the touchpad on my laptop isn't recognized anymore. I suspect that Lenovo did change some id or specifier, that causes the touchpad to be thrown in the wrong driver category.
I am using kernel 5.15.0-rc4 on Archlinux. My hardware is Lenovo Ideapad Flex 3 11ADA05. The touchpad is from ELAN/MSFT00001? (04F3:3072). Before the mentioned BIOS upgrade, the touchpad was working with the default Archlinux kernel. Also it is currently functional while running a Windows OS. I have an old log output from dmesg [1]. I tried the following things to troubleshoot this issue:
- Boot without hid_multitouch, hid_elants, i2c_hid, i2c_hid_acpi
- Boot with CONFIG_MOUSE_ELAN_I2C & co.
- Boot with blacklisting init calls and modules (see links below)
- Tinker with i2cdetect (nothing valuable)
The touchscreen is at AMDI0010:00, the touchpad is at AMDI0010:01. While collecting i2c debug messages, I've found out that the client on the adapter does not register. The touchscreen is registering successfully, even when the corresponding multitouch drivers are missing (hid-multitouch, hid-elants). (Bare with me, since I'm just guessing things)
# The touchscreen (ok):
i2c_designware AMDI0010:00: using lookup tables for GPIO lookup
i2c_designware AMDI0010:00: No GPIO consumer scl found
i2c i2c-0: adapter [Synopsys DesignWare I2C adapter] registered
i2c i2c-0: client [ELAN238E:00] registered with bus id i2c-ELAN238E:00
# The touchpad (not ok):
i2c_designware AMDI0010:01: using lookup tables for GPIO lookup
i2c_designware AMDI0010:01: No GPIO consumer scl found
i2c i2c-1: adapter [Synopsys DesignWare I2C adapter] registered
Maybe the wrong driver is selected? Excerpt from hwinfo:
P: /devices/platform/AMDI0010:01
L: 0
E: DEVPATH=/devices/platform/AMDI0010:01
E: SUBSYSTEM=platform
E: DRIVER=i2c_designware
E: MODALIAS=acpi:AMDI0010:
E: USEC_INITIALIZED=10263200
E: ID_VENDOR_FROM_DATABASE=Amdek Corporation
E: ID_PATH=platform-AMDI0010:01
E: ID_PATH_TAG=platform-AMDI0010_01
P: /devices/platform/AMDI0010:01/MSFT0001:00
L: 0
E: DEVPATH=/devices/platform/AMDI0010:01/MSFT0001:00
E: SUBSYSTEM=platform
E: MODALIAS=acpi:MSFT0001:PNP0C50:
E: USEC_INITIALIZED=10266881
E: ID_VENDOR_FROM_DATABASE=M-Systems Flash Disk Pioneers
E: ID_PATH=platform-MSFT0001:00
E: ID_PATH_TAG=platform-MSFT0001_00
P: /devices/platform/AMDI0010:01/i2c-1
L: 0
E: DEVPATH=/devices/platform/AMDI0010:01/i2c-1
E: SUBSYSTEM=i2c
Similiar bugs and resources:
https://bugzilla.kernel.org/show_bug.cgi?id=207759https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1861610/+indexhttps://patchwork.kernel.org/project/linux-input/patch/20180405132537.3218-7-benjamin.tissoires@redhat.com/https://lore.kernel.org/linux-input/000201d5a8bd$9fead3f0$dfc07bd0$@emc.com.tw/
I'll also attach my current running config [2], a current dmesg [3], a current hwinfo [4] and also an acpidump [5], since it was wished for at other similiar bugs.
[1] https://op.xn--bimann-cta.de/bug/2021-09-19_journalctl.txt
[2] https://op.xn--bimann-cta.de/bug/running_config.txt
[3] https://op.xn--bimann-cta.de/bug/2021-10-15_dmesg.txt
[4] https://op.xn--bimann-cta.de/bug/hwinfo.txt
[5] https://op.xn--bimann-cta.de/bug/acpidump.lenovo-Ideapad-Flex-3-11ADA05.txt
Best,
Fabian
Hi,
On Fri, Oct 15, 2021 at 04:47:14PM +0200, naib@bißmann.de wrote:
Hello,
since I've upgraded my BIOS to a recent version, the touchpad on my laptop isn't recognized anymore. I suspect that Lenovo did change some id or specifier, that causes the touchpad to be thrown in the wrong driver category.
I am using kernel 5.15.0-rc4 on Archlinux. My hardware is Lenovo Ideapad Flex 3 11ADA05. The touchpad is from ELAN/MSFT00001? (04F3:3072). Before the mentioned BIOS upgrade, the touchpad was working with the default Archlinux kernel. Also it is currently functional while running a Windows OS. I have an old log output from dmesg [1]. I tried the following things to troubleshoot this issue:
- Boot without hid_multitouch, hid_elants, i2c_hid, i2c_hid_acpi
- Boot with CONFIG_MOUSE_ELAN_I2C & co.
- Boot with blacklisting init calls and modules (see links below)
- Tinker with i2cdetect (nothing valuable)
The touchscreen is at AMDI0010:00, the touchpad is at AMDI0010:01. While collecting i2c debug messages, I've found out that the client on the adapter does not register. The touchscreen is registering successfully, even when the corresponding multitouch drivers are missing (hid-multitouch, hid-elants). (Bare with me, since I'm just guessing things)
# The touchscreen (ok):
i2c_designware AMDI0010:00: using lookup tables for GPIO lookup
i2c_designware AMDI0010:00: No GPIO consumer scl found
i2c i2c-0: adapter [Synopsys DesignWare I2C adapter] registered
i2c i2c-0: client [ELAN238E:00] registered with bus id i2c-ELAN238E:00
# The touchpad (not ok):
i2c_designware AMDI0010:01: using lookup tables for GPIO lookup
i2c_designware AMDI0010:01: No GPIO consumer scl found
i2c i2c-1: adapter [Synopsys DesignWare I2C adapter] registered
Since we do not see I2C client being registered in the case of touchpad
I'd start tracing drivers/i2c/i2c-core-acpi.c, functions
i2c_acpi_add_device() and i2c_acpi_get_info() to see where the failure
is. I guess the changes made ACPI descriptions not match with what Linux
expects.
Thanks.
--
Dmitry
Thanks for helping me.
On Fri, Oct 15, 2021 at 02:32:13PM -0700, Dmitry Torokhov wrote:
quoted
# The touchscreen (ok):
i2c_designware AMDI0010:00: using lookup tables for GPIO lookup
i2c_designware AMDI0010:00: No GPIO consumer scl found
i2c i2c-0: adapter [Synopsys DesignWare I2C adapter] registered
i2c i2c-0: client [ELAN238E:00] registered with bus id i2c-ELAN238E:00
# The touchpad (not ok):
i2c_designware AMDI0010:01: using lookup tables for GPIO lookup
i2c_designware AMDI0010:01: No GPIO consumer scl found
i2c i2c-1: adapter [Synopsys DesignWare I2C adapter] registered
Since we do not see I2C client being registered in the case of touchpad
I'd start tracing drivers/i2c/i2c-core-acpi.c, functions
i2c_acpi_add_device() and i2c_acpi_get_info() to see where the failure
is. I guess the changes made ACPI descriptions not match with what Linux
expects.
I have enabled tracing via kernel parameters. Solely enabling i2c_acpi_add_device and i2c_acpi_get_info generates no output. Output for "ftrace=function ftrace_filter=i2c_acpi_*" is at [1]. I have also generated a version with the option func_stack_trace enabled, but I don't think that it worked, since the output has'nt changed that much: "ftrace=function ftrace_filter=i2c_acpi_* trace_options=print-parent,trace_printk,annotate,context-info,record-cmd,overwrite,irq-info,markers,function-trace,func_stack_trace" [2]. To correlate entries I'll also supply a dmesg buffer output [3] from the same boot.
While testing with different ftrace setups I've noticed that sometimes the touchscreen is not working. Looking at dmesg output [4] there seems to be an error while probing for it. As of [5]: "The duplicate WMI GUIDs are used for the binary MOF file of a _WDG entry in the ASL". To concentrate on the trackpad and not mix things up, I'd ignore these errors for the moment.
I'll continue reading through different docs of ftrace, to generate more usable output.
[1] https://op.xn--bimann-cta.de/bug/2021-10-16_trace.txt
[2] https://op.xn--bimann-cta.de/bug/2021-10-17_trace.txt
[3] https://op.xn--bimann-cta.de/bug/2021-10-17_dmesg.txt
[4] https://op.xn--bimann-cta.de/bug/touchscreen_errors.txt
[5] https://lkml.org/lkml/2017/12/8/914