Lines Matching defs:scontrol
375 struct snd_sof_control *scontrol;
378 list_for_each_entry(scontrol, &sdev->kcontrol_list, list) {
379 if (scontrol->comp_id == swidget->comp_id) {
380 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
2095 static int sof_ipc4_control_load_volume(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2101 scontrol->size = struct_size(control_data, chanv, scontrol->num_channels);
2103 /* scontrol->ipc_control_data will be freed in sof_control_unload */
2104 scontrol->ipc_control_data = kzalloc(scontrol->size, GFP_KERNEL);
2105 if (!scontrol->ipc_control_data)
2108 control_data = scontrol->ipc_control_data;
2109 control_data->index = scontrol->index;
2119 for (i = 0; i < scontrol->num_channels; i++) {
2127 static int sof_ipc4_control_load_bytes(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2133 if (scontrol->max_size < (sizeof(*control_data) + sizeof(struct sof_abi_hdr))) {
2135 scontrol->name, scontrol->max_size);
2139 if (scontrol->priv_size > scontrol->max_size - sizeof(*control_data)) {
2140 dev_err(sdev->dev, "scontrol %s bytes data size %zu exceeds max %zu.\n",
2141 scontrol->name, scontrol->priv_size,
2142 scontrol->max_size - sizeof(*control_data));
2146 scontrol->size = sizeof(struct sof_ipc4_control_data) + scontrol->priv_size;
2148 scontrol->ipc_control_data = kzalloc(scontrol->max_size, GFP_KERNEL);
2149 if (!scontrol->ipc_control_data)
2152 control_data = scontrol->ipc_control_data;
2153 control_data->index = scontrol->index;
2154 if (scontrol->priv_size > 0) {
2155 memcpy(control_data->data, scontrol->priv, scontrol->priv_size);
2156 kfree(scontrol->priv);
2157 scontrol->priv = NULL;
2161 control_data->data->magic, scontrol->name);
2169 scontrol->priv_size) {
2171 scontrol->name,
2173 scontrol->priv_size);
2187 kfree(scontrol->ipc_control_data);
2188 scontrol->ipc_control_data = NULL;
2192 static int sof_ipc4_control_setup(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2194 switch (scontrol->info_type) {
2198 return sof_ipc4_control_load_volume(sdev, scontrol);
2200 return sof_ipc4_control_load_bytes(sdev, scontrol);