Skip to content

Instantly share code, notes, and snippets.

@sahapasci
Last active December 7, 2025 08:13
Show Gist options
  • Select an option

  • Save sahapasci/6854f396ecdebfd432a4199f09233ee9 to your computer and use it in GitHub Desktop.

Select an option

Save sahapasci/6854f396ecdebfd432a4199f09233ee9 to your computer and use it in GitHub Desktop.
ELAN I2C Touchpad Click Fix (Linux / Debian / Lenovo ThinkBook)

ELAN I2C Touchpad Click Fix (Lenovo ThinkBook / Linux)

This document describes an issue with ELAN I2C touchpads on Lenovo ThinkBook laptops running Linux (Debian 13 in this case), where tap works but physical click does not, and how it was resolved using an automatic unbind/bind systemd service.

1. Problem Summary

On certain Lenovo ThinkBook models, the ELAN touchpad appears as both a Mouse and a Touchpad:

ELAN06FA:00 04F3:327E Mouse
ELAN06FA:00 04F3:327E Touchpad

However, the click button events are missing.
Testing with evtest confirmed:

  • No click events from the Mouse device
  • No click events from the Touchpad device

Tapping works, cursor moves, gestures work — only physical clicks fail.

This happens because the device sometimes loads with an incomplete HID report descriptor at boot.


2. Manual Fix: Unbind / Bind

Resetting the I2C HID device restores full functionality:

echo -n "i2c-ELAN06FA:00" > /sys/bus/i2c/drivers/i2c_hid_acpi/unbind
sleep 0.5
echo -n "i2c-ELAN06FA:00" > /sys/bus/i2c/drivers/i2c_hid_acpi/bind

After doing this, click events immediately start working.

3. Automatic Fix: systemd Service

Create the script:

/usr/local/bin/elan-touchpad-reset.sh:

#!/bin/bash

# Automatically detect ELAN I2C device under i2c_hid_acpi
DEVICE=$(ls /sys/bus/i2c/drivers/i2c_hid_acpi | grep -E '^i2c-ELAN')

if [ -n "$DEVICE" ]; then
    echo "Resetting $DEVICE"
    echo -n "$DEVICE" > /sys/bus/i2c/drivers/i2c_hid_acpi/unbind
    sleep 0.5
    echo -n "$DEVICE" > /sys/bus/i2c/drivers/i2c_hid_acpi/bind
fi

Make it executable:

sudo chmod +x /usr/local/bin/elan-touchpad-reset.sh

Create the service:

/etc/systemd/system/elan-touchpad-reset.service:

[Unit]
Description=Reset ELAN I2C Touchpad on Boot
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/elan-touchpad-reset.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Enable + start:

sudo systemctl daemon-reload
sudo systemctl enable elan-touchpad-reset.service
sudo systemctl start elan-touchpad-reset.service

4. Hardware Path Example (from this system)

For reference, the ELAN device appeared here:

/sys/bus/i2c/drivers/i2c_hid_acpi/i2c-ELAN06FA:00

5. Result

After enabling the service, the touchpad click works reliably after every boot.

This issue is caused by the ELAN firmware sending incomplete HID data during early boot; reloading the I2C HID driver restores proper initialization. Windows uses ELAN’s vendor driver and does not experience this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment