commit: 0a3fabe30e1a3b2037a12b863b8c45fffce38ee9
From: David Henningsson <[email protected]>
Date: Fri, 4 Mar 2011 16:54:52 +0100
Subject: [PATCH] ALSA: HDA: Realtek ALC88x: Do not over-initialize speakers and 
hp that are primary outputs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Do not initialize again the what has already been initialized as
multi outs, as this breaks surround speakers.

Tested-by: Bartłomiej Å»ogała <[email protected]>
Cc: <[email protected]>
Signed-off-by: David Henningsson <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
---
 sound/pci/hda/patch_realtek.c |   37 +++++++++++++++++++++----------------
 1 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 24bbc47..d403ee8 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -10773,23 +10773,28 @@ static void alc882_auto_init_hp_out(struct hda_codec 
*codec)
        hda_nid_t pin, dac;
        int i;
 
-       for (i = 0; i < ARRAY_SIZE(spec->autocfg.hp_pins); i++) {
-               pin = spec->autocfg.hp_pins[i];
-               if (!pin)
-                       break;
-               dac = spec->multiout.hp_nid;
-               if (!dac)
-                       dac = spec->multiout.dac_nids[0]; /* to front */
-               alc882_auto_set_output_and_unmute(codec, pin, PIN_HP, dac);
+       if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT) {
+               for (i = 0; i < ARRAY_SIZE(spec->autocfg.hp_pins); i++) {
+                       pin = spec->autocfg.hp_pins[i];
+                       if (!pin)
+                               break;
+                       dac = spec->multiout.hp_nid;
+                       if (!dac)
+                               dac = spec->multiout.dac_nids[0]; /* to front */
+                       alc882_auto_set_output_and_unmute(codec, pin, PIN_HP, 
dac);
+               }
        }
-       for (i = 0; i < ARRAY_SIZE(spec->autocfg.speaker_pins); i++) {
-               pin = spec->autocfg.speaker_pins[i];
-               if (!pin)
-                       break;
-               dac = spec->multiout.extra_out_nid[0];
-               if (!dac)
-                       dac = spec->multiout.dac_nids[0]; /* to front */
-               alc882_auto_set_output_and_unmute(codec, pin, PIN_OUT, dac);
+
+       if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT) {
+               for (i = 0; i < ARRAY_SIZE(spec->autocfg.speaker_pins); i++) {
+                       pin = spec->autocfg.speaker_pins[i];
+                       if (!pin)
+                               break;
+                       dac = spec->multiout.extra_out_nid[0];
+                       if (!dac)
+                               dac = spec->multiout.dac_nids[0]; /* to front */
+                       alc882_auto_set_output_and_unmute(codec, pin, PIN_OUT, 
dac);
+               }
        }
 }
 

_______________________________________________
stable mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/stable

Reply via email to