summaryrefslogtreecommitdiffstats
path: root/sound/soc/sof/topology.c
diff options
context:
space:
mode:
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>2022-03-17 18:50:43 +0100
committerMark Brown <broonie@kernel.org>2022-03-18 17:04:52 +0100
commit31cd6e469364c42c9c929750991c51e83a95e80b (patch)
tree533bf72747d4b4726e306d58c2047a7cb2eabfd2 /sound/soc/sof/topology.c
parentASoC: SOF: expose sof_route_setup() (diff)
downloadlinux-31cd6e469364c42c9c929750991c51e83a95e80b.tar.xz
linux-31cd6e469364c42c9c929750991c51e83a95e80b.zip
ASoC: SOF: topology: Add ops for setting up and tearing down pipelines
Introduce two new ops, set_up_all_pipelines and tear_down_all_pipelines in struct ipc_tplg_ops and define these for IPC3. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20220317175044.1752400-19-ranjani.sridharan@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to '')
-rw-r--r--sound/soc/sof/topology.c55
1 files changed, 24 insertions, 31 deletions
diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c
index 369693cc6d10..9b11e9795a7a 100644
--- a/sound/soc/sof/topology.c
+++ b/sound/soc/sof/topology.c
@@ -1796,29 +1796,15 @@ static int sof_route_load(struct snd_soc_component *scomp, int index,
sink_swidget->id == snd_soc_dapm_output)
goto err;
- /*
- * For virtual routes, both sink and source are not
- * buffer. Since only buffer linked to component is supported by
- * FW, others are reported as error, add check in route function,
- * do not send it to FW when both source and sink are not buffer
- */
- if (source_swidget->id != snd_soc_dapm_buffer &&
- sink_swidget->id != snd_soc_dapm_buffer) {
- dev_dbg(scomp->dev, "warning: neither Linked source component %s nor sink component %s is of buffer type, ignoring link\n",
- route->source, route->sink);
- goto err;
- } else {
- sroute->route = route;
- dobj->private = sroute;
- sroute->src_widget = source_swidget;
- sroute->sink_widget = sink_swidget;
-
- /* add route to route list */
- list_add(&sroute->list, &sdev->route_list);
+ sroute->route = route;
+ dobj->private = sroute;
+ sroute->src_widget = source_swidget;
+ sroute->sink_widget = sink_swidget;
- return 0;
- }
+ /* add route to route list */
+ list_add(&sroute->list, &sdev->route_list);
+ return 0;
err:
kfree(sroute);
return ret;
@@ -1917,21 +1903,28 @@ static int sof_complete(struct snd_soc_component *scomp)
/* verify topology components loading including dynamic pipelines */
if (sof_debug_check_flag(SOF_DBG_VERIFY_TPLG)) {
- ret = sof_set_up_pipelines(sdev, true);
- if (ret < 0) {
- dev_err(sdev->dev, "error: topology verification failed %d\n", ret);
- return ret;
- }
+ if (ipc_tplg_ops->set_up_all_pipelines && ipc_tplg_ops->tear_down_all_pipelines) {
+ ret = ipc_tplg_ops->set_up_all_pipelines(sdev, true);
+ if (ret < 0) {
+ dev_err(sdev->dev, "Failed to set up all topology pipelines: %d\n",
+ ret);
+ return ret;
+ }
- ret = sof_tear_down_pipelines(sdev, true);
- if (ret < 0) {
- dev_err(sdev->dev, "error: topology tear down pipelines failed %d\n", ret);
- return ret;
+ ret = ipc_tplg_ops->tear_down_all_pipelines(sdev, true);
+ if (ret < 0) {
+ dev_err(sdev->dev, "Failed to tear down topology pipelines: %d\n",
+ ret);
+ return ret;
+ }
}
}
/* set up static pipelines */
- return sof_set_up_pipelines(sdev, false);
+ if (ipc_tplg_ops->set_up_all_pipelines)
+ return ipc_tplg_ops->set_up_all_pipelines(sdev, false);
+
+ return 0;
}
/* manifest - optional to inform component of manifest */