mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
ALSA: emu10k1: omit non-applicable mixer controls for E-MU cards
The E-MU cards don't try very hard to be Sound Blasters. All sound I/O goes through the Hana FPGA, thus making the regular extin/out controls useless. Still showing them just serves to clutter up the interface and confuse the user. Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de> Link: https://lore.kernel.org/r/20230514170323.3408834-5-oswald.buddenhagen@gmx.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
1a38ae5796
commit
6175ccd1a9
@ -1379,87 +1379,88 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], "EMU Capture Volume", gpr, 0);
|
||||
gpr_map[gpr + 2] = 0x00000000;
|
||||
gpr += 3;
|
||||
} else {
|
||||
/* AC'97 Playback Volume - used only for mic (renamed later) */
|
||||
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++], "AMic Playback Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
/* AC'97 Capture Volume - used only for mic */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], "Mic Capture Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* mic capture buffer */
|
||||
A_OP(icode, &ptr, iINTERP, A_EXTOUT(A_EXTOUT_MIC_CAP), A_EXTIN(A_EXTIN_AC97_L), A_C_40000000, A_EXTIN(A_EXTIN_AC97_R));
|
||||
|
||||
/* Audigy CD Playback Volume */
|
||||
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++],
|
||||
emu->card_capabilities->ac97_chip ? "Audigy CD Playback Volume" : "CD Playback Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
/* Audigy CD Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_SPDIF_CD_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_SPDIF_CD_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++],
|
||||
emu->card_capabilities->ac97_chip ? "Audigy CD Capture Volume" : "CD Capture Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Optical SPDIF Playback Volume */
|
||||
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++], SNDRV_CTL_NAME_IEC958("Optical ",PLAYBACK,VOLUME), gpr, 0);
|
||||
gpr += 2;
|
||||
/* Optical SPDIF Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_OPT_SPDIF_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], SNDRV_CTL_NAME_IEC958("Optical ",CAPTURE,VOLUME), gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Line2 Playback Volume */
|
||||
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++],
|
||||
emu->card_capabilities->ac97_chip ? "Line2 Playback Volume" : "Line Playback Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
/* Line2 Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_LINE2_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_LINE2_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++],
|
||||
emu->card_capabilities->ac97_chip ? "Line2 Capture Volume" : "Line Capture Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Philips ADC Playback Volume */
|
||||
A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_ADC_L);
|
||||
A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_ADC_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Playback Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
/* Philips ADC Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_ADC_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_ADC_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Capture Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Aux2 Playback Volume */
|
||||
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++],
|
||||
emu->card_capabilities->ac97_chip ? "Aux2 Playback Volume" : "Aux Playback Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
/* Aux2 Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AUX2_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AUX2_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++],
|
||||
emu->card_capabilities->ac97_chip ? "Aux2 Capture Volume" : "Aux Capture Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
}
|
||||
/* AC'97 Playback Volume - used only for mic (renamed later) */
|
||||
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++], "AMic Playback Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
/* AC'97 Capture Volume - used only for mic */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], "Mic Capture Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* mic capture buffer */
|
||||
A_OP(icode, &ptr, iINTERP, A_EXTOUT(A_EXTOUT_MIC_CAP), A_EXTIN(A_EXTIN_AC97_L), A_C_40000000, A_EXTIN(A_EXTIN_AC97_R));
|
||||
|
||||
/* Audigy CD Playback Volume */
|
||||
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++],
|
||||
emu->card_capabilities->ac97_chip ? "Audigy CD Playback Volume" : "CD Playback Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
/* Audigy CD Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_SPDIF_CD_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_SPDIF_CD_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++],
|
||||
emu->card_capabilities->ac97_chip ? "Audigy CD Capture Volume" : "CD Capture Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Optical SPDIF Playback Volume */
|
||||
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++], SNDRV_CTL_NAME_IEC958("Optical ",PLAYBACK,VOLUME), gpr, 0);
|
||||
gpr += 2;
|
||||
/* Optical SPDIF Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_OPT_SPDIF_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], SNDRV_CTL_NAME_IEC958("Optical ",CAPTURE,VOLUME), gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Line2 Playback Volume */
|
||||
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++],
|
||||
emu->card_capabilities->ac97_chip ? "Line2 Playback Volume" : "Line Playback Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
/* Line2 Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_LINE2_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_LINE2_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++],
|
||||
emu->card_capabilities->ac97_chip ? "Line2 Capture Volume" : "Line Capture Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Philips ADC Playback Volume */
|
||||
A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_ADC_L);
|
||||
A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_ADC_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Playback Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
/* Philips ADC Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_ADC_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_ADC_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Capture Volume", gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
/* Aux2 Playback Volume */
|
||||
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++],
|
||||
emu->card_capabilities->ac97_chip ? "Aux2 Playback Volume" : "Aux Playback Volume",
|
||||
gpr, 0);
|
||||
gpr += 2;
|
||||
/* Aux2 Capture Volume */
|
||||
A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AUX2_L);
|
||||
A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AUX2_R);
|
||||
snd_emu10k1_init_stereo_control(&controls[nctl++],
|
||||
emu->card_capabilities->ac97_chip ? "Aux2 Capture Volume" : "Aux 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));
|
||||
@ -1580,19 +1581,6 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
|
||||
snd_emu10k1_init_mono_control(&controls[nctl++], "Wave Master Playback Volume", gpr, 0);
|
||||
gpr++;
|
||||
|
||||
/* analog speakers */
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback);
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2);
|
||||
A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4);
|
||||
A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5);
|
||||
if (emu->card_capabilities->spk71)
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_ASIDE_L, A_EXTOUT_ASIDE_R, playback+6);
|
||||
|
||||
/* headphone */
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback);
|
||||
|
||||
/* digital outputs */
|
||||
/* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); */
|
||||
if (emu->card_capabilities->emu_model) {
|
||||
/* EMU1010 Outputs from PCM Front, Rear, Center, LFE, Side */
|
||||
dev_info(emu->card->dev, "EMU outputs on\n");
|
||||
@ -1603,37 +1591,48 @@ A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
|
||||
A_OP(icode, &ptr, iACC3, A_EMU32OUTL(z), A_GPR(playback + z), A_C_00000000, A_C_00000000);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* analog speakers */
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback);
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2);
|
||||
A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4);
|
||||
A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5);
|
||||
if (emu->card_capabilities->spk71)
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_ASIDE_L, A_EXTOUT_ASIDE_R, playback+6);
|
||||
|
||||
/* IEC958 Optical Raw Playback Switch */
|
||||
gpr_map[gpr++] = 0;
|
||||
gpr_map[gpr++] = 0x1008;
|
||||
gpr_map[gpr++] = 0xffff0000;
|
||||
for (z = 0; z < 2; z++) {
|
||||
A_OP(icode, &ptr, iMAC0, A_GPR(tmp + 2), A_FXBUS(FXBUS_PT_LEFT + z), A_C_00000000, A_C_00000000);
|
||||
A_OP(icode, &ptr, iSKIP, A_GPR_COND, A_GPR_COND, A_GPR(gpr - 2), A_C_00000001);
|
||||
A_OP(icode, &ptr, iACC3, A_GPR(tmp + 2), A_C_00000000, A_C_00010000, A_GPR(tmp + 2));
|
||||
A_OP(icode, &ptr, iANDXOR, A_GPR(tmp + 2), A_GPR(tmp + 2), A_GPR(gpr - 1), A_C_00000000);
|
||||
A_SWITCH(icode, &ptr, tmp + 0, tmp + 2, gpr + z);
|
||||
A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z);
|
||||
A_SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
|
||||
if ((z==1) && (emu->card_capabilities->spdif_bug)) {
|
||||
/* Due to a SPDIF output bug on some Audigy cards, this code delays the Right channel by 1 sample */
|
||||
dev_info(emu->card->dev,
|
||||
"Installing spdif_bug patch: %s\n",
|
||||
emu->card_capabilities->name);
|
||||
A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(gpr - 3), A_C_00000000, A_C_00000000);
|
||||
A_OP(icode, &ptr, iACC3, A_GPR(gpr - 3), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
|
||||
} else {
|
||||
A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
|
||||
/* headphone */
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback);
|
||||
|
||||
/* IEC958 Optical Raw Playback Switch */
|
||||
gpr_map[gpr++] = 0;
|
||||
gpr_map[gpr++] = 0x1008;
|
||||
gpr_map[gpr++] = 0xffff0000;
|
||||
for (z = 0; z < 2; z++) {
|
||||
A_OP(icode, &ptr, iMAC0, A_GPR(tmp + 2), A_FXBUS(FXBUS_PT_LEFT + z), A_C_00000000, A_C_00000000);
|
||||
A_OP(icode, &ptr, iSKIP, A_GPR_COND, A_GPR_COND, A_GPR(gpr - 2), A_C_00000001);
|
||||
A_OP(icode, &ptr, iACC3, A_GPR(tmp + 2), A_C_00000000, A_C_00010000, A_GPR(tmp + 2));
|
||||
A_OP(icode, &ptr, iANDXOR, A_GPR(tmp + 2), A_GPR(tmp + 2), A_GPR(gpr - 1), A_C_00000000);
|
||||
A_SWITCH(icode, &ptr, tmp + 0, tmp + 2, gpr + z);
|
||||
A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z);
|
||||
A_SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
|
||||
if ((z==1) && (emu->card_capabilities->spdif_bug)) {
|
||||
/* Due to a SPDIF output bug on some Audigy cards, this code delays the Right channel by 1 sample */
|
||||
dev_info(emu->card->dev,
|
||||
"Installing spdif_bug patch: %s\n",
|
||||
emu->card_capabilities->name);
|
||||
A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(gpr - 3), A_C_00000000, A_C_00000000);
|
||||
A_OP(icode, &ptr, iACC3, A_GPR(gpr - 3), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
|
||||
} else {
|
||||
A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
|
||||
}
|
||||
}
|
||||
snd_emu10k1_init_stereo_onoff_control(controls + nctl++, SNDRV_CTL_NAME_IEC958("Optical Raw ",PLAYBACK,SWITCH), gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2);
|
||||
A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4);
|
||||
A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5);
|
||||
}
|
||||
snd_emu10k1_init_stereo_onoff_control(controls + nctl++, SNDRV_CTL_NAME_IEC958("Optical Raw ",PLAYBACK,SWITCH), gpr, 0);
|
||||
gpr += 2;
|
||||
|
||||
A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2);
|
||||
A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4);
|
||||
A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5);
|
||||
|
||||
/* ADC buffer */
|
||||
#ifdef EMU10K1_CAPTURE_DIGITAL_OUT
|
||||
|
Loading…
Reference in New Issue
Block a user