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 22/22] topology: Export physical DAIs to the binary for kernel
Date: Thu, 27 Oct 2016 15:15:20 +0800 [thread overview]
Message-ID: <03fcedf1c5941cde4d6a6e0184f06727330d56b6.1477549962.git.mengdong.lin@linux.intel.com> (raw)
In-Reply-To: <cover.1477549962.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 e1d266a..c41831c 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
prev parent reply other threads:[~2016-10-27 7:14 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-27 7:09 [PATCH 00/22] topology: Remaining user space patches of ABI v5 mengdong.lin
2016-10-27 7:11 ` [PATCH 01/22] topology: ABI - Update stream caps and PCM objects to " mengdong.lin
2016-10-27 7:11 ` [PATCH 02/22] topology: Parse sig_bits of stream caps mengdong.lin
2016-10-27 7:11 ` [PATCH 03/22] topology: Parse flags for PCM mengdong.lin
2016-10-27 7:11 ` [PATCH 04/22] topology: Define a function to build a single PCM element mengdong.lin
2016-10-27 7:11 ` [PATCH 05/22] topology: Parse and build private data for PCM mengdong.lin
2016-10-27 7:12 ` [PATCH 06/22] topology: tplg_elem_lookup() checks parameter before searching mengdong.lin
2016-10-27 7:12 ` [PATCH 07/22] topology: Merge an element's be & cc pointer to one link pointer mengdong.lin
2016-10-27 7:12 ` [PATCH 08/22] topology: Define a function to build a single physical DAI link mengdong.lin
2016-10-27 7:13 ` [PATCH 09/22] topology: ABI - Define DAI physical PCM data formats mengdong.lin
2016-10-27 7:13 ` [PATCH 10/22] topology: ABI - Update physical DAI link configurations to ABI v5 mengdong.lin
2016-10-27 7:13 ` [PATCH 11/22] topology: Rename varaibles for add physical links by C API mengdong.lin
2016-10-27 7:13 ` [PATCH 12/22] topology: Define new type and section name to configure physical links mengdong.lin
2016-10-27 7:13 ` [PATCH 13/22] topology: Parse HW configurations of physical DAI links defined by C API mengdong.lin
2016-10-27 7:13 ` [PATCH 14/22] topology: Parse HW configurations of physical DAI links in text conf file mengdong.lin
2016-10-27 7:14 ` [PATCH 15/22] topology: Parse link flags of physical DAI links mengdong.lin
2016-10-27 7:14 ` [PATCH 16/22] topology: Parse and build private data of physical links mengdong.lin
2016-10-27 7:14 ` [PATCH 17/22] topology: Parse name and stream name of physical DAI links mengdong.lin
2016-10-27 7:14 ` [PATCH 18/22] topology: ABI - Update manifest to ABI v5 mengdong.lin
2016-10-27 7:14 ` [PATCH 19/22] topology: ABI - Define new types for physical DAI mengdong.lin
2016-10-27 7:14 ` [PATCH 20/22] topology: Parse physical DAIs in text conf file mengdong.lin
2016-10-27 7:15 ` [PATCH 21/22] topology: Support configuring physical DAIs by C API mengdong.lin
2016-10-27 7:15 ` mengdong.lin [this message]
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=03fcedf1c5941cde4d6a6e0184f06727330d56b6.1477549962.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).