* [PATCH] platform/x86: tpacpi: Mark charging LEDs as safe @ 2026-11-05 19:24 Josh Triplett 2026-11-06 20:48 ` Rong Zhang 0 siblings, 1 reply; 3+ messages in thread From: Josh Triplett @ 2026-11-05 19:24 UTC (permalink / raw) To: Mark Pearson, Derek J. Clark, Rong Zhang, Henrique de Moraes Holschuh, Hans de Goede, Ilpo Järvinen, platform-driver-x86, ibm-acpi-devel, linux-kernel tpacpi can expose the charging LEDs as `tpacpi:orange:batt` (LED 1) and `tpacpi:green:batt` (LED 2). However, at least on my X1 Carbon Gen 11, these LEDs get hidden because `TPACPI_SAFE_LEDS` doesn't allow them. Add these to `TPACPI_SAFE_LEDS`, so that tpacpi can expose them. This was previously proposed in https://lore.kernel.org/lkml/20250403040846.7834-1-martin@arp242.net/ . I'm currently toggling these using write_support via ec_sys, and would prefer to handle these via the normal LED mechanism. Signed-off-by: Josh Triplett <josh@joshtriplett.org> --- drivers/platform/x86/lenovo/thinkpad_acpi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c index 4f81855ad721..50a8cff5b374 100644 --- a/drivers/platform/x86/lenovo/thinkpad_acpi.c +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c @@ -5608,7 +5608,7 @@ static const char * const tpacpi_led_names[TPACPI_LED_NUMLEDS] = { "tpacpi::unknown_led3", "tpacpi::thinkvantage", }; -#define TPACPI_SAFE_LEDS 0x1481U +#define TPACPI_SAFE_LEDS 0x1487U static inline bool tpacpi_is_led_restricted(const unsigned int led) { -- 2.55.0 ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] platform/x86: tpacpi: Mark charging LEDs as safe 2026-11-05 19:24 [PATCH] platform/x86: tpacpi: Mark charging LEDs as safe Josh Triplett @ 2026-11-06 20:48 ` Rong Zhang 2026-11-06 23:48 ` Josh Triplett 0 siblings, 1 reply; 3+ messages in thread From: Rong Zhang @ 2026-11-06 20:48 UTC (permalink / raw) To: Josh Triplett, Mark Pearson Cc: Henrique de Moraes Holschuh, Derek J. Clark, Hans de Goede, Ilpo Järvinen, platform-driver-x86, ibm-acpi-devel, linux-kernel Hi Josh, Mark, On Thu, 2026-11-05 at 11:24 -0800, Josh Triplett wrote: > tpacpi can expose the charging LEDs as `tpacpi:orange:batt` (LED 1) and > `tpacpi:green:batt` (LED 2). However, at least on my X1 Carbon Gen 11, > these LEDs get hidden because `TPACPI_SAFE_LEDS` doesn't allow them. > > Add these to `TPACPI_SAFE_LEDS`, so that tpacpi can expose them. Please see the commit message of commit a4d5effcc737 ("thinkpad-acpi: restrict access to some firmware LEDs"). The term "unsafe LED" exists because LEDs are write-only for software and fire-and-forget for the EC. By taking the control of an unsafe LED, e.g., attaching an LED trigger, any warning signal from the EC can no longer be displayed by the LED. When it comes to battery LEDs, they are definitely unsafe to override. After all, batteries are dangerous things when they malfuction. Thus, I don't think it's suitable to enable it for all users. > > This was previously proposed in > https://lore.kernel.org/lkml/20250403040846.7834-1-martin@arp242.net/ . > > I'm currently toggling these using write_support via ec_sys, and would > prefer to handle these via the normal LED mechanism. Since not providing them via the LED core does not really prevents users to control them, I am also thinking about adding a debugfs attribute that unlocks unsafe LEDs and taints the kernel. I believe tainting the kernel when overriding unsafe LEDs would be a better approach. This is also one of the reason why taint flags exist, i.e., indicating that something unsupported has happened. Multiple drivers have taken the approach (hint: grep TAINT_USER). We can also make the overriding procedure tedious to hopefully block users who don't know what they are doing: - Drop CONFIG_THINKPAD_ACPI_UNSAFE_LEDS, so there is no longer a permanent switch - Unsafe LEDs are also registered, but with LED_SYSFS_DISABLE set to disable write access - Add a debugfs attribute unlock_unsafe_led to every unsafe LED, which can be written to unlock the LED's write access - When unlocking, taints the kernel with TAINT_USER Users must write to the attribute to unlock an unsafe LED. They can't unlock all unsafe LEDs at once. Instead, they must unlock whatever they desire one by one. From the said commit message, it seems that the reason why CONFIG_THINKPAD_ACPI_UNSAFE_LEDS was introduced was that Lenovo didn't want to support the use case of overriding unsafe LEDs. So... Mark, what do you think of the approach? I will send a patch implementing my proposal soon. You can reply there. Thanks, Rong > > Signed-off-by: Josh Triplett <josh@joshtriplett.org> > --- > drivers/platform/x86/lenovo/thinkpad_acpi.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/platform/x86/lenovo/thinkpad_acpi.c b/drivers/platform/x86/lenovo/thinkpad_acpi.c > index 4f81855ad721..50a8cff5b374 100644 > --- a/drivers/platform/x86/lenovo/thinkpad_acpi.c > +++ b/drivers/platform/x86/lenovo/thinkpad_acpi.c > @@ -5608,7 +5608,7 @@ static const char * const tpacpi_led_names[TPACPI_LED_NUMLEDS] = { > "tpacpi::unknown_led3", > "tpacpi::thinkvantage", > }; > -#define TPACPI_SAFE_LEDS 0x1481U > +#define TPACPI_SAFE_LEDS 0x1487U > > static inline bool tpacpi_is_led_restricted(const unsigned int led) > { ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] platform/x86: tpacpi: Mark charging LEDs as safe 2026-11-06 20:48 ` Rong Zhang @ 2026-11-06 23:48 ` Josh Triplett 0 siblings, 0 replies; 3+ messages in thread From: Josh Triplett @ 2026-11-06 23:48 UTC (permalink / raw) To: Rong Zhang Cc: Mark Pearson, Henrique de Moraes Holschuh, Derek J. Clark, Hans de Goede, Ilpo Järvinen, platform-driver-x86, ibm-acpi-devel, linux-kernel On Sat, Nov 07, 2026 at 04:48:44AM +0800, Rong Zhang wrote: > The term "unsafe LED" exists because LEDs are write-only for software and > fire-and-forget for the EC. By taking the control of an unsafe LED, e.g., > attaching an LED trigger, any warning signal from the EC can no longer be > displayed by the LED. > > When it comes to battery LEDs, they are definitely unsafe to override. > After all, batteries are dangerous things when they malfuction. Thus, I > don't think it's suitable to enable it for all users. Choosing to not report "charging" vs "full" vs "not charging" via LEDs (as opposed to on-screen indicators) is not in itself dangerous. If the EC has something like "battery is damaged/overheating/exploding" to report, it had better do that by some more effective means than blinking an LED, or the message is going to be lost. I can't comment on what *every* ThinkPad EC would do, but at least on this X1 Carbon Gen 11, based on some (LLM-assisted, but all of this mail is 100% human-written) disassembly of both the ACPI tables and the EC firmware (EC version 1.22 specifically), the EC does not appear to report any battery states via the battery LEDs other than: - AC not present (LEDs off) - AC present and battery <90% (LEDs yellow) - AC present and battery >90% (LEDs white). Critical battery diagnostics can get reported through ACPI, and if the firmware reports one of those, it appears to lead to tpacpi reporting "THERMAL EMERGENCY" and sending a userspace netlink message. (As an aside, AFAICT a system running upower and GNOME doesn't display that, unlike low-battery warnings. It really should, in a hard-to-ignore way.) Some other models (e.g. the X1 Carbon Gen 12) can emit other kinds of diagnostics via LED blink codes ( https://download.lenovo.com/manual/x1_carbon_g12/user_guide/en/help_troubleshoot_or_diagnose_problems.html#t3 ). But those primarily appear to represent pre-boot failure states where you won't get to an OS, anyway. > Since not providing them via the LED core does not really prevents users > to control them, I am also thinking about adding a debugfs attribute that > unlocks unsafe LEDs and taints the kernel. I'd really love to not have a tainted kernel just because I'd like to not have a bright LED in my hotel room when I'm trying to sleep. - Josh ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-06 23:48 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2026-11-05 19:24 [PATCH] platform/x86: tpacpi: Mark charging LEDs as safe Josh Triplett 2026-11-06 20:48 ` Rong Zhang 2026-11-06 23:48 ` Josh Triplett
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®