Created attachment 277653 [details] dmesg output Recently purchased an Asus VivoBook K505ZA and 4.18 rc7 (nor 4.17.11) is finding my touchpad. Haven't even managed to find out what vendor the touchpad comes from, model, etc. so any guidance is appreciated. Attached is my dmesg output, xinput and lsusb are below. xinput: ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Asus Wireless Radio Control id=7 [slave keyboard (3)] ↳ Video Bus id=8 [slave keyboard (3)] ↳ Video Bus id=9 [slave keyboard (3)] ↳ Power Button id=10 [slave keyboard (3)] ↳ Sleep Button id=11 [slave keyboard (3)] ↳ USB2.0 VGA UVC WebCam: USB2.0 V id=12 [slave keyboard (3)] ↳ Asus WMI hotkeys id=13 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)] lsusb: Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 004: ID 8087:0a2b Intel Corp. Bus 003 Device 003: ID 0408:3050 Quanta Computer, Inc. Bus 003 Device 002: ID 058f:6254 Alcor Micro Corp. USB Hub Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Created attachment 277655 [details] kernel config Attached the kernel configuration I'm using as well. Most Asus laptops appear to have ELAN touchpads (at least when checking for existing kernel bugs), I've verified that I have the appropriate kernel modules enabled, in the event that the X505ZA uses that as well: CONFIG_MOUSE_PS2_ELANTECH=y CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y CONFIG_MOUSE_ELAN_I2C=m CONFIG_MOUSE_ELAN_I2C_I2C=y CONFIG_MOUSE_ELAN_I2C_SMBUS=y CONFIG_TOUCHSCREEN_ELAN=m CONFIG_HID_ELAN=m CONFIG_USB_FTDI_ELAN=m
I downloaded the Windows 10 drivers from http://dlcdnet.asus.com/pub/ASUS/nb/DriversForWin10/LAN/LAN_Realtek_Win10_64_VERV1002310032017.zip and item.txt specifies: Vendor:ASUS Category:Touchpad Module:ELAN/SA473I-12A4 I did a search for all ELAN listings, specifically checking for [VENDOR_ELAN_PTP], and it came up with the following two files: _A7991838325E4D8493540C65BD549AC7 _8D26F7BC5C7844BFA110CEF190584044 This listed off: ELAN1200 ELAN1201 ELAN1202 ELAN1203 ELAN1300 ELAN1301 ELAN2200 ELAN2201 ELAN2202 ELAN2300 ELAN2301 VID_04F3&PID_3067&MI_01&Col02
ls /sys/bus/i2c/devices ?
/sys/bus/i2c/devices ├── i2c-0 -> ../../../devices/platform/AMDI0010:01/i2c-0 ├── i2c-1 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-1 ├── i2c-2 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-2 ├── i2c-3 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-3 ├── i2c-4 -> ../../../devices/pci0000:00/0000:00:14.0/i2c-4 ├── i2c-5 -> ../../../devices/pci0000:00/0000:00:08.1/0000:03:00.0/i2c-5 ├── i2c-6 -> ../../../devices/pci0000:00/0000:00:08.1/0000:03:00.0/i2c-6 └── i2c-7 -> ../../../devices/pci0000:00/0000:00:08.1/0000:03:00.0/i2c-7
OK, so it is not Elan I2C controller and it does not look like I2C HID device either... Unless there is another I2C master for which there is no driver. Maybe if you post disassembled DSDT we could figure out what device it is.
> Maybe if you post disassembled DSDT we could figure out what device it is. That all went over my head, could you ELI5?
You probably need to install acpica-tools package, then mkdir tmp; cd tmp sudo acpidump -b iasl -d dsdt.dat and post dsdt.dsl Also, why are you booting with i8042.nopnp? Can I see dmesg without it? Also, canyou try i8042.nomux with and without i8042.reset please.
Created attachment 277677 [details] i8042 nomux Yea sorry, I was just reading up on possible solutions that were reported and attempted with the nopnp option. I've removed it, here's the dmesg with only i8042.nomux. I'll get you the other info shortly.
Created attachment 277679 [details] dsdt dsl
I found reference to AMDI0011, which apparently on a Dell Latitude system is used to connect up the touchpad. Immediate search brought up https://bugs.launchpad.net/ubuntu/+source/linux-oem/+bug/1773940, trying to find the patch for that (if needed, unless it's already landed in the kernel?).
Ported over the patches provided via: - https://lists.ubuntu.com/archives/kernel-team/2018-June/093509.html - https://lists.ubuntu.com/archives/kernel-team/2018-June/093510.html - https://lists.ubuntu.com/archives/kernel-team/2018-June/093511.html - https://lists.ubuntu.com/archives/kernel-team/2018-June/093512.html And unfortunately my device is still not functional :\
Tried with the following patches (from July) against 4.18 rc8, no change: - https://lists.ubuntu.com/archives/kernel-team/2018-July/093951.html - https://lists.ubuntu.com/archives/kernel-team/2018-July/093952.html - https://lists.ubuntu.com/archives/kernel-team/2018-July/093953.html This is with CONFIG_I2C_AMD_MP2=y set
Reached out to ASUS support on Facebook, they reported that the touchpad in my laptop should be an ELAN/SA473I-12A6.
So the touchpad, according to DSDT, should be handled by i2c-hid + hid-multitouch driver. However you need to get your I2C controller working, I'd try reaching to the AMD guys who authored the patches in question and asked them for help.
Actually the patch was sent to ML, but maintainers haven't reviewed it. https://patchwork.kernel.org/patch/10597369/
Hey Kai-Heng Feng, Unfortunately with your patch (against 4.19-rc4) my touchpad still does not function. Is there any sort of information I could provide you to help determine the root cause (whether it's the controller, the Elantech touchpad, etc.)?
Can you attach full dmesg and kernel config?
Created attachment 278689 [details] dmesg output (4.19-rc4) Here's the dmesg output.
Created attachment 278691 [details] kernel config (4.19-rc4) And here's the kernel config
It's likely that the touchpad connects to AMDI0010 instead of AMDI0011. Please try CONFIG_PINCTRL_AMD=y.
Created attachment 278695 [details] dmesg output (4.19-rc4 with CONFIG_PINCTRL_AMD=y set) Recompiled with CONFIG_PINCTRL_AMD=y set. No change.
Can you attach `udevadm info -e`? Thanks!
Created attachment 278697 [details] udevadm info -e output Here's the output from udevadm info -e
The one with PNP0C50 is under I2CD, which is AMDI0010. The system doesn't think PNP0C50 exists. You need to change the _STA under PNP0C50 to return 0x0f, From: Method (_STA, 0, NotSerialized) // _STA: Status { If (((TPIF != One) || (DSYN && One))) { Return (Zero) } Return (0x0F) } To: Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) } And use the newly patched dsdt.
Any chance you can link documentation on how I can patch and apply said patched DSDT? Newbie here.
https://01.org/linux-acpi/documentation/overriding-dsdt
Holy smokes, after following your instructions (and the documentation you link) I can confirm that my touchpad now works. Your assistance, as well as Dmitry's, is greatly appreciated. Is there any way I can raise this issue with Asus so broader Linux support / compatibility can be implemented?
(In reply to Joshua Strobl from comment #27) > Holy smokes, after following your instructions (and the documentation you > link) I can confirm that my touchpad now works. > > Your assistance, as well as Dmitry's, is greatly appreciated. Is there any > way I can raise this issue with Asus so broader Linux support / > compatibility can be implemented? Assuming Asus is the right upstream to raise this with, of course.
Yes this issue belongs to Asus. Somehow (TPIF != One) || (DSYN && One) evaluates to true, I guess they intended to write (DSYN & One) instead of (DSYN && One).
Have you tested the latest BIOS (306)?
Can confirm that with BIOS revision 306 it does work. Considering this issue resolved, thank you for all your hard work helping to debug this issue. Will give you or Dmitry the luxury of marking this resolved :D
With pleasure ;)