Skip to content

[Legion Go S] SIPO touchpad behaves erratically when handled by InputPlumber, works when inputplumber.service is stopped #604

Description

@jpvalencia1289

Summary

The built-in touchpad behaves erratically on a Lenovo Legion Go S running factory SteamOS.

The hardware itself appears to work: when inputplumber.service is stopped, the physical mouse/touchpad path works as a normal pointer. The problem appears when InputPlumber claims/blocks the physical wch.cn Legion Go S Mouse and wch.cn Legion Go S Touchpad devices and routes them through the virtual target.

Device

  • Device: Lenovo Legion Go S
  • APU: AMD Ryzen Z1 Extreme
  • RAM/storage: 32 GB / 1 TB
  • OS: factory SteamOS
  • Touchpad: SIPO
  • Touchpad firmware: v21
  • InputPlumber version: 0.77.2
  • Package: inputplumber 0.77.2-2

Current input device mapping

On my system, the relevant devices currently appear as:

/dev/input/event3 -> wch.cn Legion Go S Mouse
/dev/input/event4 -> wch.cn Legion Go S Keyboard
/dev/input/event5 -> wch.cn Legion Go S UNKNOWN
/dev/input/event6 -> wch.cn Legion Go S Touchpad
/dev/input/event8 -> Legion Go S

/dev/input/by-id includes:

usb-wch.cn_Legion_Go_S_-event-if02 -> ../event5
usb-wch.cn_Legion_Go_S_-if01-event-joystick -> ../event8
usb-wch.cn_Legion_Go_S_-if01-joystick -> ../js0
usb-wch.cn_Legion_Go_S_-if02-event-mouse -> ../event3
usb-wch.cn_Legion_Go_S_-if02-mouse -> ../mouse0

What happens

InputPlumber detects the Legion Go S profile and creates the composite device, but then blocks the physical mouse/touchpad evdev devices:

Blocking input events from /dev/input/event6
Blocking input events from /dev/input/event3

The output capabilities include trackpad haptics:

Output capabilities changed: {ForceFeedbackUpload, Haptics(TrackpadLeft), Haptics(TrackpadRight), LED(Brightness), ForceFeedbackErase, LED(Color), ForceFeedback}

After this, the built-in touchpad behavior is unreliable/erratic in SteamOS / Steam Input. In Desktop Mode it appears to function correctly, in Gaming Mode the behaviour is erratical, random detection, stops working after suspension or reset.

Expected behavior

The built-in SIPO touchpad should consistently work as a Steam Input / Steam Deck-style trackpad after boot and resume.

Important observation

If I stop InputPlumber:

sudo systemctl stop inputplumber.service

the physical touchpad/mouse path works as a normal pointer.

This suggests the hardware and libinput side are functional. The problem appears to be in the InputPlumber handling/translation path for the Legion Go S wch.cn mouse/touchpad devices.

Additional context

This may be related to the same general class of issue as #584 / #602, although my issue is not specifically the Legion Go 2 mouse wheel issue. In my case, the physical mouse/touchpad devices are detected and then blocked by InputPlumber, but the virtual output path does not behave reliably.

Attached logs

I attached a tarball containing:

  • system-info.txt
  • pacman-Qkk-inputplumber.txt
  • inputplumber-status.txt
  • inputplumber-systemd-unit.txt
  • inputplumber-journal-current-boot.txt
  • input-devices.txt
  • udevadm-*
  • dmesg-filtered-input.txt
  • inputplumber-devices.txt
  • inputplumber-device0-info.txt
  • 50-legion_go_s.yaml
  • InputPlumber udev/hwdb/dbus/polkit files

I can run extra commands or test a branch/build on the Legion Go S if needed.

legion-go-s-inputplumber-issue-20260610-095306.tar.gz

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions