summaryrefslogtreecommitdiff
path: root/sound/soc/sof/topology.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/sof/topology.c')
-rw-r--r--sound/soc/sof/topology.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c
index c1083ea4624a..9bf8ab610a7e 100644
--- a/sound/soc/sof/topology.c
+++ b/sound/soc/sof/topology.c
@@ -2106,8 +2106,8 @@ static int sof_route_load(struct snd_soc_component *scomp, int index,
/* source component */
source_swidget = snd_sof_find_swidget(scomp, (char *)route->source);
if (!source_swidget) {
- dev_err(scomp->dev, "error: source %s not found\n",
- route->source);
+ dev_err(scomp->dev, "source %s for sink %s is not found\n",
+ route->source, route->sink);
ret = -EINVAL;
goto err;
}
@@ -2125,8 +2125,8 @@ static int sof_route_load(struct snd_soc_component *scomp, int index,
/* sink component */
sink_swidget = snd_sof_find_swidget(scomp, (char *)route->sink);
if (!sink_swidget) {
- dev_err(scomp->dev, "error: sink %s not found\n",
- route->sink);
+ dev_err(scomp->dev, "sink %s for source %s is not found\n",
+ route->sink, route->source);
ret = -EINVAL;
goto err;
}
@@ -2506,12 +2506,28 @@ int snd_sof_load_topology(struct snd_soc_component *scomp, const char *file)
if (!tplg_files)
return -ENOMEM;
+ /* Try to use function topologies if possible */
if (!sof_pdata->disable_function_topology && !disable_function_topology &&
sof_pdata->machine && sof_pdata->machine->get_function_tplg_files) {
+ /*
+ * When the topology name contains 'dummy' word, it means that
+ * there is no fallback option to monolithic topology in case
+ * any of the function topologies might be missing.
+ * In this case we should use best effort to form the card,
+ * ignoring functionalities that we are missing a fragment for.
+ *
+ * Note: monolithic topologies also ignore these possibly
+ * missing functions, so the functionality of the card would be
+ * identical to the case if there would be a fallback monolithic
+ * topology created for the configuration.
+ */
+ bool no_fallback = strstr(file, "dummy");
+
tplg_cnt = sof_pdata->machine->get_function_tplg_files(scomp->card,
sof_pdata->machine,
tplg_filename_prefix,
- &tplg_files);
+ &tplg_files,
+ no_fallback);
if (tplg_cnt < 0) {
kfree(tplg_files);
return tplg_cnt;