Commit dbd13179 authored by Kai-Heng Feng's avatar Kai-Heng Feng Committed by Takashi Iwai

ALSA: hda/realtek - Introduce polarity for micmute LED GPIO

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: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
Link: https://lore.kernel.org/r/20200430083255.5093-1-kai.heng.feng@canonical.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 25cba461
...@@ -81,6 +81,7 @@ struct alc_spec { ...@@ -81,6 +81,7 @@ struct alc_spec {
/* mute LED for HP laptops, see alc269_fixup_mic_mute_hook() */ /* mute LED for HP laptops, see alc269_fixup_mic_mute_hook() */
int mute_led_polarity; int mute_led_polarity;
int micmute_led_polarity;
hda_nid_t mute_led_nid; hda_nid_t mute_led_nid;
hda_nid_t cap_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, ...@@ -4075,11 +4076,9 @@ static void alc269_fixup_hp_mute_led_mic3(struct hda_codec *codec,
/* update LED status via GPIO */ /* update LED status via GPIO */
static void alc_update_gpio_led(struct hda_codec *codec, unsigned int mask, 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 (polarity)
if (spec->mute_led_polarity)
enabled = !enabled; enabled = !enabled;
alc_update_gpio_data(codec, mask, !enabled); /* muted -> LED on */ 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) ...@@ -4090,7 +4089,8 @@ static void alc_fixup_gpio_mute_hook(void *private_data, int enabled)
struct hda_codec *codec = private_data; struct hda_codec *codec = private_data;
struct alc_spec *spec = codec->spec; 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 */ /* 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) ...@@ -4099,6 +4099,7 @@ static void alc_gpio_micmute_update(struct hda_codec *codec)
struct alc_spec *spec = codec->spec; struct alc_spec *spec = codec->spec;
alc_update_gpio_led(codec, spec->gpio_mic_led_mask, alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
spec->micmute_led_polarity,
spec->gen.micmute_led.led_value); spec->gen.micmute_led.led_value);
} }
...@@ -5795,7 +5796,8 @@ static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec, ...@@ -5795,7 +5796,8 @@ static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
snd_hda_gen_hp_automute(codec, jack); snd_hda_gen_hp_automute(codec, jack);
/* mute_led_polarity is set to 0, so we pass inverted value here */ /* 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. /* Manage GPIOs for HP EliteBook Folio 9480m.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment