ALSA: HDA: Fix automute for Cirrus Logic 421x
authorDavid Henningsson <david.henningsson@canonical.com>
Mon, 2 Jan 2012 11:40:16 +0000 (12:40 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sun, 8 Jan 2012 08:57:18 +0000 (09:57 +0100)
There was a bug in the automute logic causing speakers not to
mute when headphones were plugged in.

Cc: stable@kernel.org
Tested-by: Hsin-Yi Chen <hychen@canonical.com>
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_cirrus.c

index 9139558950941ed7dcbc583e189b00d96abf06dc..ea660429713dbdf7754e793e17c5d76c62487d17 100644 (file)
@@ -922,16 +922,14 @@ static void cs_automute(struct hda_codec *codec)
 
        /* mute speakers if spdif or hp jack is plugged in */
        for (i = 0; i < cfg->speaker_outs; i++) {
+               int pin_ctl = hp_present ? 0 : PIN_OUT;
+               /* detect on spdif is specific to CS421x */
+               if (spdif_present && (spec->vendor_nid == CS421X_VENDOR_NID))
+                       pin_ctl = 0;
+
                nid = cfg->speaker_pins[i];
                snd_hda_codec_write(codec, nid, 0,
-                                   AC_VERB_SET_PIN_WIDGET_CONTROL,
-                                   hp_present ? 0 : PIN_OUT);
-               /* detect on spdif is specific to CS421x */
-               if (spec->vendor_nid == CS421X_VENDOR_NID) {
-                       snd_hda_codec_write(codec, nid, 0,
-                                       AC_VERB_SET_PIN_WIDGET_CONTROL,
-                                       spdif_present ? 0 : PIN_OUT);
-               }
+                                   AC_VERB_SET_PIN_WIDGET_CONTROL, pin_ctl);
        }
        if (spec->gpio_eapd_hp) {
                unsigned int gpio = hp_present ?