Lines Matching refs:scontrol
15 static int sof_ipc3_set_get_kcontrol_data(struct snd_sof_control *scontrol, in sof_ipc3_set_get_kcontrol_data() argument
18 struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scontrol->scomp); in sof_ipc3_set_get_kcontrol_data()
19 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_set_get_kcontrol_data()
28 if (swidget->comp_id == scontrol->comp_id) { in sof_ipc3_set_get_kcontrol_data()
36 scontrol->comp_id); in sof_ipc3_set_get_kcontrol_data()
69 cdata->comp_id = scontrol->comp_id; in sof_ipc3_set_get_kcontrol_data()
76 cdata->num_elems = scontrol->num_channels; in sof_ipc3_set_get_kcontrol_data()
78 msg_bytes = scontrol->num_channels * in sof_ipc3_set_get_kcontrol_data()
107 static void snd_sof_refresh_control(struct snd_sof_control *scontrol) in snd_sof_refresh_control() argument
109 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in snd_sof_refresh_control()
110 struct snd_soc_component *scomp = scontrol->scomp; in snd_sof_refresh_control()
113 if (!scontrol->comp_data_dirty) in snd_sof_refresh_control()
124 scontrol->comp_data_dirty = false; in snd_sof_refresh_control()
125 ret = sof_ipc3_set_get_kcontrol_data(scontrol, false, true); in snd_sof_refresh_control()
130 scontrol->comp_data_dirty = true; in snd_sof_refresh_control()
134 static int sof_ipc3_volume_get(struct snd_sof_control *scontrol, in sof_ipc3_volume_get() argument
137 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_volume_get()
138 unsigned int channels = scontrol->num_channels; in sof_ipc3_volume_get()
141 snd_sof_refresh_control(scontrol); in sof_ipc3_volume_get()
146 scontrol->volume_table, in sof_ipc3_volume_get()
147 scontrol->max + 1); in sof_ipc3_volume_get()
152 static bool sof_ipc3_volume_put(struct snd_sof_control *scontrol, in sof_ipc3_volume_put() argument
155 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_volume_put()
156 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_volume_put()
157 unsigned int channels = scontrol->num_channels; in sof_ipc3_volume_put()
164 scontrol->volume_table, scontrol->max + 1); in sof_ipc3_volume_put()
173 int ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_volume_put()
177 scontrol->name); in sof_ipc3_volume_put()
185 static int sof_ipc3_switch_get(struct snd_sof_control *scontrol, in sof_ipc3_switch_get() argument
188 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_switch_get()
189 unsigned int channels = scontrol->num_channels; in sof_ipc3_switch_get()
192 snd_sof_refresh_control(scontrol); in sof_ipc3_switch_get()
201 static bool sof_ipc3_switch_put(struct snd_sof_control *scontrol, in sof_ipc3_switch_put() argument
204 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_switch_put()
205 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_switch_put()
206 unsigned int channels = scontrol->num_channels; in sof_ipc3_switch_put()
221 int ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_switch_put()
225 scontrol->name); in sof_ipc3_switch_put()
233 static int sof_ipc3_enum_get(struct snd_sof_control *scontrol, in sof_ipc3_enum_get() argument
236 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_enum_get()
237 unsigned int channels = scontrol->num_channels; in sof_ipc3_enum_get()
240 snd_sof_refresh_control(scontrol); in sof_ipc3_enum_get()
249 static bool sof_ipc3_enum_put(struct snd_sof_control *scontrol, in sof_ipc3_enum_put() argument
252 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_enum_put()
253 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_enum_put()
254 unsigned int channels = scontrol->num_channels; in sof_ipc3_enum_put()
269 int ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_enum_put()
273 scontrol->name); in sof_ipc3_enum_put()
281 static int sof_ipc3_bytes_get(struct snd_sof_control *scontrol, in sof_ipc3_bytes_get() argument
284 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_get()
285 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_get()
289 snd_sof_refresh_control(scontrol); in sof_ipc3_bytes_get()
291 if (scontrol->max_size > sizeof(ucontrol->value.bytes.data)) { in sof_ipc3_bytes_get()
293 scontrol->max_size); in sof_ipc3_bytes_get()
298 if (data->size > scontrol->max_size - sizeof(*data)) { in sof_ipc3_bytes_get()
301 data->size, scontrol->max_size - sizeof(*data)); in sof_ipc3_bytes_get()
313 static int sof_ipc3_bytes_put(struct snd_sof_control *scontrol, in sof_ipc3_bytes_put() argument
316 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_put()
317 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_put()
321 if (scontrol->max_size > sizeof(ucontrol->value.bytes.data)) { in sof_ipc3_bytes_put()
323 scontrol->max_size); in sof_ipc3_bytes_put()
328 if (data->size > scontrol->max_size - sizeof(*data)) { in sof_ipc3_bytes_put()
330 data->size, scontrol->max_size - sizeof(*data)); in sof_ipc3_bytes_put()
341 return sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_bytes_put()
346 static int sof_ipc3_bytes_ext_get(struct snd_sof_control *scontrol, in sof_ipc3_bytes_ext_get() argument
350 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_ext_get()
351 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_ext_get()
355 snd_sof_refresh_control(scontrol); in sof_ipc3_bytes_ext_get()
371 if (cdata->data->size > scontrol->max_size - sizeof(struct sof_abi_hdr)) { in sof_ipc3_bytes_ext_get()
374 scontrol->max_size - sizeof(struct sof_abi_hdr)); in sof_ipc3_bytes_ext_get()
395 static int sof_ipc3_bytes_ext_put(struct snd_sof_control *scontrol, in sof_ipc3_bytes_ext_put() argument
400 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_ext_put()
401 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_ext_put()
420 if (header.length > scontrol->max_size) { in sof_ipc3_bytes_ext_put()
422 header.length, scontrol->max_size); in sof_ipc3_bytes_ext_put()
448 if (cdata->data->size > scontrol->max_size - sizeof(struct sof_abi_hdr)) { in sof_ipc3_bytes_ext_put()
455 return sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_bytes_ext_put()
460 static int sof_ipc3_bytes_ext_volatile_get(struct snd_sof_control *scontrol, in sof_ipc3_bytes_ext_volatile_get() argument
465 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_ext_volatile_get()
466 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_ext_volatile_get()
485 ret = sof_ipc3_set_get_kcontrol_data(scontrol, false, true); in sof_ipc3_bytes_ext_volatile_get()
490 if (cdata->data->size > scontrol->max_size - sizeof(struct sof_abi_hdr)) { in sof_ipc3_bytes_ext_volatile_get()
493 scontrol->max_size - sizeof(struct sof_abi_hdr)); in sof_ipc3_bytes_ext_volatile_get()
514 static void snd_sof_update_control(struct snd_sof_control *scontrol, in snd_sof_update_control() argument
517 struct snd_soc_component *scomp = scontrol->scomp; in snd_sof_update_control()
521 local_cdata = scontrol->ipc_control_data; in snd_sof_update_control()
532 } else if (cdata->num_elems != scontrol->num_channels) { in snd_sof_update_control()
534 cdata->num_elems, scontrol->num_channels); in snd_sof_update_control()
546 struct snd_sof_control *scontrol; in sof_ipc3_control_update() local
607 scontrol = sm->dobj.private; in sof_ipc3_control_update()
611 scontrol = be->dobj.private; in sof_ipc3_control_update()
615 scontrol = se->dobj.private; in sof_ipc3_control_update()
646 snd_sof_update_control(scontrol, cdata); in sof_ipc3_control_update()
649 scontrol->comp_data_dirty = true; in sof_ipc3_control_update()
657 struct snd_sof_control *scontrol; in sof_ipc3_widget_kcontrol_setup() local
661 list_for_each_entry(scontrol, &sdev->kcontrol_list, list) in sof_ipc3_widget_kcontrol_setup()
662 if (scontrol->comp_id == swidget->comp_id) { in sof_ipc3_widget_kcontrol_setup()
664 ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, false); in sof_ipc3_widget_kcontrol_setup()
668 scontrol->comp_id, swidget->widget->name); in sof_ipc3_widget_kcontrol_setup()
681 ret = sof_ipc3_set_get_kcontrol_data(scontrol, false, false); in sof_ipc3_widget_kcontrol_setup()
685 scontrol->comp_id, swidget->widget->name); in sof_ipc3_widget_kcontrol_setup()
692 sof_ipc3_set_up_volume_table(struct snd_sof_control *scontrol, int tlv[SOF_TLV_ITEMS], int size) in sof_ipc3_set_up_volume_table() argument
697 scontrol->volume_table = kcalloc(size, sizeof(u32), GFP_KERNEL); in sof_ipc3_set_up_volume_table()
698 if (!scontrol->volume_table) in sof_ipc3_set_up_volume_table()
703 scontrol->volume_table[i] = vol_compute_gain(i, tlv); in sof_ipc3_set_up_volume_table()