Update of /cvsroot/alsa/alsa-kernel/pci/emu10k1
In directory sc8-pr-cvs1:/tmp/cvs-serv12602/pci/emu10k1

Modified Files:
        emufx.c emumixer.c 
Log Message:
Peter Zubaj <[EMAIL PROTECTED]>:
- redesigned the default DSP routing of audigy1/2 boards.
  the normal PCM output is sent through "Stereo Mix", while
  the independent pcm streams can be attenuated by "PCM Front",
  "PCM Rear", and "PCM Center/LFE" volumes.



Index: emufx.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emufx.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- emufx.c     30 Sep 2003 13:27:21 -0000      1.40
+++ emufx.c     13 Oct 2003 16:30:45 -0000      1.41
@@ -1234,14 +1234,12 @@
  * initial DSP configuration for Audigy
  */
 
-#define A_GPR_ACCU 0xd6
-#define A_GPR_COND 0xd7
-
 static int __devinit _snd_emu10k1_audigy_init_efx(emu10k1_t *emu)
 {
        int err, i, z, gpr, nctl;
        const int playback = 10;
        const int capture = playback + (SND_EMU10K1_PLAYBACK_CHANNELS * 2); /* we 
reserve 10 voices */
+       const int stereo_mix = capture + 2;
        const int tmp = 0x88;
        u32 ptr;
        emu10k1_fx8010_code_t *icode;
@@ -1265,38 +1263,45 @@
        strcpy(icode->name, "Audigy DSP code for ALSA");
        ptr = 0;
        nctl = 0;
-       gpr = capture + 10;
+       gpr = stereo_mix + 10;
 
        /* stop FX processor */
        snd_emu10k1_ptr_write(emu, A_DBG, 0, (emu->fx8010.dbg = 0) | 
A_DBG_SINGLE_STEP);
 
-       /* Wave Playback Volume */
+       /* PCM front Playback Volume (independent from stereo mix) */
        A_OP(icode, &ptr, iMAC0, A_GPR(playback), A_C_00000000, A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_LEFT));
        A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_C_00000000, A_GPR(gpr+1), 
A_FXBUS(FXBUS_PCM_RIGHT));
-       snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Playback Volume", 
gpr, 100);
+       snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Front Playback 
Volume", gpr, 100);
        gpr += 2;
-
-       /* Wave Surround Playback */
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_C_00000000, A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_LEFT));
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_C_00000000, A_GPR(gpr+1), 
A_FXBUS(FXBUS_PCM_RIGHT));
-       snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Surround Playback 
Volume", gpr, 0);
+       
+       /* PCM Surround Playback (independent from stereo mix) */
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_C_00000000, A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_LEFT_REAR));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_C_00000000, A_GPR(gpr+1), 
A_FXBUS(FXBUS_PCM_RIGHT_REAR));
+       snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Surround Playback 
Volume", gpr, 100);
        gpr += 2;
 
-       /* Wave Center Playback */
-       /* Center = sub = Left/2 + Right/2 */
-       A_OP(icode, &ptr, iINTERP, A_GPR(tmp), A_FXBUS(FXBUS_PCM_LEFT), 0xcd, 
A_FXBUS(FXBUS_PCM_RIGHT));
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_C_00000000, A_GPR(gpr), 
A_GPR(tmp));
-       snd_emu10k1_init_mono_control(&controls[nctl++], "Wave Center Playback 
Volume", gpr, 0);
+       /* PCM Center Playback (independent from stereo mix) */
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_C_00000000, A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_CENTER));
+       snd_emu10k1_init_mono_control(&controls[nctl++], "PCM Center Playback Volume", 
gpr, 100);
        gpr++;
 
