mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
[ALSA] ca0106 - Add master volume controls
Added master volume and switch controls for ca0106 using vmaster. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
1c82ed1bc5
commit
49c88b85b5
2 changed files with 52 additions and 0 deletions
|
@ -162,6 +162,7 @@ config SND_CA0106
|
|||
depends on SND
|
||||
select SND_AC97_CODEC
|
||||
select SND_RAWMIDI
|
||||
select SND_VMASTER
|
||||
help
|
||||
Say Y here to include support for the Sound Blaster Audigy LS
|
||||
and Live 24bit.
|
||||
|
|
|
@ -658,11 +658,47 @@ static int __devinit rename_ctl(struct snd_card *card, const char *src, const ch
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
static __devinitdata
|
||||
DECLARE_TLV_DB_SCALE(snd_ca0106_master_db_scale, -6375, 50, 1);
|
||||
|
||||
static char *slave_vols[] __devinitdata = {
|
||||
"Analog Front Playback Volume",
|
||||
"Analog Rear Playback Volume",
|
||||
"Analog Center/LFE Playback Volume",
|
||||
"Analog Side Playback Volume",
|
||||
"IEC958 Front Playback Volume",
|
||||
"IEC958 Rear Playback Volume",
|
||||
"IEC958 Center/LFE Playback Volume",
|
||||
"IEC958 Unknown Playback Volume",
|
||||
"CAPTURE feedback Playback Volume",
|
||||
NULL
|
||||
};
|
||||
|
||||
static char *slave_sws[] __devinitdata = {
|
||||
"Analog Front Playback Switch",
|
||||
"Analog Rear Playback Switch",
|
||||
"Analog Center/LFE Playback Switch",
|
||||
"Analog Side Playback Switch",
|
||||
"IEC958 Playback Switch",
|
||||
NULL
|
||||
};
|
||||
|
||||
static void __devinit add_slaves(struct snd_card *card,
|
||||
struct snd_kcontrol *master, char **list)
|
||||
{
|
||||
for (; *list; list++) {
|
||||
struct snd_kcontrol *slave = ctl_find(card, *list);
|
||||
if (slave)
|
||||
snd_ctl_add_slave(master, slave);
|
||||
}
|
||||
}
|
||||
|
||||
int __devinit snd_ca0106_mixer(struct snd_ca0106 *emu)
|
||||
{
|
||||
int err;
|
||||
struct snd_card *card = emu->card;
|
||||
char **c;
|
||||
struct snd_kcontrol *vmaster;
|
||||
static char *ca0106_remove_ctls[] = {
|
||||
"Master Mono Playback Switch",
|
||||
"Master Mono Playback Volume",
|
||||
|
@ -719,6 +755,21 @@ int __devinit snd_ca0106_mixer(struct snd_ca0106 *emu)
|
|||
}
|
||||
if (emu->details->spi_dac == 1)
|
||||
ADD_CTLS(emu, snd_ca0106_volume_spi_dac_ctls);
|
||||
|
||||
/* Create virtual master controls */
|
||||
vmaster = snd_ctl_make_virtual_master("Master Playback Volume",
|
||||
snd_ca0106_master_db_scale);
|
||||
if (!vmaster)
|
||||
return -ENOMEM;
|
||||
add_slaves(card, vmaster, slave_vols);
|
||||
|
||||
if (emu->details->spi_dac == 1) {
|
||||
vmaster = snd_ctl_make_virtual_master("Master Playback Switch",
|
||||
NULL);
|
||||
if (!vmaster)
|
||||
return -ENOMEM;
|
||||
add_slaves(card, vmaster, slave_sws);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue