Re: ThinkPad T480s & LED_MUTE, LED_MICMUTE

From: Takashi Iwai
Date: Fri Jun 15 2018 - 08:51:54 EST

On Fri, 08 Jun 2018 13:10:57 +0200,
Pali RohÃr wrote:
> Hi! With up-to-date thinkpad_acpi.ko driver on ThinkPad T480s I'm seeing
> a strange behavior of LEDs which are integrated into mic mute (Fn+F4)
> and mute (Fn+F1) keys.
> When thinkpad_acpi.ko is not loaded, then mute key is working fine. When
> pressed, it correctly generates KEY_MUTE on AT Translated Set 2 keyboard
> input device and also turn on/of mute led. But when micmute key is
> pressed then, nothing happen. No key event is reported and also led is
> not turned on/off.
> On the other hand, when thinkpad_acpi.ko is loaded, then both buttons
> mute and micmute correctly generates input events; mute via AT keyboard
> and micmute via ThinkPad Extra Buttons. But led is not changed. When
> thinkpad_acpi.ko is loaded it turn off both leds (mute and micmute) and
> leds after pressing any of those buttons, leds are not turned on again.
> When thinkpad_acpi.ko is unloaded, then pressing mute button again start
> switching led on/off.
> So it seems that some init sequence of thinkpad_acpi.ko breaks mute led.
> And fini sequence of thinkpad_acpi.ko makes mute led working again.

Usually the mute LED on Thinkpad is triggered from HD-audio driver
(sound/pci/hda/thinkpad_helper.c), and it's a soft-bound via
symbol_request(tpacpi_led_set). I thought thinkpad_acpi is
auto-loaded when the module gets bound.

A possible explanation would be that TPT480s has neither IBM0068,
LEN0068 nor LEN0268 ACPI HIDs, hence the driver is not auto-loaded.
(In HD-audio driver side, the ACPI ID is checked and the mute LED
control is applied only to these three IDs, too.)
Meanwhile, when you load thinkpad_acpi, it does still recognize some
device and initialize it. By the initialization, it goes out of BIOS
control, and the OS control is expected... This is my wild guess.

BTW, the reason we have no LED class for these is that we don't want
to confuse users by providing multiple ways to access to the single
stuff. We've had already the mute LED control from the audio driver
since long time ago, we don't want to drop and enforce the user-space
solution (that is anyway flakier than in kernel in most cases).