[alsa-devel] why would an scontrol think that it should have 2 items instead of just 1?
John L. Utz III
john.utz at dmx.com
Thu Aug 9 00:28:56 CEST 2007
Hello
The VT1618 codec has a register value that turns on the Surround Side
Output (it's off by default)
I have implemented the control, but I am getting a really weird result,
i have a bogus 'Item1' that shouldnt exist:
jutz-gntdv alsa-driver # amixer sset Side On
Simple mixer control 'Side',0
Capabilities: pvolume pswitch enum
Items: 'On' 'Off'
Item0: 'On'
Item1: 'On'
jutz-gntdv alsa-driver # amixer sset Side Off
Simple mixer control 'Side',0
Capabilities: pvolume pswitch enum
Items: 'On' 'Off'
Item0: 'Off'
Item1: 'On'
This wasnt always there, it just showed up during development. Is the
number of items cached in a temp file somewhere that i just need to
remove?
Here's the mixer element:
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Side",
.info = snd_ac97_vt1618_surside_info,
.get = snd_ac97_vt1618_surside_get,
.put = snd_ac97_vt1618_surside_put
},
Here's the function impls:
/* surround side power up or down */
static int snd_ac97_vt1618_surside_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo)
{
static const char* texts[] = {"On", "Off"};
return ac97_enum_text_info(kcontrol, uinfo, texts, 2);
}
static int snd_ac97_vt1618_surside_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value
*ucontrol) {
struct snd_ac97 *pac97 = snd_kcontrol_chip(kcontrol);
ucontrol->value.enumerated.item[0] =
(snd_ac97_read(pac97, 0x5c) & 0x0008) >> 3;
return 0;
}
static int snd_ac97_vt1618_surside_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value
*ucontrol) {
//0x5c, 3, 1,
struct snd_ac97 *pac97 = snd_kcontrol_chip(kcontrol);
snd_ac97_update_bits(pac97, 0x5c, 0x0008,
ucontrol->value.enumerated.item[0] << 3);
return 0;
}
More information about the Alsa-devel
mailing list