summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibin Yang <libin.yang@intel.com>2023-03-13 13:03:42 +0200
committerMark Brown <broonie@kernel.org>2023-03-13 14:06:52 +0000
commitdc47ef4f8f6426cd625eb4057e174541e7c23ccd (patch)
tree3fbdb566cb9d426f292e42563162e868be21fd02
parentea4a4e82f625ae451175a2a74779776b006d25a1 (diff)
ASoC: SOF: ipc4-control: set_volume_data only applies to VOLSW family
Make sure sof_ipc4_set_volume_data() is only called for the SND_SOC_TPLG_CTL_VOLSW, SND_SOC_TPLG_CTL_VOLSW_SX and SND_SOC_TPLG_CTL_VOLSW_XR_SX info_type. Signed-off-by: Libin Yang <libin.yang@intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://lore.kernel.org/r/20230313110344.16644-6-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/sof/ipc4-control.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/sound/soc/sof/ipc4-control.c b/sound/soc/sof/ipc4-control.c
index 67bd2233fd9a..c978325db416 100644
--- a/sound/soc/sof/ipc4-control.c
+++ b/sound/soc/sof/ipc4-control.c
@@ -186,15 +186,25 @@ static int sof_ipc4_widget_kcontrol_setup(struct snd_sof_dev *sdev, struct snd_s
struct snd_sof_control *scontrol;
int ret;
- list_for_each_entry(scontrol, &sdev->kcontrol_list, list)
+ list_for_each_entry(scontrol, &sdev->kcontrol_list, list) {
if (scontrol->comp_id == swidget->comp_id) {
- ret = sof_ipc4_set_volume_data(sdev, swidget, scontrol, false);
- if (ret < 0) {
- dev_err(sdev->dev, "%s: kcontrol %d set up failed for widget %s\n",
- __func__, scontrol->comp_id, swidget->widget->name);
- return ret;
+ switch (scontrol->info_type) {
+ case SND_SOC_TPLG_CTL_VOLSW:
+ case SND_SOC_TPLG_CTL_VOLSW_SX:
+ case SND_SOC_TPLG_CTL_VOLSW_XR_SX:
+ ret = sof_ipc4_set_volume_data(sdev, swidget,
+ scontrol, false);
+ if (ret < 0) {
+ dev_err(sdev->dev, "kcontrol %d set up failed for widget %s\n",
+ scontrol->comp_id, swidget->widget->name);
+ return ret;
+ }
+ break;
+ default:
+ break;
}
}
+ }
return 0;
}