topology: Define new type and section name to configure physical links

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 use SND_TPLG_TYPE_LINK and SectionLink to configure
backend links for DPCM cases, because BE links are also physical links.
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>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Mengdong Lin 2016-11-06 13:13:36 +08:00 committed by Takashi Iwai
parent cb9451b8e7
commit f5b275b24c
4 changed files with 29 additions and 10 deletions

View file

@ -617,6 +617,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
@ -687,6 +705,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 */
};
/**

View file

@ -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;

View file

@ -527,7 +527,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;
@ -544,7 +545,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) {
@ -748,7 +749,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. */
@ -756,10 +758,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;

View file

@ -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,