On Tue, 30 May 2017 14:03:00 +0200, Subhransu S. Prusty wrote: > > +static int skl_tplg_mic_control_get(struct snd_kcontrol *kcontrol, > + struct snd_ctl_elem_value *ucontrol) > +{ > + struct snd_soc_dapm_widget *w = snd_soc_dapm_kcontrol_widget(kcontrol); > + struct skl_module_cfg *mconfig = w->priv; > + struct soc_enum *ec = (struct soc_enum *)kcontrol->private_value; > + u32 ch_type = *((u32 *)ec->dobj.private); > + > + if (mconfig->dmic_ch_type == ch_type) > + ucontrol->value.integer.value[0] = mconfig->dmic_ch_combo_index; > + else > + ucontrol->value.integer.value[0] = 0; Is this enum kctl or not? If it is, you're accessing to the wrong field, as already mentioned. ucontrol->value.integer.xxx is for volumes and switches. Ditto for skl_tplg_mic_control_set(). > +static const struct snd_soc_tplg_kcontrol_ops skl_tplg_kcontrol_ops[] = { > + {SKL_CONTROL_TYPE_MIC_SELECT, skl_tplg_mic_control_get, > + skl_tplg_mic_control_set}, > +}; Better to do in C99 init style. thanks, Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel