* More mixer questions
@ 2006-04-01 23:18 Adrian McMenamin
2006-04-02 3:09 ` Lee Revell
0 siblings, 1 reply; 3+ messages in thread
From: Adrian McMenamin @ 2006-04-01 23:18 UTC (permalink / raw)
To: alsa-devel
Sorry to hit the list with another question about the mixer/control
stuff, but I'm pretty puzzled as to what I am getting wrong.
I am using mpg123 compiled to only hack oss, so I am reliant on oss
emulation.
I have the control code attached below, which defines both master and
pcm functions (mapped together as the device only plays PCM).
By default I get this:
/ # cat /proc/asound/card0/oss_mixer
VOLUME "" 0
BASS "" 0
TREBLE "" 0
SYNTH "" 0
PCM "" 0
SPEAKER "" 0
LINE "" 0
MIC "" 0
CD "" 0
IMIX "" 0
ALTPCM "" 0
RECLEV "" 0
IGAIN "" 0
OGAIN "" 0
LINE1 "" 0
LINE2 "" 0
LINE3 "" 0
DIGITAL1 "" 0
DIGITAL2 "" 0
DIGITAL3 "" 0
PHONEIN "" 0
PHONEOUT "" 0
VIDEO "" 0
RADIO "" 0
MONITOR "" 0
ie nothing mapped against oss. But if I do this:
echo 'VOLUME "PCM" 0' > /proc/asound/card0/oss_mixer
or
echo 'VOLUME "Master" 0' > /proc/asound/card0/oss_mixer
Then I get control of gain... so why doesn't the mapping work by
default?
/* Mixer controls */
static int aica_pcmswitch_info(snd_kcontrol_t * kcontrol,
snd_ctl_elem_info_t * uinfo)
{
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
uinfo->count = 1;
uinfo->value.integer.min = 0;
uinfo->value.integer.max = 1;
return 0;
}
static int aica_pcmswitch_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
ucontrol->value.integer.value[0] = 1; /* TO DO: Fix me */
return 0;
}
static int aica_pcmswitch_put(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
if (ucontrol->value.integer.value[0] == 1)
return 0; /* TO DO: Fix me */
else
aica_chn_halt();
return 0;
}
static snd_kcontrol_new_t snd_aica_masterswitch_control __devinitdata =
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Master Playback Switch",
.info = aica_pcmswitch_info,
.get = aica_pcmswitch_get,
.put = aica_pcmswitch_put
};
static snd_kcontrol_new_t snd_aica_pcmswitch_control __devinitdata = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "PCM Playback Switch",
.index = 0,
.info = aica_pcmswitch_info,
.get = aica_pcmswitch_get,
.put = aica_pcmswitch_put
};
static int aica_pcmvolume_info(snd_kcontrol_t * kcontrol,
snd_ctl_elem_info_t * uinfo)
{
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
uinfo->count = 1;
uinfo->value.integer.min = 0;
uinfo->value.integer.max = 0xFF;
return 0;
}
static int aica_pcmvolume_get(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
if (!channel)
return -ETXTBSY; /* we've not yet been set up */
ucontrol->value.integer.value[0] = channel->vol;
return 0;
}
static int aica_pcmvolume_put(snd_kcontrol_t * kcontrol,
snd_ctl_elem_value_t * ucontrol)
{
if (!channel) {
snd_printk("No channel yet\n");
return -ETXTBSY; /* too soon */
}
else if (channel->vol == ucontrol->value.integer.value[0])
return 0;
else {
channel->vol = ucontrol->value.integer.value[0];
dreamcastcard->master_volume = ucontrol->value.integer.value[0];
spu_memload(AICA_CHANNEL0_CONTROL_OFFSET,
(uint8_t *) channel, sizeof(aica_channel_t));
}
return 1;
}
static snd_kcontrol_new_t snd_aica_mastervolume_control __devinitdata =
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Master Playback Volume",
.info = aica_pcmvolume_info,
.get = aica_pcmvolume_get,
.put = aica_pcmvolume_put
};
static snd_kcontrol_new_t snd_aica_pcmvolume_control __devinitdata = {
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "PCM Playback Volume",
.index = 0,
.info = aica_pcmvolume_info,
.get = aica_pcmvolume_get,
.put = aica_pcmvolume_put
};
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: More mixer questions
2006-04-01 23:18 More mixer questions Adrian McMenamin
@ 2006-04-02 3:09 ` Lee Revell
2006-04-02 9:39 ` Adrian McMenamin
0 siblings, 1 reply; 3+ messages in thread
From: Lee Revell @ 2006-04-02 3:09 UTC (permalink / raw)
To: Adrian McMenamin; +Cc: alsa-devel
On Sun, 2006-04-02 at 00:18 +0100, Adrian McMenamin wrote:
> Sorry to hit the list with another question about the mixer/control
> stuff, but I'm pretty puzzled as to what I am getting wrong.
>
> I am using mpg123 compiled to only hack oss, so I am reliant on oss
> emulation.
>
> I have the control code attached below, which defines both master and
> pcm functions (mapped together as the device only plays PCM).
Where's your __devinit snd_aica_mixer() routine that actually creates
the mixer controls, with snd_ctl_new1()?
Look at snd_emu10k1_mixer in alsa-kernel/pci/emu10k1/emumixer.c for
example...
Lee
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: More mixer questions
2006-04-02 3:09 ` Lee Revell
@ 2006-04-02 9:39 ` Adrian McMenamin
0 siblings, 0 replies; 3+ messages in thread
From: Adrian McMenamin @ 2006-04-02 9:39 UTC (permalink / raw)
To: Lee Revell; +Cc: alsa-devel
On Sat, 2006-04-01 at 22:09 -0500, Lee Revell wrote:
> On Sun, 2006-04-02 at 00:18 +0100, Adrian McMenamin wrote:
> > Sorry to hit the list with another question about the mixer/control
> > stuff, but I'm pretty puzzled as to what I am getting wrong.
> >
> > I am using mpg123 compiled to only hack oss, so I am reliant on oss
> > emulation.
> >
> > I have the control code attached below, which defines both master and
> > pcm functions (mapped together as the device only plays PCM).
>
> Where's your __devinit snd_aica_mixer() routine that actually creates
> the mixer controls, with snd_ctl_new1()?
The controls do work though, and they are being created - the code
fragment is below (with lots of printks for debugging)
static int __devinit add_aicamixer_controls()
{
int err;
err = snd_ctl_add
(dreamcastcard->card,
snd_ctl_new1(&snd_aica_pcmvolume_control,
dreamcastcard));
if (err < 0){
snd_printk("pcmvolume failed\n");
return err;
}
err= snd_ctl_add
(dreamcastcard->card,
snd_ctl_new1(&snd_aica_pcmswitch_control,
dreamcastcard));
if (err < 0){
snd_printk("pcmswitch failed\n");
return err;
}
err = snd_ctl_add
(dreamcastcard->card,
snd_ctl_new1(&snd_aica_mastervolume_control,
dreamcastcard));
if (err < 0){
snd_printk("mastervolume failed\n");
return err;
}
err = snd_ctl_add
(dreamcastcard->card,
snd_ctl_new1(&snd_aica_masterswitch_control,
dreamcastcard));
if (err < 0){
snd_printk("masterswitch failed\n");
return err;
}
/* succeeded */
return 0;
}
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-04-02 9:39 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-04-01 23:18 More mixer questions Adrian McMenamin
2006-04-02 3:09 ` Lee Revell
2006-04-02 9:39 ` Adrian McMenamin
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.