Skip to content

Surface Laptop Go: touchpad reports incorrect touch contact count after resume (MELF0411 1FD2:9005) #2048

@jhjessup

Description

@jhjessup

Hardware: Microsoft Surface Laptop Go
Kernel: 6.18.7-surface-1
OS: Debian (linux-surface kernel)

Description

After resuming from suspend (s2idle), the touchpad misreports touch contact count by one: two-finger gestures are interpreted as one-finger, three-finger as two-finger. The issue persists until the i2c_hid_acpi driver is manually re-bound, which fully resolves it:

echo i2c-MELF0411:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/unbind
sleep 0.5
echo i2c-MELF0411:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/bind

Root Cause (observed)

At boot, the device returns an incorrect report size for feature 4:

i2c_hid_acpi i2c-MELF0411:00: device returned incorrect report (209 vs 4 expected)
hid-multitouch 0018:1FD2:9005.0001: failed to fetch feature 4

The resume path is completely silent for this device — no reinitialization is attempted across multiple suspend/resume cycles. The degraded state from boot is inherited after every resume. Multiple suspend/resume cycles in the kernel log confirm no touchpad messages appear at resume. Feature 4 is present in the HID descriptor and appears to configure contact reporting mode. Without it, hid-multitouch operates with an off-by-one contact count.

HID Descriptor

00000000: 050d 0904 a101 8510 0954 7508 9501 1500  .........Tu.....
00000010: 250a 8102 0922 a102 0951 7508 250a 8102  %...."...Qu.%...
00000020: 0942 7501 2501 8102 9507 8103 0501 7510  .Bu.%.........u.
00000030: 9501 26ff 0f35 0055 0e65 1109 3046 470a  ..&..5.U.e..0FG.
00000040: 8102 0931 46da 0681 0245 00c0 050d 0922  ...1F....E......"
00000050: a102 0951 7508 250a 8102 0942 7501 2501  ...Qu.%....Bu.%.
00000060: 8102 9507 8103 0501 7510 9501 26ff 0f35  ........u...&..5
00000070: 0055 0e65 1109 3046 470a 8102 0931 46da  .U.e..0FG....1F.
00000080: 0681 0245 00c0 050d 0922 a102 0951 7508  ...E....."...Qu.
00000090: 250a 8102 0942 7501 2501 8102 9507 8103  %....Bu.%.......
000000a0: 0501 7510 9501 26ff 0f35 0055 0e65 1109  ..u...&..5.U.e..
000000b0: 3046 470a 8102 0931 46da 0681 0245 00c0  0FG....1F....E..
000000c0: 050d 0922 a102 0951 7508 250a 8102 0942  ..."...Qu.%....B
000000d0: 7501 2501 8102 9507 8103 0501 7510 9501  u.%.........u...
000000e0: 26ff 0f35 0055 0e65 1109 3046 470a 8102  &..5.U.e..0FG...
000000f0: 0931 46da 0681 0245 00c0 050d 0922 a102  .1F....E......"..
00000100: 0951 7508 250a 8102 0942 7501 2501 8102  .Qu.%....Bu.%...
00000110: 9507 8103 0501 7510 9501 26ff 0f35 0055  ......u...&..5.U
00000120: 0e65 1109 3046 470a 8102 0931 46da 0681  .e..0FG....1F...
00000130: 0245 00c0 050d 0922 a102 0951 7508 250a  .E....."...Qu.%.
00000140: 8102 0942 7501 2501 8102 9507 8103 0501  ...Bu.%..........
00000150: 7510 9501 26ff 0f35 0055 0e65 1109 3046  u...&..5.U.e..0F
00000160: 470a 8102 0931 46da 0681 0245 00c0 050d  G....1F....E....
00000170: 0922 a102 0951 7508 250a 8102 0942 7501  ."...Qu.%....Bu.
00000180: 2501 8102 9507 8103 0501 7510 9501 26ff  %.........u...&.
00000190: 0f35 0055 0e65 1109 3046 470a 8102 0931  .5.U.e..0FG....1
000001a0: 46da 0681 0245 00c0 050d 0922 a102 0951  F....E....."...Q
000001b0: 7508 250a 8102 0942 7501 2501 8102 9507  u.%....Bu.%.....
000001c0: 8103 0501 7510 9501 26ff 0f35 0055 0e65  ....u...&..5.U.e
000001d0: 1109 3046 470a 8102 0931 46da 0681 0245  ..0FG....1F....E
000001e0: 00c0 050d 0922 a102 0951 7508 250a 8102  ....."...Qu.%...
000001f0: 0942 7501 2501 8102 9507 8103 0501 7510  .Bu.%.........u.
00000200: 9501 26ff 0f35 0055 0e65 1109 3046 470a  ..&..5.U.e..0FG.
00000210: 8102 0931 46da 0681 0245 00c0 050d 0922  ...1F....E......"
00000220: a102 0951 7508 250a 8102 0942 7501 2501  ...Qu.%....Bu.%.
00000230: 8102 9507 8103 0501 7510 9501 26ff 0f35  ........u...&..5
00000240: 0055 0e65 1109 3046 470a 8102 0931 46da  .U.e..0FG....1F.
00000250: 0681 0245 00c0 050d 0956 7510 9501 550c  ...E.....Vu...U.
00000260: 6601 1047 ffff 0000 27ff ff00 0081 0285  f..G....'.......
00000270: 0809 5575 0825 0ab1 0285 0406 00ff 09c5  ..Uu.%..........
00000280: 9600 0126 ff00 b102 c006 00ff 09ff a101  ...&............
00000290: 8509 09ff 7508 953f 1500 26ff 0091 0085  ....u..?..&.....
000002a0: 0a09 ff81 00c0                           ......

Relation to Prior Issue

Previously reported as #688, closed by reference without a fix. Reproducible on kernel 6.18.7-surface-1 on Debian.

Steps to Reproduce

  1. Boot the machine.
  2. Verify touchpad gestures work correctly (two-finger scroll, etc.).
  3. Sleep the machine (systemctl suspend).
  4. Wake the machine.
  5. Attempt two-finger scroll — behaves as one-finger drag.

Expected

Touchpad reinitializes correctly on resume; two-finger scroll works.

Actual

Two-finger scroll interpreted as one-finger; contact count appears shifted by one after resume.

Workaround

Re-bind i2c_hid_acpi after resume:

echo i2c-MELF0411:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/unbind
sleep 0.5
echo i2c-MELF0411:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/bind

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions