Surface Go (1) and trackpad stops after awakening from sleep

Hi, I’m using a Surface Go 2 and have been investigating this problem. I think I’ve now identified what is happening with the Type Cover and have a working workaround.

The Type Cover is a Microsoft USB HID device (045e:09b5). Its mouse/touchpad are on USB interface 03, using usbhid / hid-multitouch.

I’ve found that when the touchpad fails, rebinding that interface restores it without needing to physically detach and reconnect the Type Cover.

More importantly, I discovered another related Surface Go 2 issue: when the Type Cover is folded behind the screen, the Surface correctly generates SW_TABLET_MODE=1, and FydeOS powerd correctly receives that event. However, the Type Cover touchpad remains enumerated as an external USB pointing device, which prevents FydeOS/Ash from entering its proper tablet UI.

Temporarily unbinding only the Type Cover mouse/touchpad interface immediately makes FydeOS enter tablet mode:

echo -n "1-7:1.3" > /sys/bus/usb/drivers/usbhid/unbind

Rebinding it restores the touchpad:

echo -n "1-7:1.3" > /sys/bus/usb/drivers/usbhid/bind

I now have an automatic workaround which watches the existing SW_TABLET_MODE event:

Type Cover folded:
SW_TABLET_MODE=1
-> unbind Type Cover pointer interface
-> FydeOS immediately enters tablet UI

Type Cover unfolded:
SW_TABLET_MODE=0
-> rebind Type Cover pointer interface
-> desktop mode + freshly initialised touchpad

I’ve tested repeated folding/unfolding and it is working perfectly so far.

I’m also hoping the forced rebind on unfold will solve the intermittent dead-touchpad-after-sleep problem described in this thread, although I need more sleep/wake testing before I can say that is definitely fixed.

I’ve posted the full technical findings, including the Surface Go 2 LTE fix and tablet-mode diagnosis, here:

Hopefully this information can help get a proper Surface-specific fix incorporated into FydeOS.