At Sun, 19 Oct 2008 10:51:15 +0200, =?UTF-8?Q?Vedran_Mileti=C4=87?= wrote:
Sorry to go off-topic, but there are lots of cards that don't have Master control. Would this qualify as a bug?
No, it's no bug. Such hardware has really no master volume control in design.
Takashi
2008/10/19 Takashi Iwai tiwai@suse.de:
At Sat, 18 Oct 2008 20:42:24 -0500, William Pitcock wrote:
The OSS4-provided master mixer control is actually relative to EMU20K1 port volume settings. So, it should be named PCM. The Master mixer control will be shortly readded as a control which sets the master volume.
Signed-off-by: William Pitcock nenolod@sacredspiral.co.uk
I postpone this until you send the Master control addition. Most apps requires Master control rather than PCM control, AFAIK.
Takashi
sound/pci/sbxfi/sbxfi.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/sound/pci/sbxfi/sbxfi.c b/sound/pci/sbxfi/sbxfi.c index c006278..3e99a97 100644 --- a/sound/pci/sbxfi/sbxfi.c +++ b/sound/pci/sbxfi/sbxfi.c @@ -155,7 +155,7 @@ struct sbxfi { int timer_reprogram;
unsigned int base_rate;
int master_vol[2];
int pcm_vol[2]; int capture_vol[2]; int capsrc; int micboost;
@@ -1103,7 +1103,7 @@ static void sbxfi_setup_play_mixer(struct sbxfi *chip, int i, vol, audio_ch;
for (i = 0; i < 2; i++) {
vol = port->vol[i] + chip->master_vol[i] - MAX_VOLUME;
vol = port->vol[i] + chip->pcm_vol[i] - MAX_VOLUME; if (vol < 0) vol = 0; vol = amop_vol_table[vol];
@@ -1124,9 +1124,9 @@ static int sbxfi_update_play_mixer(struct sbxfi *chip, int *vol) struct sbxfi_port *port;
for (i = 0; i < 2; i++) {
if (vol[i] == chip->master_vol[i])
if (vol[i] == chip->pcm_vol[i]) continue;
chip->master_vol[i] = vol[i];
chip->pcm_vol[i] = vol[i]; spin_lock_irq(&chip->port_lock); list_for_each_entry(port, &chip->port_list, list) { if (port->substream->stream !=
@@ -1516,7 +1516,7 @@ static int __devinit sbxfi_create_pcm(struct sbxfi *chip) /*
- Mixer interface
*/ -static int sbxfi_master_vol_info(struct snd_kcontrol *kcontrol, +static int sbxfi_pcm_vol_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info *uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; @@ -1526,16 +1526,16 @@ static int sbxfi_master_vol_info(struct snd_kcontrol *kcontrol, return 0; }
-static int sbxfi_master_vol_get(struct snd_kcontrol *kcontrol, +static int sbxfi_pcm_vol_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct sbxfi *chip = snd_kcontrol_chip(kcontrol);
ucontrol->value.integer.value[0] = chip->master_vol[0];
ucontrol->value.integer.value[1] = chip->master_vol[1];
ucontrol->value.integer.value[0] = chip->pcm_vol[0];
ucontrol->value.integer.value[1] = chip->pcm_vol[1]; return 0;
}
-static int sbxfi_master_vol_put(struct snd_kcontrol *kcontrol, +static int sbxfi_pcm_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct sbxfi *chip = snd_kcontrol_chip(kcontrol); @@ -1543,7 +1543,7 @@ static int sbxfi_master_vol_put(struct snd_kcontrol *kcontrol,
vol[0] = ucontrol->value.integer.value[0]; vol[1] = ucontrol->value.integer.value[1];
if (!memcmp(vol, chip->master_vol, sizeof(vol)))
if (!memcmp(vol, chip->pcm_vol, sizeof(vol))) return 0; if (vol[0] < 0)
@@ -1658,13 +1658,13 @@ static int sbxfi_micboost_put(struct snd_kcontrol *kcontrol,
static struct snd_kcontrol_new mixers[] __devinitdata = { {
.name = "Master Playback Volume",
.name = "PCM Playback Volume", .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .access = (SNDRV_CTL_ELEM_ACCESS_READWRITE /* | SNDRV_CTL_ELEM_ACCESS_TLV_READ*/),
.info = sbxfi_master_vol_info,
.get = sbxfi_master_vol_get,
.put = sbxfi_master_vol_put,
.info = sbxfi_pcm_vol_info,
.get = sbxfi_pcm_vol_get,
.put = sbxfi_pcm_vol_put, /*.tlv = { .p = db_master_vol }*/ }, {
-- 1.5.5.4
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
-- Vedran Miletić