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()
104 if (!scontrol->old_ipc_control_data) in sof_ipc3_set_get_kcontrol_data()
110 memcpy(scontrol->ipc_control_data, scontrol->old_ipc_control_data, in sof_ipc3_set_get_kcontrol_data()
111 scontrol->max_size); in sof_ipc3_set_get_kcontrol_data()
112 kfree(scontrol->old_ipc_control_data); in sof_ipc3_set_get_kcontrol_data()
113 scontrol->old_ipc_control_data = NULL; in sof_ipc3_set_get_kcontrol_data()
127 static void sof_ipc3_refresh_control(struct snd_sof_control *scontrol) in sof_ipc3_refresh_control() argument
129 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_refresh_control()
130 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_refresh_control()
133 if (!scontrol->comp_data_dirty) in sof_ipc3_refresh_control()
144 scontrol->comp_data_dirty = false; in sof_ipc3_refresh_control()
145 ret = sof_ipc3_set_get_kcontrol_data(scontrol, false, true); in sof_ipc3_refresh_control()
150 scontrol->comp_data_dirty = true; in sof_ipc3_refresh_control()
154 static int sof_ipc3_volume_get(struct snd_sof_control *scontrol, in sof_ipc3_volume_get() argument
157 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_volume_get()
158 unsigned int channels = scontrol->num_channels; in sof_ipc3_volume_get()
161 sof_ipc3_refresh_control(scontrol); in sof_ipc3_volume_get()
166 scontrol->volume_table, in sof_ipc3_volume_get()
167 scontrol->max + 1); in sof_ipc3_volume_get()
172 static bool sof_ipc3_volume_put(struct snd_sof_control *scontrol, in sof_ipc3_volume_put() argument
175 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_volume_put()
176 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_volume_put()
177 unsigned int channels = scontrol->num_channels; in sof_ipc3_volume_put()
184 scontrol->volume_table, scontrol->max + 1); in sof_ipc3_volume_put()
193 int ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_volume_put()
197 scontrol->name); in sof_ipc3_volume_put()
205 static int sof_ipc3_switch_get(struct snd_sof_control *scontrol, in sof_ipc3_switch_get() argument
208 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_switch_get()
209 unsigned int channels = scontrol->num_channels; in sof_ipc3_switch_get()
212 sof_ipc3_refresh_control(scontrol); in sof_ipc3_switch_get()
221 static bool sof_ipc3_switch_put(struct snd_sof_control *scontrol, in sof_ipc3_switch_put() argument
224 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_switch_put()
225 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_switch_put()
226 unsigned int channels = scontrol->num_channels; in sof_ipc3_switch_put()
241 int ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_switch_put()
245 scontrol->name); in sof_ipc3_switch_put()
253 static int sof_ipc3_enum_get(struct snd_sof_control *scontrol, in sof_ipc3_enum_get() argument
256 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_enum_get()
257 unsigned int channels = scontrol->num_channels; in sof_ipc3_enum_get()
260 sof_ipc3_refresh_control(scontrol); in sof_ipc3_enum_get()
269 static bool sof_ipc3_enum_put(struct snd_sof_control *scontrol, in sof_ipc3_enum_put() argument
272 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_enum_put()
273 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_enum_put()
274 unsigned int channels = scontrol->num_channels; in sof_ipc3_enum_put()
289 int ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_enum_put()
293 scontrol->name); in sof_ipc3_enum_put()
301 static int sof_ipc3_bytes_get(struct snd_sof_control *scontrol, in sof_ipc3_bytes_get() argument
304 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_get()
305 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_get()
309 sof_ipc3_refresh_control(scontrol); in sof_ipc3_bytes_get()
311 if (scontrol->max_size > sizeof(ucontrol->value.bytes.data)) { in sof_ipc3_bytes_get()
313 scontrol->max_size); in sof_ipc3_bytes_get()
318 if (data->size > scontrol->max_size - sizeof(*data)) { in sof_ipc3_bytes_get()
321 data->size, scontrol->max_size - sizeof(*data)); in sof_ipc3_bytes_get()
333 static int sof_ipc3_bytes_put(struct snd_sof_control *scontrol, in sof_ipc3_bytes_put() argument
336 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_put()
337 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_put()
341 if (scontrol->max_size > sizeof(ucontrol->value.bytes.data)) { in sof_ipc3_bytes_put()
343 scontrol->max_size); in sof_ipc3_bytes_put()
348 if (data->size > scontrol->max_size - sizeof(*data)) { in sof_ipc3_bytes_put()
350 data->size, scontrol->max_size - sizeof(*data)); in sof_ipc3_bytes_put()
361 return sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_bytes_put()
366 static int sof_ipc3_bytes_ext_put(struct snd_sof_control *scontrol, in sof_ipc3_bytes_ext_put() argument
371 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in sof_ipc3_bytes_ext_put()
372 struct snd_soc_component *scomp = scontrol->scomp; in sof_ipc3_bytes_ext_put()
392 if (header.length > scontrol->max_size) { in sof_ipc3_bytes_ext_put()
394 header.length, scontrol->max_size); in sof_ipc3_bytes_ext_put()
405 if (!scontrol->old_ipc_control_data) { in sof_ipc3_bytes_ext_put()
407 scontrol->old_ipc_control_data = kmemdup(scontrol->ipc_control_data, in sof_ipc3_bytes_ext_put()
408 scontrol->max_size, GFP_KERNEL); in sof_ipc3_bytes_ext_put()
409 if (!scontrol->old_ipc_control_data) in sof_ipc3_bytes_ext_put()
430 if (cdata->data->size > scontrol->max_size - sizeof(struct sof_abi_hdr)) { in sof_ipc3_bytes_ext_put()
438 return sof_ipc3_set_get_kcontrol_data(scontrol, true, true); in sof_ipc3_bytes_ext_put()
445 if (scontrol->old_ipc_control_data) { in sof_ipc3_bytes_ext_put()
446 memcpy(cdata->data, scontrol->old_ipc_control_data, scontrol->max_size); in sof_ipc3_bytes_ext_put()
447 kfree(scontrol->old_ipc_control_data); in sof_ipc3_bytes_ext_put()
448 scontrol->old_ipc_control_data = NULL; in sof_ipc3_bytes_ext_put()
453 static int _sof_ipc3_bytes_ext_get(struct snd_sof_control *scontrol, in _sof_ipc3_bytes_ext_get() argument
458 struct sof_ipc_ctrl_data *cdata = scontrol->ipc_control_data; in _sof_ipc3_bytes_ext_get()
459 struct snd_soc_component *scomp = scontrol->scomp; in _sof_ipc3_bytes_ext_get()
478 int ret = sof_ipc3_set_get_kcontrol_data(scontrol, false, true); in _sof_ipc3_bytes_ext_get()
485 if (cdata->data->size > scontrol->max_size - sizeof(struct sof_abi_hdr)) { in _sof_ipc3_bytes_ext_get()
488 scontrol->max_size - sizeof(struct sof_abi_hdr)); in _sof_ipc3_bytes_ext_get()
509 static int sof_ipc3_bytes_ext_get(struct snd_sof_control *scontrol, in sof_ipc3_bytes_ext_get() argument
512 return _sof_ipc3_bytes_ext_get(scontrol, binary_data, size, false); in sof_ipc3_bytes_ext_get()
515 static int sof_ipc3_bytes_ext_volatile_get(struct snd_sof_control *scontrol, in sof_ipc3_bytes_ext_volatile_get() argument
519 return _sof_ipc3_bytes_ext_get(scontrol, binary_data, size, true); in sof_ipc3_bytes_ext_volatile_get()
522 static void snd_sof_update_control(struct snd_sof_control *scontrol, in snd_sof_update_control() argument
525 struct snd_soc_component *scomp = scontrol->scomp; in snd_sof_update_control()
529 local_cdata = scontrol->ipc_control_data; in snd_sof_update_control()
540 } else if (cdata->num_elems != scontrol->num_channels) { in snd_sof_update_control()
542 cdata->num_elems, scontrol->num_channels); in snd_sof_update_control()
554 struct snd_sof_control *scontrol; in sof_ipc3_control_update() local
615 scontrol = sm->dobj.private; in sof_ipc3_control_update()
619 scontrol = be->dobj.private; in sof_ipc3_control_update()
623 scontrol = se->dobj.private; in sof_ipc3_control_update()
654 snd_sof_update_control(scontrol, cdata); in sof_ipc3_control_update()
657 scontrol->comp_data_dirty = true; in sof_ipc3_control_update()
665 struct snd_sof_control *scontrol; in sof_ipc3_widget_kcontrol_setup() local
669 list_for_each_entry(scontrol, &sdev->kcontrol_list, list) in sof_ipc3_widget_kcontrol_setup()
670 if (scontrol->comp_id == swidget->comp_id) { in sof_ipc3_widget_kcontrol_setup()
672 ret = sof_ipc3_set_get_kcontrol_data(scontrol, true, false); in sof_ipc3_widget_kcontrol_setup()
676 scontrol->comp_id, swidget->widget->name); in sof_ipc3_widget_kcontrol_setup()
689 ret = sof_ipc3_set_get_kcontrol_data(scontrol, false, false); in sof_ipc3_widget_kcontrol_setup()
693 scontrol->comp_id, swidget->widget->name); in sof_ipc3_widget_kcontrol_setup()
700 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
705 scontrol->volume_table = kcalloc(size, sizeof(u32), GFP_KERNEL); in sof_ipc3_set_up_volume_table()
706 if (!scontrol->volume_table) in sof_ipc3_set_up_volume_table()
711 scontrol->volume_table[i] = vol_compute_gain(i, tlv); in sof_ipc3_set_up_volume_table()