ASoC: SOF: ipc4-topology: Always parse the output formats in topology
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Mon, 13 Mar 2023 12:48:51 +0000 (14:48 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 13 Mar 2023 14:08:25 +0000 (14:08 +0000)
Parse the output formats available in topology always. Whether the
output format is sent in the init instance payload or not is decided
when sof_ipc4_init_audio_fmt() is invoked.

Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20230313124856.8140-7-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/ipc4-topology.c

index b6933fa..0e1e4fc 100644 (file)
@@ -171,15 +171,13 @@ static void sof_ipc4_dbg_audio_format(struct device *dev,
  * @swidget: pointer to struct snd_sof_widget containing tuples
  * @available_fmt: pointer to struct sof_ipc4_available_audio_format being filling in
  * @module_base_cfg: Pointer to the base_config in the module init IPC payload
- * @has_out_format: true if available_fmt contains output format
  *
  * Return: 0 if successful
  */
 static int sof_ipc4_get_audio_fmt(struct snd_soc_component *scomp,
                                  struct snd_sof_widget *swidget,
                                  struct sof_ipc4_available_audio_format *available_fmt,
-                                 struct sof_ipc4_base_module_cfg *module_base_cfg,
-                                 bool has_out_format)
+                                 struct sof_ipc4_base_module_cfg *module_base_cfg)
 {
        struct sof_ipc4_base_module_cfg *base_config;
        struct sof_ipc4_audio_format *out_format, *in_format;
@@ -249,9 +247,6 @@ static int sof_ipc4_get_audio_fmt(struct snd_soc_component *scomp,
                                  sizeof(struct sof_ipc4_audio_format),
                                  available_fmt->audio_fmt_num);
 
-       if (!has_out_format)
-               return 0;
-
        out_format = kcalloc(available_fmt->audio_fmt_num, sizeof(*out_format), GFP_KERNEL);
        if (!out_format) {
                ret = -ENOMEM;
@@ -362,7 +357,7 @@ static int sof_ipc4_widget_setup_pcm(struct snd_sof_widget *swidget)
        dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name);
 
        ret = sof_ipc4_get_audio_fmt(scomp, swidget, available_fmt,
-                                    &ipc4_copier->data.base_config, true);
+                                    &ipc4_copier->data.base_config);
        if (ret)
                goto free_copier;
 
@@ -461,7 +456,7 @@ static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget)
        dev_dbg(scomp->dev, "Updating IPC structure for %s\n", swidget->widget->name);
 
        ret = sof_ipc4_get_audio_fmt(scomp, swidget, available_fmt,
-                                    &ipc4_copier->data.base_config, true);
+                                    &ipc4_copier->data.base_config);
        if (ret)
                goto free_copier;
 
@@ -668,9 +663,7 @@ static int sof_ipc4_widget_setup_comp_pga(struct snd_sof_widget *swidget)
        gain->data.channels = SOF_IPC4_GAIN_ALL_CHANNELS_MASK;
        gain->data.init_val = SOF_IPC4_VOL_ZERO_DB;
 
-       /* The out_audio_fmt in topology is ignored as it is not required to be sent to the FW */
-       ret = sof_ipc4_get_audio_fmt(scomp, swidget, &gain->available_fmt, &gain->base_config,
-                                    false);
+       ret = sof_ipc4_get_audio_fmt(scomp, swidget, &gain->available_fmt, &gain->base_config);
        if (ret)
                goto err;
 
@@ -735,9 +728,8 @@ static int sof_ipc4_widget_setup_comp_mixer(struct snd_sof_widget *swidget)
 
        swidget->private = mixer;
 
-       /* The out_audio_fmt in topology is ignored as it is not required to be sent to the FW */
        ret = sof_ipc4_get_audio_fmt(scomp, swidget, &mixer->available_fmt,
-                                    &mixer->base_config, false);
+                                    &mixer->base_config);
        if (ret)
                goto err;
 
@@ -767,9 +759,7 @@ static int sof_ipc4_widget_setup_comp_src(struct snd_sof_widget *swidget)
 
        swidget->private = src;
 
-       /* The out_audio_fmt in topology is ignored as it is not required by SRC */
-       ret = sof_ipc4_get_audio_fmt(scomp, swidget, &src->available_fmt, &src->base_config,
-                                    false);
+       ret = sof_ipc4_get_audio_fmt(scomp, swidget, &src->available_fmt, &src->base_config);
        if (ret)
                goto err;