[PATCH v2 4/6] HID: hid-lenovo-go: normalize calibration failure status
From: Aditya Dash <hidden>
Date: 2026-08-30 14:57:20
Also in:
lkml
Subsystem:
hid core layer, lenovo hid drivers, the rest · Maintainers:
Jiri Kosina, Benjamin Tissoires, Derek J. Clark, Mark Pearson, Linus Torvalds
The driver stores the firmware result byte as an index into the
calibration status text. A Legion Go 1 returned 0x08 after an idle Stop.
The status table has only three entries, so a later read returns -EINVAL.
Keep the defined values 0x00 through 0x02. Treat larger result values as
failure before storing them.
Fixes: 995887a10da1 ("HID: hid-lenovo-go: Add Calibration Settings")
Assisted-by: Pi:gpt-5.6-sol
Signed-off-by: Aditya Dash <redacted>
---
drivers/hid/hid-lenovo-go.c | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/drivers/hid/hid-lenovo-go.c b/drivers/hid/hid-lenovo-go.c
index dbfacbb70394..c7a2e621a4ad 100644
--- a/drivers/hid/hid-lenovo-go.c
+++ b/drivers/hid/hid-lenovo-go.c@@ -648,17 +648,22 @@ static int hid_go_light_event(struct command_report *cmd_rep) static int hid_go_device_status_event(struct command_report *cmd_rep) { + u8 status = cmd_rep->data[1]; + + if (status > CAL_STAT_FAILURE) + status = CAL_STAT_FAILURE; + switch (cmd_rep->device_type) { case LEFT_CONTROLLER: switch (cmd_rep->data[0]) { case CALDEV_GYROSCOPE: - drvdata.gp_left_gyro_cal_status = cmd_rep->data[1]; + drvdata.gp_left_gyro_cal_status = status; return 0; case CALDEV_JOYSTICK: - drvdata.gp_left_joy_cal_status = cmd_rep->data[1]; + drvdata.gp_left_joy_cal_status = status; return 0; case CALDEV_TRIGGER: - drvdata.gp_left_trigg_cal_status = cmd_rep->data[1]; + drvdata.gp_left_trigg_cal_status = status; return 0; default: return -EINVAL;
@@ -667,13 +672,13 @@ static int hid_go_device_status_event(struct command_report *cmd_rep) case RIGHT_CONTROLLER: switch (cmd_rep->data[0]) { case CALDEV_GYROSCOPE: - drvdata.gp_right_gyro_cal_status = cmd_rep->data[1]; + drvdata.gp_right_gyro_cal_status = status; return 0; case CALDEV_JOYSTICK: - drvdata.gp_right_joy_cal_status = cmd_rep->data[1]; + drvdata.gp_right_joy_cal_status = status; return 0; case CALDEV_TRIGGER: - drvdata.gp_right_trigg_cal_status = cmd_rep->data[1]; + drvdata.gp_right_trigg_cal_status = status; return 0; default: return -EINVAL;
--
2.55.0