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; } _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel