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