-       /* Wave LFE Playback */
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_C_00000000, A_GPR(gpr), 
A_GPR(tmp));
-       snd_emu10k1_init_mono_control(&controls[nctl++], "Wave LFE Playback Volume", 
gpr, 0);
+       /* PCM LFE Playback (independent from stereo mix) */
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_C_00000000, A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_LFE));
+       snd_emu10k1_init_mono_control(&controls[nctl++], "PCM LFE Playback Volume", 
gpr, 100);
        gpr++;
+       
+       /*
+        * Stereo Mix
+        */
+       /* Wave (PCM) Playback Volume (will be renamed later) */
+       A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix), A_C_00000000, A_GPR(gpr), 
A_FXBUS(FXBUS_WAVE_LEFT));
+       A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix+1), A_C_00000000, A_GPR(gpr+1), 
A_FXBUS(FXBUS_WAVE_RIGHT));
+       snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Playback Volume", 
gpr, 100);
+       gpr += 2;
 
        /* Music Playback */
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+0), A_GPR(playback+0), A_GPR(gpr), 
A_FXBUS(FXBUS_MIDI_LEFT));
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_GPR(playback+1), A_GPR(gpr+1), 
A_FXBUS(FXBUS_MIDI_RIGHT));
+       A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix+0), A_GPR(stereo_mix+0), A_GPR(gpr), 
A_FXBUS(FXBUS_MIDI_LEFT));
+       A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix+1), A_GPR(stereo_mix+1), 
A_GPR(gpr+1), A_FXBUS(FXBUS_MIDI_RIGHT));
        snd_emu10k1_init_stereo_control(&controls[nctl++], "Music Playback Volume", 
gpr, 100);
        gpr += 2;
 
@@ -1312,22 +1317,6 @@
        snd_emu10k1_init_stereo_control(&controls[nctl++], "Music Capture Volume", 
gpr, 0);
        gpr += 2;
 
-       /* Surround Playback */
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_GPR(playback+2), A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_LEFT_REAR));
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_GPR(playback+3), A_GPR(gpr+1), 
A_FXBUS(FXBUS_PCM_RIGHT_REAR));
-       snd_emu10k1_init_stereo_control(&controls[nctl++], "Surround Playback Volume", 
gpr, 80);
-       gpr += 2;
-
-       /* Center Playback */
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_GPR(playback+4), A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_CENTER));
-       snd_emu10k1_init_mono_control(&controls[nctl++], "Center Playback Volume", 
gpr, 80);
-       gpr++;
-
-       /* LFE Playback */
-       A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_GPR(playback+5), A_GPR(gpr), 
A_FXBUS(FXBUS_PCM_LFE));
-       snd_emu10k1_init_mono_control(&controls[nctl++], "LFE Playback Volume", gpr, 
80);
-       gpr++;
-
        /*
         * inputs
         */
@@ -1335,9 +1324,9 @@
 A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
 
        /* AC'97 Playback Volume */
-       A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_AC97_L);
-       A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_AC97_R);
-       snd_emu10k1_init_stereo_control(&controls[nctl++], "AC97 Playback Volume", 
gpr, 0);
+       A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AC97_L);
+       A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AC97_R);
+       snd_emu10k1_init_stereo_control(&controls[nctl++], "AC97 Playback Volume", 
gpr, 100);
        gpr += 2;
        /* AC'97 Capture Volume */
        A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
@@ -1346,8 +1335,8 @@
        gpr += 2;
 
        /* Audigy CD Playback Volume */
-       A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_SPDIF_CD_L);
-       A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_SPDIF_CD_R);
+       A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_SPDIF_CD_L);
+       A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_SPDIF_CD_R);
        snd_emu10k1_init_stereo_control(&controls[nctl++], "Audigy CD Playback 
Volume", gpr, 0);
        gpr += 2;
        /* Audigy CD Capture Volume */
@@ -1357,8 +1346,8 @@
        gpr += 2;
 
        /* Optical SPDIF Playback Volume */
-       A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_OPT_SPDIF_L);
-       A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
+       A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_OPT_SPDIF_L);
+       A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
        snd_emu10k1_init_stereo_control(&controls[nctl++], "IEC958 Optical Playback 
Volume", gpr, 0);
        gpr += 2;
        /* Optical SPDIF Capture Volume */
@@ -1368,8 +1357,8 @@
        gpr += 2;
 
        /* Line2 Playback Volume */
-       A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_LINE2_L);
-       A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_LINE2_R);
+       A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_LINE2_L);
+       A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_LINE2_R);
        snd_emu10k1_init_stereo_control(&controls[nctl++], "Line2 Playback Volume", 
gpr, 0);
        gpr += 2;
        /* Line2 Capture Volume */
