From: Mengdong Lin mengdong.lin@linux.intel.com
Users may not use DPCM but still need to configure the physical links. So we should not only consider backend links for DPCM.
- SND_TPLG_TYPE_LINK is defined to configure physical links by C API. And SND_TPLG_TYPE_BE is still supported to configure Backend links for DPCM cases.
- SectionLink can be used to configure physical links in text conf file. And SectionBE is still supported to config Backend links for DPCM cases.
Actually, users can also use SND_TPLG_TYPE_LINK and SectionLink to configure backend links for DPCM cases, because BE links are physical links. So the parsing is same and we rename the function from tplg_parse_be to tplg_parse_link.
Signed-off-by: Mengdong Lin mengdong.lin@linux.intel.com
diff --git a/include/topology.h b/include/topology.h index f9e8285..d1ce69c 100644 --- a/include/topology.h +++ b/include/topology.h @@ -618,6 +618,24 @@ extern "C" { * } * </pre> * + * <h4>Physical DAI Link Configurations</h4> + * The runtime configurations of a physical DAI link can be defined by + * SectionLink. <br> Backend DAI links belong to physical links, and can + * be configured by either SectionLink or SectionBE, with same syntax. + * But SectionBE is deprecated atm since the internal processing is + * actually same. + * + * <pre> + * SectionLink."name" { + * + * index "1" # Index number + * + * id "0" # used for binding to the link + * + * data "name" # optional private data + * } + * </pre> + * * <h4>Manifest Private Data</h4> * Manfiest may have private data. Users need to define a manifest section * and add the references to 1 or multiple data sections. Please refer to @@ -658,6 +676,7 @@ enum snd_tplg_type { SND_TPLG_TYPE_MANIFEST, /*!< Topology manifest */ SND_TPLG_TYPE_TOKEN, /*!< Vendor tokens */ SND_TPLG_TYPE_TUPLE, /*!< Vendor tuples */ + SND_TPLG_TYPE_LINK, /*!< Physical DAI link */ };
/** diff --git a/src/topology/parser.c b/src/topology/parser.c index ded2eb7..ed5da87 100644 --- a/src/topology/parser.c +++ b/src/topology/parser.c @@ -133,8 +133,9 @@ static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg) continue; }
- if (strcmp(id, "SectionBE") == 0) { - err = tplg_parse_compound(tplg, n, tplg_parse_be, + if (strcmp(id, "SectionLink") == 0 + || strcmp(id, "SectionBE") == 0) { + err = tplg_parse_compound(tplg, n, tplg_parse_link, NULL); if (err < 0) return err; diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 3fe77aa..32beeb7 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -545,7 +545,8 @@ int tplg_parse_pcm(snd_tplg_t *tplg, return 0; }
-int tplg_parse_be(snd_tplg_t *tplg, +/* Parse a physical link element in text conf file */ +int tplg_parse_link(snd_tplg_t *tplg, snd_config_t *cfg, void *private ATTRIBUTE_UNUSED) { struct snd_soc_tplg_link_config *link; @@ -562,7 +563,7 @@ int tplg_parse_be(snd_tplg_t *tplg, link = elem->link; link->size = elem->size;
- tplg_dbg(" BE: %s\n", elem->id); + tplg_dbg(" Link: %s\n", elem->id);
snd_config_for_each(i, next, cfg) {
@@ -766,7 +767,8 @@ int tplg_add_link_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) struct tplg_elem *elem; int i;
- if (t->type != SND_TPLG_TYPE_BE && t->type != SND_TPLG_TYPE_CC) + if (t->type != SND_TPLG_TYPE_LINK && t->type != SND_TPLG_TYPE_BE + && t->type != SND_TPLG_TYPE_CC) return -EINVAL;
/* here type can be either BE or CC. */ @@ -774,10 +776,7 @@ int tplg_add_link_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t) if (!elem) return -ENOMEM;
- if (t->type == SND_TPLG_TYPE_BE) - tplg_dbg("BE Link: %s", link_tpl->name); - else - tplg_dbg("CC Link: %s", link_tpl->name); + tplg_dbg("Link: %s", link_tpl->name);
link = elem->link; link->size = elem->size; diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h index 548f42d..947f27e 100644 --- a/src/topology/tplg_local.h +++ b/src/topology/tplg_local.h @@ -220,7 +220,7 @@ int tplg_parse_stream_caps(snd_tplg_t *tplg, int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
-int tplg_parse_be(snd_tplg_t *tplg, +int tplg_parse_link(snd_tplg_t *tplg, snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
int tplg_parse_cc(snd_tplg_t *tplg,