Elantech touchpad does not work (i2c-hid)

TL;DR; WTF!?

  1. MS created a new protocol, HID over I2C. Neither MS nor touchpad manufacturers actually follow the specs.

  2. As a result, many touchpads that require the new protocol don't work well with the Linux kernel module i2c-hid. Sometimes kernel updates can resolve the problem (or cause it to return).

  3. If possible, disable HID over I2C. On some computers, the setting may be in BIOS. But on other computers, the setting may changed only from within Windows.

  4. Sometimes rebooting or switching the touchpad on and off can help. Sometimes detaching the touchpad, as on an MS Surface or Acer Switch Alpha, can get it working again.


The underlying problem is HID over I2C, an input device protocol created by Microsoft and first used in Windows 8. Because device manufacturers often don't read, or perhaps intentionally don't follow, specs, Microsoft has put a lot of little quirks into the driver to make it work. Or perhaps, it's the other way around? Microsoft has a lot of quirks in the driver so manufacturers cannot follow specs if they are to expect their devices to work (on Windows, until there is one of those "Creator" updates -- so named because they create new, never-before-seen bugs).

On Linux, the kernel module that handles this protocol is i2c-hid. People have varying degrees of success getting the touchpad to work by changing or patching kernels because fixing the driver for one device can break another device. If you find a kernel for which this device works and have no other problems, freeze that version immediately. Never uninstall new kernels unless you have two or more consecutive kernels for which the touchpad consistently works because the touchpad has quantum circuits that activate quarky behavior when it detects the number of stable kernels you have installed is less than or greater than 1.4142, plus-or-minus a counter-anti-counterclockwise spin, which is a single spin in three independent directions, simultaneously. (Such puzzles are not for us to question.)

A potential solution is to turn off HID over I2C in BIOS. There is no consistent name for this setting. It may be tied to some other setting, like EFI. It might be doable only from within Windows. It may be impossible. Consider performing a ritual in which plenty of alcohol is imbibed before attempting this. If this setting can be disabled, the psmouse kernel module will take care of the touchpad.

But sometimes you have to turn on HID over I2C. The nature of these devices is they may not work properly with the psmouse module. Sometimes it is helpful to perform ancient rituals in which sacred, so-called four-letter, words are shouted and while the computer is rebooted or the touchpad on-off switch is pressed multiple times in a pattern that is pleasing to the gods of computation. If that does not work, the hopeless sometimes receive answers to their prayers upon ripping the touchpad from the rest of the computer.

We must be vigilant in these trying times. As we continue our Exodus, may our prayers be heard so that we may someday see freedom from the reign of MS.