[PATCH v2 00/11] HID: hid-lenovo-go-s: Fix various bugs

From: Derek J. Clark

Date: Fri Oct 16 2026 - 21:40:23 EST


This series fixes various bugs in the hid-lenovo-go-s driver

Patch 1 fixes a dropped error on return from mcu_property_out().

Patch 2 creates a mechanism to ignore stale responses if they timed out
in the previous command.

Patch 3 fixes a deadlock if the device is removed while cfg_setup() is
running.

Patch 4 adds missing pm_ptr to the reset_resume function pointer.

Patch 5 adds a kobject_uevent notify during reset-resume to ensure the
os_mode return is caught by udev.

Patch 6 adds a suspend callback to cancel delayed work and re-queue the
cfg_setup if the device was suspended prior to or during the work.

Patch 7 moves attribute init to the end of cfg_setup, ensuring the
attributes can only be used once the MCU is ready.

Patch 8 reorganizes hid_gos_cfg and renames it to gos_cfg_drvdata in
preparation for later fixes.

Patch 9 moves the static led_classdev to become a member of the drvdata
struct.

Patch 10 moves drvdata from a static global to a device allocated
struct.

Patch 11 stops and closes the HID device when probe fails.

Signed-off-by: Derek J. Clark <derekjohn.clark@xxxxxxxxx>

---
v2:
- Patch 2: Only mark the ack as orphaned when no reply was consumed,
i.e. the wait timed out or was interrupted. An MCU error reply is
fully consumed and does not need draining.
- Patch 3: Re-take cfg_mutex in the remove path after stopping the
setup work; the commit body documents why the re-take is safe.
- Patch 6: Cancel instead of disable the delayed work on suspend so
the work can be rescheduled again on reset-resume.
- Patch 7: Bound the device query retry to 5 attempts at 50 ms. Register
the LED classdev manually and unregister it on failure and in the
remove path. The registered flags are set before the matching steps
and cleared on any failure, so a failed setup run can be retried.
- Patch 10: Fix stale work function name in the memory barrier
pairing comments.
- Add patch 11: Stop and close the HID device on probe failure.

v1: https://lore.kernel.org/linux-input/20260914225303.868569-1-derekjohn.clark@xxxxxxxxx/

Derek J. Clark (11):
HID: hid-lenovo-go-s: Return ret instead of 0 in mcu_property_out()
HID: hid-lenovo-go-s: Bound stale reply window before reusing
send_cmd_complete
HID: hid-lenovo-go-s: Prevent deadlock if device removed during setup
HID: hid-lenovo-go-s: Use pm_ptr for reset_resume callback
HID: hid-lenovo-go-s: Add kobject_uevent notify during reset-resume
HID: hid-lenovo-go-s: Add suspend function and gate access under bool.
HID: hid-lenovo-go-s: Move attribute init to after device query
HID: hid-lenovo-go-s: Reorganize and rename hid_gos_cfg
HID: hid-lenovo-go-s: Move static led_classdev_mc to drvdata struct
HID: hid-lenovo-go-s: Use devm_kzalloc for drvdata
HID: hid-lenovo-go-s: Stop and close device on probe failure

drivers/hid/hid-lenovo-go-s.c | 720 +++++++++++++++++++++++++---------
1 file changed, 526 insertions(+), 194 deletions(-)

--
2.55.0