@@ -1379,8 +1368,8 @@
        gpr += 2;
         
        /* RCA SPDIF Playback Volume */
-       A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_RCA_SPDIF_L);
-       A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_RCA_SPDIF_R);
+       A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_RCA_SPDIF_L);
+       A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_RCA_SPDIF_R);
        snd_emu10k1_init_stereo_control(&controls[nctl++], "IEC958 Coaxial Playback 
Volume", gpr, 0);
        gpr += 2;
        /* RCA SPDIF Capture Volume */
@@ -1390,8 +1379,8 @@
        gpr += 2;
 
        /* Aux2 Playback Volume */
-       A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_AUX2_L);
-       A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_AUX2_R);
+       A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AUX2_L);
+       A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AUX2_R);
        snd_emu10k1_init_stereo_control(&controls[nctl++], "Aux2 Playback Volume", 
gpr, 0);
        gpr += 2;
        /* Aux2 Capture Volume */
@@ -1399,6 +1388,30 @@
        A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AUX2_R);
        snd_emu10k1_init_stereo_control(&controls[nctl++], "Aux2 Capture Volume", gpr, 
0);
        gpr += 2;
+       
+       /* Stereo Mix Front Playback Volume */
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback), A_GPR(playback), A_GPR(gpr), 
A_GPR(stereo_mix));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_GPR(playback+1), A_GPR(gpr+1), 
A_GPR(stereo_mix+1));
+       snd_emu10k1_init_stereo_control(&controls[nctl++], "Front Playback Volume", 
gpr, 100);
+       gpr += 2;
+       
+       /* Stereo Mix Surround Playback */
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_GPR(playback+2), A_GPR(gpr), 
A_GPR(stereo_mix));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_GPR(playback+3), A_GPR(gpr+1), 
A_GPR(stereo_mix+1));
+       snd_emu10k1_init_stereo_control(&controls[nctl++], "Surround Playback Volume", 
gpr, 0);
+       gpr += 2;
+
+       /* Stereo Mix Center Playback */
+       /* Center = sub = Left/2 + Right/2 */
+       A_OP(icode, &ptr, iINTERP, A_GPR(tmp), A_GPR(stereo_mix), 0xcd, 
A_GPR(stereo_mix+1));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_GPR(playback+4), A_GPR(gpr), 
A_GPR(tmp));
+       snd_emu10k1_init_mono_control(&controls[nctl++], "Center Playback Volume", 
gpr, 0);
+       gpr++;
+
+       /* Stereo Mix LFE Playback */
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_GPR(playback+5), A_GPR(gpr), 
A_GPR(tmp));
+       snd_emu10k1_init_mono_control(&controls[nctl++], "LFE Playback Volume", gpr, 
0);
+       gpr++;
 
        /*
         * outputs
@@ -1497,20 +1510,18 @@
        snd_emu10k1_init_stereo_onoff_control(controls + nctl++, "Tone Control - 
Switch", gpr, 0);
        gpr += 2;
 
-       /* Master volume for audigy2 */
-       if (emu->revision == 4) {
-               A_OP(icode, &ptr, iMAC0, 
A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), 
A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS));
-               A_OP(icode, &ptr, iMAC0, 
A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr+1), 
A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS));
-               snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Master 
Playback Volume", gpr, 0);
-               gpr += 2;
-       }       
+       /* Master volume (will be renamed later) */
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS), 
A_C_00000000, A_GPR(gpr), A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), 
A_C_00000000, A_GPR(gpr+1), A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS), 
A_C_00000000, A_GPR(gpr+1), A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS), 
A_C_00000000, A_GPR(gpr+1), A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS), 
A_C_00000000, A_GPR(gpr+1), A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS));
+       A_OP(icode, &ptr, iMAC0, A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS), 
A_C_00000000, A_GPR(gpr+1), A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS));
+       snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Master Playback 
Volume", gpr, 0);
+       gpr += 2;
 
        /* analog speakers */
