From nobody Sat Sep 26 20:27:42 2026 Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4C3428FFF6 for ; Sun, 30 Aug 2026 14:57:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101832; cv=none; b=BaRiZSO9yXDu11zwe8faBOHuRtfY5Xo1DcT7+uQH6YZY9+x3nbkgZ/NfoMNfxenqyJXIpTQOlyGWEomrKVVw/Qf9Z5wVMpiLDiceI+WLqBUTo6rzlxULIwvZp66UD/lX9qe0H6G4DPCqo5D7kcRNXLQoeNEVuzsrhFHvGBtorik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101832; c=relaxed/simple; bh=reLdAq8P0t49kvDWPzWt8gweqMKLVAKU+JnfiiZyo8k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fuuV+ociEGsQATcARV4pPaSW6azwmsNCEHy4XCGh1jYXImJVA/u3Y2wFka5sshZYoZqOOx9IISrLtpwQ3P52Wug8DJ/o1zBl0SF32o+zSxU3nmKE1Wy0ik6MwI/4vhJxT7z5VO1c4TvLc97l5pZP3DpBpEqLM9QDXdavkUDt35Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AUdgJUf7; arc=none smtp.client-ip=209.85.214.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AUdgJUf7" Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-2ceab75934dso29623965ad.2 for ; Sun, 30 Aug 2026 07:57:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788101830; x=1788706630; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=LxJQOF7esWYVaSzzh3UuNgbHtz6kTLWO9YCyNun8jQU=; b=AUdgJUf71EJBvQqm3xSlinMexVSueLib2udrkpjY3tCP6H8WdVWV3r5frZ+TZhYe6P EdBo1GOx3Wj0pYxHIYIOWv/HDeo31csGvRfUcU1t3/5LT5fuu0z9xXoMC+uAa9PmE/hk TEEyaF+TNGtrCuQjgDQVIhffVfCPfv/6YLHPDWlPsCtU88oTswhDSHmXG5vl91N+f259 l9vLd5oZb5Kr9orHd/OtBf2S9KCAKvxhxOIc7NOcQa84jt71CDqQ6ZGbYidS6yH7bFLM ECGm57VxkQSD/8Wij3DXEjRVp/uz7fHlhHUyDaUpDykzRkfukwk7afJHRNGAwEJh+Qvg XtnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788101830; x=1788706630; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=LxJQOF7esWYVaSzzh3UuNgbHtz6kTLWO9YCyNun8jQU=; b=JvnPylgxigK69bulhUOcqlTJwdelXGjRtVeTqwwHXBZjEqmGX6Et34xrcGRmZAj7tC B1myQLCRIgMw5ivLZXmM4Uznr9CXF3peeaCPXDV/cgP6kCSTtv+VuyqU1ZASMoVoawCa EGo7qIqnJ1GDau/h5XCtcaIinI7vqGrQuLZ0Il9SzlMI/CqIYgl9J000yG+vXgwZUAQI WB+kx+eI/zhNNo7zrk8TmSydHXwO2pKEqyv4F2NVwaMSGJOvsU7wmbMpFMFV/GhlzUhM TdZ75MWvu8YhaQX+YXiuQ3LUX4fVqGmN86Cl5iaxuzIKeP4hPuOfdNcNfkfQua9lYAMP RqJA== X-Forwarded-Encrypted: i=1; AHgh+RoO6MT6O5K1H8x5JZ+vTwM90LKhJGhsZqs2tHg3xPEoJXksJGnDpsEXL8utPr/irIqLWvjx2Dhvl1jaYPY=@vger.kernel.org X-Gm-Message-State: AFuF++ldJXJkNsu6xefsh+yvaN4DE7nz497J3Mz7wclAdO9AGKmrkyvc Kt3+03FNA+ReJm0COWamONMOK9my4otDgmKGTnWbrGmKyZS2zKb15B+U X-Gm-Gg: AR+sD114JDBpD9kMkJYkpJFiZXvR28o1JQF15+eKC1PcWysVzVos17jmadR4xIY1yDe OYfVCXiE7PsE14Q0l+wrPNMQLGOuHZBvuKnUQp1IB0O2qlju4xuzz07lxvG7LW+WK01cU6LpI// V3IoCYb2sZ8hJq6ZYy4TuSnT7igJ3qXMtVtkJhr0v0PWIzBUl0tpsZgPMRR4/gD8puxAX6V0Ori kKXHbkmXreZVxwJ7aJ3GEAZmJUu2EGHkP9viSij0vbeeEIG/nz6UTVbAov8dgsI7p0WKeV1lOlt +gbs0OIyP4f30PWJC3UTaXgPzjAT69z9sH8BzpiCMX26sxVVzsugNhZJFDA2kvg+Um2mlwZVgA1 8P4XbnxQv1EEe2rL5l1t2u3pLikHQYgX7LjgxvMyIwIcqj0/UGaezYvnmcxImHM8faBQe4b+crg 1JbsiCLw/IhsxF4rnBXfZS2C3zpJ2PaZa9IgefVB9bSH3olkodMGGl2BTndkcCCMIspg4gqZZqk 23x/L6mvV1D0h6A6WQ= X-Received: by 2002:a17:902:c946:b0:2d8:d4d0:792f with SMTP id d9443c01a7336-2d8d4d079bdmr140071165ad.19.1788101829989; Sun, 30 Aug 2026 07:57:09 -0700 (PDT) Received: from localhost.localdomain ([103.16.69.193]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f959575sm23198024eec.15.2026.08.30.07.57.05 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 30 Aug 2026 07:57:09 -0700 (PDT) From: Aditya Dash To: Benjamin Tissoires , "Derek J. Clark" , Jiri Kosina , Mark Pearson Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/6] HID: hid-lenovo-go: use the correct calibration commands Date: Sun, 30 Aug 2026 20:26:53 +0530 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The calibration attributes pass the calibration operation as the command and the configuration command as the sub-command. This sends each request with the two fields reversed. Swap the command and sub-command values for all six calibration attributes. For example, the malformed left joystick Start request is: 05 00 04 0c 03 01 ... The corrected request is: 05 00 0c 04 03 01 ... The bytes identify the output report, configuration group, command, sub-command, left controller, and Start action, in that order. Fixes: 995887a10da1 ("HID: hid-lenovo-go: Add Calibration Settings") Assisted-by: Pi:gpt-5.6-sol Signed-off-by: Aditya Dash Reviewed-by: Derek J. Clark Tested-by: Derek J. Clark --- drivers/hid/hid-lenovo-go.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/drivers/hid/hid-lenovo-go.c b/drivers/hid/hid-lenovo-go.c index 318b1152ff8b..b8248bf8965c 100644 --- a/drivers/hid/hid-lenovo-go.c +++ b/drivers/hid/hid-lenovo-go.c @@ -1911,18 +1911,18 @@ LEGO_DEVICE_ATTR_RW(rumble_notification_left, "rumb= le_notification", static DEVICE_ATTR_RO_NAMED(rumble_notification_left_index, "rumble_notification_index"); =20 -static struct go_cfg_attr cal_trigg_left =3D { TRIGGER_CALIBRATE }; -LEGO_CAL_DEVICE_ATTR(cal_trigg_left, "calibrate_trigger", SET_TRIGGER_CFG, +static struct go_cfg_attr cal_trigg_left =3D { SET_TRIGGER_CFG }; +LEGO_CAL_DEVICE_ATTR(cal_trigg_left, "calibrate_trigger", TRIGGER_CALIBRAT= E, LEFT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_trigg_left_index, "calibrate_trigger_index= "); =20 -static struct go_cfg_attr cal_joy_left =3D { JOYSTICK_CALIBRATE }; -LEGO_CAL_DEVICE_ATTR(cal_joy_left, "calibrate_joystick", SET_JOYSTICK_CFG, +static struct go_cfg_attr cal_joy_left =3D { SET_JOYSTICK_CFG }; +LEGO_CAL_DEVICE_ATTR(cal_joy_left, "calibrate_joystick", JOYSTICK_CALIBRAT= E, LEFT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_joy_left_index, "calibrate_joystick_index"= ); =20 -static struct go_cfg_attr cal_gyro_left =3D { GYRO_CALIBRATE }; -LEGO_CAL_DEVICE_ATTR(cal_gyro_left, "calibrate_gyro", SET_GYRO_CFG, +static struct go_cfg_attr cal_gyro_left =3D { SET_GYRO_CFG }; +LEGO_CAL_DEVICE_ATTR(cal_gyro_left, "calibrate_gyro", GYRO_CALIBRATE, LEFT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_gyro_left_index, "calibrate_gyro_index"); =20 @@ -2018,18 +2018,18 @@ LEGO_DEVICE_ATTR_RW(rumble_notification_right, "rum= ble_notification", static DEVICE_ATTR_RO_NAMED(rumble_notification_right_index, "rumble_notification_index"); =20 -static struct go_cfg_attr cal_trigg_right =3D { TRIGGER_CALIBRATE }; -LEGO_CAL_DEVICE_ATTR(cal_trigg_right, "calibrate_trigger", SET_TRIGGER_CFG, +static struct go_cfg_attr cal_trigg_right =3D { SET_TRIGGER_CFG }; +LEGO_CAL_DEVICE_ATTR(cal_trigg_right, "calibrate_trigger", TRIGGER_CALIBRA= TE, RIGHT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_trigg_right_index, "calibrate_trigger_inde= x"); =20 -static struct go_cfg_attr cal_joy_right =3D { JOYSTICK_CALIBRATE }; -LEGO_CAL_DEVICE_ATTR(cal_joy_right, "calibrate_joystick", SET_JOYSTICK_CFG, +static struct go_cfg_attr cal_joy_right =3D { SET_JOYSTICK_CFG }; +LEGO_CAL_DEVICE_ATTR(cal_joy_right, "calibrate_joystick", JOYSTICK_CALIBRA= TE, RIGHT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_joy_right_index, "calibrate_joystick_index= "); =20 -static struct go_cfg_attr cal_gyro_right =3D { GYRO_CALIBRATE }; -LEGO_CAL_DEVICE_ATTR(cal_gyro_right, "calibrate_gyro", SET_GYRO_CFG, +static struct go_cfg_attr cal_gyro_right =3D { SET_GYRO_CFG }; +LEGO_CAL_DEVICE_ATTR(cal_gyro_right, "calibrate_gyro", GYRO_CALIBRATE, RIGHT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_gyro_right_index, "calibrate_gyro_index"); =20 --=20 2.55.0 From nobody Sat Sep 26 20:27:42 2026 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A2E63BB12C for ; Sun, 30 Aug 2026 14:57:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101835; cv=none; b=k5MP51yGwgg0f6w9o+TMRsl8IsCuMppI12DZ++8sQv+sF92BmvBi2bmuioaCYOujaIJBdtgZ7VjJnZpaGb20O0Nb2jUO6gSChI/+dPtBX2/ovqFtvelnXZktoxM6TzOYnLSrCTFgRy6QyS/T8lIiEhKo62dpN1q9mRhTjAY2/TE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101835; c=relaxed/simple; bh=aEjxZJwZLa+q7K9xSjUy2o9VFRy7tyW3hxCACheKEzQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JG1JTBaYRzo2h/QrlltfV6CyQ1RA7bL3CQuwDjZO4rmLdsPKDwQ/08n5Bpe5CcYG6whSjfLzo1msBmoAArXgEol4mRCP1o8685Dvwe6N7ttfSIL9yBGIbbRdy6RY1bYo25ZidGCmlxYr+igFlwJ0t2XT/X4+bX4SfqSlFiV7Aw4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZicajQin; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZicajQin" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-cc149372c14so1845885a12.1 for ; Sun, 30 Aug 2026 07:57:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788101833; x=1788706633; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xWOAHh0q81CutOvcz4kXnkwApjt4e2WZQIvquKf0gdA=; b=ZicajQinxa2vtMxCTblpqKmx+/7DS/HGvaL6BgUWdvvG9/W8nGVfs4s9pEBNuq8D9o dYyyKxKmUvzZ2y4WvOpSX7DgCaCq0pjZZYyyrsj2mWUeagjvDJ6XRzeTPvF+G9e2v8y5 7uefCM2UgDQo6pQL/HK63NbVdndN6BNyQXLseU8WcKrG8xtT1tC8cXwjU2L4BshqmJPB waQT86taUIHKWb2kcRyBg/4Q2+4ve9unYN/aN4tw1ULgCiZStd0r4z74cd17HAVrBgTo EkBz3u4PLJXdaNpoLFfBhOX2LW6nmiahUa+sBn4Qg6NQT6dODIS1af8bgd4FjRw5KUTc mIhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788101833; x=1788706633; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=xWOAHh0q81CutOvcz4kXnkwApjt4e2WZQIvquKf0gdA=; b=kelbZJQ8IlVuEoXyQSBhSCBm36m9q3kUGI9QnAa1yTLcgoz7XmaQrEJd0Vt7xyaPAI WlyhoHnYp6SLllb6AsRpPq8boH1HSALYI3TkhpjHMz7c5uV+Y7XURgQolXH3EsMD/RAd 0JTU2j8hMBLSHl7b0062UaawvvvCla0NQpXx0sYdGxZcCCRugOc0MzKPBgz5s3rQ80k7 +03BzeKGZdREKwi1ntsdHm4lMb+Qfmho2bRlDK9m7QHRVHpKVssa0MnCeTBvOhyYb5cq 8gqxPLop6MEVsBaRqqTKBcWytv8fkp4HnFaYP2bW4FAv/ICxE/EYcaqceEM7jR2NXeL8 OAxQ== X-Forwarded-Encrypted: i=1; AHgh+Rphqxu29Co0cds9MjTkoSK/K87mtRFrwP/bv+psFJMs3lBxyDTyzGKk/brra5b4zCKwVs70MOIHdzLdgr0=@vger.kernel.org X-Gm-Message-State: AFuF++mp3sxOw6ZOHNlJrSqE4EBwv46OHEoPuA+DzTuVHwADdcyeAMCI JE6llyywxHp4+ICDK5LH5+VHq4Z/5qzAgCI0nr283PaxO6I2SYrhBetu4At+TFwM X-Gm-Gg: AR+sD11xGUq4C8SVesIJjsupvQkps/H++qwjjRZO8ZI+ELLGsFD2SnZ3M695pi+uKLi Mm4o+P9wOkCb4+bsd/UtlPLZO6rhzG6oHMzvnH4/eYXlDll0Rfqe7D9JavGsdCSG5elewh50JSc Ky7iT8K/Irve+DTxK2crDLYncgUWsPrE2RVsa1b4V8Tk8kvWK27+hdFHmNsqvHJyRCAKhEVybRS 3c6uKUSbF+hacaUo5ovOpvPoonEehhHKPnEQtjZx+2jcutJ1I1uCADyQ5IEzTUP3wfgLyMekpl0 GiZv3jmoKO9A8lOyUofsFUh4AZivrMzBwdG8ZP/++neGXJlIpqf1Wq/H4+Sx6RiohzqRvoLxZRt 8JEArDdcFi5v7ibgMGiicDv4n+G3KbBvX1NST5OwEUOkeOheTBLMjmMlaTXgfWwL13UCsTWGXJX 1q1nGyTwUOqe92RzgeDaRq95SorwbN8st7FMElTqn2De6t/EYVU72m/hG+ssDZ+teghq1HfMu/B bhtVuaijV4RJSKFz/c= X-Received: by 2002:a05:6a20:b7a7:b0:3be:b0b3:3962 with SMTP id adf61e73a8af0-3d268ef9e07mr35570313637.9.1788101833386; Sun, 30 Aug 2026 07:57:13 -0700 (PDT) Received: from localhost.localdomain ([103.16.69.193]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f959575sm23198024eec.15.2026.08.30.07.57.10 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 30 Aug 2026 07:57:12 -0700 (PDT) From: Aditya Dash To: Benjamin Tissoires , "Derek J. Clark" , Jiri Kosina , Mark Pearson Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/6] HID: hid-lenovo-go: use the right controller selectors Date: Sun, 30 Aug 2026 20:26:54 +0530 Message-ID: <876cc33bede49d8ed2437278f0696010df98643c.1788096667.git.mradityadash@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The right imu_enabled attribute selects FEATURE_IMU_BYPASS, and the right reset attribute targets the left controller. Select FEATURE_IMU_ENABLE for the right imu_enabled attribute. Target the right controller for a right reset. Fixes: 82cd9bc866e1 ("HID: hid-lenovo-go: Add Feature Status Attributes") Assisted-by: Pi:gpt-5.6-sol Signed-off-by: Aditya Dash Reviewed-by: Derek J. Clark Tested-by: Derek J. Clark --- drivers/hid/hid-lenovo-go.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/hid/hid-lenovo-go.c b/drivers/hid/hid-lenovo-go.c index b8248bf8965c..b937d11dd6f6 100644 --- a/drivers/hid/hid-lenovo-go.c +++ b/drivers/hid/hid-lenovo-go.c @@ -1999,13 +1999,13 @@ LEGO_DEVICE_ATTR_RW(imu_bypass_right, "imu_bypass_e= nabled", RIGHT_CONTROLLER, index, feature_status); static DEVICE_ATTR_RO_NAMED(imu_bypass_right_index, "imu_bypass_enabled_in= dex"); =20 -static struct go_cfg_attr imu_enabled_right =3D { FEATURE_IMU_BYPASS }; +static struct go_cfg_attr imu_enabled_right =3D { FEATURE_IMU_ENABLE }; LEGO_DEVICE_ATTR_RW(imu_enabled_right, "imu_enabled", RIGHT_CONTROLLER, in= dex, feature_status); static DEVICE_ATTR_RO_NAMED(imu_enabled_right_index, "imu_enabled_index"); =20 static struct go_cfg_attr reset_right =3D { FEATURE_RESET_GAMEPAD }; -LEGO_DEVICE_ATTR_WO(reset_right, "reset", LEFT_CONTROLLER, feature_status); +LEGO_DEVICE_ATTR_WO(reset_right, "reset", RIGHT_CONTROLLER, feature_status= ); =20 static struct go_cfg_attr rumble_mode_right =3D { RUMBLE_MODE }; LEGO_DEVICE_ATTR_RW(rumble_mode_right, "rumble_mode", RIGHT_CONTROLLER, in= dex, --=20 2.55.0 From nobody Sat Sep 26 20:27:42 2026 Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9568A3BB665 for ; Sun, 30 Aug 2026 14:57:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101839; cv=none; b=PGu2o4rjbIPUn0jPk3YNvhuzGxzSLCnTI+otbgDc0gdhXGcgB8JQ9IGDKodQkvHpDbfUcdQcE9fdJPqy121bD3B3WoixQAM4B8/IOQJ17dHj1EpTSZYhg96cktZCc69xJM0pRhdF/fa6S1q9tsC+lwjTSpDnmjGm1yscysYpYGo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101839; c=relaxed/simple; bh=ulyweVAO3xblz6gR0VkVmV8opw1DJmqYu9eNvaueW4A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uCYFIUIjaFJdK0QcEvV2LS2oczCRSvXwJY8YaWi5t5nOqGd6n6J7/GMz3pFOqtj/QyYts9bHIwI90z9jiQDprDtnegEapvOkFqAAJx9BCO08rfe53TnCPE8tchTswu4iYDLlwiKJ4f4h80ApioMqTWkXCVPPLlB/qvKdqR90xVw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MPbGS0fE; arc=none smtp.client-ip=209.85.215.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MPbGS0fE" Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-cc1cc97b84bso2264729a12.1 for ; Sun, 30 Aug 2026 07:57:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788101837; x=1788706637; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=97SbbetLO4aPKEfOa796LFYimHxy5eRJIJYvWLy1xc0=; b=MPbGS0fEjCCsD09aY0QT5HXvwoNAryUiJR6Bfav9HTamOsU9e9gQ2Q5C/Yanq4UyKu dilZae2Kg+geUypES0dJ30Q+2GbbKOLwYSaircMqJElnULXHzRfPMk5nko/xCxQiSZ6x wZxsNJnzGD87uppSlMw0/+26U2lFOBZrws/IBrf1NqSeQ/mgY/jHQmyKnvVTsMWtS1EQ gGHBMcPlFwpmRBghA5A3yX5bHFcFYRJek7oky5eUZfvQ9DqbB3g2GIYF+rkdGOtQIyK5 wAfyhEQBhVVQ0pEziVlBwhXE4nvojstvdsXHLe77mSgyvIsXCkHbqa8jxnFB/h8R9Ka/ cX2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788101837; x=1788706637; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=97SbbetLO4aPKEfOa796LFYimHxy5eRJIJYvWLy1xc0=; b=jITlwDc69kF7ICq5A9p4Ri3jK/WHDAn7NLi6YeZc5V+47j6DkqJFMJYPcp5yxbh6AC gNuFg5nwaHoBR+hNMoAOovog0JBTIpmmEgG4WBe8LqKiB9eUTS8OA+qQUHkKmqiJHuoe SVOAiccGBiTevIQEKuThf3uF4X9eyqwiHLLavm3RHsRoRPxzkIU6DwPQvjT9ZkYNI4AS bhRh2aO+8jyldkco2yvzCCLNatt776YtCSkVOP/GygXY5lk72T9ygugk/xdnlgZCGXe1 oMXpwACkXjMO2ZI5aGJtpVTW1N6tMZ4+j6dL5NpJtETVNpceBSum8i69FWCxS33n1c+1 Gllw== X-Forwarded-Encrypted: i=1; AHgh+RqzMGGbHmvnESF/fOksx5we1xQnuNFFNZO00vE0uyozaeiCYazkgyhukhVJvRYgg3TDgLsYqKQh2KQEtcI=@vger.kernel.org X-Gm-Message-State: AFuF++k0wELXcqqmNJxC5jg8ty3HCWnzE5lU4DP69Ro8AxPEtJjwWc/0 AEM4bYR6tv+YNOomuzoRtTawTmakmHzqhBFPcAUJABIGueT58w3Ly7Le X-Gm-Gg: AR+sD13zo4esVkKxuYR4xVfSD4E7TJnV9oim5u/f4omOxRUU2x3OJCYSTJo3bP+30e7 VOdePKUSHQL5My5b59OrbxHP0LMhucOZyJoQrcnv0Pn4aFRaWVmHV9jRI5TCRmuqgz1KUG8Si5U 5maJa/bPdVEQ/jJoXmzcRp+OuiX1kw458LRxHuUjiI0e1OsS+aXhzf/lAY4DISwASUSs/NPoLPl i2fZDMnu1IJ56dj9STZzHAAMvgYT+5DZjEDZqPR6HiTxRWVGXU/SmoVTELqRUcFX+pSl1dS/bBg B7QCF/sxH/ZUN8SwGJh3xY6+qKIM3Od7G3g6OURdlX9aO48kMS1EhBflTnDdKodJC9YQ8up5/v+ iCTcJ96S1Ex0nQdgT3u7Xb2qxY9GKEgUiJTqv2iSqq2+hhtoTt3RkRcO0iQ29aEqoKsalRpktqa Khd5slPngm6shgHI4gF7LbplY0havGh1+uCdOI9kvQZP9s254i+PcdyUmeZ2bvZnCgysRFXHeiA iLH0CvT+H2vjatvpDvfy66UV2A99Q== X-Received: by 2002:a05:6a21:8882:b0:3d3:adbf:7784 with SMTP id adf61e73a8af0-3d3adbf81c3mr16403243637.25.1788101836698; Sun, 30 Aug 2026 07:57:16 -0700 (PDT) Received: from localhost.localdomain ([103.16.69.193]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f959575sm23198024eec.15.2026.08.30.07.57.13 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 30 Aug 2026 07:57:16 -0700 (PDT) From: Aditya Dash To: Benjamin Tissoires , "Derek J. Clark" , Jiri Kosina , Mark Pearson Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/6] HID: hid-lenovo-go: return configuration request errors Date: Sun, 30 Aug 2026 20:26:55 +0530 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Any decoded configuration reply completes the shared completion. The driver also ignores the result of its interruptible wait. An unrelated reply, a firmware error, an interrupted wait, or a timeout can therefore be reported as success. Add pending command state to the driver data. Match replies by command ID, command, sub-command, and device, and return request errors to the caller. Clear the pending request after an interruption or timeout so a late reply cannot replace that result. Keep the existing 50 ms wait for every configuration request. Corrected calibration requests on an Original Legion Go received their matching SET replies within 8 ms. The final calibration result remains asynchronous. The firmware has no sequence number. A late reply with the same tuple can still match a newer request. Fixes: d69ccfcbc955 ("HID: hid-lenovo-go: Add Lenovo Legion Go Series HID D= river") Assisted-by: Pi:gpt-5.6-sol Signed-off-by: Aditya Dash --- drivers/hid/hid-lenovo-go.c | 107 +++++++++++++++++++++++++++++------- 1 file changed, 86 insertions(+), 21 deletions(-) diff --git a/drivers/hid/hid-lenovo-go.c b/drivers/hid/hid-lenovo-go.c index b937d11dd6f6..dbfacbb70394 100644 --- a/drivers/hid/hid-lenovo-go.c +++ b/drivers/hid/hid-lenovo-go.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -31,13 +32,27 @@ #include "hid-ids.h" =20 #define GO_GP_INTF_IN 0x83 +#define GO_INPUT_REPORT_ID 0x04 #define GO_OUTPUT_REPORT_ID 0x05 #define GO_GP_RESET_SUCCESS 0x01 #define GO_PACKET_SIZE 64 +#define GO_COMMAND_TIMEOUT_MS 50 + +/* Lenovo replies identify a command and a sub-command, but have no sequen= ce. */ +struct hid_go_cmd { + struct completion done; + spinlock_t lock; /* protects fields below */ + bool pending; + u8 id; + u8 command; + u8 sub_command; + u8 device; + int result; +}; =20 static struct hid_go_cfg { struct delayed_work go_cfg_setup; - struct completion send_cmd_complete; + struct hid_go_cmd cmd; struct led_classdev *led_cdev; struct hid_device *hdev; struct mutex cfg_mutex; /*ensure single synchronous output report*/ @@ -331,6 +346,62 @@ static const char *const os_mode_text[] =3D { [LINUX] =3D "linux", }; =20 +static void hid_go_cmd_arm(u8 id, u8 command, u8 sub_command, u8 device) +{ + guard(spinlock_irqsave)(&drvdata.cmd.lock); + + reinit_completion(&drvdata.cmd.done); + drvdata.cmd.pending =3D true; + drvdata.cmd.id =3D id; + drvdata.cmd.command =3D command; + drvdata.cmd.sub_command =3D sub_command; + drvdata.cmd.device =3D device; +} + +static void hid_go_cmd_consume(const struct command_report *cmd_rep, int r= esult) +{ + guard(spinlock_irqsave)(&drvdata.cmd.lock); + + if (drvdata.cmd.pending && cmd_rep->id =3D=3D drvdata.cmd.id && + cmd_rep->cmd =3D=3D drvdata.cmd.command && + cmd_rep->sub_cmd =3D=3D drvdata.cmd.sub_command && + cmd_rep->device_type =3D=3D drvdata.cmd.device) { + drvdata.cmd.pending =3D false; + drvdata.cmd.result =3D result; + complete(&drvdata.cmd.done); + } +} + +static int hid_go_cmd_finish(long wait_result) +{ + guard(spinlock_irqsave)(&drvdata.cmd.lock); + + if (wait_result <=3D 0) { + drvdata.cmd.pending =3D false; + return wait_result < 0 ? wait_result : -ETIMEDOUT; + } + + return drvdata.cmd.result; +} + +static int hid_go_cmd_cancel(int result) +{ + guard(spinlock_irqsave)(&drvdata.cmd.lock); + + drvdata.cmd.pending =3D false; + return result; +} + +static int hid_go_send_output_report(struct hid_device *hdev, u8 *packet) +{ + int ret; + + ret =3D hid_hw_output_report(hdev, packet, GO_PACKET_SIZE); + if (ret < 0) + return ret; + return ret =3D=3D GO_PACKET_SIZE ? 0 : -EINVAL; +} + static int hid_go_version_event(struct command_report *cmd_rep) { switch (cmd_rep->sub_cmd) { @@ -654,7 +725,7 @@ static int hid_go_raw_event(struct hid_device *hdev, st= ruct hid_report *report, struct command_report *cmd_rep; int ep, ret; =20 - if (size !=3D GO_PACKET_SIZE) + if (size !=3D GO_PACKET_SIZE || data[0] !=3D GO_INPUT_REPORT_ID) goto passthrough; =20 ep =3D get_endpoint_address(hdev); @@ -707,7 +778,7 @@ static int hid_go_raw_event(struct hid_device *hdev, st= ruct hid_report *report, dev_dbg(&hdev->dev, "Rx data as raw input report: [%*ph]\n", GO_PACKET_SIZE, data); =20 - complete(&drvdata.send_cmd_complete); + hid_go_cmd_consume(cmd_rep, ret); return ret; =20 passthrough: @@ -722,7 +793,8 @@ static int mcu_property_out(struct hid_device *hdev, u8= id, u8 command, unsigned char *dmabuf __free(kfree) =3D NULL; u8 header[] =3D { GO_OUTPUT_REPORT_ID, id, command, index, device }; size_t header_size =3D ARRAY_SIZE(header); - int timeout =3D 50; + unsigned long timeout =3D msecs_to_jiffies(GO_COMMAND_TIMEOUT_MS); + long wait_result; int ret; =20 if (header_size + len > GO_PACKET_SIZE) @@ -740,22 +812,14 @@ static int mcu_property_out(struct hid_device *hdev, = u8 id, u8 command, dev_dbg(&hdev->dev, "Send data as raw output report: [%*ph]\n", GO_PACKET_SIZE, dmabuf); =20 - ret =3D hid_hw_output_report(hdev, dmabuf, GO_PACKET_SIZE); - if (ret < 0) - return ret; - - ret =3D ret =3D=3D GO_PACKET_SIZE ? 0 : -EINVAL; + hid_go_cmd_arm(id, command, index, device); + ret =3D hid_go_send_output_report(hdev, dmabuf); if (ret) - return ret; - - ret =3D wait_for_completion_interruptible_timeout(&drvdata.send_cmd_compl= ete, - msecs_to_jiffies(timeout)); - - if (ret =3D=3D 0) /* timeout occurred */ - ret =3D -EBUSY; + return hid_go_cmd_cancel(ret); =20 - reinit_completion(&drvdata.send_cmd_complete); - return 0; + wait_result =3D wait_for_completion_interruptible_timeout(&drvdata.cmd.do= ne, + timeout); + return hid_go_cmd_finish(wait_result); } =20 static ssize_t version_show(struct device *dev, struct device_attribute *a= ttr, @@ -2362,9 +2426,12 @@ static int hid_go_cfg_probe(struct hid_device *hdev, if (!buf) return -ENOMEM; =20 + mutex_init(&drvdata.cfg_mutex); + init_completion(&drvdata.cmd.done); + spin_lock_init(&drvdata.cmd.lock); + drvdata.cmd.pending =3D false; hid_set_drvdata(hdev, &drvdata); drvdata.hdev =3D hdev; - mutex_init(&drvdata.cfg_mutex); =20 ret =3D sysfs_create_groups(&hdev->dev.kobj, top_level_attr_groups); if (ret) { @@ -2388,8 +2455,6 @@ static int hid_go_cfg_probe(struct hid_device *hdev, =20 drvdata.led_cdev =3D &go_cdev_rgb.led_cdev; =20 - init_completion(&drvdata.send_cmd_complete); - /* Executing calls prior to returning from probe will lock the MCU. Sched= ule * initial data call after probe has completed and MCU can accept calls. */ --=20 2.55.0 From nobody Sat Sep 26 20:27:42 2026 Received: from mail-pg1-f173.google.com (mail-pg1-f173.google.com [209.85.215.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B195E3BB123 for ; Sun, 30 Aug 2026 14:57:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101841; cv=none; b=kKpkWABsUeCAcSEx90iLji7gSx62HOk8yf6Fm+FLhZL8tgDvj311gdYMpr8jo6SYQmlX38YeTMmBOY/VO/WQhxzzej0hj1E8SlRPqHamA3gF2LSFs1bk+odgUQWPErWb/0lIv9RdguhtsKDQ7aWW07Ehdy1Dt7J1uFipFdTDb9M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101841; c=relaxed/simple; bh=b1F0QGdcNcKqjBmJqPYaGuRqoPzwEbKHfEf64wpPqLc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QcSu6gDihhL4tsZLEZ1qQ+yqJYubVWpbVCZHQlvb/Dbj/YLUHo2+MaLR1ahSwXp2sHMDtsgk3g574oEGJ4IunbjdQmkk2avjbuquA3oiFt2Km1eLhNIZvQrpHaJUAB3j8D4smRaP2obnwLBVVoS0vQkhceYnlE/j2fq2ABVLUpo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Xghm78Ci; arc=none smtp.client-ip=209.85.215.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Xghm78Ci" Received: by mail-pg1-f173.google.com with SMTP id 41be03b00d2f7-cc1bcdb3c4cso1853181a12.2 for ; Sun, 30 Aug 2026 07:57:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788101840; x=1788706640; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Ia2lwM8sH8Xra67OChYDjtdRyZ6AcvO2JIxbnOb99b4=; b=Xghm78Ci3qo7kzjWYs0B91LTgEo0GhheRNJYGNGAZG8kHIOen4ku5zXU7l+FBcarGM cGZUBZOsDupgwQAeNpod5uaxMOaLI0syks5A5vohJ0McDlvzhwjLrnxTgpDYyku2LUFO rjf6yz1luOaMQ3xaJNr+SOHFeqAAjUA6orJozW+8MC2MGM9UHIvGXj2qLQ2eoA2gGfgc /DweK3wOuHd/7KR0zUYPviFcOGY3XNLP2dL2jh2npIDW98P4lUQqjILEl3UkYRZlq4In T6DAUdYeOzobuvf7m1o3gMYwdRWPYHeykCvX/EiE4GSSr9NJvKTDKzGmWw7di4CMSiX+ AfiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788101840; x=1788706640; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Ia2lwM8sH8Xra67OChYDjtdRyZ6AcvO2JIxbnOb99b4=; b=sdtnbc24fQKnmJJ7yjjL31r2C/+6nXYOEPIET+zLo9yURBFMqsd4T7jXk/U3tVUXmI 2mo8c+5kHwR6Ej1+jS9ONOXqCroXs60LCciDJl41UYNbd12tDfaUKu0XYXsLesTfaXjx fjTTO2cEn4hAMl4crE3J12/1HzxcZ+DHBb4RfKxlKYslSwdygQDrISui/lzV/2knvoMR m7c+XqgliwQmYozfgv1AOY5gqucvZC/l+mHi2W0xnkhLagH5aaWDMZxJhGE0qejpa6+8 qBJHc5rCj4nT/JdlqxFLHjgAkw9xjiyzQsbBP+6Rq17QP0TTrgN7rDRD2oOr3yItt/OO AibA== X-Forwarded-Encrypted: i=1; AHgh+Rq7TOlLDItYNudm/bkGR8H2dixcXMZlobDP6cRq+Sso7I7UF0iqiXjH1iGDW580oTDGFMYFEFdAG8vi7Bg=@vger.kernel.org X-Gm-Message-State: AFuF++lHHgFZ3DMHeoRxuwnEbfZ/IaPEhr1U8/kIHvFnko7DJ/XEjee/ it9qkTvRWWgUZ9bk8joSALW7FF09J5rJDfqWftzDM2FNjOKZcnx8l4dm X-Gm-Gg: AR+sD10wgaDm16j2at46zUC5h72yCVZRw+j5kkJ6zx6cDasvR2CI66Fc7nOpFeltrwJ 8W4WRL6Gxwo92wvA/3zdrdtbIW3w73JonVS0lCcAg1phXBjZuWJL0V51H7xjqLuv+eiS8N0+Qs3 qsZ6jhtmO4myCZs5R7aqjBuSYd1AJNRNbwk1StUIbSnntRtb/K3oxReT1ngiZGPlNj0eeaJ2HGV wJBBbqc0Fokia1BxCmU6Mqc2yYAtU+nEknZ2OJLokorCOqpo5+KpvgKaIgX+R806yVPBZ7Efp+m MYZbct0gjUBpCy7NSOfJckai5PF/jk2YngMdbZzdi1YjFnorPTX/mA/NJFeWIsgH3IXAMJb06pC CFJvLO6DzALP7l8d0S0tjsrxNjf3Nw+xpd6wyKg7Vht74Duvi8JMFpLOl4e665e/qPg7PDE6VHa OX3QqU7In3dTeEd/5rt7GcR3fytWqexpHPJwYhbcemlvHabd4DpF6+strEyqNMCDDt4i7xyk8uC eTPNM0pikXldlmKJzI= X-Received: by 2002:a05:6a20:9151:b0:3c0:b943:f984 with SMTP id adf61e73a8af0-3d2658376f7mr29403739637.3.1788101840016; Sun, 30 Aug 2026 07:57:20 -0700 (PDT) Received: from localhost.localdomain ([103.16.69.193]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f959575sm23198024eec.15.2026.08.30.07.57.17 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 30 Aug 2026 07:57:19 -0700 (PDT) From: Aditya Dash To: Benjamin Tissoires , "Derek J. Clark" , Jiri Kosina , Mark Pearson Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/6] HID: hid-lenovo-go: normalize calibration failure status Date: Sun, 30 Aug 2026 20:26:56 +0530 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- 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) =20 static int hid_go_device_status_event(struct command_report *cmd_rep) { + u8 status =3D cmd_rep->data[1]; + + if (status > CAL_STAT_FAILURE) + status =3D 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 =3D cmd_rep->data[1]; + drvdata.gp_left_gyro_cal_status =3D status; return 0; case CALDEV_JOYSTICK: - drvdata.gp_left_joy_cal_status =3D cmd_rep->data[1]; + drvdata.gp_left_joy_cal_status =3D status; return 0; case CALDEV_TRIGGER: - drvdata.gp_left_trigg_cal_status =3D cmd_rep->data[1]; + drvdata.gp_left_trigg_cal_status =3D 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 =3D cmd_rep->data[1]; + drvdata.gp_right_gyro_cal_status =3D status; return 0; case CALDEV_JOYSTICK: - drvdata.gp_right_joy_cal_status =3D cmd_rep->data[1]; + drvdata.gp_right_joy_cal_status =3D status; return 0; case CALDEV_TRIGGER: - drvdata.gp_right_trigg_cal_status =3D cmd_rep->data[1]; + drvdata.gp_right_trigg_cal_status =3D status; return 0; default: return -EINVAL; --=20 2.55.0 From nobody Sat Sep 26 20:27:42 2026 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 763753BB109 for ; Sun, 30 Aug 2026 14:57:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101845; cv=none; b=iqoszm0Ec0xX4Hai5PhpCLyMNFw2nfaBN+4e9/6UbHe7xOenyVhbOhU2233nGi4k9qlDX4Hhn1zhDNT9fP6tjPh3366nMX5pIWjWzoWewd83gE2oeYD8YnvlQBgT5hRRuNxUqbhhnHbBS+YOhrzibF9zo9Kh0LbLLAKiFeosrlo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101845; c=relaxed/simple; bh=0zLjl9mkMBOOhDmSCV77z2Ywd7ode1Ah9a1MkAcZ/OI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fxCkrcPvZJGg21XEp/L9Uoix9/A6RDEBTjl0sKFaRZWe1N9DuxtwodWrBgJQPN+Z3Hqnj1IIWJWRyYamyTig7zG0JSL08sK/Hi2NaQ7LbJ1/bMJ0SmNlg7HmFawTXjLvUUujobw5+eveeKrKj1BMpF/QU552fa3d9fK6Q1URC3s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hVhvKLDN; arc=none smtp.client-ip=209.85.215.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hVhvKLDN" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-cc1e1ff659bso2257450a12.0 for ; Sun, 30 Aug 2026 07:57:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788101844; x=1788706644; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=FijoARYQvxvOMp0D7nTD2Ip0kQ4rcp88ZBCNLuIH6S8=; b=hVhvKLDNRy/VjcsHchtrd6t0TtSQdeZPHA4DSF0cA9jmskQpjky6jIupP9L1P6XqpL nrEsAKgsru+Um9y25X0Npox2+WKsOWzRbF11VUpXaBS7VN+UjwziY2M27zL7WkQYCXWQ Vzf7DNO/brQ7wC152WjOnRTaFW3C3AtwEpScJUlPdvQAoYN9w95h831XrjmhdKodgAdM k1+KwkdD63ngxaViccSzhWnhF6GUp0yMbWwzN9VzHAqFlir7omzPvJfFz50bdEYvNXyp 2hR4YO5BSTsoy5f4oAI8Pni9C4aoCWrMSt+wZo49iQpOvRN81SKzPOrkLkiTizPDoINK q7Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788101844; x=1788706644; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=FijoARYQvxvOMp0D7nTD2Ip0kQ4rcp88ZBCNLuIH6S8=; b=UjW5z5phMGXuHCgPKpVXxiKivwircee0wVg0fwKL+F5Bpf+hi85neVCuYp7l9cVDsN 2LjPmz6p5wSBVmyE3zDlbC70K3CknTGVDmf7Yf20UVDkyeX7cEIPbcA2ufIM0U1vBH1K tVNkR05FfD+0Roxem3yr044724+9uH5IPO3AFHKSDm07lIaGMo+fzRrRxbHwpbhz2l32 7/mGUaTHc5HZffZmlKXjCMhdZo+tqITCi5YT5YUyTlD5GUS2xdrx4gpqb/w5sxmHkl6M bqEnh828LV3d5Udzs+R1MymThBz7eJvSjSEIAoOnkm214BGJDu7Fp9cR16G9wKCvr60V f67w== X-Forwarded-Encrypted: i=1; AHgh+RoNkVck4QskeJeDA/ZhDNN1V8LdlKRr3avb76ssLMwrNcMKoBSBeXfWedBdwOJBSo0/5MCeIYHQJTLs7J4=@vger.kernel.org X-Gm-Message-State: AFuF++lp8qlXI10t8IxFqK7YW3GqnPE4ocREEj9bSu0jyNswW/uQY5TJ XQGCdaKzy/D/cdWCRBnqNRICoxtc8R3BvsDV8Yfkm/Ol956FR+A+RtdP X-Gm-Gg: AR+sD13nxN6dWETJVg6HjEFJe/BUu9fY4C4v7vt2RsPKVPOqIVZJTyaOk1H6mad0loX t1yzIcwpuDTSZXt58vKxY8YaiSjYfK+g8Tt7U1vzzR7aheqTw180vbBF71NS4DSYkkBoZxgjsVB 4vDKkANe40zI388s8XC/SVDibF5LjWJRxdUfOZdNpY7+sDxBI3vMjDNSoInk9U8JxkUaw/tZWe1 qOHunape81lzWep7C1ungP05cofWkjQa2eXHeYglTh1bCQwKY8+1xEZM1MTLbGKYdOKUf5ltycN mt2WvMtNXgR9jw1oBg1H+Ral7U6DzTzR+X5z+0blMNsIVM1Kp0cg4C6xZIRz6trOF3hsz1X9JxT qdELXaCeHQF3oANHrXX3tbFWulPxuiz6MEQsGxnrBC8gCoR1y72SWYX0E3FRV/r0L6GNa4Bv/Z6 sB5xmsg4C5n1Yr2E/lw0A8M2OgBK1Aja+xsHHJjwcv/f39ZbD1HbiXppWaqiLogClgEqrMVMetN n06QeiP0PozpXsbEN0= X-Received: by 2002:a05:6300:6d84:10b0:3d5:3420:8d73 with SMTP id adf61e73a8af0-3d53420a6f4mr4844618637.17.1788101843292; Sun, 30 Aug 2026 07:57:23 -0700 (PDT) Received: from localhost.localdomain ([103.16.69.193]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f959575sm23198024eec.15.2026.08.30.07.57.20 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 30 Aug 2026 07:57:22 -0700 (PDT) From: Aditya Dash To: Benjamin Tissoires , "Derek J. Clark" , Jiri Kosina , Mark Pearson Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/6] HID: hid-lenovo-go: reject unknown calibration action Date: Sun, 30 Aug 2026 20:26:57 +0530 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The calibration action table includes 'unknown' at index zero. The options attribute skips that entry and lists only 'start' and 'stop', but the store searches the full table. Writing 'unknown' therefore sends a request without an action byte. Reject CAL_UNKNOWN before building the request. Leave Start and Stop unchanged. Fixes: 995887a10da1 ("HID: hid-lenovo-go: Add Calibration Settings") Assisted-by: Pi:gpt-5.6-sol Signed-off-by: Aditya Dash --- drivers/hid/hid-lenovo-go.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/hid/hid-lenovo-go.c b/drivers/hid/hid-lenovo-go.c index c7a2e621a4ad..a4231d188b7a 100644 --- a/drivers/hid/hid-lenovo-go.c +++ b/drivers/hid/hid-lenovo-go.c @@ -1419,6 +1419,8 @@ static ssize_t calibrate_config_store(struct device *= dev, ret =3D sysfs_match_string(cal_enabled_text, buf); if (ret < 0) return ret; + if (ret =3D=3D CAL_UNKNOWN) + return -EINVAL; =20 val =3D ret; if (!val) --=20 2.55.0 From nobody Sat Sep 26 20:27:42 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DCA203B9DA2 for ; Sun, 30 Aug 2026 14:57:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101850; cv=none; b=GqXoxYWfkuC2W/IWSV2t6Hawart+1hp970yhb6g2etO6hCu9PyLxm6tAFDtelAncx0Jj25EAMojqBdrGknONZ9Rf7KsTzqSvQHITr7rDrD1Ek9UwAINLSf51exmAOEbFXHpG+q0xSZ+Zhpa4EuZ3WsCL+jgoJpZ9Q1qNmz3RDvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788101850; c=relaxed/simple; bh=kyvKj4aiWZsKk79+pNQWhtdDGQxbcy8DpffoE6tdXoo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f2U4Zs6T6bFxK2ykhqvdi7J9MqPvEwCgbBv6JtkCrPDlX/hjjRTP5QMdfZ7NUm3oAtYkIGVu18jvPEzNdkF7a0r2ZNHGsO15GfdoEvqhIlyw7hHllppSQtIfNlOwKnAnthYg1DRRx0zmra+SGiGiV1gza07vGSfg5ox+hASXGm0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=WtJchbg4; arc=none smtp.client-ip=209.85.216.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WtJchbg4" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-39682983a0fso3202772a91.3 for ; Sun, 30 Aug 2026 07:57:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788101848; x=1788706648; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oJZEG3Xp29mb0hdnLyMA9g/sKI7+pcsw2OATsKuZZuU=; b=WtJchbg4LUckSdKeFZTWm3PvYIabhUE5bPOz/fuHIM6PdM69b+YUooxwOMwaWrxDDF rQkiGcrH6xYEnBPZXY6k58oKdyLWwcB9JhbLDCLQ4hMf9KvilE1XO4huzArhgDQa/Nun xOzG8p/KCm03U/EZrDgIQBGxja6r/ubpytbSJTBhZqPPpQne9Zh3UxsQfZ6QI3Ifdb02 PFXrMtxW/BXd/xILLQnGlAi4j1dE/7fJjMfLM/oewLVJTReTjx7KGJaL5zTxcIGls8bH 31U6g8GQQBTKQPyExWdnlW9HID3KALC51joREh9qgVHDcMFAMWl+jezCbD07IpzScvWC 4nMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788101848; x=1788706648; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=oJZEG3Xp29mb0hdnLyMA9g/sKI7+pcsw2OATsKuZZuU=; b=gwTUZukH8okj9z4Skb6TOyGL6MSAaO01nTirrQLfAW0j400jf2UZvd/Kdwoen5b7M9 U5fahoRCS25c650OT6UJ0jiMjYLjaJ/+86+9OLtFoG8/l2IFGVqvGOzHSJAO+HVS7MsG 7PBsdz4W6yc5cdIX/wDmCuX8oi92GwuD6xSyCVn900lUBg7kRYCo3w1+Xrn+sYXvoUO+ hK2DlH2nAkea/gyi8pPChN7Y0q012qJRQqufQvSINdIlQU9DofvonQdwsi/1JoLux9pB DrhkGk7HKGwlKM7Vhz04yi1bNnXyoBiiYcS0or65taZMtRLhzPVZCut2YsSJBEOchXh5 yXVg== X-Forwarded-Encrypted: i=1; AKwUvBzVuPkNbMTARLtL74cc5pRF9rWDie53bfEkp98O+o1ZoSKj3KLiPug8OEmnWCEePRmle0/q6B4njp0LhJ8=@vger.kernel.org X-Gm-Message-State: AFuF++n/y1SVyGlxQ9wIVkKaDFvEdV9H0P73hSvms73q6h3FhF8hw3uj x6n/lwWrk2R2p1UDXxNYYHGuK7MnkA98WA18CydPfEw7gWM4HgseJ2Nv X-Gm-Gg: AYBFou1dRrObi/QbPS9QiRCSyoJaVbT9rQX0iY4kSTz/RR6h0kwvSP+IM+H6hgRklgW 7SRKkW4nimqDNoxTBwCU8hBcNUArjlfBrP2oizCo56JGdHZ4Tf2jEa78ENaXb7sjcUagV/4Zf5t abbZT2f8dXIME/kGtS1bFhwW+Gi4YtG0+ohgVLuo7gUyYeQ6c1wu3Qk8wmiM7fXkGg85ng9qJDL WYYiPuzxx5eQoaFr0t/OfbSrD+qtg3aed8JgRllTS8blNpofRuKxopFecjH2HLIISdbrdTIkkqB f7KJxvfaQKQKF+8wDIVeR8xo9OFtbk+5H7eNh0D2SYoKAapVVnhPwieHVRmpoL7jUK5LvnWAk0I kiYZqA30ekT8RJDbmwwOUv8KTsfmOdliTDBbbWr9NVlvfteXGcTDPQ1tOkiArwOHGkKDKDjQxb9 J7Ubba29jz3PQdpLG2DvYwl616ypCt+zq8hJYCX41Af+KP8MfsV0wmtLE+zEVZPIBkjzr/qBVYn i5VlLCDk8mfEGT42Tw= X-Received: by 2002:a17:90b:3c83:b0:398:9bd5:490b with SMTP id 98e67ed59e1d1-3989bd54c84mr18297077a91.18.1788101847980; Sun, 30 Aug 2026 07:57:27 -0700 (PDT) Received: from localhost.localdomain ([103.16.69.193]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3286f959575sm23198024eec.15.2026.08.30.07.57.23 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sun, 30 Aug 2026 07:57:27 -0700 (PDT) From: Aditya Dash To: Benjamin Tissoires , "Derek J. Clark" , Jiri Kosina , Mark Pearson Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 6/6] HID: hid-lenovo-go: clear calibration status on start Date: Sun, 30 Aug 2026 20:26:58 +0530 Message-ID: <931a17ea1ce972af018252681a253a21465ad494.1788096668.git.mradityadash@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" A completed calibration leaves success or failure in its status file. If the next calibration has the same result, userspace sees no change and cannot tell when the new attempt starts or finishes. Link each calibration action attribute to its status field. Set only that field to unknown before submitting Start. Stop leaves the status unchanged, and the next firmware result replaces unknown with success or failure. Fixes: 995887a10da1 ("HID: hid-lenovo-go: Add Calibration Settings") Assisted-by: Pi:gpt-5.6-sol Signed-off-by: Aditya Dash --- drivers/hid/hid-lenovo-go.c | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/drivers/hid/hid-lenovo-go.c b/drivers/hid/hid-lenovo-go.c index a4231d188b7a..2ed367abd4cc 100644 --- a/drivers/hid/hid-lenovo-go.c +++ b/drivers/hid/hid-lenovo-go.c @@ -111,6 +111,11 @@ struct go_cfg_attr { u8 index; }; =20 +struct go_cal_cfg_attr { + u8 index; + u8 *status; +}; + struct command_report { u8 report_id; u8 id; @@ -1410,7 +1415,8 @@ static ssize_t device_status_show(struct device *dev, static ssize_t calibrate_config_store(struct device *dev, struct device_attribute *attr, const char *buf, u8 cmd, u8 sub_cmd, - size_t count, enum dev_type device_type) + size_t count, enum dev_type device_type, + u8 *cal_status) { size_t size =3D 1; u8 val =3D 0; @@ -1425,6 +1431,8 @@ static ssize_t calibrate_config_store(struct device *= dev, val =3D ret; if (!val) size =3D 0; + if (val =3D=3D CAL_START) + *cal_status =3D CAL_STAT_UNKNOWN; =20 ret =3D mcu_property_out(drvdata.hdev, MCU_CONFIG_DATA, cmd, sub_cmd, device_type, &val, size); @@ -1822,7 +1830,8 @@ static void hid_go_brightness_set(struct led_classdev= *led_cdev, const char *buf, size_t count) \ { \ return calibrate_config_store(dev, attr, buf, _name.index, \ - _scmd, count, _dtype); \ + _scmd, count, _dtype, \ + _name.status); \ } \ static ssize_t _name##_##_rtype##_show( \ struct device *dev, struct device_attribute *attr, char *buf) \ @@ -1982,17 +1991,23 @@ LEGO_DEVICE_ATTR_RW(rumble_notification_left, "rumb= le_notification", static DEVICE_ATTR_RO_NAMED(rumble_notification_left_index, "rumble_notification_index"); =20 -static struct go_cfg_attr cal_trigg_left =3D { SET_TRIGGER_CFG }; +static struct go_cal_cfg_attr cal_trigg_left =3D { + SET_TRIGGER_CFG, &drvdata.gp_left_trigg_cal_status +}; LEGO_CAL_DEVICE_ATTR(cal_trigg_left, "calibrate_trigger", TRIGGER_CALIBRAT= E, LEFT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_trigg_left_index, "calibrate_trigger_index= "); =20 -static struct go_cfg_attr cal_joy_left =3D { SET_JOYSTICK_CFG }; +static struct go_cal_cfg_attr cal_joy_left =3D { + SET_JOYSTICK_CFG, &drvdata.gp_left_joy_cal_status +}; LEGO_CAL_DEVICE_ATTR(cal_joy_left, "calibrate_joystick", JOYSTICK_CALIBRAT= E, LEFT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_joy_left_index, "calibrate_joystick_index"= ); =20 -static struct go_cfg_attr cal_gyro_left =3D { SET_GYRO_CFG }; +static struct go_cal_cfg_attr cal_gyro_left =3D { + SET_GYRO_CFG, &drvdata.gp_left_gyro_cal_status +}; LEGO_CAL_DEVICE_ATTR(cal_gyro_left, "calibrate_gyro", GYRO_CALIBRATE, LEFT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_gyro_left_index, "calibrate_gyro_index"); @@ -2089,17 +2104,23 @@ LEGO_DEVICE_ATTR_RW(rumble_notification_right, "rum= ble_notification", static DEVICE_ATTR_RO_NAMED(rumble_notification_right_index, "rumble_notification_index"); =20 -static struct go_cfg_attr cal_trigg_right =3D { SET_TRIGGER_CFG }; +static struct go_cal_cfg_attr cal_trigg_right =3D { + SET_TRIGGER_CFG, &drvdata.gp_right_trigg_cal_status +}; LEGO_CAL_DEVICE_ATTR(cal_trigg_right, "calibrate_trigger", TRIGGER_CALIBRA= TE, RIGHT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_trigg_right_index, "calibrate_trigger_inde= x"); =20 -static struct go_cfg_attr cal_joy_right =3D { SET_JOYSTICK_CFG }; +static struct go_cal_cfg_attr cal_joy_right =3D { + SET_JOYSTICK_CFG, &drvdata.gp_right_joy_cal_status +}; LEGO_CAL_DEVICE_ATTR(cal_joy_right, "calibrate_joystick", JOYSTICK_CALIBRA= TE, RIGHT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_joy_right_index, "calibrate_joystick_index= "); =20 -static struct go_cfg_attr cal_gyro_right =3D { SET_GYRO_CFG }; +static struct go_cal_cfg_attr cal_gyro_right =3D { + SET_GYRO_CFG, &drvdata.gp_right_gyro_cal_status +}; LEGO_CAL_DEVICE_ATTR(cal_gyro_right, "calibrate_gyro", GYRO_CALIBRATE, RIGHT_CONTROLLER, index); static DEVICE_ATTR_RO_NAMED(cal_gyro_right_index, "calibrate_gyro_index"); --=20 2.55.0