OSDN Git Service

topology: Define new type and section name to configure physical links
authorMengdong Lin <mengdong.lin@linux.intel.com>
Sun, 6 Nov 2016 05:13:36 +0000 (13:13 +0800)
committerTakashi Iwai <tiwai@suse.de>
Tue, 8 Nov 2016 15:33:18 +0000 (16:33 +0100)
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>
include/topology.h
src/topology/parser.c
src/topology/pcm.c
src/topology/tplg_local.h

index dbd18b3..1fbaeb8 100644 (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 */
 };
 
 /**
index ded2eb7..ed5da87 100644 (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;
index fe8af45..96a64e7 100644 (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;
index 548f42d..947f27e 100644 (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,