[alsa-devel] [PATCH 11/13] topology: Parse and build private data of physical links
mengdong.lin at linux.intel.com
mengdong.lin at linux.intel.com
Sun Nov 6 06:14:25 CET 2016
From: Mengdong Lin <mengdong.lin at linux.intel.com>
Users can define private data for physical links by C API or text conf
file. Private data pointer is added to C API template for physical links.
Signed-off-by: Mengdong Lin <mengdong.lin at linux.intel.com>
diff --git a/include/topology.h b/include/topology.h
index 3692da4..ad84c15 100644
--- a/include/topology.h
+++ b/include/topology.h
@@ -996,6 +996,7 @@ struct snd_tplg_link_template {
unsigned int flag_mask; /* bitmask of flags to configure */
unsigned int flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
+ struct snd_soc_tplg_private *priv; /*!< private data */
};
/** \struct snd_tplg_obj_template
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
index a751851..1d70396 100644
--- a/src/topology/pcm.c
+++ b/src/topology/pcm.c
@@ -162,7 +162,7 @@ static int build_link(snd_tplg_t *tplg, struct tplg_elem *elem)
if (err < 0)
return err;
- /* hw configs */
+ /* hw configs & private data */
base = &elem->ref_list;
list_for_each(pos, base) {
@@ -185,6 +185,12 @@ static int build_link(snd_tplg_t *tplg, struct tplg_elem *elem)
num_hw_configs++;
break;
+ case SND_TPLG_TYPE_DATA: /* merge private data */
+ err = tplg_copy_data(tplg, elem, ref);
+ if (err < 0)
+ return err;
+ break;
+
default:
break;
}
@@ -1043,5 +1049,24 @@ int tplg_add_link_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
/* flags */
link->flag_mask = link_tpl->flag_mask;
link->flags = link_tpl->flags;
+
+ /* private data */
+ if (link_tpl->priv != NULL && link_tpl->priv->size) {
+ _link = realloc(link,
+ elem->size + link_tpl->priv->size);
+ if (!_link) {
+ tplg_elem_free(elem);
+ return -ENOMEM;
+ }
+
+ link = _link;
+ elem->link = link;
+ elem->size += link_tpl->priv->size;
+
+ memcpy(link->priv.data, link_tpl->priv->data,
+ link_tpl->priv->size);
+ link->priv.size = link_tpl->priv->size;
+ }
+
return 0;
}
--
2.7.4
More information about the Alsa-devel
mailing list