]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
[PATCH] add alsa-surround-stereo.patch (left the comment addition in the patch
authorchrisw@osdl.org <chrisw@osdl.org>
Tue, 15 Mar 2005 23:08:48 +0000 (15:08 -0800)
committerGreg KH <gregkh@suse.de>
Thu, 12 May 2005 05:10:07 +0000 (22:10 -0700)
queue/alsa-surround-stereo.patch [new file with mode: 0644]

diff --git a/queue/alsa-surround-stereo.patch b/queue/alsa-surround-stereo.patch
new file mode 100644 (file)
index 0000000..bda50b2
--- /dev/null
@@ -0,0 +1,82 @@
+Date: Mon, 14 Mar 2005 16:59:15 +0000
+From: Daniel Drake <dsd@gentoo.org>
+To: stable@kernel.org
+Subject: [PATCH][ALSA] Fix stereo mutes on Surround volume control
+
+As of 2.6.11, I have no output out of the rear right speaker of my 4.1 
+surround sound setup. I am using snd-intel8x0 based on a Realtek ALC650F chip 
+on an nvidia motherboard.
+
+A gentoo user with completely different hardware also ran into this:
+http://bugs.gentoo.org/84276
+
+2.6.11-mm3 fixes this problem and I've identified the specific fix, which is 
+already in the ALSA development tree. An ALSA developer asked me to submit the 
+fix for 2.6.11.x when I'd found it, so here it is :)
+
+--
+AC97 Codec
+Fix stereo mutes on Surround volume control.
+
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+Signed-off-by: Chris Wright <chrisw@osdl.org>
+
+diff -Naru a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
+--- a/sound/pci/ac97/ac97_codec.c      2005-03-14 08:24:04 -08:00
++++ b/sound/pci/ac97/ac97_codec.c      2005-03-14 08:24:04 -08:00
+@@ -1184,7 +1184,7 @@
+ /*
+  * create mute switch(es) for normal stereo controls
+  */
+-static int snd_ac97_cmute_new(snd_card_t *card, char *name, int reg, ac97_t *ac97)
++static int snd_ac97_cmute_new_stereo(snd_card_t *card, char *name, int reg, int check_stereo, ac97_t *ac97)
+ {
+       snd_kcontrol_t *kctl;
+       int err;
+@@ -1195,7 +1195,7 @@
+       mute_mask = 0x8000;
+       val = snd_ac97_read(ac97, reg);
+-      if (ac97->flags & AC97_STEREO_MUTES) {
++      if (check_stereo || (ac97->flags & AC97_STEREO_MUTES)) {
+               /* check whether both mute bits work */
+               val1 = val | 0x8080;
+               snd_ac97_write(ac97, reg, val1);
+@@ -1253,7 +1253,7 @@
+ /*
+  * create a mute-switch and a volume for normal stereo/mono controls
+  */
+-static int snd_ac97_cmix_new(snd_card_t *card, const char *pfx, int reg, ac97_t *ac97)
++static int snd_ac97_cmix_new_stereo(snd_card_t *card, const char *pfx, int reg, int check_stereo, ac97_t *ac97)
+ {
+       int err;
+       char name[44];
+@@ -1264,7 +1264,7 @@
+       if (snd_ac97_try_bit(ac97, reg, 15)) {
+               sprintf(name, "%s Switch", pfx);
+-              if ((err = snd_ac97_cmute_new(card, name, reg, ac97)) < 0)
++              if ((err = snd_ac97_cmute_new_stereo(card, name, reg, check_stereo, ac97)) < 0)
+                       return err;
+       }
+       check_volume_resolution(ac97, reg, &lo_max, &hi_max);
+@@ -1276,6 +1276,8 @@
+       return 0;
+ }
++#define snd_ac97_cmix_new(card, pfx, reg, ac97)       snd_ac97_cmix_new_stereo(card, pfx, reg, 0, ac97)
++#define snd_ac97_cmute_new(card, name, reg, ac97)     snd_ac97_cmute_new_stereo(card, name, reg, 0, ac97)
+ static unsigned int snd_ac97_determine_spdif_rates(ac97_t *ac97);
+@@ -1326,7 +1328,8 @@
+       /* build surround controls */
+       if (snd_ac97_try_volume_mix(ac97, AC97_SURROUND_MASTER)) {
+-              if ((err = snd_ac97_cmix_new(card, "Surround Playback", AC97_SURROUND_MASTER, ac97)) < 0)
++              /* Surround Master (0x38) is with stereo mutes */
++              if ((err = snd_ac97_cmix_new_stereo(card, "Surround Playback", AC97_SURROUND_MASTER, 1, ac97)) < 0)
+                       return err;
+       }
+