summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMengdong Lin <mengdong.lin@linux.intel.com>2016-07-15 20:19:58 +0800
committerTakashi Iwai <tiwai@suse.de>2016-07-17 10:00:28 +0200
commit962d006c28273ceb16ef915ce077a3163d299f7f (patch)
tree03cb86791bc04e7ad67f8df5c261d60e1570ec52
parenta3683a2ba04154ed5b06fdb9536f6c97b64ff71a (diff)
downloadalsa-lib-962d006c28273ceb16ef915ce077a3163d299f7f.tar.gz
topology: Tuple type can have an extenstion
After the type specific string ("uuid", "string", "byte", "short" and "word"), users may append a string, like "uuidxxx". The topology parser will check the first few characters to get the tuple type. This can allow users to put multiple tuples of the same type into one vendor tuple section (SectionVendorTuples), e.g. parameters of multiple firmware modules. Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com> Reviewed-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--include/topology.h23
-rw-r--r--src/topology/data.c12
2 files changed, 29 insertions, 6 deletions
diff --git a/include/topology.h b/include/topology.h
index 644e5489..0675b527 100644
--- a/include/topology.h
+++ b/include/topology.h
@@ -302,6 +302,29 @@ extern "C" {
* }
* }
* </pre>
+ * To define multiple vendor tuples of same type, please append some
+ * characters after the type string ("string", "uuid", "bool", "byte", "short"
+ * or "word"), to avoid ID duplication in the SectionVendorTuples.<br>
+ * The parser will check the first few characters in ID to get the tuple type.
+ * Here is an example:
+ * <pre>
+ * SectionVendorTuples."id of the vendor tuples" {
+ * ...
+ * tuples."word.module0" {
+ * VENDOR_TOKEN_PARAM_ID1 "0x00112233"
+ * VENDOR_TOKEN_PARAM_ID2 "0x44556677"
+ * ...
+ * }
+ *
+ * tuples."word.module2" {
+ * VENDOR_TOKEN_PARAM_ID1 "0x11223344"
+ * VENDOR_TOKEN_PARAM_ID2 "0x55667788"
+ * ...
+ * }
+ * ...
+ * }
+ *
+ * </pre>
*
* <h5>Mixer Controls</h5>
* A mixer control is defined as a new section that can include channel mapping,
diff --git a/src/topology/data.c b/src/topology/data.c
index 245a8340..e81b7f12 100644
--- a/src/topology/data.c
+++ b/src/topology/data.c
@@ -534,17 +534,17 @@ static int parse_tuple_set(snd_config_t *cfg,
snd_config_get_id(cfg, &id);
- if (strcmp(id, "uuid") == 0)
+ if (strncmp(id, "uuid", 4) == 0)
type = SND_SOC_TPLG_TUPLE_TYPE_UUID;
- else if (strcmp(id, "string") == 0)
+ else if (strncmp(id, "string", 5) == 0)
type = SND_SOC_TPLG_TUPLE_TYPE_STRING;
- else if (strcmp(id, "bool") == 0)
+ else if (strncmp(id, "bool", 4) == 0)
type = SND_SOC_TPLG_TUPLE_TYPE_BOOL;
- else if (strcmp(id, "byte") == 0)
+ else if (strncmp(id, "byte", 4) == 0)
type = SND_SOC_TPLG_TUPLE_TYPE_BYTE;
- else if (strcmp(id, "short") == 0)
+ else if (strncmp(id, "short", 5) == 0)
type = SND_SOC_TPLG_TUPLE_TYPE_SHORT;
- else if (strcmp(id, "word") == 0)
+ else if (strncmp(id, "word", 4) == 0)
type = SND_SOC_TPLG_TUPLE_TYPE_WORD;
else {
SNDERR("error: invalid tuple type '%s'\n", id);