<p>><br>
><br>
> The main thing to note is that in 3.18, when the driver fielded the mute<br>
> key events itself, it handled those events by toggling the state of a<br>
> low-level hardware-based mute switch (upper right dotted box). This HW mute<br>
> evidently applied only to the speaker, not headphones, and seems to have no<br>
> relationship to the pavucontrol/pactl/amixer mixer-based mute.  Also -- and<br>
> central to the issue here -- invoking the HW mute function via the mute key<br>
> also toggled the mute LED, and that LED state always faithfully reflected<br>
> the actual mute state (LED on == speaker audio off, always).  In the other<br>
> direction, there was never any observed effect on the mute LED state as a<br>
> result of toggling the mixer-based Master Playback mute, via pavuconrol,<br>
> pactl, pacmd, or amixer (or in any other way that I ever found). In short,<br>
> the mute LED in 3.18 seems like it's solely under control of the mute key<br>
> event as fielded by the driver.<br>
><br>
> In 3.19, the mute key is no longer fielded directly by the driver; it becomes<br>
> simply an ordinary userspace key. That was an intentional change and certainly<br>
> not a bug. But the point is that in 3.19, if the user wishes to perform muting<br>
> in userspace (e.g., by "pactl"ing the mixer mute function in response to a<br>
> mute key event, or by clicking the pavucontrol mute icon, or by issuing an<br>
> amixer or pactl command) it's not going to have the same effect that the<br>
> driver used to realize in 3.18, in two ways: One is relatively minor, and<br>
> the other is central to the issue here:<br>
><br>
>   * First, and obviously, it isn't going institute the mute function via the<br>
>     HW mute, but rather via the mixer-based Master Playback mute. This in<br>
>     itself is probably no big deal: There are some minor functional differences<br>
>     between the HW mute and the mixer mute, but most users won't care and<br>
>     it's probably not a very important issue. Let's ignore it here.<br>
><br>
>   * Second -- and here is the real issue -- since the mixer-based Master<br>
>     Playback mute has (and never had, even in 3.18) any effect on the mute<br>
>     LED (on my T-510) the mute LED does not follow the mixer-based mute<br>
>     state. It's always off. There just doesn't seem to be any way turn on<br>
>     the mute LED via pavucontrol, pactl, pacmd, or amixer.<br>
><br>
> The second item is the real head-scratcher: Not only is the functionality of<br>
> the mute LED lost in 3.19 (on my T-510 at least) but it is David's expectation<br>
> that the LED _ought_ to be following the Master Playback mixer mute state,<br>
> yet it does not.<br></p>
<p>Apr 16 15:56:17 ga kernel: thinkpad_acpi: ThinkPad ACPI Extras v0.25<br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi:<a href="http://ibm-acpi.sf.net/"> http://ibm-acpi.sf.net/</a><br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi: ThinkPad BIOS 6MET81WW (1.41 ), EC 6MHT43WW-1.18<br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi: Lenovo ThinkPad T510, model 4314DPU<br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi: detected a 16-level brightness capable ThinkPad<br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi: radio switch found; radios are enabled<br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi: This ThinkPad has standard ACPI backlight brightness control, supported by the ACPI video driver<br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi: Disabling thinkpad-acpi brightness events by default...<br>
Apr 16 15:56:17 ga kernel: thinkpad_acpi: Standard ACPI backlight interface available, not loading native one<br>
Apr 16 15:56:17 ga kernel: input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input7</p>
<p><a href="https://bugzilla.kernel.org/show_bug.cgi?id=96171">https://bugzilla.kernel.org/show_bug.cgi?id=96171</a></p>
<p>Let user know whether the mute led or mic led interface is supported by  tpacpi_led_set() when thinkpad_acpi is loaded</p>
<p>static int mute_led_init(struct ibm_init_struct *iibm)<br>
{<br>
acpi_handle temp;<br>
int i;</p>
<p>for (i = 0; i < TPACPI_LED_MAX; i++) {<br>
struct tp_led_table *t = &led_tables[i];<br>
- if (ACPI_SUCCESS(acpi_get_handle(hkey_handle, t->name, &temp)))<br>
+ if (ACPI_SUCCESS(acpi_get_handle(hkey_handle, t->name, &temp))) {<br>
+        pr_info("Thinkpad led %s interface supported.\n", t->name);<br>
mute_led_on_off(t, false);<br>
+    }<br>
else<br>
t->state = -ENODEV;<br>
}<br>
return 0;<br>
}</p>