Comment 66 for bug 1861610

Revision history for this message
Ferenc Szabo (ferenc-szabo) wrote :

At last I have a working touchpad on my Lenovo ThinkBook 15 IIL!! :)

Ubuntu 20.04
Kernel: 5.4.0-42-generic

Steps to fix:

Do it as root:
$ sudo su
# apt update
# apt install acpidump iasl cpio
# cd /tmp

Get and disassemble the original acpi table:
  # acpidump -b
  # iasl -d dsdt.dat

Edit /tmp/dsdt.dsl:
 - Search the HID of the touch pad: ELAN0634
 - Search the next _STA method declaration (line 38922 in my case) and comment out these four lines:

  Method (_STA, 0, NotSerialized)  // _STA: Status
  {
      //If ((TPVD == 0x45))
      //{
          Return (0x0F)
      //}
      //Return (Zero)
  }

Probably the kernel calls the _STA method before the _REG method, so the TPVD not yet initialized here.

Increment the version number. It’s the last parameter of the DefinitionBlock (line 21 for me):
  DefinitionBlock ("", "DSDT", 2, "LENOVO", "ICL     ", 0x20170002)

Compile the dsl file:
  # iasl -sa dsdt.dsl

Create initrd archive:
  # mkdir -p kernel/firmware/acpi
  # mv dsdt.aml kernel/firmware/acpi
  # find kernel | cpio -H newc --create > /boot/acpi_fixed.cpio

Unfortunately the GRUB_EARLY_INITRD_LINUX_CUSTOM parameter in the /etc/default/grub config file results in a messy output and non booting system, so we need to create a custom script in /etc/grub.d directory instead.

create and edit: /etc/grub.d/50_acpi_patch
copy these lines into it:

  #!/bin/sh
  sed -i -E 's/^(\s+initrd\s+)(.*)$/\1\/acpi_fixed.cpio \2/g' /boot/grub/grub.cfg.new

Make it executable:
  # chmod +x /etc/grub.d/50_acpi_patch

Update grub config:
  # update-grub

Edit /etc/modprobe.d/blacklist.conf. Add these lines to the end of the file:

  #Allow module elan_i2c to control the touch pad
  blacklist i2c_hid

Reboot:
  # reboot

Be happy!