Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / sound / pci / emu10k1 / emumixer.c
index 2a9d12d..c31f3d0 100644 (file)
@@ -777,6 +777,8 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
        };
        static char *audigy_remove_ctls[] = {
                /* Master/PCM controls on ac97 of Audigy has no effect */
+               /* On the Audigy2 the AC97 playback is piped into
+                * the Philips ADC for 24bit capture */
                "PCM Playback Switch",
                "PCM Playback Volume",
                "Master Mono Playback Switch",
@@ -804,6 +806,47 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
                "AMic Playback Volume", "Mic Playback Volume",
                NULL
        };
+       static char *audigy_remove_ctls_1361t_adc[] = {
+               /* On the Audigy2 the AC97 playback is piped into
+                * the Philips ADC for 24bit capture */
+               "PCM Playback Switch",
+               "PCM Playback Volume",
+               "Master Mono Playback Switch",
+               "Master Mono Playback Volume",
+               "Capture Source",
+               "Capture Switch",
+               "Capture Volume",
+               "Mic Capture Volume",
+               "Headphone Playback Switch",
+               "Headphone Playback Volume",
+               "3D Control - Center",
+               "3D Control - Depth",
+               "3D Control - Switch",
+               "Line2 Playback Volume",
+               "Line2 Capture Volume",
+               NULL
+       };
+       static char *audigy_rename_ctls_1361t_adc[] = {
+               "Master Playback Switch", "Master Capture Switch",
+               "Master Playback Volume", "Master Capture Volume",
+               "Wave Master Playback Volume", "Master Playback Volume",
+               "PC Speaker Playback Switch", "PC Speaker Capture Switch",
+               "PC Speaker Playback Volume", "PC Speaker Capture Volume",
+               "Phone Playback Switch", "Phone Capture Switch",
+               "Phone Playback Volume", "Phone Capture Volume",
+               "Mic Playback Switch", "Mic Capture Switch",
+               "Mic Playback Volume", "Mic Capture Volume",
+               "Line Playback Switch", "Line Capture Switch",
+               "Line Playback Volume", "Line Capture Volume",
+               "CD Playback Switch", "CD Capture Switch",
+               "CD Playback Volume", "CD Capture Volume",
+               "Aux Playback Switch", "Aux Capture Switch",
+               "Aux Playback Volume", "Aux Capture Volume",
+               "Video Playback Switch", "Video Capture Switch",
+               "Video Playback Volume", "Video Capture Volume",
+
+               NULL
+       };
 
        if (emu->card_capabilities->ac97_chip) {
                struct snd_ac97_bus *pbus;
@@ -834,7 +877,10 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
                        snd_ac97_write_cache(emu->ac97, AC97_MASTER, 0x0000);
                        /* set capture source to mic */
                        snd_ac97_write_cache(emu->ac97, AC97_REC_SEL, 0x0000);
-                       c = audigy_remove_ctls;
+                       if (emu->card_capabilities->adc_1361t)
+                               c = audigy_remove_ctls_1361t_adc;
+                       else 
+                               c = audigy_remove_ctls;
                } else {
                        /*
                         * Credits for cards based on STAC9758:
@@ -863,11 +909,15 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
        }
 
        if (emu->audigy)
-               c = audigy_rename_ctls;
+               if (emu->card_capabilities->adc_1361t)
+                       c = audigy_rename_ctls_1361t_adc;
+               else
+                       c = audigy_rename_ctls;
        else
                c = emu10k1_rename_ctls;
        for (; *c; c += 2)
                rename_ctl(card, c[0], c[1]);
+
        if (emu->card_capabilities->subsystem == 0x20071102) {  /* Audigy 4 Pro */
                rename_ctl(card, "Line2 Capture Volume", "Line1/Mic Capture Volume");
                rename_ctl(card, "Analog Mix Capture Volume", "Line2 Capture Volume");