aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRandy Cushman <rcushman_linux@earthlink.net>2007-03-09 05:32:22 -0500
committerJaroslav Kysela <perex@suse.cz>2007-03-14 03:24:16 -0400
commitc26a8de23a4417f556250c4c099b048b26c430be (patch)
tree2d19384cf5b510df3cec62c343a3be01ec518baf
parent1fc273b88e59092466b6503e46d9227976254e10 (diff)
[ALSA] ac97 - fix AD shared shared jack control logic
This patch fixes the control logic for shared Microphone in/Center+LFE out and Line in/Surround out jacks for Analog Devices AD1888, AD1980 and AD1985 AC '97 CODECs. Signed-off-by: Randy Cushman <rcushman_linux@earthlink.net> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
-rw-r--r--sound/pci/ac97/ac97_patch.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
index 37fabf75daa7..b188a4df58cb 100644
--- a/sound/pci/ac97/ac97_patch.c
+++ b/sound/pci/ac97/ac97_patch.c
@@ -1962,9 +1962,11 @@ static int snd_ac97_ad1888_downmix_put(struct snd_kcontrol *kcontrol, struct snd
1962static void ad1888_update_jacks(struct snd_ac97 *ac97) 1962static void ad1888_update_jacks(struct snd_ac97 *ac97)
1963{ 1963{
1964 unsigned short val = 0; 1964 unsigned short val = 0;
1965 if (! is_shared_linein(ac97)) 1965 /* clear LODIS if shared jack is to be used for Surround out */
1966 if (is_shared_linein(ac97))
1966 val |= (1 << 12); 1967 val |= (1 << 12);
1967 if (! is_shared_micin(ac97)) 1968 /* clear CLDIS if shared jack is to be used for C/LFE out */
1969 if (is_shared_micin(ac97))
1968 val |= (1 << 11); 1970 val |= (1 << 11);
1969 /* shared Line-In */ 1971 /* shared Line-In */
1970 snd_ac97_update_bits(ac97, AC97_AD_MISC, (1 << 11) | (1 << 12), val); 1972 snd_ac97_update_bits(ac97, AC97_AD_MISC, (1 << 11) | (1 << 12), val);
@@ -2136,8 +2138,9 @@ static const struct snd_kcontrol_new snd_ac97_ad1985_controls[] = {
2136static void ad1985_update_jacks(struct snd_ac97 *ac97) 2138static void ad1985_update_jacks(struct snd_ac97 *ac97)
2137{ 2139{
2138 ad1888_update_jacks(ac97); 2140 ad1888_update_jacks(ac97);
2141 /* clear OMS if shared jack is to be used for C/LFE out */
2139 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 1 << 9, 2142 snd_ac97_update_bits(ac97, AC97_AD_SERIAL_CFG, 1 << 9,
2140 is_shared_micin(ac97) ? 0 : 1 << 9); 2143 is_shared_micin(ac97) ? 1 << 9 : 0);
2141} 2144}
2142 2145
2143static int patch_ad1985_specific(struct snd_ac97 *ac97) 2146static int patch_ad1985_specific(struct snd_ac97 *ac97)
@@ -2418,9 +2421,9 @@ static void ad1986_update_jacks(struct snd_ac97 *ac97)
2418 unsigned short ser_val; 2421 unsigned short ser_val;
2419 2422
2420 /* disable SURROUND and CENTER/LFE if not surround mode */ 2423 /* disable SURROUND and CENTER/LFE if not surround mode */
2421 if (! is_surround_on(ac97)) 2424 if (!is_surround_on(ac97))
2422 misc_val |= AC97_AD1986_SODIS; 2425 misc_val |= AC97_AD1986_SODIS;
2423 if (! is_clfe_on(ac97)) 2426 if (!is_clfe_on(ac97))
2424 misc_val |= AC97_AD1986_CLDIS; 2427 misc_val |= AC97_AD1986_CLDIS;
2425 2428
2426 /* select line input (default=LINE_IN, SURROUND or MIC_1/2) */ 2429 /* select line input (default=LINE_IN, SURROUND or MIC_1/2) */