From nobody Tue Dec 2 02:32:41 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 804E41DDC28; Wed, 19 Nov 2025 00:46:43 +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=1763513203; cv=none; b=hufaKoM9o53klD0iSlzTsZ7/KL7Bn/5ZJMGK6TLhQdK56G1R/KSbFKIqz7GAfb/rQwrR+2f/sgPOt7mk/FMW/KBA4qO7+WLHyA1hnhhZrEWk6+a5XanWJ+r6wLH+AdqWkKQTTLqVKBO2AadnE94/U50aXT8zQeDxTCuD5CAGtLU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763513203; c=relaxed/simple; bh=6RL3DFgYa1zE5JYJikCX4EhrWPzdetIm01PuBAcEWNo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OJObAaec0lDG3+GvoWxUxpHP5QkPs0dOCA+39NObHSN9ZcEm7bZ+wglFaF2IAf6jI8BOuLgKYE32a2yg9+6xuZt6QQccIoy31QNbUc4yX2E9u921nqNWlR0R9bBEz7uNokkTDh+q5zapsqMA9bFNAhNR8pkwKYF/8vkq31PsbkI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SO2higL2; 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="SO2higL2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 94237C4AF0B; Wed, 19 Nov 2025 00:46:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763513202; bh=6RL3DFgYa1zE5JYJikCX4EhrWPzdetIm01PuBAcEWNo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SO2higL2ZMDH0L1/3qwg+kmVSj4dXQidAUqg+JGNkx1bb9bl8X3RNayCR8gO7FMOr zKsZNIMEIkyA0/ZPoXENuevIc3enEE3OQssvqHmczSi6oQOh1lEPBG2qZ2dBjeArQ5 wmxtXmenuPNrv0CtZQVZGkfmGkLwWvdk1RjTH9DXzpYSNUmXm//wqJZt7TJSfEwoyw e5Y86vcqfFDkxh3bMfly5psYAgIg9NPYVc4nEy1Or94bwXvfbABH4yLouuAP0CafJ/ 16OZeshKEJhV52PhvmvzC2COrH8ruh8xXXfCzvXD9ad4yJe6o0cgcMHTdQoyUYSy3q 6aX93uKzV9sCg== Received: by venus (Postfix, from userid 1000) id 8FC38180083; Wed, 19 Nov 2025 01:46:38 +0100 (CET) From: Sebastian Reichel Date: Wed, 19 Nov 2025 01:41:40 +0100 Subject: [PATCH v2 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: <20251119-thinkpad-t14s-ec-improvements-v2-1-441219857c02@kernel.org> References: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> In-Reply-To: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> 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=2076; i=sre@kernel.org; h=from:subject:message-id; bh=6RL3DFgYa1zE5JYJikCX4EhrWPzdetIm01PuBAcEWNo=; b=owEBbQKS/ZANAwAKAdju1/PIO/qaAcsmYgBpHRNtOS5NxoxDYRM/Twv5A5bfjO9kx8bxPpujM k3NBMBiiyuJAjMEAAEKAB0WIQTvZg0HRj+Lcmp5VBPY7tfzyDv6mgUCaR0TbQAKCRDY7tfzyDv6 mpqRD/9eCou6eJplz1XmgLChMTkqmFQToDEYB4KTd0tcuOFSz4bzA0oPnwI5ZuvlcKo5RJ8FkL9 uU2nXr3BSNkAGeTxaoYrbd9whVHBvpDqRcS0DkPLosNANE+ZyeMWnrYDwcua242f1S1iL6Tt23Y TL0NB7Makdlpw3Px2Mmej0ghi4zwHZc6TFcYZkGZctZG8GH1A9l0TIKsvrSd7IuhuPG63hcLlHL tv1S6tEWudyDcWxQphf6n5fhZF/HZ75UnKejrY3o11WnaypV7Ct8hiYKMGx2mxNJNXoDPP/kXU8 PfokpclKf0ToKQX9OFEBozhwGw6he6KKsIZAYZz3LXZDLG0yEe/7Ebutg2e35eeIPZgFwVmXGp2 Z7tnm7s0Uor6Y+TM/qY6mC302prfVCPYTcQvcIkl4u6HtAlNNyQ3S11Nsort6ry3lijCtjOPos1 BZr7Kd8hs6PuS99YINkbWnHX2dq9SidISjhsJfnNIxN0y+evF82DAb2n3tLN0c9+3rp8uuv7y3R qXQImuV1R613SALON4+BL5/3dKfjB0OZfYR+41wr3nm93PIYV35Y4RhsNiFbjr+9lLmM6G53I5V 3Vw2TDb2+yA3Wp6LAw+Du1ED/79XqA8smIRamqGeVh6KDdyM5QampwAqN0PQMXUSPgWhKKXahIA 6nESmHlbenkxqMQ== X-Developer-Key: i=sre@kernel.org; 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. This fixes the following backtrace visible in dmesg: Unable to handle kernel NULL pointer dereference at virtual address 0000000= 0000000e0 ... Call trace: sparse_keymap_report_event+0x2c/0x978 [sparse_keymap] (P) t14s_ec_irq_handler+0x190/0x3e8 [lenovo_thinkpad_t14s] irq_thread_fn+0x30/0xb8 irq_thread+0x18c/0x3b0 kthread+0x148/0x228 ret_from_fork+0x10/0x20 Fixes: 60b7ab6ce030 ("platform: arm64: thinkpad-t14s-ec: new driver") Signed-off-by: Sebastian Reichel --- 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 Tue Dec 2 02:32:41 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 584C31C5D7D; Wed, 19 Nov 2025 00:46:43 +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=1763513203; cv=none; b=SAwcE6DdJZaQx4R6WlOS4wFYm3EFI/kPbmMLt4jMjNSCgVjB6M3rRLKJYZ5ZldpjeWNvvfo7rCJV8jSNg0BhY6DezV7MHfhxMmdFsCn0eiDK4fzx5qrBpfz6ZjXeY/3rf6KNp0ApDxtMGsLyRp8VVBQR+xp5lFJkHRsPkLU8mnM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763513203; c=relaxed/simple; bh=AegkBlTWPLHplrOMY76sYBaHhKq8AoJxhlaNcb0ph3s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UeqEwFatppb94ajtoeo1Ko++hp2jI1VKP7Ip4fEsKnt0qyPAYs0deMs0bkIaebZhADN6hrXocz9lQNM8yUaGnEs8NqhHb0vYjitPz5SlvYxsE0nCj6tvCuzPxFYZUf5tlj57kJePb77RLpRQgyTXe9HOKDyZ6weDRqBvDFgdW40= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=nw9L7m8R; 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="nw9L7m8R" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 946C9C4AF10; Wed, 19 Nov 2025 00:46:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763513202; bh=AegkBlTWPLHplrOMY76sYBaHhKq8AoJxhlaNcb0ph3s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=nw9L7m8RIb8IVGdbo8FRB9mWLIpod+mnctgtNJ9RMHqwr5umCSyjqAjVkrRU9kOhL 3qgqfSq3vP1GFrBlUlMwCypJKM8nPGylyeBNURfjye1VQiDQ6P70qYtRWG+1cgsS6f 7LWkRimZJRtYqIT/XBL4TjRs/Q1wuxSP5/PUfOI4Hz+wzkPEdgERvEoPkhAn6TA41i z7dO9kukx4hvTx6AEm5rTG6Ov1Tc3vtfOLq3Cnf3Eo6iN5bAOw4cAdK05F84LPv5cA miebxS13VjBZcWfzv3pAji0wBzngBYmGHFSVXSZqmznLTEgk4kWPEcpaB/BzYZAu8b E96xvmxKrwoGA== Received: by venus (Postfix, from userid 1000) id 9160518121B; Wed, 19 Nov 2025 01:46:38 +0100 (CET) From: Sebastian Reichel Date: Wed, 19 Nov 2025 01:41:41 +0100 Subject: [PATCH v2 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: <20251119-thinkpad-t14s-ec-improvements-v2-2-441219857c02@kernel.org> References: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> In-Reply-To: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> 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=sre@kernel.org; h=from:subject:message-id; bh=AegkBlTWPLHplrOMY76sYBaHhKq8AoJxhlaNcb0ph3s=; b=owEBbQKS/ZANAwAKAdju1/PIO/qaAcsmYgBpHRNtIhX/UZ3eeocKJXHDaWvSrHBuWEbdOjVtS /tuOVunCmSJAjMEAAEKAB0WIQTvZg0HRj+Lcmp5VBPY7tfzyDv6mgUCaR0TbQAKCRDY7tfzyDv6 mnWyD/9ZVfV76e6jQzhXo85J4zb8YIqjRGL9bo51/97RYZiphkrlGaU21wsaDhlm6JIa7vpsCcV IvgdYmhcljtASb1m5YDPniH5jigp+zKy+iHq5BSnTd3r7VftTI7yDG/U7mgMzjU783QQuOmu98m 2m6pMB7BTOZoRnm+aUyNAZsQCc5Pf1QCdPkiNnwgLtyoI4HkmnPYqSKZj5436mGejsWOOUvswXb Qt2W4rWRFlWySe8PjHxig+BB4iemFV88KqPuDUEt7AiKT5o18IyOM14FWBHucjYM9H3VVW8OQHd FYgAyqhIorszEkh0k7Xifyfu5SBq+ItlumgSAiBFy2FRcTcSQ3zcFKVFFt09OzIkNrial0DT1Ml me94hmuCC4HEpHLa1WWIE385dSwVpkwhwZoqpnoOk660jkaNmXiG14KKyw89zfx2ySGu5dgNPIv Ufp14uZLXV54atVKwstkb4h3h8VT07xdRYsc08nKHSUMoJznMovsKIdUz6OIk9hJPJqwYtLJJnh bwyalKRDICieOoJW1QSRPrHSyJTTizBC4BEEvGNhCUs6+e52P+WYLu46eNWE9noVi4wYqkQ5JEg /tBJcVB2fQyJFWpTwmjTwLKmi9ybSodU34IyavNxYw63hmT6avZGgPWgMzqfi5i+SZjeMW2UEPs 9WJ85oKFFdlISlg== X-Developer-Key: i=sre@kernel.org; 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 Tue Dec 2 02:32:41 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 C682820B80B; Wed, 19 Nov 2025 00:46:43 +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=1763513203; cv=none; b=MrNPcKDCDY/rXdEhzVgNBU09v2CX+ggkZTgaRLXLisDcf4KVk9Um3UYRgRwKSEwn/uZb6EGIzmERXhNmP16qDQSoWvkCXp5gTzudfF2E/huT9gOrKqK7i3njtaMROpxOMlWBr0FX99rHABDOSoiW3zDzmvdUIWVu11FZn8Mt/5g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763513203; c=relaxed/simple; bh=Wfu9i4e4wEFMx2aRATlYI3jpvrmK/iJtkoSdP2AQcko=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Fl/A/+Ea+ygJKTwgrJBb6w3QRbjsDi9CdmZj61mkyfzhTqwjYtIbgZE23QD/0pTIp0tPt8Hd3j0A9wPms11y5gPwPV+0UGbMgxI+UF6c/o3UVCK3McReySsnYqRWF6gfzTKxBNqJLulhdLD3UmIuw7RFXU1PP7wpZUHBGp8azsA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=t8go9U4x; 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="t8go9U4x" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 94C2CC4CEF5; Wed, 19 Nov 2025 00:46:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763513203; bh=Wfu9i4e4wEFMx2aRATlYI3jpvrmK/iJtkoSdP2AQcko=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=t8go9U4xqjRVR2uKg245VTigteivmUxvUGWjQmPqbx4zP36Th63tlpzjFSBwK6gUL KoLOQO1MIMBFv44obUbS4zy9MSacKQnuvL7T6UVJSjFNo2OMRNp0Z00ynWtKSabgqo ceqZ0cJLBm/1eW+xieWxShdQ+4x8rbCS0MiAZkKCgOnflQWSGffyeuvtay/3Dh5t/9 G+4hZQc+sSCa2UyJFr0isfPsrh4+CSHuOcxBMfW8aMYa7XajPWc7pYMq4A2bBwc6Sr 6v0X/eBKwijw6qk0MWnHMm36RCTrfwvvngFtOGCs9i/fu09sZNEJd+2OKMJsALAkyT ivRcD844ZvjPQ== Received: by venus (Postfix, from userid 1000) id 933B118121D; Wed, 19 Nov 2025 01:46:38 +0100 (CET) From: Sebastian Reichel Date: Wed, 19 Nov 2025 01:41:42 +0100 Subject: [PATCH v2 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: <20251119-thinkpad-t14s-ec-improvements-v2-3-441219857c02@kernel.org> References: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> In-Reply-To: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> 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=3943; i=sre@kernel.org; h=from:subject:message-id; bh=Wfu9i4e4wEFMx2aRATlYI3jpvrmK/iJtkoSdP2AQcko=; b=kA0DAAoB2O7X88g7+poByyZiAGkdE22jI2ZzfxN2zN66zgiYsDTEsmH2Yep7SfZdnocSWChy9 YkCMwQAAQoAHRYhBO9mDQdGP4tyanlUE9ju1/PIO/qaBQJpHRNtAAoJENju1/PIO/qaY44P/inz 47v1QihpG0ykBD2sAKtdnOF7ULJRe6TIyQWUeOxpfqMzg5lGgAecRmfWlXXn7/nZi7PlBG6ycmw GIo9DJMUG1y9hT8/l2JyiUsoLO9U6IEt33gFQHkc/nlyIRJ45OLR7d1acxhgrPHCrcjDx3Odkua 6/2booVDtpVwUFxL0s1YiUWs3BD0sLX3/PMKDAjO4iJafTlCwUAt49pDJ91nvAH7XH50HvKhLcu Q5jak9BYwZL4EW+asfWB3fNdc9kDwObkp9++N9DrHBmQwf8/uvWtFOJsiijMcFfLjwgM5GAr9gL 6xdhLaYOACg5lISzLkMO9fsX7fq2W9jzZw31YO3hgVcyrJWTXAuyC2TkGRQtXs2/TnHjUgr+qVn yXzN8og1+dUckEZ34pRyng0Jpd64/0QHj80Dfvxfx0bNKRY8dW3sw5qKy+epY5bY+/9xWYPRwXi Nxw6et9Vc6ATX67qaEM/QNiY3y2eYGbvmR5eXXY8+hLwa3wiLGQK30QZMSYy8UbX31R6AF1atOP 99Ad8v0aQSbuSDtZ+KAuZGq7jw/kq2iI7Qxa/fP9ErWb3BGpoFqk1HTMQe9ZC8aOuUDpqF1c/RH znRJaCHwR7d9tg8Fjv8KH4mkbgvZYsNBmp5sQqmy7Lm8fw7j2IbPKtbnZ5wHbf/Q1u11HFxJHx3 uPFcZ X-Developer-Key: i=sre@kernel.org; a=openpgp; fpr=EF660D07463F8B726A795413D8EED7F3C83BFA9A Improve support for system suspend. The register information has been extracted from the ACPI DSDT code handling Windows Modern Standby. I took over the weird multi-write function from the ACPI DSDT code where it is called ECWS. In addition to writing to the 0xE0 register, the ACPI Windows Modern Standby code 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 | 54 +++++++++++++++++++++++= ---- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/drivers/platform/arm64/lenovo-thinkpad-t14s.c b/drivers/platfo= rm/arm64/lenovo-thinkpad-t14s.c index cf6a1d3b2617..cf8eff50d710 100644 --- a/drivers/platform/arm64/lenovo-thinkpad-t14s.c +++ b/drivers/platform/arm64/lenovo-thinkpad-t14s.c @@ -20,19 +20,23 @@ #include #include #include +#include =20 #define T14S_EC_CMD_ECRD 0x02 #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 +206,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 +566,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 +606,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 +638,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 Tue Dec 2 02:32:41 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 443D117D2; Wed, 19 Nov 2025 00:46:43 +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=1763513204; cv=none; b=WeR+6Svk36XfUYQ4zSCH6OgIPAcVwaaZJ3jo9MTyFjbAT6g27UCUlhSxly6ffWcSvJnwMfjFscLp6au5foXNv3Qy3BHNPzkHAx9+pgsxnrmckE5uWCjscMEYh6CGNhev05dEo3Np7BvlTB3fSoe8yYB6+mcngpx7VjWL10xRFq8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763513204; c=relaxed/simple; bh=cdSI8LbaBnlLN9m0wxvQS1K3z96XEujbOZ2RnvZCx6A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=o+cP3f+zOhW52evG3uSXJLyty/lBgPIb18oogzfMTjL43Q/DC2rqju0381Bun3TO8oQ4Bsoj5GrYf/p8i1XmLM2SiNSSickDGjx2d26Y7e7KgIHoTrUAgzpReZVE/HcgJmimm/om9sbFdI3C1Sx2GTVmd77Fcg3AUGTsywjQlQ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hUCfmZvJ; 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="hUCfmZvJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E4AC8C4CEF1; Wed, 19 Nov 2025 00:46:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763513203; bh=cdSI8LbaBnlLN9m0wxvQS1K3z96XEujbOZ2RnvZCx6A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hUCfmZvJWHjgrr43OYn0eeeQV3njwmBJSuwIgT6hnwDel8ONj++qvUNOy4Ru7g7Yp bcfOn3bjhq4q+539TZTOo9TovKH8Ms1M45Y80XQtSKthKmvd7SSCJjYCaizzRl/g+l ZRzrYgX9u/LvJZR1zHEcz/tedPtUbz3BQkE6qCwcT9n12aon0uHjqeEMS0n4ZXDsPc Ih8vzc8guVAd8RZmjjOeyMUrDGFHZpL1G9KESMJqUZQwWUlOHjgRXqI6c42qraMne6 RGGvGv6kwZGYMaJcWqxazjeYPFANbRLtPVOoXM6qFnaeBfBpDDW5Qa0Pn27TJYogNq LWTE+ZTIbDNpA== Received: by venus (Postfix, from userid 1000) id 95EFF18121F; Wed, 19 Nov 2025 01:46:38 +0100 (CET) From: Sebastian Reichel Date: Wed, 19 Nov 2025 01:41:43 +0100 Subject: [PATCH v2 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: <20251119-thinkpad-t14s-ec-improvements-v2-4-441219857c02@kernel.org> References: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> In-Reply-To: <20251119-thinkpad-t14s-ec-improvements-v2-0-441219857c02@kernel.org> 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=1214; i=sre@kernel.org; h=from:subject:message-id; bh=cdSI8LbaBnlLN9m0wxvQS1K3z96XEujbOZ2RnvZCx6A=; b=owEBbQKS/ZANAwAKAdju1/PIO/qaAcsmYgBpHRNuMNSkH06UH9q4lDwu2ET3xLtzqz62e1MRJ CDJ6W0xa/GJAjMEAAEKAB0WIQTvZg0HRj+Lcmp5VBPY7tfzyDv6mgUCaR0TbgAKCRDY7tfzyDv6 miuLD/9jk8PXR3zjf3d/NP6C7qBSJEz/f09A9ZcW0iV2GqZ27esdHp12yJ9l+SHbNYanbKWIhJP VZV9kFFnZXDIVMtXoXamPlPElPbHL23QwdrcP4hz6vtsAAjGFOC57lj/ZI3NEdLu2yMiOwrljx5 ewo0LtZEuPYYg7xyIvjAVnHEWCsAzwZGHoBo8uqla6Jxsn5olR9uzf+mXgFxnY3I8sXTYTeGW7i t/qnbfTngSmS8o8qwUU9sE6aPnFtHxrbblRmxU5OSYYp97+adxlye44F75H5Uwrb5Rmaoe92ZAr qjMNuyyqQPPAqD24cV4XzjjZU36w3XXk2S2udfJkyKtFWm28gSUueQq6a8roIlwwrLfof5ZLd4J QHkpZlFO9Wk/PDAVIQmce/685Cu0quH11OtqzIsn6prDmPgp0J80+PwxfG0bBBAt654dAtaBLzw b10dHl8KGJqALfitKAX1TE7MCj7023BBOwFHiV37bGTWHEeG6/K4Ukp6XZHe59rwKjQn1ZbBt5G Chtu4zYGbAIqm3L7ueUvwtlDgJgkD43OquFOxNO6nPNUXDR2qcZzSE8giCv1CFrLMrdJ827wbvy zZuE9/+FUwzg85NbpHKmdy9PLp5/AgPKqaQWo6ZZINdqcowwvHi5I2YKztIMeVvg3WIV5Kb0Dow L9uRJwlhuh66MDw== X-Developer-Key: i=sre@kernel.org; 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. Note, that this adopts the same behavior as the existing Thinkpad ACPI 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 cf8eff50d710..5590302a5694 100644 --- a/drivers/platform/arm64/lenovo-thinkpad-t14s.c +++ b/drivers/platform/arm64/lenovo-thinkpad-t14s.c @@ -610,6 +610,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 @@ -623,6 +625,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