-       if (emu->revision == 4) { /* audigy2 */
-               A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback + 
SND_EMU10K1_PLAYBACK_CHANNELS);
-       } else {
-               A_PUT_STEREO_OUTPUT(A_EXTOUT_AC97_L, A_EXTOUT_AC97_R, playback + 
SND_EMU10K1_PLAYBACK_CHANNELS);
-       }
+       A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback + 
SND_EMU10K1_PLAYBACK_CHANNELS);
        A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2 + 
SND_EMU10K1_PLAYBACK_CHANNELS);
        A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS);
        A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS);
@@ -1519,7 +1530,7 @@
        A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback + 
SND_EMU10K1_PLAYBACK_CHANNELS);
 
        /* digital outputs */
-//     A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + 
SND_EMU10K1_PLAYBACK_CHANNELS);
+       /* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + 
SND_EMU10K1_PLAYBACK_CHANNELS); */
 
        /* IEC958 Optical Raw Playback Switch */ 
        icode->gpr_map[gpr++] = 0x1008;

Index: emumixer.c
===================================================================
RCS file: /cvsroot/alsa/alsa-kernel/pci/emu10k1/emumixer.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- emumixer.c  25 Jul 2003 10:39:38 -0000      1.16
+++ emumixer.c  13 Oct 2003 16:30:45 -0000      1.17
@@ -468,17 +468,16 @@
                ac97.private_free = snd_emu10k1_mixer_free_ac97;
                if ((err = snd_ac97_mixer(emu->card, &ac97, &emu->ac97)) < 0)
                        return err;
-               if (emu->audigy && emu->revision == 4) {
-                       /* Master/PCM controls on ac97 of Audigy2 has no effect */
-                       /* FIXME: keep master volume/switch to be sure.
-                        * once after we check that they play really no roles,
-                        * they shall be removed.
-                        */
-                       rename_ctl(card, "Master Playback Switch", "AC97 Master 
Playback Switch");
-                       rename_ctl(card, "Master Playback Volume", "AC97 Master 
Playback Volume");
+               if (emu->audigy) {
+                       /* Master/PCM controls on ac97 of Audigy has no effect */
                        /* pcm controls are removed */
                        remove_ctl(card, "PCM Playback Switch");
                        remove_ctl(card, "PCM Playback Volume");
+                       remove_ctl(card, "Master Mono Playback Switch");
+                       remove_ctl(card, "Master Mono Playback Volume");
+                       remove_ctl(card, "Master Playback Switch");
+                       remove_ctl(card, "Master Playback Volume");
+                       remove_ctl(card, "PCM Out Path & Mute");
                }
        } else {
                if (emu->APS)
@@ -489,11 +488,10 @@
                        strcpy(emu->card->mixername, "Emu10k1");
        }
 
-       if (emu->audigy && emu->revision == 4) {
-               /* Audigy2 and Audigy2 EX */
+       if (emu->audigy) {
                /* use the conventional names */
                rename_ctl(card, "Wave Playback Volume", "PCM Playback Volume");
-               rename_ctl(card, "Wave Playback Volume", "PCM Capture Volume");
+               /* rename_ctl(card, "Wave Capture Volume", "PCM Capture Volume"); */
                rename_ctl(card, "Wave Master Playback Volume", "Master Playback 
Volume");
        }
 



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to