Ubuntu – ELAN Touchpad not working on Lenovo Thinkbook with Ubuntu 18.04

18.04kernellenovotouchpad

I bought a Lenovo Thinkbook (Intel i5 10th generation) just last week. I installed ubuntu 18.04. The touchpad hasnt been working ever since. I have not checked it on Windows, as I bought a DOS machine and put ubuntu on it,

Kernel is 5.3.0-26-generic #28~18.04.1-Ubuntu.

I have followed links from here:
Lenovo IdeaPad 330 touchpad not working and https://itsfoss.com/update-firmware-ubuntu/ which talk about upgrading firmware. When I did "sudo fwupdmgr update", nothing showed up.

I also see that one of the above links asks to modify kernel, but I am not sure thats the right thing to do as I have a kernel which is beyond 4.18. The link also claims that Ubuntu 18.04 should not have this problem. But, I have this problem.

When I do a sudo acpidump | grep -C3 ELAN, I get the following

33230: 0F 00 03 04 49 4E 54 31 70 0A 20 49 44 41 44 A4  ....INT1p. IDAD.
 33240: 84 53 42 46 53 53 42 46 49 00 5B 82 4D 0D 54 50  .SBFSSBFI.[.M.TP
 33250: 44 32 08 5F 41 44 52 00 08 49 44 41 44 00 08 48  D2._ADR..IDAD..H
 33260: 49 44 32 00 08 5F 48 49 44 0D 45 4C 41 4E 30 36  ID2.._HID.ELAN06
 33270: 32 46 00 08 5F 43 49 44 0D 50 4E 50 30 43 35 30  2F.._CID.PNP0C50
 33280: 00 08 5F 55 49 44 01 14 46 04 5F 44 53 4D 04 A0  .._UID..F._DSM..
 33290: 37 93 68 11 13 0A 10 F7 F6 DF 3C 67 42 55 45 AD  7.h.......<gBUE

When I type in dmesg | grep i2c, I get:

[    1.792338] i2c /dev entries driver

When I type dmesg | grep elan, I get nothing on the terminal.

I have run out of ideas. I have tried all that I could. Any suggestions would be of great help.

Best Answer

  • It looks like your specific Elan touchpad (Elan 062F) can be fixed by following the steps in this thread here

    The comment which fixes your problem is this

    This Lenovo machine that I'd purchased also has the same issue, but with a different touchpad model.

    Try these steps mentioned in the thread and let me know if it works for you.:

    1. Disassemple the current dsdt ACPI table (see this link):
    mkdir -p /tmp/acpitables
    cd /tmp/acpitables
    sudo acpidump > acpidump.out
    acpixtract -a acpidump.out
    iasl -d dsdt.dat
    

    In my case the output dsdt.dsl file contained some invalid error output lines at the very beginning which I just removed. Otherwise, the compiling in step 4 results in errors.

    1. Apply this patch to dsdt.dsl (see this link):
    - Name (_HID, "XXXX0000") // _HID: Hardware ID
    + Name (_HID, "ELAN062F") // _HID: Hardware ID
    
    1. Create an assembler source file out of the patched dsdt.dsl:
    iasl -sa dsdt.dsl
    
    1. Create a CPIO archive to be loaded by the bootloader (see this link):
    mkdir -p kernel/firmware/acpi
    cp dsdt.aml ssdt1.aml kernel/firmware/acpi
    find kernel | cpio -H newc --create > acpi_override
    sudo cp acpi_override /boot
    
    1. Install the patched dsdt file (see this link):
    cpio --extract < ./acpi_override
    cp kernel/firmware/acpi/dsdt.aml /boot/fixed_dsdt.aml
    

    and Create or update /boot/grub/custom.cfg to contain acpi /fixed_dsdt.aml