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

Kai-Heng Feng kai.heng.feng at canonical.com
Tue Aug 11 10:56:06 CEST 2020


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?

Kai-Heng

> 
> 
> Takashi



More information about the Alsa-devel mailing list