| From f9ef724d4896763479f3921afd1ee61552fc9836 Mon Sep 17 00:00:00 2001 |
| From: Jeronimo Borque <jeronimo@borque.com.ar> |
| Date: Sun, 18 Aug 2019 22:35:38 -0300 |
| Subject: ALSA: hda - Fixes inverted Conexant GPIO mic mute led |
| |
| From: Jeronimo Borque <jeronimo@borque.com.ar> |
| |
| commit f9ef724d4896763479f3921afd1ee61552fc9836 upstream. |
| |
| "enabled" parameter historically referred to the device input or |
| output, not to the led indicator. After the changes added with the led |
| helper functions the mic mute led logic refers to the led and not to |
| the mic input which caused led indicator to be negated. |
| Fixing logic in cxt_update_gpio_led and updated |
| cxt_fixup_gpio_mute_hook |
| Also updated debug messages to ease further debugging if necessary. |
| |
| Fixes: 184e302b46c9 ("ALSA: hda/conexant - Use the mic-mute LED helper") |
| Suggested-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Jeronimo Borque <jeronimo@borque.com.ar> |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/pci/hda/patch_conexant.c | 17 +++++++++-------- |
| 1 file changed, 9 insertions(+), 8 deletions(-) |
| |
| --- a/sound/pci/hda/patch_conexant.c |
| +++ b/sound/pci/hda/patch_conexant.c |
| @@ -611,18 +611,20 @@ static void cxt_fixup_hp_gate_mic_jack(s |
| |
| /* update LED status via GPIO */ |
| static void cxt_update_gpio_led(struct hda_codec *codec, unsigned int mask, |
| - bool enabled) |
| + bool led_on) |
| { |
| struct conexant_spec *spec = codec->spec; |
| unsigned int oldval = spec->gpio_led; |
| |
| if (spec->mute_led_polarity) |
| - enabled = !enabled; |
| + led_on = !led_on; |
| |
| - if (enabled) |
| - spec->gpio_led &= ~mask; |
| - else |
| + if (led_on) |
| spec->gpio_led |= mask; |
| + else |
| + spec->gpio_led &= ~mask; |
| + codec_dbg(codec, "mask:%d enabled:%d gpio_led:%d\n", |
| + mask, led_on, spec->gpio_led); |
| if (spec->gpio_led != oldval) |
| snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA, |
| spec->gpio_led); |
| @@ -633,8 +635,8 @@ static void cxt_fixup_gpio_mute_hook(voi |
| { |
| struct hda_codec *codec = private_data; |
| struct conexant_spec *spec = codec->spec; |
| - |
| - cxt_update_gpio_led(codec, spec->gpio_mute_led_mask, enabled); |
| + /* muted -> LED on */ |
| + cxt_update_gpio_led(codec, spec->gpio_mute_led_mask, !enabled); |
| } |
| |
| /* turn on/off mic-mute LED via GPIO per capture hook */ |
| @@ -656,7 +658,6 @@ static void cxt_fixup_mute_led_gpio(stru |
| { 0x01, AC_VERB_SET_GPIO_DIRECTION, 0x03 }, |
| {} |
| }; |
| - codec_info(codec, "action: %d gpio_led: %d\n", action, spec->gpio_led); |
| |
| if (action == HDA_FIXUP_ACT_PRE_PROBE) { |
| spec->gen.vmaster_mute.hook = cxt_fixup_gpio_mute_hook; |