diff --git a/include/topology.h b/include/topology.h index ad84c155..66dd084f 100644 --- a/include/topology.h +++ b/include/topology.h @@ -631,6 +631,8 @@ extern "C" { * * id "0" # used for binding to the link * + * stream_name "name" # used for binding to the link + * * hw_configs [ # runtime supported HW configurations, optional * "config1" * "config2" @@ -985,8 +987,10 @@ struct snd_tplg_hw_config_template { * \brief Template type for BE and CC DAI Links. */ struct snd_tplg_link_template { - const char *name; /*!< link name */ + const char *name; /*!< link name, used to match */ int id; /*!< unique ID - used to match with existing BE and CC links */ + const char *stream_name; /*!< link stream name, used to match */ + int num_streams; /*!< number of configs */ struct snd_tplg_stream_template *stream; /*!< supported configs */ diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 1d70396f..a9d32772 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -622,6 +622,7 @@ int tplg_parse_link(snd_tplg_t *tplg, link = elem->link; link->size = elem->size; + elem_copy_text(link->name, elem->id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN); tplg_dbg(" Link: %s\n", elem->id); @@ -655,6 +656,16 @@ int tplg_parse_link(snd_tplg_t *tplg, continue; } + if (strcmp(id, "stream_name") == 0) { + if (snd_config_get_string(n, &val) < 0) + return -EINVAL; + + elem_copy_text(link->stream_name, val, + SNDRV_CTL_ELEM_ID_NAME_MAXLEN); + tplg_dbg("\t%s: %s\n", id, val); + continue; + } + if (strcmp(id, "hw_configs") == 0) { err = parse_hw_config_refs(tplg, n, elem); if (err < 0) @@ -1030,7 +1041,15 @@ int tplg_add_link_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) link = elem->link; link->size = elem->size; + /* ID and names */ link->id = link_tpl->id; + if (link->name) + elem_copy_text(link->name, link_tpl->name, + SNDRV_CTL_ELEM_ID_NAME_MAXLEN); + if (link->stream_name) + elem_copy_text(link->stream_name, link_tpl->stream_name, + SNDRV_CTL_ELEM_ID_NAME_MAXLEN); + /* stream configs */ if (link_tpl->num_streams > SND_SOC_TPLG_STREAM_CONFIG_MAX) return -EINVAL;