Surface Go 2: working fixes for LTE, folded Type Cover tablet mode, and intermittent touchpad resume

Surface Go 2 – three hardware findings / working fixes

Hi,

I am using FydeOS on a Microsoft Surface Go 2 (Core m3, LTE model) and have been testing some Surface-specific hardware issues.

I now have reproducible working solutions for three problems that may be useful for improving the Surface Go 2 build upstream.


1. LTE / WWAN modem

The internal Surface LTE modem is detected, but reliable operation required disabling MBIM multiplexed links and applying an NCM initialisation workaround.

The modem USB ID is:

045e:09a5

I am currently applying this runtime udev rule:

ATTRS{idVendor}=="045e", ATTRS{idProduct}=="09a5", ENV{ID_MM_MAX_MULTIPLEXED_LINKS}="0"

Then, after wwan0 and its cdc_ncm controls appear:

printf '16383\n' > "$NCM_PATH/rx_max"
printf '16383\n' > "$NCM_PATH/tx_max"
printf '16384\n' > "$NCM_PATH/rx_max"
printf '16384\n' > "$NCM_PATH/tx_max"

followed by restarting ModemManager.

With this applied, the modem works correctly and I can use LTE normally.


2. Type Cover folded backwards does not enable FydeOS tablet UI

This turned out not to be a missing tablet-mode sensor or kernel event.

The Surface Go 2 exposes:

Intel HID switches
SW_TABLET_MODE

and FydeOS powerd correctly reports:

Watching tablet mode switch: /dev/input/event14

evtest confirms folding and unfolding the Type Cover produces the correct events:

SW_TABLET_MODE value 1   # Type Cover folded behind display
SW_TABLET_MODE value 0   # Type Cover returned to laptop position

However, the Surface Type Cover remains enumerated over USB while folded.

Its pointer devices are:

Microsoft Surface Keyboard Mouse
Microsoft Surface Keyboard Touchpad

USB ID:

045e:09b5

and FydeOS classifies them as:

ID_BUS=usb
POWERD_ROLE=external_input

The mouse/touchpad are on USB interface:

1-7:1.3

with:

USB driver: usbhid
HID driver: hid-multitouch
bInterfaceNumber: 03

Test result:

While the Type Cover is folded behind the screen, running:

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

immediately makes FydeOS enter its proper tablet UI.

Rebinding:

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

when the Type Cover is unfolded immediately returns normal laptop behaviour.

I tested an automatic monitor using the existing SW_TABLET_MODE event:

SW_TABLET_MODE=1
    -> unbind Type Cover interface 03
    -> FydeOS tablet UI

SW_TABLET_MODE=0
    -> bind Type Cover interface 03
    -> FydeOS desktop UI

This works perfectly and the transition is effectively immediate.

It therefore looks as though Ash/Chromium is treating the still-enumerated Surface Type Cover touchpad as an external pointing device and preventing tablet UI activation, despite the hardware correctly reporting tablet posture.

A proper Surface-specific device classification/quirk for 045e:09b5 may therefore remove the need for the unbind/rebind workaround.


3. Type Cover touchpad occasionally dead after wake/opening

I have also seen an intermittent issue where, after opening/waking the Surface, the keyboard works but the Type Cover touchpad does not.

Physically detaching and reattaching the Type Cover restores it.

This appears very similar to the existing Surface Go report:

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

I have found that rebinding the same Type Cover pointer interface also restores it:

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

My automatic tablet-mode workaround consequently performs a fresh rebind whenever the Type Cover is returned from tablet posture, which may also eliminate this resume problem.

I have only recently added this part, so I am still testing whether it completely eliminates the intermittent wake/resume failure.


Hardware

Microsoft Surface Go 2
Core m3 model
LTE
DMI product_name: Surface Go 2
DMI chassis_type: 9
Type Cover USB ID: 045e:09b5
LTE modem USB ID: 045e:09a5

I am happy to provide the complete scripts, evtest output, udev properties, logs, or run any additional tests if this would help get the fixes integrated into the Surface Go 2 FydeOS build.