Lines Matching refs:scontrol

397 	struct snd_sof_control *scontrol;
400 list_for_each_entry(scontrol, &sdev->kcontrol_list, list) {
401 if (scontrol->comp_id == swidget->comp_id) {
402 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
2350 static int sof_ipc4_control_load_volume(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2356 scontrol->size = struct_size(control_data, chanv, scontrol->num_channels);
2358 /* scontrol->ipc_control_data will be freed in sof_control_unload */
2359 scontrol->ipc_control_data = kzalloc(scontrol->size, GFP_KERNEL);
2360 if (!scontrol->ipc_control_data)
2363 control_data = scontrol->ipc_control_data;
2364 control_data->index = scontrol->index;
2372 if (scontrol->max == 1)
2377 for (i = 0; i < scontrol->num_channels; i++) {
2385 if (scontrol->max > 1)
2392 static int sof_ipc4_control_load_enum(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2398 scontrol->size = struct_size(control_data, chanv, scontrol->num_channels);
2400 /* scontrol->ipc_control_data will be freed in sof_control_unload */
2401 scontrol->ipc_control_data = kzalloc(scontrol->size, GFP_KERNEL);
2402 if (!scontrol->ipc_control_data)
2405 control_data = scontrol->ipc_control_data;
2406 control_data->index = scontrol->index;
2416 for (i = 0; i < scontrol->num_channels; i++)
2422 static int sof_ipc4_control_load_bytes(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2428 if (scontrol->max_size < (sizeof(*control_data) + sizeof(struct sof_abi_hdr))) {
2430 scontrol->name, scontrol->max_size);
2434 if (scontrol->priv_size > scontrol->max_size - sizeof(*control_data)) {
2435 dev_err(sdev->dev, "scontrol %s bytes data size %zu exceeds max %zu.\n",
2436 scontrol->name, scontrol->priv_size,
2437 scontrol->max_size - sizeof(*control_data));
2441 scontrol->size = sizeof(struct sof_ipc4_control_data) + scontrol->priv_size;
2443 scontrol->ipc_control_data = kzalloc(scontrol->max_size, GFP_KERNEL);
2444 if (!scontrol->ipc_control_data)
2447 control_data = scontrol->ipc_control_data;
2448 control_data->index = scontrol->index;
2449 if (scontrol->priv_size > 0) {
2450 memcpy(control_data->data, scontrol->priv, scontrol->priv_size);
2451 kfree(scontrol->priv);
2452 scontrol->priv = NULL;
2456 control_data->data->magic, scontrol->name);
2464 scontrol->priv_size) {
2466 scontrol->name,
2468 scontrol->priv_size);
2482 kfree(scontrol->ipc_control_data);
2483 scontrol->ipc_control_data = NULL;
2487 static int sof_ipc4_control_setup(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2489 switch (scontrol->info_type) {
2493 return sof_ipc4_control_load_volume(sdev, scontrol);
2495 return sof_ipc4_control_load_bytes(sdev, scontrol);
2498 return sof_ipc4_control_load_enum(sdev, scontrol);