| From 1f7c6658962fa1260c1658d681bd6bb0c746b99a Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Tue, 15 Mar 2016 16:44:55 +0100 |
| Subject: ALSA: hda - Fix unconditional GPIO toggle via automute |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit 1f7c6658962fa1260c1658d681bd6bb0c746b99a upstream. |
| |
| Cirrus HD-audio driver may adjust GPIO pins for EAPD dynamically |
| depending on the jack plug state. This works fine for the auto-mute |
| mode where the speaker gets muted upon the HP jack plug. OTOH, when |
| the auto-mute mode is off, this turns off the EAPD unexpectedly |
| depending on the jack state, which results in the silent speaker |
| output. |
| |
| This patch fixes the silent speaker output issue by setting GPIO bits |
| constantly when the auto-mute mode is off. |
| |
| Reported-and-tested-by: moosotc@gmail.com |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/pci/hda/patch_cirrus.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/sound/pci/hda/patch_cirrus.c |
| +++ b/sound/pci/hda/patch_cirrus.c |
| @@ -174,8 +174,12 @@ static void cs_automute(struct hda_codec |
| snd_hda_gen_update_outputs(codec); |
| |
| if (spec->gpio_eapd_hp || spec->gpio_eapd_speaker) { |
| - spec->gpio_data = spec->gen.hp_jack_present ? |
| - spec->gpio_eapd_hp : spec->gpio_eapd_speaker; |
| + if (spec->gen.automute_speaker) |
| + spec->gpio_data = spec->gen.hp_jack_present ? |
| + spec->gpio_eapd_hp : spec->gpio_eapd_speaker; |
| + else |
| + spec->gpio_data = |
| + spec->gpio_eapd_hp | spec->gpio_eapd_speaker; |
| snd_hda_codec_write(codec, 0x01, 0, |
| AC_VERB_SET_GPIO_DATA, spec->gpio_data); |
| } |