From nobody Fri Dec 19 14:21:10 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FB3423D7DA; Wed, 5 Nov 2025 23:22:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; cv=none; b=AHmWSI9rbvW8ULohGzYyu5XSEa/N8ki/+iSozzcbBQSrtlvsf70fuVdXzpL1wChOscd+vVJ5H5rWWoDyXceOTIvb6eBll+hA9+Xf9x4MEn1D4DUP1FQmJqREzTFxMfOHmm0KrwoLizIDaww8jP+bTjSA27nnkLdNveBQKkTN1tU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; c=relaxed/simple; bh=8vNtLMJW7sfLRG69Q7Ef3VqR5cfx+nfcbE6oqTigqlg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mqcyHU3Dtci1YwpSRaN7s8lkhhjog+ySyvXVWYamMW1Z9xeldW95YUDpRaQGnWu6wsi6mkaKlNLo6gbiGxkJ3y5RGQm52L2a5OiWNVyjjY1Ghhr3kP8fYYJuQfiihpdh9glcLJJVlZTT86IbqoLVssFpbO+pZ0BeJ2v3FG+0R/0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=b290bynC; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="b290bynC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD985C19422; Wed, 5 Nov 2025 23:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762384970; bh=8vNtLMJW7sfLRG69Q7Ef3VqR5cfx+nfcbE6oqTigqlg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=b290bynCIAD6N4jh8Rwy39MO6jdV8s2FtQ/jvdHr5Vm+BgU2R0gm9hAlRG5WA4xaY 2zo1o367oxUbgPN7Zo78u+ImhtSfqLbxlrsnrZ6/V5F1UEvEH0yaX0SY8/Ul7Xa3YY /mMN+oEiSYNNrsEQljgHQkmDR2h0Wmj1i7WyStDt3jqxEFgA2Dcg6JLAE5MNjfdbk+ 9Rw/50qrnGEv5bx59T0QaQbNtyXdrH7Y3ZaoviqGoRy+39kNny7IUdwRVY9zwGRgHg 9oEmMEO63b8/05aWyoE2iYclSk8182A1PGThjqBn8rw3mDO+SBmMJrFA5jGqwE9bdX EeYBnD/aVZWnw== Received: by venus (Postfix, from userid 1000) id 442B61802FE; Thu, 06 Nov 2025 00:22:45 +0100 (CET) From: Sebastian Reichel Date: Thu, 06 Nov 2025 00:22:40 +0100 Subject: [PATCH 1/4] platform: arm64: thinkpad-t14s-ec: fix IRQ race condition Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251106-thinkpad-t14s-ec-improvements-v1-1-109548ae75c0@collabora.com> References: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> In-Reply-To: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> To: Sebastian Reichel , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bryan O'Donoghue Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1698; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=8vNtLMJW7sfLRG69Q7Ef3VqR5cfx+nfcbE6oqTigqlg=; b=owEBbQKS/ZANAwAKAdju1/PIO/qaAcsmYgBpC9xD1AgyIQqyoF/XbjkPDWyo4oX9Umr/XgcFA b+ov2HKL8aJAjMEAAEKAB0WIQTvZg0HRj+Lcmp5VBPY7tfzyDv6mgUCaQvcQwAKCRDY7tfzyDv6 mo2RD/0a2ZM60/zbuXgcoGTVmC2PdUelh3SW4sFUvqCU+CZjJFmpNtOR0KgUD2nCN+5LczsZPPZ cQQgufJ3l9O4zhRp0oDxwkxz2rmaOBOUS+FK+YpLSd9yoN02rcS+OrSXvKGBMbjBMKDe8P+9kbm 6M2mN0aiiS3QoNuOI9x4BfMfzfUXVL7yf+GuD8O1cmowhaHlSa1cu1YTm0QlTZ6T3erY3kNf9bS rymGxIpdZ2F0k1VU6GoQ9qZ7kdGovnD/WWJf0TrSTT4pXIiAsp0Vejx0eCfHPofLjXDFFBNJKfu hfdBwqPyoo3CqGoirfUmiEZNPD/j2rhOkq+U4b2j1H491o2ihvgYM3QCS8r9tEwOfCrW+6mHa8k +39WNYLcnpmjcnw5kKbnBOpM9jA++Ddc0SDNWa7NkBgT4n/1WSpVmXZPW0vMQ/chA5BI2qMBoJj 0fjmkp7EAQq1RX+WURi6HYvNA8T8Kg44XmqUWxo0Ik+/1LTPG2Zpwtyj2SVLjb8VnEHAhFUzHVD lVmP9WK8pK8k94osOn0Cu8qbabvcWeCWzuj81Py3miKgy5+b7kJHMFL4qJALRCXtxC4X40u2vSE 6TlZT4oh3zYdD1p0AiVUocUTW7nsm7DKVIIMBgSXRnFjI8OdvlLZaXPfUnpwzthlaAkDfGAoYT5 uGQ/safzmlBFk/Q== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Fix a race condition, that an input key related interrupt might be triggered before the input handler has been registered, which results in a NULL pointer dereference. This can happen if the user enables the keyboard backlight shortly before the driver is being probed. Fixes: 60b7ab6ce030 ("platform: arm64: thinkpad-t14s-ec: new driver") Signed-off-by: Sebastian Reichel Reviewed-by: Bryan O'Donoghue --- drivers/platform/arm64/lenovo-thinkpad-t14s.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/platform/arm64/lenovo-thinkpad-t14s.c b/drivers/platfo= rm/arm64/lenovo-thinkpad-t14s.c index 1d5d11adaf32..c1c01b977f2b 100644 --- a/drivers/platform/arm64/lenovo-thinkpad-t14s.c +++ b/drivers/platform/arm64/lenovo-thinkpad-t14s.c @@ -557,12 +557,6 @@ static int t14s_ec_probe(struct i2c_client *client) return dev_err_probe(dev, PTR_ERR(ec->regmap), "Failed to init regmap\n"); =20 - ret =3D devm_request_threaded_irq(dev, client->irq, NULL, - t14s_ec_irq_handler, - IRQF_ONESHOT, dev_name(dev), ec); - if (ret < 0) - return dev_err_probe(dev, ret, "Failed to get IRQ\n"); - ret =3D t14s_leds_probe(ec); if (ret < 0) return ret; @@ -579,6 +573,12 @@ static int t14s_ec_probe(struct i2c_client *client) if (ret < 0) return ret; =20 + ret =3D devm_request_threaded_irq(dev, client->irq, NULL, + t14s_ec_irq_handler, + IRQF_ONESHOT, dev_name(dev), ec); + if (ret < 0) + return dev_err_probe(dev, ret, "Failed to get IRQ\n"); + /* * Disable wakeup support by default, because the driver currently does * not support masking any events and the laptop should not wake up when --=20 2.51.0 From nobody Fri Dec 19 14:21:10 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FC8F29BD80; Wed, 5 Nov 2025 23:22:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; cv=none; b=s6jhFJvVnMTodVpu7kKmggmN+8O5dox0vVWbPdFlrD1535TtZy1KJV7nSocqVhxbbHLuFlA/3413Ap7gdLCdDbcAkSvuCxJGgO8YMZsSQpotrroEkHn46pHrXwhpEbjMBNuYHI77FF66/5vL15ixd4aPC6XzjOMI0oKhu3NKfsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; c=relaxed/simple; bh=AegkBlTWPLHplrOMY76sYBaHhKq8AoJxhlaNcb0ph3s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gLWsD6dUeuOq45AovaZmLwV50fy3dKNn3+bPdNYQum81ndiCXwLxTao3E+vQrfhWF/U/kta4DvNW/vWSv+1IoZIIOVGqwlC3g4M2hhfLQfpXItIYbInUKgaZOdyxU1HqF/EKJtoRAwEbw9K6hUYUcEnB9ZzSu+leHF+TBk8tIdA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=u4WKOYE4; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="u4WKOYE4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B06CCC4AF09; Wed, 5 Nov 2025 23:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762384970; bh=AegkBlTWPLHplrOMY76sYBaHhKq8AoJxhlaNcb0ph3s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=u4WKOYE4oLgKcVuyNGMgvl1Ur38azGDrJWp0vsxJS58IxGm0kxpdLKuVwenvyNj+L maBuEjVDmUzClH1MvxSnbtsICWU4XGQrNL+Ys2F0sdohhlvLWoxd+CMczN8u1ByXHO 4MrmwUJGkP1aJxMKItbW3G3qceK1P19CYFlbRPzWMCORartlLyBBhJM09b0aswDQgf /MyJ8Q2n/g+zv0Lhe8E8xRWpzLhUZ6qfnV4eXhr8VfTds6ZqRuFE325aHcDvNoMUIa UMh1WaynzuLbsGk7AXmBdMB7unZNx7zAsVSzPL47sOzao4h4c6p5mDdrxaJsDof3RE 1orLbDWexeRaA== Received: by venus (Postfix, from userid 1000) id 44DDC182F6D; Thu, 06 Nov 2025 00:22:45 +0100 (CET) From: Sebastian Reichel Date: Thu, 06 Nov 2025 00:22:41 +0100 Subject: [PATCH 2/4] platform: arm64: thinkpad-t14s-ec: sleep after EC access Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251106-thinkpad-t14s-ec-improvements-v1-2-109548ae75c0@collabora.com> References: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> In-Reply-To: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> To: Sebastian Reichel , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bryan O'Donoghue Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1741; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=AegkBlTWPLHplrOMY76sYBaHhKq8AoJxhlaNcb0ph3s=; b=owEBbQKS/ZANAwAKAdju1/PIO/qaAcsmYgBpC9xEAoZ96gfKRSYj5JFtmlceFmE+TjO9NVADV nld9NxWYVGJAjMEAAEKAB0WIQTvZg0HRj+Lcmp5VBPY7tfzyDv6mgUCaQvcRAAKCRDY7tfzyDv6 mny+D/9mxOaGXHvXmeTrJbu34jconu+Pc4W17cRYVKvOJgKwcKGTAxIzXyXlSt78DkZWIeB3lsm 6DTNMmeKrxSL15txjbLTTDH2L+TZ+1/y3ltEfbcwD+bkr7rY5O6ZBxNGLCjo3K+Y7kryIRAgMk3 yFCf0jfOmREOgXwNcWPyGOkunMjFNdEclGRlfXOzKcH05wj5O+GaDgFFRB0aZCM5WjsxJrx3LPB jh5sVA43jy5frB+1y7WIkBnYl4R0MKO+BJCOej9YExWNH+JH1CMctVPPno3/WjboN2KOHhZbsKm ZBQRYf7mhXX9mQC9W1bv9yD/W/AlGAksBawwxBkszACDbR+j7OpwO0XaUX14yhzs9NXUpdewgcm VAjsc6Xd/44kWlInnDvnR4iZ+vaYgQR10bZJhiUhUMBnhuokJdgcS/kZozZgobnuW6p+R5/7SIg 6OpyKZiAVaziX+uwtrdVnmsz1ujBKk96J57rfAN+vkXXKvVGThah7V80OfeReMvcI1cUmdpkijd FAU4LYbJAMsqRteSU4Q0GnRvd5gM2akBnfFeW9WGITclOwWiVVtyNGQvCHU0BLpxMP+aiaYbAgk Z8rMpiA4KhI1KuaqUPbOz1kNeJ4++7D5V6wHvM5Xm6SlDO8w4bQRxrVMm9iA2ijzU+Qgt8pPX1Y 1dwKL7t/4D+xyCw== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A The ACPI ECRD and ECWR functions have a 10ms sleep at the end. It turns out, that this is sometimes needed to avoid I2C transmission failures, especially for functions doing regmap_update_bits (and thus read + write shortly after each other). This fixes problems like the following appearing in the kernel log: leds platform::micmute: Setting an LED's brightness failed (-6) leds platform::kbd_backlight: Setting an LED's brightness failed (-6) The ACPI QEVT function used to read the interrupt status register also has a 10ms sleep at the end. Without that there are problems with reading multiple events following directly after each other resulting in the following error message being logged: thinkpad-t14s-ec 4-0028: Failed to read event Fixes: 60b7ab6ce030 ("platform: arm64: thinkpad-t14s-ec: new driver") Signed-off-by: Sebastian Reichel --- drivers/platform/arm64/lenovo-thinkpad-t14s.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/platform/arm64/lenovo-thinkpad-t14s.c b/drivers/platfo= rm/arm64/lenovo-thinkpad-t14s.c index c1c01b977f2b..cf6a1d3b2617 100644 --- a/drivers/platform/arm64/lenovo-thinkpad-t14s.c +++ b/drivers/platform/arm64/lenovo-thinkpad-t14s.c @@ -120,6 +120,7 @@ static int t14s_ec_write(void *context, unsigned int re= g, if (ret < 0) return ret; =20 + fsleep(10000); return 0; } =20 @@ -157,6 +158,7 @@ static int t14s_ec_read(void *context, unsigned int reg, =20 out: i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT); + fsleep(10000); return ret; } =20 @@ -191,6 +193,8 @@ static int t14s_ec_read_evt(struct t14s_ec *ec, u8 *val) if (ret < 0) goto out; =20 + fsleep(10000); + ret =3D 0; =20 out: --=20 2.51.0 From nobody Fri Dec 19 14:21:10 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FBB529992A; Wed, 5 Nov 2025 23:22:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; cv=none; b=UMg9H16Y6FEZbac1t33kmW0Fpf9B7+4vAYPtHmw2wLEbQOP5VIFiWZA0dBY8Dpu6mItRv0S2p0JFS0j1upXK4YjCd8qlspO6hAS6VnQuDM7HfgwbY5J7eeVIGeeytAxXRJrq9bPEzj3xYx8gipPMhQXWKilT6hzdDDOxPlU+sVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; c=relaxed/simple; bh=wj2z/mQnfovd4mP9FQv1DsT4dhdiICn6n0XvPLhdE/Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D6BPsxj3OS/mgbtn2/FFArNPWN69/XS9F92P61HM5ABZ2TCHvOFWDG+gZjwBk/3f80tECnIfJwSik5SyGQkyFllRdn3GsU3iG67SSP3gOcOEBqzIdMCGL3tTgNIrZtk1dqq7xMjpEdk22itfJgnydDQFFZ3f9ntdFIH2kOmJlBI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YF8ue5D/; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="YF8ue5D/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AB33DC19421; Wed, 5 Nov 2025 23:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762384970; bh=wj2z/mQnfovd4mP9FQv1DsT4dhdiICn6n0XvPLhdE/Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=YF8ue5D/mWqg+gZAN9XDYeFgvB9yfhdbs9c2sUGmJ5GNzsJWuDULhW9z/8uI33mmv bgcrWqZAFLOmJp7lEW63jQSgh25HcbzKBqY9L7Crv5w72Do9n90AmEJBfgyWMzqBwL YmbXDX+Ml2jJGVQ7IRDtv9RTUcELplw1KPXIfZUOg5iTdb/F1SRO2D8PSr6Bm0EEka I7Pbq4hB1HUhx/UkynBcHGY4tfrRqJLo4lMDkjVW1uCAHFE/6qI7WW+JyHxGMdZy5X ADwm3AW1fRcTxWMuRrndKhLHiEKftRzqWER8lQK6q3j5GO8jvM4GLrO1vsF0ERZEbU UrsHywWI3RxLQ== Received: by venus (Postfix, from userid 1000) id 46B98182F6E; Thu, 06 Nov 2025 00:22:45 +0100 (CET) From: Sebastian Reichel Date: Thu, 06 Nov 2025 00:22:42 +0100 Subject: [PATCH 3/4] platform: arm64: thinkpad-t14s-ec: add system PM hooks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251106-thinkpad-t14s-ec-improvements-v1-3-109548ae75c0@collabora.com> References: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> In-Reply-To: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> To: Sebastian Reichel , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bryan O'Donoghue Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3686; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=wj2z/mQnfovd4mP9FQv1DsT4dhdiICn6n0XvPLhdE/Y=; b=owEBbQKS/ZANAwAKAdju1/PIO/qaAcsmYgBpC9xEa130x60Pmp4qujfQYqDArzhM7qW819UBt mNoGe4gJPyJAjMEAAEKAB0WIQTvZg0HRj+Lcmp5VBPY7tfzyDv6mgUCaQvcRAAKCRDY7tfzyDv6 motfD/4v5NHB4HJ66cutp+pZYAbZjZwMn1HHtV/T/2GHcHb8jr47d8n7vmqP9eSx5wjH4JiAen2 WzujZOfQbtbi3lN6glyNz5ns7EihxRmptvJ68z1oXPR4/5/CDmaRpqomGaPxmQLeYI69JC32sb/ 7yHtFtm5lmP6iWl3Gl+G9+4/T8o/y5mmQy/AVr8qjGQdZ7LWyRHnAuHyr/gooVgll+z/YVATInu 4eCKNFv6WdLMSkEUx53j4IXZV5yAmmmtGLS3PBrfuVCC0h2WySxH7g/V5sIpEfRyqahirIF7eBB g0d8LhOsl95FM5duXxxzDMiAP7IV/27aEkF4uGKcl3e2vBbrwQ619OmtbHVmjMFxC71NJxdlChz ixyARudQ1O4KnmylVekw1gwPb3B716IRhIteGi8omnlJexJWKG2s0arBdtAdU1BzX7KixeR3B9z APEc9GGIt69qJbsE9o/RFikoi22QOqhDC5xOUgc5nVsdM+hAhmR+vN8i3/2tcOHRHEKFQcEtG1z GW1Hf+1gZ3eOmCKsVqwSuPqAKapbq82kFjHhFT4VZ2+wZcMzbeSjefs6KM7qFGX3tZ/NSxZKSO6 6qXgzMsuvY/kbfIm8tbSKqA0CF9tQ1V8p1c/fKOmEPwvV0pPXdFGR5GKi0U36FZiB/6J5jVtfj1 DdnfHr1FidFLFsw== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Improve support for system suspend. The register information has been extracted from the ACPI DSDT code handling Windows Modern Standby. In addition to writing to the 0xE0 register, the ACPI function also does some changes to the thermal configuration. This part is not implemented. After this patch the laptop's power and LID LEDs will switch into the typical breathing animation when the system is suspended and enabled normally again after resuming. Signed-off-by: Sebastian Reichel --- drivers/platform/arm64/lenovo-thinkpad-t14s.c | 53 +++++++++++++++++++++++= ---- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/drivers/platform/arm64/lenovo-thinkpad-t14s.c b/drivers/platfo= rm/arm64/lenovo-thinkpad-t14s.c index cf6a1d3b2617..066074a1314b 100644 --- a/drivers/platform/arm64/lenovo-thinkpad-t14s.c +++ b/drivers/platform/arm64/lenovo-thinkpad-t14s.c @@ -25,14 +25,17 @@ #define T14S_EC_CMD_ECWR 0x03 #define T14S_EC_CMD_EVT 0xf0 =20 -#define T14S_EC_REG_LED 0x0c -#define T14S_EC_REG_KBD_BL1 0x0d -#define T14S_EC_REG_KBD_BL2 0xe1 -#define T14S_EC_KBD_BL1_MASK GENMASK_U8(7, 6) -#define T14S_EC_KBD_BL2_MASK GENMASK_U8(3, 2) -#define T14S_EC_REG_AUD 0x30 -#define T14S_EC_MIC_MUTE_LED BIT(5) -#define T14S_EC_SPK_MUTE_LED BIT(6) +#define T14S_EC_REG_LED 0x0c +#define T14S_EC_REG_KBD_BL1 0x0d +#define T14S_EC_REG_MODERN_STANDBY 0xe0 +#define T14S_EC_MODERN_STANDBY_ENTRY BIT(1) +#define T14S_EC_MODERN_STANDBY_EXIT BIT(0) +#define T14S_EC_REG_KBD_BL2 0xe1 +#define T14S_EC_KBD_BL1_MASK GENMASK_U8(7, 6) +#define T14S_EC_KBD_BL2_MASK GENMASK_U8(3, 2) +#define T14S_EC_REG_AUD 0x30 +#define T14S_EC_MIC_MUTE_LED BIT(5) +#define T14S_EC_SPK_MUTE_LED BIT(6) =20 #define T14S_EC_EVT_NONE 0x00 #define T14S_EC_EVT_KEY_FN_4 0x13 @@ -202,6 +205,14 @@ static int t14s_ec_read_evt(struct t14s_ec *ec, u8 *va= l) return ret; } =20 +static void t14s_ec_write_sequence(struct t14s_ec *ec, u8 reg, u8 val, u8 = cnt) +{ + int i; + + for (i =3D 0; i < cnt; i++) + regmap_write(ec->regmap, reg, val); +} + static int t14s_led_set_status(struct t14s_ec *ec, struct t14s_ec_led_classdev *led, const enum t14s_ec_led_status_t ledstatus) @@ -554,6 +565,7 @@ static int t14s_ec_probe(struct i2c_client *client) return -ENOMEM; =20 ec->dev =3D dev; + i2c_set_clientdata(client, ec); =20 ec->regmap =3D devm_regmap_init(dev, &t14s_ec_regmap_bus, ec, &t14s_ec_regmap_config); @@ -593,6 +605,26 @@ static int t14s_ec_probe(struct i2c_client *client) return 0; } =20 +static int t14s_ec_suspend(struct device *dev) +{ + struct t14s_ec *ec =3D dev_get_drvdata(dev); + + t14s_ec_write_sequence(ec, T14S_EC_REG_MODERN_STANDBY, + T14S_EC_MODERN_STANDBY_ENTRY, 3); + + return 0; +} + +static int t14s_ec_resume(struct device *dev) +{ + struct t14s_ec *ec =3D dev_get_drvdata(dev); + + t14s_ec_write_sequence(ec, T14S_EC_REG_MODERN_STANDBY, + T14S_EC_MODERN_STANDBY_EXIT, 3); + + return 0; +} + static const struct of_device_id t14s_ec_of_match[] =3D { { .compatible =3D "lenovo,thinkpad-t14s-ec" }, {} @@ -605,10 +637,15 @@ static const struct i2c_device_id t14s_ec_i2c_id_tabl= e[] =3D { }; MODULE_DEVICE_TABLE(i2c, t14s_ec_i2c_id_table); =20 +static const struct dev_pm_ops t14s_ec_pm_ops =3D { + SYSTEM_SLEEP_PM_OPS(t14s_ec_suspend, t14s_ec_resume) +}; + static struct i2c_driver t14s_ec_i2c_driver =3D { .driver =3D { .name =3D "thinkpad-t14s-ec", .of_match_table =3D t14s_ec_of_match, + .pm =3D &t14s_ec_pm_ops, }, .probe =3D t14s_ec_probe, .id_table =3D t14s_ec_i2c_id_table, --=20 2.51.0 From nobody Fri Dec 19 14:21:10 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FCFF2E8B73; Wed, 5 Nov 2025 23:22:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; cv=none; b=rUmlrCAttxTUCb0aB07m5KlDg8OITrdO96z6rdW1upES0mcxGLHRqSkEV1sAZAO3XXwmyXlrORxJVzWBX/xicjHIzSqSjRkJ1ehRbqqra96cA+sjlSEW6Xzo6wAHqqrj7WqlubDFxB+7HEY0aeY4sJKCpDDyaoiHLB6vRxWZNzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762384970; c=relaxed/simple; bh=EmTWfvkMbb3dqk19EtSTmtmk5e8i+zIt0u4oJLxsHjs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BiGs+wosLvjlM76u2+5Zm8DOYzOwZ+qSX4K9Dk+nBmQhrzjnBySsz+sX+J1BRVWi8+k+TF46WZKkDIadYfA4YFL8zzmBx0Chpk611qsDlbgpSjqaZClPSq0uaiC4rtZUv3Gveefz3QwDQspR45zMgfDz2xlu5kA9XcBbbLyePTU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cTTJAevz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cTTJAevz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A73A0C116D0; Wed, 5 Nov 2025 23:22:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1762384970; bh=EmTWfvkMbb3dqk19EtSTmtmk5e8i+zIt0u4oJLxsHjs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=cTTJAevzImaux51JW2HZmy2YyEBdDz+ooofjz1m77IKyWrAWqxioXwJQgzkjqQzmn EgppiLwRn7X/uoGqr6jq/K/O0zm+xSrEaWivgUdSY5Ix2C7wXvpMzm+bXjiziJPKye ohwFobH62LzXBjoKHFXz11fLOEAdNTRHaDX/8Bra+HwUTuzzFr/ePmuPyy6EBICk8F ErBL3dx2Fz0nbYI+kjKLpccPxJv6mM1I+yNesgQpIwhgAPMOS60gbRnFLwYZCkZFvl JxT743QtX7Z/SmFN2h6ksCiphJ5xAbigByX5aW+8RsLzifrOuI/Tt/YKSr0QfMFnQp BHE0xiSEURNmg== Received: by venus (Postfix, from userid 1000) id 486E6182F71; Thu, 06 Nov 2025 00:22:45 +0100 (CET) From: Sebastian Reichel Date: Thu, 06 Nov 2025 00:22:43 +0100 Subject: [PATCH 4/4] platform: arm64: thinkpad-t14s-ec: add suspend handler for keyboard backlight Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251106-thinkpad-t14s-ec-improvements-v1-4-109548ae75c0@collabora.com> References: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> In-Reply-To: <20251106-thinkpad-t14s-ec-improvements-v1-0-109548ae75c0@collabora.com> To: Sebastian Reichel , Hans de Goede , =?utf-8?q?Ilpo_J=C3=A4rvinen?= , Bryan O'Donoghue Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1131; i=sebastian.reichel@collabora.com; h=from:subject:message-id; bh=EmTWfvkMbb3dqk19EtSTmtmk5e8i+zIt0u4oJLxsHjs=; b=owEBbQKS/ZANAwAKAdju1/PIO/qaAcsmYgBpC9xE23WsyRkwotKjWD39YBOIdf1avp0G6h6bS QXNCGFczMGJAjMEAAEKAB0WIQTvZg0HRj+Lcmp5VBPY7tfzyDv6mgUCaQvcRAAKCRDY7tfzyDv6 mhY/D/4yXQORCB7TVAaXYy1ssUkwErPaw1RNV62POFsRlwJWT4qUC3qhFdEaIeWg7r6CM+Jd9xy mqNH/mKTfh6ewBWUzAAt6PQ8FfF7Y3WzrTvC58NPGXF5IPL/QaK6t2fHNWznLQDiIvRASa3mWE2 L0PPMVcye5Ry8Utm3S5bt97HtjAKaaro9c/WditrAkRElrsxOrJyHRVyEVIKUAGo2fdWHVxyM49 ADHLLVx7PnnTNtJ880LhPX3yu9s7nJbiwJb29j94WZfIzvon/98XGkRypTFAJvG4huEwp5yQBKc SguFgJFz4T0qiVz2PISfPb3VknUm5ioapxXdjesThPTGGWaEnz81l43dWo0sIDIKh5c1YJpTedj aBA9Tpch3Tn+OYs1A8imduUCVZgYamVaZPp4GFZHXQhtDF3Loz3IBgx7CQc2AA3ebhbFrAdHctU cejWvObyodGenPjmxMe9PKqgna5XeIv4H5AyaPdjBRwgNo056iEnPeR50mfcqRrLDvXgP7JXwf1 zBXKCMMpjkXIJwte6rMtnuYgOqSgMKKHhyAgnqZX6drDFZOa58nCpnp9A2F49OqRz401QEw1T54 Lv68BXvqTKzIsmEQWvpfQiAoF/6dR9ATNMORBf5zfbOglHIg2iEz/PH6TvIzv6rbNNJG0f0lIO5 SHIxtpKYvST/xxA== X-Developer-Key: i=sebastian.reichel@collabora.com; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A This ensures that the keyboard backlight state is restored after a suspend-resume cycle. Otherwise the keyboard is automatically disabled during suspend and then stays disabled after resume. Signed-off-by: Sebastian Reichel --- drivers/platform/arm64/lenovo-thinkpad-t14s.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/platform/arm64/lenovo-thinkpad-t14s.c b/drivers/platfo= rm/arm64/lenovo-thinkpad-t14s.c index 066074a1314b..82c3ad6b3ee3 100644 --- a/drivers/platform/arm64/lenovo-thinkpad-t14s.c +++ b/drivers/platform/arm64/lenovo-thinkpad-t14s.c @@ -609,6 +609,8 @@ static int t14s_ec_suspend(struct device *dev) { struct t14s_ec *ec =3D dev_get_drvdata(dev); =20 + led_classdev_suspend(&ec->kbd_backlight); + t14s_ec_write_sequence(ec, T14S_EC_REG_MODERN_STANDBY, T14S_EC_MODERN_STANDBY_ENTRY, 3); =20 @@ -622,6 +624,8 @@ static int t14s_ec_resume(struct device *dev) t14s_ec_write_sequence(ec, T14S_EC_REG_MODERN_STANDBY, T14S_EC_MODERN_STANDBY_EXIT, 3); =20 + led_classdev_resume(&ec->kbd_backlight); + return 0; } =20 --=20 2.51.0