Hi, On 3/15/21 8:58 PM, Esteve Varela Colominas wrote: > On many recent ThinkPad laptops, there's a new LED next to the ESC key, > that indicates the FnLock status. > When the Fn+ESC combo is pressed, FnLock is toggled, which causes the > Media Key functionality to change, making it so that the media keys > either perform their media key function, or function as an F-key by > default. The Fn key can be used the access the alternate function at any > time. > > With the current linux kernel, the LED doens't change state if you press > the Fn+ESC key combo. However, the media key functionality *does* > change. This is annoying, since the LED will stay on if it was on during > bootup, and it makes it hard to keep track what the current state of the > FnLock is. > > This patch calls an ACPI function, that gets the current media key > state, when the Fn+ESC key combo is pressed. Through testing it was > discovered that this function causes the LED to update correctly to > reflect the current state when this function is called. > > The relevant ACPI calls are the following: > \_SB_.PCI0.LPC0.EC0_.HKEY.GMKS: Get media key state, returns 0x603 if the FnLock mode is enabled, and 0x602 if it's disabled. > \_SB_.PCI0.LPC0.EC0_.HKEY.SMKS: Set media key state, sending a 1 will enable FnLock mode, and a 0 will disable it. > > Relevant discussion: > https://bugzilla.kernel.org/show_bug.cgi?id=207841 > https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1881015 > > Signed-off-by: Esteve Varela Colominas <esteve.varela@xxxxxxxxx> > --- > drivers/platform/x86/thinkpad_acpi.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c > index c40470637..09362dd74 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -4079,13 +4079,19 @@ static bool hotkey_notify_6xxx(const u32 hkey, > > case TP_HKEY_EV_KEY_NUMLOCK: > case TP_HKEY_EV_KEY_FN: > - case TP_HKEY_EV_KEY_FN_ESC: > /* key press events, we just ignore them as long as the EC > * is still reporting them in the normal keyboard stream */ > *send_acpi_ev = false; > *ignore_acpi_ev = true; > return true; > > + case TP_HKEY_EV_KEY_FN_ESC: > + /* Get the media key status to foce the status LED to update */ > + acpi_evalf(hkey_handle, NULL, "GMKS", "v"); Sicne this is a getter function I guess that calling it is mostly harmless and if it works around what seems to be a firmware bug on some of the E?95 ThinkPad models then I guess that this is fine by me. Mark, do you have any comments on this ? Regards, Hans > + *send_acpi_ev = false; > + *ignore_acpi_ev = true; > + return true; > + > case TP_HKEY_EV_TABLET_CHANGED: > tpacpi_input_send_tabletsw(); > hotkey_tablet_mode_notify_change(); > _______________________________________________ ibm-acpi-devel mailing list ibm-acpi-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/ibm-acpi-devel