Bug 208547
Summary: | ELAN1205 touchpad is not working on ASUS G15 | ||
---|---|---|---|
Product: | Drivers | Reporter: | Alexei (an) |
Component: | I2C | Assignee: | drivers_input-devices |
Status: | NEW --- | ||
Severity: | normal | CC: | an, dmitry.torokhov, jamesonline91, kernel.20.deepb, wang7x |
Priority: | P1 | ||
Hardware: | x86-64 | ||
OS: | Linux | ||
Kernel Version: | 5.8.0-rc6 | Subsystem: | |
Regression: | No | Bisected commit-id: | |
Attachments: |
dmesg
dmidecode input devices 5.8.0-rc6-1-mainline dmesg |
Created attachment 290267 [details]
dmidecode
Created attachment 290269 [details]
input devices
For some reason, I can't make "modprobe i2c_hid debug=1" debug messages to show. But adding 'i2c-hid.dyndbg=+p' kernel option added new message: [ 4.838769] i2c_hid i2c-ELAN1205:00: supply vdd not found, using dummy regulator [ 4.838783] i2c_hid i2c-ELAN1205:00: supply vddl not found, using dummy regulator *[ 4.838887] i2c_hid i2c-ELAN1205:00: nothing at this address: -121* And want to add observation about udevadm monitor output while removing+adding i2c_hid module: KERNEL[398.302991] remove /bus/i2c/drivers/i2c_hid (drivers) KERNEL[398.303037] remove /module/i2c_hid (module) UDEV [398.304991] remove /bus/i2c/drivers/i2c_hid (drivers) UDEV [398.305579] remove /module/i2c_hid (module) KERNEL[398.369281] add /module/i2c_hid (module) KERNEL[398.369473] add /devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03/ELAN1205:00/wakeup/wakeup50 (wakeup) UDEV [398.370121] add /module/i2c_hid (module) UDEV [398.370769] add /devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03/ELAN1205:00/wakeup/wakeup50 (wakeup) KERNEL[398.370954] remove /devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03/ELAN1205:00/wakeup/wakeup50 (wakeup) KERNEL[398.371066] add /bus/i2c/drivers/i2c_hid (drivers) UDEV [398.371942] remove /devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03/ELAN1205:00/wakeup/wakeup50 (wakeup) UDEV [398.372218] add /bus/i2c/drivers/i2c_hid (drivers) Created attachment 290385 [details]
5.8.0-rc6-1-mainline dmesg
Upgraded to the 5.8.0-rc6-1-mainline. Still the same massage in dmesg.
Same problem, upgrade to kernel 5.7.11, still not working. Having the same error on the latest 5.9rc3 kernel. How can I debug it? I did read some kernel documentation on i2c but it didn't came a long way for me. # hwinfo shows this data for ELAN: P: /devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03/ELAN1205:00 L: 0 E: DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:03/ELAN1205:00 E: SUBSYSTEM=acpi E: MODALIAS=acpi:ELAN1205:PNP0C50: E: USEC_INITIALIZED=5509997 E: ID_VENDOR_FROM_DATABASE=ELAD srl But i2c_hid module still reports [ 5.611799] i2c_hid i2c-ELAN1205:00: nothing at this address: -121 So, I did try i2c-tools # i2cdetect -l i2c-3 i2c AMDGPU DM aux hw bus 0 I2C adapter i2c-1 i2c AMDGPU DM i2c hw bus 0 I2C adapter i2c-8 i2c NVIDIA i2c adapter 1 at 1:00.0 I2C adapter i2c-6 smbus SMBus PIIX4 adapter port 2 at 0b00 SMBus adapter i2c-4 i2c NVIDIA GPU I2C adapter I2C adapter i2c-2 i2c AMDGPU DM i2c hw bus 1 I2C adapter i2c-0 i2c Synopsys DesignWare I2C adapter I2C adapter i2c-9 i2c NVIDIA i2c adapter 7 at 1:00.0 I2C adapter i2c-7 smbus SMBus PIIX4 adapter port 1 at 0b20 SMBus adapter i2c-5 smbus SMBus PIIX4 adapter port 0 at 0b00 SMBus adapter # i2cdetect -r -a 0 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-0 using receive byte commands. I will probe address range 0x00-0x7f. Continue? [Y/n] 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: 00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- but i2cdump reports some strange data # i2cdump -a 0 0x00 No size specified (using byte-data access) WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-0, address 0x0, mode byte Continue? [Y/n] 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 10: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 20: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 30: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 40: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 50: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 60: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 70: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 80: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? 90: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? a0: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? b0: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? c0: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? d0: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? e0: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? f0: 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b 0b ???????????????? Currently on kernel 5.8.14, I've noticed that i2cdump -a 0 0x00 actually works and shows data from the touchpad. 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef 00: 10 04 c8 84 a4 01 37 00 10 04 c8 7b 5c 01 37 00 ??????7.???{\?7. 10: 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 20: ff 10 04 c8 7b a2 01 37 00 00 ff ff ff ff ff ff .???{??7........ 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 40: ff ff ff ff ff ff ff ff ff ff 10 04 c8 78 f2 01 ..........???x?? 50: 37 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff 7............... 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 70: ff ff ff ff ff 10 04 c8 76 38 01 37 00 00 ff ff .....???v8?7.... 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ a0: ff ff ff ff 10 04 c8 76 88 01 37 00 00 ff ff ff ....???v??7..... b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ c0: ff ff ff ff ff ff ff ff 10 04 c8 73 ce 01 37 00 ........???s??7. d0: 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ f0: ff ff ff ff ff ff ff ff ff 10 04 c8 72 32 01 37 .........???r2?7 data changes each time I move finger on the touchpad, but the error is the same. i2c_hid i2c-ELAN1205:00: nothing at this address: -121 I found this code: /* Make sure there is something at this address */ ret = i2c_smbus_read_byte(client); if (ret < 0) { dev_dbg(&client->dev, "nothing at this address: %d\n", ret); ret = -ENXIO; goto err_regulator; } and as I don't have any experience in C debugging, I added some additional debug messages: /* Make sure there is something at this address */ ret = i2c_smbus_read_byte(client); if (ret < 0) { dev_dbg(&client->dev, "nothing at this address: %d\n", ret); dev_dbg(&client->dev, "Client adapter name: %s\n", client->adapter->name); dev_dbg(&client->dev, "Client address: %d\n", client->addr); dev_dbg(&client->dev, "Client name: %s\n", client->name); ret = -ENXIO; goto err_regulator; } and noticed that i2c tries to work with different address: [ 6.187446] drivers/hid/i2c-hid//i2c-hid-core.c: HID probe called for i2c 0x15 [ 6.187618] i2c_hid i2c-ELAN1205:00: supply vdd not found, using dummy regulator [ 6.187631] i2c_hid i2c-ELAN1205:00: supply vddl not found, using dummy regulator [ 6.188877] i2c_hid i2c-ELAN1205:00: nothing at this address: -121 [ 6.188880] i2c_hid i2c-ELAN1205:00: Client adapter name: Synopsys DesignWare I2C adapter [ 6.188881] i2c_hid i2c-ELAN1205:00: Client address: 21 [ 6.188882] i2c_hid i2c-ELAN1205:00: Client name: ELAN1205:00 When I use and test i2cdump, I use adapter 0 and address 0x00, but somehow i2c-hid wants to work with a different address but with a correct bus. I am facing the same issues. Any help would be appreciated. Also, is there way we can debug this issue? What if you comment out call to i2c_smbus_read_byte()? (In reply to Dmitry Torokhov from comment #9) > What if you comment out call to i2c_smbus_read_byte()? Hello, sorry for a late reply. That was also the first idea of mine. But it doesn't work. ret = i2c_hid_init_irq(client); if (ret < 0) goto err_regulator; next- this function produces the error. hid = hid_allocate_device(); if (IS_ERR(hid)) { ret = PTR_ERR(hid); goto err_irq; } than this one if previous is commented. And than without hid allocation the rest is just not working. Also I was trying to go through client structure to set the address manually before calling and checking it. With no success in compiling the code and making it run. I suppose because of lack in C programming skills. While reading i2c documentation I found out that 0x00 address is a broadcast i2c address. From what I understand - no device can be registered on 0x00 address. Is it possible to get i2c address from Windows? I walked through Asus Precision driver and HID device in device manager with no success. Also it is not possible to add or remove this address: # echo ELAN1205 0x15 > /sys/bus/i2c/devices/i2c-0/new_device echo: write error: Device or resource busy dmesg: i2c i2c-0: Failed to register i2c client ELAN1205 at 0x15 (-16) # echo 0x15 > /sys/bus/i2c/devices/i2c-0/delete_device echo: write error: No such file or directory dmesg: i2c i2c-0: delete_device: Can't find device in list |
Created attachment 290265 [details] dmesg Hello, I have a new Laptop since kernel 5.7.2-arch1-1. Now I'm using 5.8.0-rc5-mainline and the touchpad is still not working. Laptop manufacturer: Asus Model: ROG-Zephyrus-G15 GA502IV BIOS fastboot is disabled. No hardware issue with the touchpad. It works in Windows (have dual-boot) It looks like kernel recognizes the touchpad but doesn't enable it. # dmesg | grep -i elan [ 4.830134] i2c_hid i2c-ELAN1205:00: supply vdd not found, using dummy regulator [ 4.830150] i2c_hid i2c-ELAN1205:00: supply vddl not found, using dummy regulator No input device is added in /proc/bus/input/devices => no xinput device is present.