23 Apr
2020
23 Apr
'20
5:49 p.m.
+static int skl_tplg_multi_config_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
+{
- struct snd_soc_component *component =
snd_soc_kcontrol_component(kcontrol);
- struct hdac_bus *bus = snd_soc_component_get_drvdata(component);
- struct skl_dev *skl = bus_to_skl(bus);
- struct skl_pipeline *ppl;
- struct skl_pipe *pipe = NULL;
- u32 *pipe_id;
- struct soc_enum *ec = (struct soc_enum *)kcontrol->private_value;
- if (!ec)
return -EINVAL;
- pipe_id = ec->dobj.private;
- list_for_each_entry(ppl, &skl->ppl_list, node) {
if (ppl->pipe->ppl_id == *pipe_id) {
pipe = ppl->pipe;
break;
}
- }
- if (!pipe)
return -EIO;
- ucontrol->value.enumerated.item[0] = pipe->pipe_config_idx;
maybe one nit-pick is that there is a one-line difference between the _set and _get functions, and it might be simpler to use a common helper with a boolean flag used at the end to do this:
- ucontrol->value.enumerated.item[0] = pipe->pipe_config_idx;
or that:
- pipe->pipe_config_idx = ucontrol->value.enumerated.item[0];