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)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 26 Jan 2012 00:13:08 +0000 (16:13 -0800)
commit 78e2a928e377d5124932d4399c6c581908b027a0 upstream.

There was a bug in the automute logic causing speakers not to
mute when headphones were plugged in.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
sound/pci/hda/patch_cirrus.c

index f55ceb6..5b0a9bb 100644 (file)
@@ -920,16 +920,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 ?