Lines Matching defs:scontrol
15 static int sof_ipc4_set_get_kcontrol_data(struct snd_sof_control *scontrol,
18 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
19 struct snd_soc_component *scomp = scontrol->scomp;
29 if (swidget->comp_id == scontrol->comp_id) {
36 dev_err(scomp->dev, "Failed to find widget for kcontrol %s\n", scontrol->name);
62 if (!scontrol->old_ipc_control_data)
68 memcpy(scontrol->ipc_control_data, scontrol->old_ipc_control_data,
69 scontrol->max_size);
70 kfree(scontrol->old_ipc_control_data);
71 scontrol->old_ipc_control_data = NULL;
87 struct snd_sof_control *scontrol, bool lock)
89 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
99 for (i = 1; i < scontrol->num_channels; i++) {
110 for (i = 0; i < scontrol->num_channels; i++) {
127 ret = sof_ipc4_set_get_kcontrol_data(scontrol, true, lock);
132 scontrol->name);
143 static bool sof_ipc4_volume_put(struct snd_sof_control *scontrol,
146 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
147 struct snd_soc_component *scomp = scontrol->scomp;
149 unsigned int channels = scontrol->num_channels;
159 scontrol->volume_table, scontrol->max + 1);
171 if (swidget->comp_id == scontrol->comp_id) {
178 dev_err(scomp->dev, "Failed to find widget for kcontrol %s\n", scontrol->name);
182 ret = sof_ipc4_set_volume_data(sdev, swidget, scontrol, true);
189 static int sof_ipc4_volume_get(struct snd_sof_control *scontrol,
192 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
193 unsigned int channels = scontrol->num_channels;
198 scontrol->volume_table,
199 scontrol->max + 1);
205 struct snd_sof_control *scontrol,
208 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
222 ret = sof_ipc4_set_get_kcontrol_data(scontrol, set, lock);
226 scontrol->name);
234 static int sof_ipc4_bytes_put(struct snd_sof_control *scontrol,
237 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
238 struct snd_soc_component *scomp = scontrol->scomp;
243 if (scontrol->max_size > sizeof(ucontrol->value.bytes.data)) {
246 scontrol->max_size);
250 /* scontrol->max_size has been verified to be >= sizeof(struct sof_abi_hdr) */
251 if (data->size > scontrol->max_size - sizeof(*data)) {
254 data->size, scontrol->max_size - sizeof(*data));
263 sof_ipc4_set_get_bytes_data(sdev, scontrol, true, true);
268 static int sof_ipc4_bytes_get(struct snd_sof_control *scontrol,
271 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
272 struct snd_soc_component *scomp = scontrol->scomp;
276 if (scontrol->max_size > sizeof(ucontrol->value.bytes.data)) {
278 scontrol->max_size);
282 if (data->size > scontrol->max_size - sizeof(*data)) {
285 data->size, scontrol->max_size - sizeof(*data));
297 static int sof_ipc4_bytes_ext_put(struct snd_sof_control *scontrol,
302 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
303 struct snd_soc_component *scomp = scontrol->scomp;
326 if (header.length > scontrol->max_size) {
329 header.length, scontrol->max_size);
343 if (abi_hdr.size > scontrol->max_size - sizeof(abi_hdr)) {
346 abi_hdr.size, scontrol->max_size - sizeof(abi_hdr));
350 if (!scontrol->old_ipc_control_data) {
352 scontrol->old_ipc_control_data = kmemdup(scontrol->ipc_control_data,
353 scontrol->max_size, GFP_KERNEL);
354 if (!scontrol->old_ipc_control_data)
360 memcpy(scontrol->ipc_control_data, scontrol->old_ipc_control_data,
361 scontrol->max_size);
362 kfree(scontrol->old_ipc_control_data);
363 scontrol->old_ipc_control_data = NULL;
367 return sof_ipc4_set_get_bytes_data(sdev, scontrol, true, true);
370 static int _sof_ipc4_bytes_ext_get(struct snd_sof_control *scontrol,
375 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
376 struct snd_soc_component *scomp = scontrol->scomp;
393 int ret = sof_ipc4_set_get_bytes_data(sdev, scontrol, false, true);
402 if (data->size > scontrol->max_size - sizeof(*data)) {
405 data->size, scontrol->max_size - sizeof(*data));
415 header.numid = scontrol->comp_id;
427 static int sof_ipc4_bytes_ext_get(struct snd_sof_control *scontrol,
431 return _sof_ipc4_bytes_ext_get(scontrol, binary_data, size, false);
434 static int sof_ipc4_bytes_ext_volatile_get(struct snd_sof_control *scontrol,
438 return _sof_ipc4_bytes_ext_get(scontrol, binary_data, size, true);
444 struct snd_sof_control *scontrol;
447 list_for_each_entry(scontrol, &sdev->kcontrol_list, list) {
448 if (scontrol->comp_id == swidget->comp_id) {
449 switch (scontrol->info_type) {
454 scontrol, false);
457 ret = sof_ipc4_set_get_bytes_data(sdev, scontrol,
467 scontrol->comp_id, swidget->widget->name);
477 sof_ipc4_set_up_volume_table(struct snd_sof_control *scontrol, int tlv[SOF_TLV_ITEMS], int size)
482 scontrol->volume_table = kcalloc(size, sizeof(u32), GFP_KERNEL);
483 if (!scontrol->volume_table)
491 scontrol->volume_table[i] = q31val > SOF_IPC4_VOL_ZERO_DB ?