mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Nikodem Sanecki <nikodemsanecki@gmail.com>,
	Abduvaliy Abdulazizov <abduvaliy.hbai@gmail.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Mario Limonciello <mario.limonciello@amd.com>
Cc: westeri@kernel.org, linux-gpio@vger.kernel.org,
	linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: ThinkPad L13 Gen 2 AMD (21AB): Caps Lock LED broken by ACPI GPIO 11 interrupt conflict
Date: Thu, 15 Oct 2026 21:31:04 +0300	[thread overview]
Message-ID: <atEb6FN6ZbKI9xgf@ashevche-desk.local> (raw)
In-Reply-To: <atEaguJD7dh7xNs0@ashevche-desk.local>

On Thu, Oct 15, 2026 at 09:25:10PM +0300, Andy Shevchenko wrote:
> +Cc: Dmitry (as it might be related to keyboard configuration), others for
> the previously reported same IRQ on the same GPIO controller but for some
> camera stuff.
> 
> On Thu, Oct 15, 2026 at 03:13:02PM +0100, Nikodem Sanecki wrote:
> > Hello,
> > 
> > I'm reporting a Caps Lock LED issue on my Lenovo ThinkPad L13 Gen 2 AMD
> > running Arch Linux. I found a workaround that completely fixes it, and I
> > hope the findings might help implement a permanent kernel fix.
> > 
> > *A quick note:* This is my first time using Linux, and I'm a complete
> > beginner when it comes to kernel development. I used ChatGPT (GPT-6) to
> > guide the troubleshooting process, analyse my laptop's ACPI firmware, and
> > interpret the results. I personally ran the diagnostic commands and
> > verified the observed behaviour, but the technical explanation below is
> > AI-assisted. Please correct me if any of the analysis is inaccurate.
> > Problem
> > 
> > Under Linux, the physical Caps Lock indicator LED never illuminates, even
> > though the Caps Lock key itself works normally.
> > 
> > The LED works correctly under Windows and during certain stages of boot, so
> > the hardware itself is functional.
> > 
> > After investigating, GPT-6 identified what appears to be a conflict
> > involving GPIO 11 on the AMD AMDI0030 controller.
> > 
> > Booting Arch Linux with this kernel parameter completely fixes the problem:
> > 
> > gpiolib_acpi.ignore_interrupt=AMDI0030:00@11
> > 
> > The Caps Lock LED now works normally, and I haven't noticed any other
> > hardware issues.
> > System information
> > 
> >    -
> > 
> >    Device: Lenovo ThinkPad L13 Gen 2 AMD
> >    -
> > 
> >    DMI product name: 21AB004LSP
> >    -
> > 
> >    DMI product version/family: ThinkPad L13 Gen 2a
> >    -
> > 
> >    DMI vendor: LENOVO
> >    -
> > 
> >    DMI product SKU: LENOVO_MT_21AB_BU_Think_FM_ThinkPad L13 Gen 2a
> >    -
> > 
> >    Kernel: 7.2.9-arch1-1
> >    -
> > 
> >    Distribution: Arch Linux
> >    -
> > 
> >    BIOS: R1QET54W (1.40)
> >    -
> > 
> >    BIOS date: 2026-04-14
> >    -
> > 
> >    DSDT OEM ID: LENOVO
> >    -
> > 
> >    DSDT OEM Table ID: TP-R1Q
> > 
> > Diagnostic findings
> > 
> > The following is GPT-6's analysis of the diagnostic output and decompiled
> > ACPI tables.
> > 
> > *1. Linux sends the correct keyboard LED commands*
> > 
> > Using bpftrace, we observed that atkbd_set_leds() consistently returned 0.
> > 
> > Tracing ps2_command() for command 0x10ED produced:
> > 
> > SETLEDS: value=4, caps=1
> > SETLEDS: value=0, caps=0
> > SETLEDS: value=4, caps=1
> > SETLEDS: value=0, caps=0
> > 
> > The driver reports success and sends the expected Caps Lock states, but the
> > physical indicator stays off.
> > 
> > *2. The embedded controller tracks Caps Lock correctly*
> > 
> > The DSDT defines the CPLS field at EC offset 0x0F, bit 7.
> > 
> > Reading that byte through the read-only ec_sys interface showed it changing
> > from 0x00 to 0x80 when Caps Lock was toggled.
> > 
> > Enabling dynamic debugging in drivers/acpi/ec.c confirmed that each Caps
> > Lock press triggered EC query 0x78, which was scheduled, started and
> > stopped successfully.
> > 
> > *3. Lenovo's firmware controls GPIO 11*
> > 
> > The DSDT contains:
> > 
> > Method (_Q78, 0, NotSerialized)
> > {
> >     If (CPLS)
> >     {
> >         WFIO (0x0B, 0x00)
> >     }
> >     Else
> >     {
> >         WFIO (0x0B, 0x01)
> >     }
> > }
> > 
> > The WFIO method writes bit 22 using WMEM(), targeting address 0xFED81500 +
> > (11 * 4) = 0xFED8152C.
> > 
> > This appears to control the Caps Lock indicator using GPIO 11.
> > 
> > *4. The same GPIO is declared as an ACPI interrupt*
> > 
> > In SSDT12, _SB.GPIO._AEI declares GPIO 11 as an edge-triggered, active-low,
> > exclusive wake interrupt.
> > 
> > Its _EVT handler includes:
> > 
> > Case (0x0B)
> > {
> >     MSTP (0x3911)
> >     Notify (\_SB.PCI0.GPP1, 0x00) // Bus Check

This looks like some GPIO related notification. I dunno what Windows driver does.
Mario?

> > }
> > 
> > This appears to conflict with the firmware's use of GPIO 11 as an output.
> > 
> > *5. GPIO registers confirm the suspected conflict*
> > 
> > Without the workaround, /sys/kernel/debug/gpio showed:
> > 
> > #11 ... input ... 0x457a00
> > #11 ... input ... 0x057a00
> > 
> > Pressing Caps Lock changed bit 22, but bit 23 (output enable) remained
> > cleared.
> > 
> > After booting with:
> > 
> > gpiolib_acpi.ignore_interrupt=AMDI0030:00@11
> > 
> > The result was:
> > 
> > #11 ... output ... 0xc50000
> > 
> > The output-enable bit was now set, and the physical Caps Lock LED worked
> > flawlessly.
> > 
> > The system was already using atkbd.reset=1 for a separate
> > keyboard-backlight problem. That parameter alone had not fixed the Caps
> > Lock LED.
> > Possible explanation
> > 
> > GPT-6's interpretation is that Linux's ACPI GPIO handling configures GPIO
> > 11 as an interrupt input because of the firmware's _AEI declaration.
> > 
> > That disables the output driver, even though the firmware continues
> > updating the GPIO output-value bit when Caps Lock changes.
> > 
> > Ignoring the interrupt allows the pin to remain configured as an output,
> > restoring the indicator.
> > Related upstream fix
> > 
> > This seems very similar to the Acer Nitro V 16S AI issue addressed by:
> > 
> > 6da1f3437435c82eaa15b121022474bb358ffe20
> > 
> > "gpiolib: acpi: Ignore GPIO 11 interrupt on Acer Nitro V 16S AI"
> > 
> > https://lists.openwall.net/linux-kernel/2026/10/02/1029
> > 
> > However, there is an important difference.
> > 
> > On my ThinkPad, the GPIO 11 _EVT handler issues a PCIe bus-check
> > notification. I therefore don't know whether permanently ignoring the
> > interrupt could interfere with PCIe-related events, hot-plugging or wake
> > behaviour.
> > 
> > So far, normal use with the workaround appears unaffected, but I haven't
> > exhaustively tested those scenarios.
> > Question
> > 
> > Would a DMI-specific gpiolib ACPI quirk be appropriate for this ThinkPad,
> > or should the conflicting GPIO declaration be handled differently because
> > of the PCIe notification?
> > 
> > I can provide the relevant decompiled DSDT/SSDT excerpts, additional
> > diagnostic logs, or test a proposed fix if that would help.

Please do via some kind of file sharing service and reply with an URL to that.

> > Thanks very much for your time, and apologies if I've misunderstood any of
> > the technical details. I'm happy to run further tests with guidance.

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2026-10-15 18:31 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAAUQFRPW-rbcZV-=qV1NMjF_358sdJTiGvQuRxRqAsehY+J9Qg@mail.gmail.com>
2026-10-15 18:25 ` Andy Shevchenko
2026-10-15 18:31   ` Andy Shevchenko [this message]
2026-10-15 18:48     ` Mario Limonciello
2026-10-15 19:24       ` Mark Pearson
2026-10-15 20:13         ` Nikodem Sanecki
2026-10-15 20:26           ` Mario Limonciello
     [not found]             ` <CAAUQFRO49_T8iRdL3zYaj82Y_rgPTgM6VjScN3rqK89NmRzLqg@mail.gmail.com>
2026-10-16 18:33               ` Nikodem Sanecki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=atEb6FN6ZbKI9xgf@ashevche-desk.local \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=abduvaliy.hbai@gmail.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mario.limonciello@amd.com \
    --cc=nikodemsanecki@gmail.com \
    --cc=westeri@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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®