From: mengdong.lin@linux.intel.com
To: alsa-devel@alsa-project.org
Cc: Mengdong Lin <mengdong.lin@linux.intel.com>,
tiwai@suse.de, hardik.t.shah@intel.com,
guneshwor.o.singh@intel.com, liam.r.girdwood@linux.intel.com,
vinod.koul@intel.com, broonie@kernel.org, mengdong.lin@intel.com
Subject: [PATCH 5/7] topology: Export physical DAIs to the binary for kernel
Date: Wed, 16 Nov 2016 14:42:49 +0800 [thread overview]
Message-ID: <71c700b0477cb17e8ccc9622c1b8e96ff30125cf.1479277829.git.mengdong.lin@linux.intel.com> (raw)
In-Reply-To: <cover.1479277829.git.mengdong.lin@linux.intel.com>
From: Guneshwor Singh <guneshwor.o.singh@intel.com>
Export the physical DAI objects to the binary output file for kernel.
For physical DAIs defined by the text conf file, find and merge their
stream capablities and private data before exporting.
Signed-off-by: Guneshwor Singh <guneshwor.o.singh@intel.com>
Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
diff --git a/src/topology/builder.c b/src/topology/builder.c
index b0ba54e..20fa925 100644
--- a/src/topology/builder.c
+++ b/src/topology/builder.c
@@ -204,6 +204,9 @@ static int write_block(snd_tplg_t *tplg, struct list_head *base,
case SND_TPLG_TYPE_DATA:
return write_elem_block(tplg, base, size,
SND_SOC_TPLG_TYPE_PDATA, "data");
+ case SND_TPLG_TYPE_DAI:
+ return write_elem_block(tplg, base, size,
+ SND_SOC_TPLG_TYPE_DAI, "dai");
default:
return -EINVAL;
}
@@ -293,6 +296,14 @@ int tplg_write_data(snd_tplg_t *tplg)
return ret;
}
+ /* write physical dai elems */
+ ret = write_block(tplg, &tplg->dai_list,
+ SND_TPLG_TYPE_DAI);
+ if (ret < 0) {
+ SNDERR("failed to write physical dai elems %d\n", ret);
+ return ret;
+ }
+
/* write be elems */
ret = write_block(tplg, &tplg->be_list,
SND_TPLG_TYPE_BE);
diff --git a/src/topology/parser.c b/src/topology/parser.c
index 4afa576..c5f9757 100644
--- a/src/topology/parser.c
+++ b/src/topology/parser.c
@@ -288,6 +288,10 @@ static int tplg_build_integ(snd_tplg_t *tplg)
if (err < 0)
return err;
+ err = tplg_build_dais(tplg, SND_TPLG_TYPE_DAI);
+ if (err < 0)
+ return err;
+
err = tplg_build_links(tplg, SND_TPLG_TYPE_BE);
if (err < 0)
return err;
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
index 9f60e4b..d7c04c2 100644
--- a/src/topology/pcm.c
+++ b/src/topology/pcm.c
@@ -129,6 +129,61 @@ int tplg_build_pcms(snd_tplg_t *tplg, unsigned int type)
return 0;
}
+/* build a physical DAI */
+static int tplg_build_dai(snd_tplg_t *tplg, struct tplg_elem *elem)
+{
+ struct tplg_ref *ref;
+ struct list_head *base, *pos;
+ int err = 0;
+
+ /* get playback & capture stream caps */
+ err = tplg_build_stream_caps(tplg, elem->id, elem->dai->caps);
+ if (err < 0)
+ return err;
+
+ /* get private data */
+ base = &elem->ref_list;
+ list_for_each(pos, base) {
+
+ ref = list_entry(pos, struct tplg_ref, list);
+
+ if (ref->type == SND_TPLG_TYPE_DATA) {
+ err = tplg_copy_data(tplg, elem, ref);
+ if (err < 0)
+ return err;
+ }
+ }
+
+ /* add DAI to manifest */
+ tplg->manifest.dai_elems++;
+
+ return 0;
+}
+
+/* build physical DAIs*/
+int tplg_build_dais(snd_tplg_t *tplg, unsigned int type)
+{
+ struct list_head *base, *pos;
+ struct tplg_elem *elem;
+ int err = 0;
+
+ base = &tplg->dai_list;
+ list_for_each(pos, base) {
+
+ elem = list_entry(pos, struct tplg_elem, list);
+ if (elem->type != type) {
+ SNDERR("error: invalid elem '%s'\n", elem->id);
+ return -EINVAL;
+ }
+
+ err = tplg_build_dai(tplg, elem);
+ if (err < 0)
+ return err;
+ }
+
+ return 0;
+}
+
static int tplg_build_stream_cfg(snd_tplg_t *tplg,
struct snd_soc_tplg_stream *stream, int num_streams)
{
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
index 807462b..f913563 100644
--- a/src/topology/tplg_local.h
+++ b/src/topology/tplg_local.h
@@ -294,6 +294,7 @@ int tplg_add_bytes(snd_tplg_t *tplg, struct snd_tplg_bytes_template *bytes_ctl,
struct tplg_elem **e);
int tplg_build_pcms(snd_tplg_t *tplg, unsigned int type);
+int tplg_build_dais(snd_tplg_t *tplg, unsigned int type);
int tplg_build_links(snd_tplg_t *tplg, unsigned int type);
int tplg_add_link_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t);
int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t);
--
2.5.0
next prev parent reply other threads:[~2016-11-16 6:41 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-16 6:36 [PATCH 0/7] topology: Add support for physical DAIs mengdong.lin
2016-11-16 6:42 ` [PATCH 1/7] topology: ABI - Update manifest and pump ABI version to 5 mengdong.lin
2016-11-16 6:42 ` [PATCH 2/7] topology: ABI - Define new types for physical DAI mengdong.lin
2016-11-16 6:42 ` [PATCH 3/7] topology: Parse physical DAIs in text conf file mengdong.lin
2016-11-16 6:42 ` [PATCH 4/7] topology: Support configuring physical DAIs by C API mengdong.lin
2016-11-16 6:42 ` mengdong.lin [this message]
2016-11-16 6:42 ` [PATCH 6/7] topology: ABI - Add voice wake up flag for DAI links mengdong.lin
2016-11-16 6:43 ` [PATCH 7/7] topology: Revise document and comments for ABI v5 mengdong.lin
2016-11-22 6:51 ` [PATCH 0/7] topology: Add support for physical DAIs Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=71c700b0477cb17e8ccc9622c1b8e96ff30125cf.1479277829.git.mengdong.lin@linux.intel.com \
--to=mengdong.lin@linux.intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=guneshwor.o.singh@intel.com \
--cc=hardik.t.shah@intel.com \
--cc=liam.r.girdwood@linux.intel.com \
--cc=mengdong.lin@intel.com \
--cc=tiwai@suse.de \
--cc=vinod.koul@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).