Lines Matching defs:scontrol
553 struct snd_sof_control *scontrol;
556 list_for_each_entry(scontrol, &sdev->kcontrol_list, list) {
557 if (scontrol->comp_id == swidget->comp_id) {
558 struct sof_ipc4_control_data *cdata = scontrol->ipc_control_data;
2776 static int sof_ipc4_control_load_volume(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2782 scontrol->size = struct_size(control_data, chanv, scontrol->num_channels);
2784 /* scontrol->ipc_control_data will be freed in sof_control_unload */
2785 scontrol->ipc_control_data = kzalloc(scontrol->size, GFP_KERNEL);
2786 if (!scontrol->ipc_control_data)
2789 control_data = scontrol->ipc_control_data;
2790 control_data->index = scontrol->index;
2798 if (scontrol->max == 1)
2803 for (i = 0; i < scontrol->num_channels; i++) {
2811 if (scontrol->max > 1)
2818 static int sof_ipc4_control_load_enum(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2824 scontrol->size = struct_size(control_data, chanv, scontrol->num_channels);
2826 /* scontrol->ipc_control_data will be freed in sof_control_unload */
2827 scontrol->ipc_control_data = kzalloc(scontrol->size, GFP_KERNEL);
2828 if (!scontrol->ipc_control_data)
2831 control_data = scontrol->ipc_control_data;
2832 control_data->index = scontrol->index;
2842 for (i = 0; i < scontrol->num_channels; i++)
2848 static int sof_ipc4_control_load_bytes(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2854 if (scontrol->max_size < (sizeof(*control_data) + sizeof(struct sof_abi_hdr))) {
2856 scontrol->name, scontrol->max_size);
2860 if (scontrol->priv_size > scontrol->max_size - sizeof(*control_data)) {
2861 dev_err(sdev->dev, "scontrol %s bytes data size %zu exceeds max %zu.\n",
2862 scontrol->name, scontrol->priv_size,
2863 scontrol->max_size - sizeof(*control_data));
2867 scontrol->size = sizeof(struct sof_ipc4_control_data) + scontrol->priv_size;
2869 scontrol->ipc_control_data = kzalloc(scontrol->max_size, GFP_KERNEL);
2870 if (!scontrol->ipc_control_data)
2873 control_data = scontrol->ipc_control_data;
2874 control_data->index = scontrol->index;
2875 if (scontrol->priv_size > 0) {
2876 memcpy(control_data->data, scontrol->priv, scontrol->priv_size);
2877 kfree(scontrol->priv);
2878 scontrol->priv = NULL;
2882 control_data->data->magic, scontrol->name);
2890 scontrol->priv_size) {
2892 scontrol->name,
2894 scontrol->priv_size);
2908 kfree(scontrol->ipc_control_data);
2909 scontrol->ipc_control_data = NULL;
2913 static int sof_ipc4_control_setup(struct snd_sof_dev *sdev, struct snd_sof_control *scontrol)
2915 switch (scontrol->info_type) {
2919 return sof_ipc4_control_load_volume(sdev, scontrol);
2921 return sof_ipc4_control_load_bytes(sdev, scontrol);
2924 return sof_ipc4_control_load_enum(sdev, scontrol);