ALSA: hda/realtek - Introduce polarity for micmute LED GPIO
authorKai-Heng Feng <kai.heng.feng@canonical.com>
Thu, 30 Apr 2020 08:32:51 +0000 (16:32 +0800)
committerTakashi Iwai <tiwai@suse.de>
Thu, 30 Apr 2020 17:19:54 +0000 (19:19 +0200)
Currently mute LED and micmute LED share the same GPIO polarity.

So split the polarity for mute and micmute, in case they have different
polarities.

Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Link: https://lore.kernel.org/r/20200430083255.5093-1-kai.heng.feng@canonical.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_realtek.c

index c1a85c8..7e49c5e 100644 (file)
@@ -81,6 +81,7 @@ struct alc_spec {
 
        /* mute LED for HP laptops, see alc269_fixup_mic_mute_hook() */
        int mute_led_polarity;
+       int micmute_led_polarity;
        hda_nid_t mute_led_nid;
        hda_nid_t cap_mute_led_nid;
 
@@ -4075,11 +4076,9 @@ static void alc269_fixup_hp_mute_led_mic3(struct hda_codec *codec,
 
 /* update LED status via GPIO */
 static void alc_update_gpio_led(struct hda_codec *codec, unsigned int mask,
-                               bool enabled)
+                               int polarity, bool enabled)
 {
-       struct alc_spec *spec = codec->spec;
-
-       if (spec->mute_led_polarity)
+       if (polarity)
                enabled = !enabled;
        alc_update_gpio_data(codec, mask, !enabled); /* muted -> LED on */
 }
@@ -4090,7 +4089,8 @@ static void alc_fixup_gpio_mute_hook(void *private_data, int enabled)
        struct hda_codec *codec = private_data;
        struct alc_spec *spec = codec->spec;
 
-       alc_update_gpio_led(codec, spec->gpio_mute_led_mask, enabled);
+       alc_update_gpio_led(codec, spec->gpio_mute_led_mask,
+                           spec->mute_led_polarity, enabled);
 }
 
 /* turn on/off mic-mute LED via GPIO per capture hook */
@@ -4099,6 +4099,7 @@ static void alc_gpio_micmute_update(struct hda_codec *codec)
        struct alc_spec *spec = codec->spec;
 
        alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
+                           spec->micmute_led_polarity,
                            spec->gen.micmute_led.led_value);
 }
 
@@ -5795,7 +5796,8 @@ static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
 
        snd_hda_gen_hp_automute(codec, jack);
        /* mute_led_polarity is set to 0, so we pass inverted value here */
-       alc_update_gpio_led(codec, 0x10, !spec->gen.hp_jack_present);
+       alc_update_gpio_led(codec, 0x10, spec->mute_led_polarity,
+                           !spec->gen.hp_jack_present);
 }
 
 /* Manage GPIOs for HP EliteBook Folio 9480m.