[PATCH] ALSA: hda - fix the micmute led status for Lenovo ThinkCentre AIO

Hui Wang hui.wang at canonical.com
Tue Aug 11 11:03:55 CEST 2020


On 2020/8/11 下午4:56, Kai-Heng Feng wrote:
> Hi,
>
>> On Aug 10, 2020, at 14:51, Takashi Iwai <tiwai at suse.de> wrote:
>>
>> On Mon, 10 Aug 2020 08:34:36 +0200,
>> Hui Wang wrote:
>>>
>>> On 2020/8/10 下午2:30, Takashi Iwai wrote:
>>>> On Mon, 10 Aug 2020 04:16:59 +0200,
>>>> Hui Wang wrote:
>>>>> After installing the Ubuntu Linux, the micmute led status is not
>>>>> correct. Users expect that the led is on if the capture is disabled,
>>>>> but with the current kernel, the led is off with the capture disabled.
>>>>>
>>>>> We tried the old linux kernel like linux-4.15, there is no this issue.
>>>>> It looks like we introduced this issue when switching to the led_cdev.
>>>> The behavior can be controlled via "Mic Mute-LED Mode" enum kcontrol.
>>>> Which value does it have now?  If it's "Follow Capture", that's the
>>>> correct behavior.  OTOH, if it's "Follow Mute", the LED polarity is
>>>> indeed wrong.
>>> It is "Follow Mute",  if I change it to "Follow Capture" manually, the
>>> led status becomes correct.
>> OK, thanks for confirmation.  Applied now.
> I wonder if it's because how brightness value passed to gpio_mute_led_set() and micmute_led_set():
>
> static int gpio_mute_led_set(struct led_classdev *led_cdev,
>                               enum led_brightness brightness)
> {
>          struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
>          struct alc_spec *spec = codec->spec;
>
>          alc_update_gpio_led(codec, spec->gpio_mute_led_mask,
>                              spec->mute_led_polarity, !brightness);
>          return 0;
> }
>
> static int micmute_led_set(struct led_classdev *led_cdev,
>                             enum led_brightness brightness)
> {
>          struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
>          struct alc_spec *spec = codec->spec;
>
>          alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
>                              spec->micmute_led_polarity, !!brightness);
>          return 0;
> }
>
> Maybe we should let micmute_led_set() match gpio_mute_led_set() so the micmute polarity can be removed?

This will impact many many machines, I don't know if the current code 
could work correctly or not on other machines.

Thanks,

Hui.

>
> Kai-Heng
>
>>
>> Takashi


More information about the Alsa-devel mailing list