Accepting request 784667 from multimedia:libs
OBS-URL: https://build.opensuse.org/request/show/784667 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/alsa?expand=0&rev=198
This commit is contained in:
commit
16f6c738ba
81
0001-conf-change-the-order-of-PCM-devices-in-alsa.conf.patch
Normal file
81
0001-conf-change-the-order-of-PCM-devices-in-alsa.conf.patch
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
From 27c7927842a691ef13724cd16fb26264680c6aa2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Sat, 29 Feb 2020 10:30:37 +0100
|
||||||
|
Subject: [PATCH 1/5] conf: change the order of PCM devices in alsa.conf
|
||||||
|
|
||||||
|
Appearently, some applications use the first device for probe or so.
|
||||||
|
|
||||||
|
Fixes: https://github.com/alsa-project/alsa-lib/issues/27
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
src/conf/alsa.conf | 46 +++++++++++++++++++++++-----------------------
|
||||||
|
1 file changed, 23 insertions(+), 23 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf
|
||||||
|
index 099805864788..a091b810f9ed 100644
|
||||||
|
--- a/src/conf/alsa.conf
|
||||||
|
+++ b/src/conf/alsa.conf
|
||||||
|
@@ -119,29 +119,6 @@ defaults.timer.subdevice 0
|
||||||
|
# PCM interface
|
||||||
|
#
|
||||||
|
|
||||||
|
-# redirect to load-on-demand extended pcm definitions
|
||||||
|
-pcm.cards cards.pcm
|
||||||
|
-
|
||||||
|
-pcm.default cards.pcm.default
|
||||||
|
-pcm.sysdefault cards.pcm.default
|
||||||
|
-pcm.front cards.pcm.front
|
||||||
|
-pcm.rear cards.pcm.rear
|
||||||
|
-pcm.center_lfe cards.pcm.center_lfe
|
||||||
|
-pcm.side cards.pcm.side
|
||||||
|
-pcm.surround21 cards.pcm.surround21
|
||||||
|
-pcm.surround40 cards.pcm.surround40
|
||||||
|
-pcm.surround41 cards.pcm.surround41
|
||||||
|
-pcm.surround50 cards.pcm.surround50
|
||||||
|
-pcm.surround51 cards.pcm.surround51
|
||||||
|
-pcm.surround71 cards.pcm.surround71
|
||||||
|
-pcm.iec958 cards.pcm.iec958
|
||||||
|
-pcm.spdif iec958
|
||||||
|
-pcm.hdmi cards.pcm.hdmi
|
||||||
|
-pcm.dmix cards.pcm.dmix
|
||||||
|
-pcm.dsnoop cards.pcm.dsnoop
|
||||||
|
-pcm.modem cards.pcm.modem
|
||||||
|
-pcm.phoneline cards.pcm.phoneline
|
||||||
|
-
|
||||||
|
pcm.hw {
|
||||||
|
@args [ CARD DEV SUBDEV ]
|
||||||
|
@args.CARD {
|
||||||
|
@@ -323,6 +300,29 @@ pcm.null {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+# redirect to load-on-demand extended pcm definitions
|
||||||
|
+pcm.cards cards.pcm
|
||||||
|
+
|
||||||
|
+pcm.default cards.pcm.default
|
||||||
|
+pcm.sysdefault cards.pcm.default
|
||||||
|
+pcm.front cards.pcm.front
|
||||||
|
+pcm.rear cards.pcm.rear
|
||||||
|
+pcm.center_lfe cards.pcm.center_lfe
|
||||||
|
+pcm.side cards.pcm.side
|
||||||
|
+pcm.surround21 cards.pcm.surround21
|
||||||
|
+pcm.surround40 cards.pcm.surround40
|
||||||
|
+pcm.surround41 cards.pcm.surround41
|
||||||
|
+pcm.surround50 cards.pcm.surround50
|
||||||
|
+pcm.surround51 cards.pcm.surround51
|
||||||
|
+pcm.surround71 cards.pcm.surround71
|
||||||
|
+pcm.iec958 cards.pcm.iec958
|
||||||
|
+pcm.spdif iec958
|
||||||
|
+pcm.hdmi cards.pcm.hdmi
|
||||||
|
+pcm.dmix cards.pcm.dmix
|
||||||
|
+pcm.dsnoop cards.pcm.dsnoop
|
||||||
|
+pcm.modem cards.pcm.modem
|
||||||
|
+pcm.phoneline cards.pcm.phoneline
|
||||||
|
+
|
||||||
|
#
|
||||||
|
# Control interface
|
||||||
|
#
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From c79f09e1f5e8b559b58dacdb00708d995b2e3aa5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: paulhsia <paulhsia@chromium.org>
|
|
||||||
Date: Sat, 30 Nov 2019 03:35:30 +0800
|
|
||||||
Subject: [PATCH 01/30] ucm: Use strncmp to avoid access-out-of-boundary
|
|
||||||
|
|
||||||
If the length of the identifier is less than the length of the prefix,
|
|
||||||
access-out-of-boundary will occur in memcmp().
|
|
||||||
|
|
||||||
Signed-off-by: paulhsia <paulhsia@chromium.org>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/main.c | 8 +++++---
|
|
||||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/main.c b/src/ucm/main.c
|
|
||||||
index b0b6ffb34be5..252e50d9a387 100644
|
|
||||||
--- a/src/ucm/main.c
|
|
||||||
+++ b/src/ucm/main.c
|
|
||||||
@@ -61,11 +61,13 @@ static int check_identifier(const char *identifier, const char *prefix)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
|
|
||||||
- if (strcmp(identifier, prefix) == 0)
|
|
||||||
- return 1;
|
|
||||||
len = strlen(prefix);
|
|
||||||
- if (memcmp(identifier, prefix, len) == 0 && identifier[len] == '/')
|
|
||||||
+ if (strncmp(identifier, prefix, len) != 0)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ if (identifier[len] == 0 || identifier[len] == '/')
|
|
||||||
return 1;
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
109
0002-conf-namehint-add-omit_noargs-to-the-hint-section.patch
Normal file
109
0002-conf-namehint-add-omit_noargs-to-the-hint-section.patch
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
From 09e78da4cade7b8fecb8f36717b85c456f2e5487 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Sun, 1 Mar 2020 19:57:06 +0100
|
||||||
|
Subject: [PATCH 2/5] conf: namehint - add omit_noargs to the hint section
|
||||||
|
|
||||||
|
Do not list simple surround devices in the namehint function by default.
|
||||||
|
|
||||||
|
Fixes: https://github.com/alsa-project/alsa-lib/issues/27
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
src/conf/pcm/surround21.conf | 1 +
|
||||||
|
src/conf/pcm/surround40.conf | 1 +
|
||||||
|
src/conf/pcm/surround41.conf | 1 +
|
||||||
|
src/conf/pcm/surround50.conf | 1 +
|
||||||
|
src/conf/pcm/surround51.conf | 1 +
|
||||||
|
src/conf/pcm/surround71.conf | 1 +
|
||||||
|
src/control/namehint.c | 6 +++++-
|
||||||
|
7 files changed, 11 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/conf/pcm/surround21.conf b/src/conf/pcm/surround21.conf
|
||||||
|
index 1cf1b7af8dc6..ad19507bba58 100644
|
||||||
|
--- a/src/conf/pcm/surround21.conf
|
||||||
|
+++ b/src/conf/pcm/surround21.conf
|
||||||
|
@@ -57,5 +57,6 @@ pcm.!surround21 {
|
||||||
|
hint {
|
||||||
|
description "2.1 Surround output to Front and Subwoofer speakers"
|
||||||
|
device_output $DEV
|
||||||
|
+ omit_noargs true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/conf/pcm/surround40.conf b/src/conf/pcm/surround40.conf
|
||||||
|
index 9788ad4884fd..7c615022f500 100644
|
||||||
|
--- a/src/conf/pcm/surround40.conf
|
||||||
|
+++ b/src/conf/pcm/surround40.conf
|
||||||
|
@@ -55,5 +55,6 @@ pcm.!surround40 {
|
||||||
|
hint {
|
||||||
|
description "4.0 Surround output to Front and Rear speakers"
|
||||||
|
device_output $DEV
|
||||||
|
+ omit_noargs true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/conf/pcm/surround41.conf b/src/conf/pcm/surround41.conf
|
||||||
|
index 7b4ef3beb43a..cb6c0445ae07 100644
|
||||||
|
--- a/src/conf/pcm/surround41.conf
|
||||||
|
+++ b/src/conf/pcm/surround41.conf
|
||||||
|
@@ -61,5 +61,6 @@ pcm.!surround41 {
|
||||||
|
hint {
|
||||||
|
description "4.1 Surround output to Front, Rear and Subwoofer speakers"
|
||||||
|
device_output $DEV
|
||||||
|
+ omit_noargs true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/conf/pcm/surround50.conf b/src/conf/pcm/surround50.conf
|
||||||
|
index 7d9a9e798fd8..70d54069f8a3 100644
|
||||||
|
--- a/src/conf/pcm/surround50.conf
|
||||||
|
+++ b/src/conf/pcm/surround50.conf
|
||||||
|
@@ -61,5 +61,6 @@ pcm.!surround50 {
|
||||||
|
hint {
|
||||||
|
description "5.0 Surround output to Front, Center and Rear speakers"
|
||||||
|
device_output $DEV
|
||||||
|
+ omit_noargs true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/conf/pcm/surround51.conf b/src/conf/pcm/surround51.conf
|
||||||
|
index e67f007ef305..d0236e42d332 100644
|
||||||
|
--- a/src/conf/pcm/surround51.conf
|
||||||
|
+++ b/src/conf/pcm/surround51.conf
|
||||||
|
@@ -57,5 +57,6 @@ pcm.!surround51 {
|
||||||
|
hint {
|
||||||
|
description "5.1 Surround output to Front, Center, Rear and Subwoofer speakers"
|
||||||
|
device_output $DEV
|
||||||
|
+ omit_noargs true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/conf/pcm/surround71.conf b/src/conf/pcm/surround71.conf
|
||||||
|
index a26c3f36c437..66792ddebbc0 100644
|
||||||
|
--- a/src/conf/pcm/surround71.conf
|
||||||
|
+++ b/src/conf/pcm/surround71.conf
|
||||||
|
@@ -59,5 +59,6 @@ pcm.!surround71 {
|
||||||
|
hint {
|
||||||
|
description "7.1 Surround output to Front, Center, Side, Rear and Woofer speakers"
|
||||||
|
device_output $DEV
|
||||||
|
+ omit_noargs true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/control/namehint.c b/src/control/namehint.c
|
||||||
|
index 60c48ae32877..169bd4215fc5 100644
|
||||||
|
--- a/src/control/namehint.c
|
||||||
|
+++ b/src/control/namehint.c
|
||||||
|
@@ -287,10 +287,14 @@ static int try_config(snd_config_t *config,
|
||||||
|
err = -EINVAL;
|
||||||
|
goto __cleanup;
|
||||||
|
}
|
||||||
|
+ if (list->card < 0 &&
|
||||||
|
+ snd_config_search(cfg, "omit_noargs", &n) >= 0 &&
|
||||||
|
+ snd_config_get_bool(n) > 0)
|
||||||
|
+ goto __skip_add;
|
||||||
|
if (level == 1 &&
|
||||||
|
snd_config_search(cfg, "show", &n) >= 0 &&
|
||||||
|
snd_config_get_bool(n) <= 0)
|
||||||
|
- goto __skip_add;
|
||||||
|
+ goto __skip_add;
|
||||||
|
if (buf1 == NULL &&
|
||||||
|
snd_config_search(cfg, "description", &n) >= 0 &&
|
||||||
|
snd_config_get_string(n, &str) >= 0) {
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 9baf64da2f26844434ecea4825052937a3abe06c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 29 Nov 2019 22:28:26 +0100
|
|
||||||
Subject: [PATCH 02/30] ucm: return always at least NULL if no list is
|
|
||||||
available in snd_use_case_get_list()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/main.c | 8 ++++++--
|
|
||||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/main.c b/src/ucm/main.c
|
|
||||||
index 252e50d9a387..b80db65fa93b 100644
|
|
||||||
--- a/src/ucm/main.c
|
|
||||||
+++ b/src/ucm/main.c
|
|
||||||
@@ -1160,8 +1160,10 @@ static int get_supcon_device_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
|
|
||||||
modifier = find_modifier(uc_mgr, verb, name, 0);
|
|
||||||
if (modifier) {
|
|
||||||
- if (modifier->dev_list.type != type)
|
|
||||||
+ if (modifier->dev_list.type != type) {
|
|
||||||
+ *list = NULL;
|
|
||||||
return 0;
|
|
||||||
+ }
|
|
||||||
return get_list(&modifier->dev_list.list, list,
|
|
||||||
struct dev_list_node, list,
|
|
||||||
name);
|
|
||||||
@@ -1169,8 +1171,10 @@ static int get_supcon_device_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
|
|
||||||
device = find_device(uc_mgr, verb, name, 0);
|
|
||||||
if (device) {
|
|
||||||
- if (device->dev_list.type != type)
|
|
||||||
+ if (device->dev_list.type != type) {
|
|
||||||
+ *list = NULL;
|
|
||||||
return 0;
|
|
||||||
+ }
|
|
||||||
return get_list(&device->dev_list.list, list,
|
|
||||||
struct dev_list_node, list,
|
|
||||||
name);
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
27
0003-Change-PCM-device-number-of-Asus-Xonar-U5.patch
Normal file
27
0003-Change-PCM-device-number-of-Asus-Xonar-U5.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From c7efaef195b92e30efb3049a1c03fa1b50310477 Mon Sep 17 00:00:00 2001
|
||||||
|
From: be-marc <marcbecker@posteo.de>
|
||||||
|
Date: Tue, 3 Mar 2020 11:01:09 +0100
|
||||||
|
Subject: [PATCH 3/5] Change PCM device number of Asus Xonar U5
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
src/conf/cards/USB-Audio.conf | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
|
||||||
|
index 1c6779379c89..dd99c44d859b 100644
|
||||||
|
--- a/src/conf/cards/USB-Audio.conf
|
||||||
|
+++ b/src/conf/cards/USB-Audio.conf
|
||||||
|
@@ -39,7 +39,8 @@ USB-Audio.pcm.iec958_device {
|
||||||
|
# "NoiseBlaster 3000" 42
|
||||||
|
"USB Sound Blaster HD" 1
|
||||||
|
"Xonar U7" 1
|
||||||
|
-
|
||||||
|
+ "ASUS XONAR U5" 1
|
||||||
|
+
|
||||||
|
# The below don't have digital in/out, so prevent them from being opened.
|
||||||
|
"Andrea PureAudio USB-SA Headset" 999
|
||||||
|
"Blue Snowball" 999
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,353 +0,0 @@
|
|||||||
From ebdd2b6cdb8119cf75f0dd0a3b283d271b3a547e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 30 Nov 2019 20:31:55 +0100
|
|
||||||
Subject: [PATCH 03/30] ucm: add _identifiers list
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 1 +
|
|
||||||
src/ucm/main.c | 268 +++++++++++++++++++++++++++++++++++++++++------------
|
|
||||||
2 files changed, 208 insertions(+), 61 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index 8e7e838c9cb9..85c58ac0614a 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -206,6 +206,7 @@ int snd_use_case_free_list(const char *list[], int items);
|
|
||||||
* - _enadevs - get list of enabled devices
|
|
||||||
* - _enamods - get list of enabled modifiers
|
|
||||||
*
|
|
||||||
+ * - _identifiers/{modifier}|{device}[/{verb}] - list of value identifiers
|
|
||||||
* - _supporteddevs/{modifier}|{device}[/{verb}] - list of supported devices
|
|
||||||
* - _conflictingdevs/{modifier}|{device}[/{verb}] - list of conflicting devices
|
|
||||||
*
|
|
||||||
diff --git a/src/ucm/main.c b/src/ucm/main.c
|
|
||||||
index b80db65fa93b..d2078a2381d3 100644
|
|
||||||
--- a/src/ucm/main.c
|
|
||||||
+++ b/src/ucm/main.c
|
|
||||||
@@ -1072,7 +1072,6 @@ int snd_use_case_mgr_reset(snd_use_case_mgr_t *uc_mgr)
|
|
||||||
/**
|
|
||||||
* \brief Get list of verbs in pair verbname+comment
|
|
||||||
* \param list Returned list
|
|
||||||
- * \param verbname For verb (NULL = current)
|
|
||||||
* \return Number of list entries if success, otherwise a negative error code
|
|
||||||
*/
|
|
||||||
static int get_verb_list(snd_use_case_mgr_t *uc_mgr, const char **list[])
|
|
||||||
@@ -1181,7 +1180,6 @@ static int get_supcon_device_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
}
|
|
||||||
|
|
||||||
return -ENOENT;
|
|
||||||
-
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -1210,41 +1208,201 @@ static int get_conflicting_device_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
|
|
||||||
#ifndef DOC_HIDDEN
|
|
||||||
struct myvalue {
|
|
||||||
- struct list_head list;
|
|
||||||
- char *value;
|
|
||||||
+ struct list_head list;
|
|
||||||
+ const char *text;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * \brief Convert myvalue list string list
|
|
||||||
+ * \param list myvalue list
|
|
||||||
+ * \param res string list
|
|
||||||
+ * \retval Number of list entries if success, otherwise a negativer error code
|
|
||||||
+ */
|
|
||||||
+static int myvalue_to_str_list(struct list_head *list, char ***res)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ struct myvalue *value;
|
|
||||||
+ char **p;
|
|
||||||
+ int cnt;
|
|
||||||
+
|
|
||||||
+ cnt = alloc_str_list(list, 1, res);
|
|
||||||
+ if (cnt < 0)
|
|
||||||
+ return cnt;
|
|
||||||
+ p = *res;
|
|
||||||
+ list_for_each(pos, list) {
|
|
||||||
+ value = list_entry(pos, struct myvalue, list);
|
|
||||||
+ *p = strdup(value->text);
|
|
||||||
+ if (*p == NULL) {
|
|
||||||
+ snd_use_case_free_list((const char **)p, cnt);
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+ p++;
|
|
||||||
+ }
|
|
||||||
+ return cnt;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * \brief Free myvalue list
|
|
||||||
+ * \param list myvalue list
|
|
||||||
+ */
|
|
||||||
+static void myvalue_list_free(struct list_head *list)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos, *npos;
|
|
||||||
+ struct myvalue *value;
|
|
||||||
+
|
|
||||||
+ list_for_each_safe(pos, npos, list) {
|
|
||||||
+ value = list_entry(pos, struct myvalue, list);
|
|
||||||
+ list_del(&value->list);
|
|
||||||
+ free(value);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * \brief Merge one value to the myvalue list
|
|
||||||
+ * \param list The list with values
|
|
||||||
+ * \param value The value to be merged (without duplicates)
|
|
||||||
+ * \return 1 if dup, 0 if success, otherwise a negative error code
|
|
||||||
+ */
|
|
||||||
+static int merge_value(struct list_head *list, const char *text)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ struct myvalue *value;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, list) {
|
|
||||||
+ value = list_entry(pos, struct myvalue, list);
|
|
||||||
+ if (strcmp(value->text, text) == 0)
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ value = malloc(sizeof(*value));
|
|
||||||
+ if (value == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ value->text = text;
|
|
||||||
+ list_add_tail(&value->list, list);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * \brief Find all values for given identifier
|
|
||||||
+ * \param list Returned list
|
|
||||||
+ * \param source Source list with ucm_value structures
|
|
||||||
+ * \return Zero if success, otherwise a negative error code
|
|
||||||
+ */
|
|
||||||
+static int add_identifiers(struct list_head *list,
|
|
||||||
+ struct list_head *source)
|
|
||||||
+{
|
|
||||||
+ struct ucm_value *v;
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, source) {
|
|
||||||
+ v = list_entry(pos, struct ucm_value, list);
|
|
||||||
+ err = merge_value(list, v->name);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * \brief Find all values for given identifier
|
|
||||||
+ * \param list Returned list
|
|
||||||
+ * \param identifier Identifier
|
|
||||||
+ * \param source Source list with ucm_value structures
|
|
||||||
+ */
|
|
||||||
static int add_values(struct list_head *list,
|
|
||||||
const char *identifier,
|
|
||||||
struct list_head *source)
|
|
||||||
{
|
|
||||||
- struct ucm_value *v;
|
|
||||||
- struct myvalue *val;
|
|
||||||
- struct list_head *pos, *pos1;
|
|
||||||
- int match;
|
|
||||||
+ struct ucm_value *v;
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ int err;
|
|
||||||
|
|
||||||
- list_for_each(pos, source) {
|
|
||||||
- v = list_entry(pos, struct ucm_value, list);
|
|
||||||
- if (check_identifier(identifier, v->name)) {
|
|
||||||
- match = 0;
|
|
||||||
- list_for_each(pos1, list) {
|
|
||||||
- val = list_entry(pos1, struct myvalue, list);
|
|
||||||
- if (strcmp(val->value, v->data) == 0) {
|
|
||||||
- match = 1;
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- if (!match) {
|
|
||||||
- val = malloc(sizeof(struct myvalue));
|
|
||||||
- if (val == NULL)
|
|
||||||
- return -ENOMEM;
|
|
||||||
- val->value = v->data;
|
|
||||||
- list_add_tail(&val->list, list);
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- return 0;
|
|
||||||
+ list_for_each(pos, source) {
|
|
||||||
+ v = list_entry(pos, struct ucm_value, list);
|
|
||||||
+ if (check_identifier(identifier, v->name)) {
|
|
||||||
+ err = merge_value(list, v->data);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * \brief compare two identifiers
|
|
||||||
+ */
|
|
||||||
+static int identifier_cmp(const void *_a, const void *_b)
|
|
||||||
+{
|
|
||||||
+ const char * const *a = _a;
|
|
||||||
+ const char * const *b = _b;
|
|
||||||
+ return strcmp(*a, *b);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * \brief Get list of available identifiers
|
|
||||||
+ * \param list Returned list
|
|
||||||
+ * \param name Name of verb or modifier to query
|
|
||||||
+ * \return Number of list entries if success, otherwise a negative error code
|
|
||||||
+ */
|
|
||||||
+static int get_identifiers_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
+ const char **list[], char *name)
|
|
||||||
+{
|
|
||||||
+ struct use_case_verb *verb;
|
|
||||||
+ struct use_case_modifier *modifier;
|
|
||||||
+ struct use_case_device *device;
|
|
||||||
+ struct list_head mylist;
|
|
||||||
+ struct list_head *value_list;
|
|
||||||
+ char *str, **res;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ if (!name)
|
|
||||||
+ return -ENOENT;
|
|
||||||
+
|
|
||||||
+ str = strchr(name, '/');
|
|
||||||
+ if (str) {
|
|
||||||
+ *str = '\0';
|
|
||||||
+ verb = find_verb(uc_mgr, str + 1);
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ verb = uc_mgr->active_verb;
|
|
||||||
+ }
|
|
||||||
+ if (!verb)
|
|
||||||
+ return -ENOENT;
|
|
||||||
+
|
|
||||||
+ value_list = NULL;
|
|
||||||
+ modifier = find_modifier(uc_mgr, verb, name, 0);
|
|
||||||
+ if (modifier) {
|
|
||||||
+ value_list = &modifier->value_list;
|
|
||||||
+ } else {
|
|
||||||
+ device = find_device(uc_mgr, verb, name, 0);
|
|
||||||
+ if (device)
|
|
||||||
+ value_list = &device->value_list;
|
|
||||||
+ }
|
|
||||||
+ if (value_list == NULL)
|
|
||||||
+ return -ENOENT;
|
|
||||||
+
|
|
||||||
+ INIT_LIST_HEAD(&mylist);
|
|
||||||
+ err = add_identifiers(&mylist, &uc_mgr->value_list);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ goto __fail;
|
|
||||||
+ err = add_identifiers(&mylist, &verb->value_list);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ goto __fail;
|
|
||||||
+ err = add_identifiers(&mylist, value_list);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ goto __fail;
|
|
||||||
+ err = myvalue_to_str_list(&mylist, &res);
|
|
||||||
+ if (err > 0)
|
|
||||||
+ *list = (const char **)res;
|
|
||||||
+ else if (err == 0)
|
|
||||||
+ *list = NULL;
|
|
||||||
+__fail:
|
|
||||||
+ myvalue_list_free(&mylist);
|
|
||||||
+ if (err <= 0)
|
|
||||||
+ return err;
|
|
||||||
+ qsort(*list, err, sizeof(char *), identifier_cmp);
|
|
||||||
+ return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -1258,8 +1416,7 @@ static int get_value_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
const char **list[],
|
|
||||||
char *verbname)
|
|
||||||
{
|
|
||||||
- struct list_head mylist, *pos, *npos;
|
|
||||||
- struct myvalue *val;
|
|
||||||
+ struct list_head mylist, *pos;
|
|
||||||
struct use_case_verb *verb;
|
|
||||||
struct use_case_device *dev;
|
|
||||||
struct use_case_modifier *mod;
|
|
||||||
@@ -1292,26 +1449,13 @@ static int get_value_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
if (err < 0)
|
|
||||||
goto __fail;
|
|
||||||
}
|
|
||||||
- err = alloc_str_list(&mylist, 1, &res);
|
|
||||||
- if (err >= 0) {
|
|
||||||
+ err = myvalue_to_str_list(&mylist, &res);
|
|
||||||
+ if (err > 0)
|
|
||||||
*list = (const char **)res;
|
|
||||||
- list_for_each(pos, &mylist) {
|
|
||||||
- val = list_entry(pos, struct myvalue, list);
|
|
||||||
- *res = strdup(val->value);
|
|
||||||
- if (*res == NULL) {
|
|
||||||
- snd_use_case_free_list((const char **)res, err);
|
|
||||||
- err = -ENOMEM;
|
|
||||||
- goto __fail;
|
|
||||||
- }
|
|
||||||
- res++;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
+ else if (err == 0)
|
|
||||||
+ *list = NULL;
|
|
||||||
__fail:
|
|
||||||
- list_for_each_safe(pos, npos, &mylist) {
|
|
||||||
- val = list_entry(pos, struct myvalue, list);
|
|
||||||
- list_del(&val->list);
|
|
||||||
- free(val);
|
|
||||||
- }
|
|
||||||
+ myvalue_list_free(&mylist);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1381,21 +1525,23 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
} else {
|
|
||||||
str = NULL;
|
|
||||||
}
|
|
||||||
- if (check_identifier(identifier, "_devices"))
|
|
||||||
- err = get_device_list(uc_mgr, list, str);
|
|
||||||
+ if (check_identifier(identifier, "_devices"))
|
|
||||||
+ err = get_device_list(uc_mgr, list, str);
|
|
||||||
else if (check_identifier(identifier, "_modifiers"))
|
|
||||||
- err = get_modifier_list(uc_mgr, list, str);
|
|
||||||
- else if (check_identifier(identifier, "_supporteddevs"))
|
|
||||||
- err = get_supported_device_list(uc_mgr, list, str);
|
|
||||||
- else if (check_identifier(identifier, "_conflictingdevs"))
|
|
||||||
- err = get_conflicting_device_list(uc_mgr, list, str);
|
|
||||||
+ err = get_modifier_list(uc_mgr, list, str);
|
|
||||||
+ else if (check_identifier(identifier, "_identifiers"))
|
|
||||||
+ err = get_identifiers_list(uc_mgr, list, str);
|
|
||||||
+ else if (check_identifier(identifier, "_supporteddevs"))
|
|
||||||
+ err = get_supported_device_list(uc_mgr, list, str);
|
|
||||||
+ else if (check_identifier(identifier, "_conflictingdevs"))
|
|
||||||
+ err = get_conflicting_device_list(uc_mgr, list, str);
|
|
||||||
else if (identifier[0] == '_')
|
|
||||||
err = -ENOENT;
|
|
||||||
- else
|
|
||||||
- err = get_value_list(uc_mgr, identifier, list, str);
|
|
||||||
- if (str)
|
|
||||||
- free(str);
|
|
||||||
- }
|
|
||||||
+ else
|
|
||||||
+ err = get_value_list(uc_mgr, identifier, list, str);
|
|
||||||
+ if (str)
|
|
||||||
+ free(str);
|
|
||||||
+ }
|
|
||||||
__end:
|
|
||||||
pthread_mutex_unlock(&uc_mgr->mutex);
|
|
||||||
return err;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
31
0004-configure-add-embed-for-python3-config-python-3.8.patch
Normal file
31
0004-configure-add-embed-for-python3-config-python-3.8.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From 1654f38a29e635ce69a30c6c95ec1ca773ecee37 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
Date: Wed, 4 Mar 2020 11:27:12 +0100
|
||||||
|
Subject: [PATCH 4/5] configure: add --embed for python3-config (python 3.8)
|
||||||
|
|
||||||
|
Fixes: https://github.com/alsa-project/alsa-lib/issues/33
|
||||||
|
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
configure.ac | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 0f9fb01631f1..4b5ab6628bff 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -423,7 +423,10 @@ if test "$build_python" = "yes" -a "$build_mixer_pymodules" = "yes"; then
|
||||||
|
pythonlibs0=
|
||||||
|
pythoninc0=
|
||||||
|
if test "$build_python2" != "yes"; then
|
||||||
|
- pythonlibs0=$(python3-config --libs)
|
||||||
|
+ pythonlibs0=$(python3-config --libs --embed 2> /dev/null)
|
||||||
|
+ if test -z "$pythonlibs0"; then
|
||||||
|
+ pythonlibs0=$(python3-config --libs)
|
||||||
|
+ fi
|
||||||
|
pythoninc0=$(python3-config --includes)
|
||||||
|
fi
|
||||||
|
if test -z "$pythonlibs0"; then
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From 5ee5ef31b5ff3fb7c904054cb9cac7478a727f7c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sun, 1 Dec 2019 14:26:40 +0100
|
|
||||||
Subject: [PATCH 04/30] namehint: correct the @args check
|
|
||||||
|
|
||||||
BugLink: https://github.com/alsa-project/alsa-plugins/issues/3
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/control/namehint.c | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/control/namehint.c b/src/control/namehint.c
|
|
||||||
index 808df6b50733..4927ef973c32 100644
|
|
||||||
--- a/src/control/namehint.c
|
|
||||||
+++ b/src/control/namehint.c
|
|
||||||
@@ -348,6 +348,12 @@ static int try_config(snd_config_t *config,
|
|
||||||
goto __cleanup;
|
|
||||||
if (snd_config_search(res, "@args", &cfg) >= 0) {
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
+ /* skip the argument list */
|
|
||||||
+ snd_config_get_id(snd_config_iterator_entry(i), &str);
|
|
||||||
+ while (*str && *str >= '0' && *str <= '9') str++;
|
|
||||||
+ if (*str == '\0')
|
|
||||||
+ continue;
|
|
||||||
+ /* the argument definition must have the default */
|
|
||||||
if (snd_config_search(snd_config_iterator_entry(i),
|
|
||||||
"default", NULL) < 0) {
|
|
||||||
err = -EINVAL;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From 9ed3c65e1569a0ebbec9af1d04d739db9921e775 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tanu Kaskinen <tanuk@iki.fi>
|
||||||
|
Date: Fri, 13 Mar 2020 09:39:17 +0200
|
||||||
|
Subject: [PATCH 5/5] conf: USB-Audio: Add C-Media USB Headphone Set to the
|
||||||
|
IEC958 blacklist
|
||||||
|
|
||||||
|
Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/317
|
||||||
|
|
||||||
|
Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
|
||||||
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||||
|
---
|
||||||
|
src/conf/cards/USB-Audio.conf | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
|
||||||
|
index dd99c44d859b..89811086db1d 100644
|
||||||
|
--- a/src/conf/cards/USB-Audio.conf
|
||||||
|
+++ b/src/conf/cards/USB-Audio.conf
|
||||||
|
@@ -44,6 +44,7 @@ USB-Audio.pcm.iec958_device {
|
||||||
|
# The below don't have digital in/out, so prevent them from being opened.
|
||||||
|
"Andrea PureAudio USB-SA Headset" 999
|
||||||
|
"Blue Snowball" 999
|
||||||
|
+ "C-Media USB Headphone Set" 999
|
||||||
|
"HP Digital Stereo Headset" 999
|
||||||
|
"GN 9330" 999
|
||||||
|
"Logitech Speaker Lapdesk N700" 999
|
||||||
|
--
|
||||||
|
2.16.4
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From 6055f8a584296abfc0cec0439ceb708f0eddcc9d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sun, 1 Dec 2019 14:30:54 +0100
|
|
||||||
Subject: [PATCH 05/30] namehint: improve the previous patch (check the
|
|
||||||
returned value)
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/control/namehint.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/control/namehint.c b/src/control/namehint.c
|
|
||||||
index 4927ef973c32..60c48ae32877 100644
|
|
||||||
--- a/src/control/namehint.c
|
|
||||||
+++ b/src/control/namehint.c
|
|
||||||
@@ -349,7 +349,8 @@ static int try_config(snd_config_t *config,
|
|
||||||
if (snd_config_search(res, "@args", &cfg) >= 0) {
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
/* skip the argument list */
|
|
||||||
- snd_config_get_id(snd_config_iterator_entry(i), &str);
|
|
||||||
+ if (snd_config_get_id(snd_config_iterator_entry(i), &str) < 0)
|
|
||||||
+ continue;
|
|
||||||
while (*str && *str >= '0' && *str <= '9') str++;
|
|
||||||
if (*str == '\0')
|
|
||||||
continue;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
|||||||
From 4dddcf733d56a13f4d042fefa1fb6230c09f1f65 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Mon, 2 Dec 2019 11:56:30 +0100
|
|
||||||
Subject: [PATCH 06/30] ucm: docs - allow spaces in device names for JackHWMute
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 25 +++++++++++++------------
|
|
||||||
1 file changed, 13 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index 85c58ac0614a..e1f5802789ff 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -326,7 +326,7 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* - Valid values: "soft" (software attenuation)
|
|
||||||
* - EDIDFile
|
|
||||||
* - Path to EDID file for HDMI devices
|
|
||||||
- * - JackControl, JackDev, JackHWMute
|
|
||||||
+ * - JackControl, JackDev
|
|
||||||
* - Jack information for a device. The jack status can be reported via
|
|
||||||
* a kcontrol and/or via an input device. **JackControl** is the
|
|
||||||
* kcontrol name of the jack, and **JackDev** is the input device id of
|
|
||||||
@@ -334,17 +334,18 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* JackDev value should be "foo"). UCM configuration files should
|
|
||||||
* contain both JackControl and JackDev when possible, because
|
|
||||||
* applications are likely to support only one or the other.
|
|
||||||
- *
|
|
||||||
- * If **JackHWMute** is set, it indicates that when the jack is plugged
|
|
||||||
- * in, the hardware automatically mutes some other device(s). The
|
|
||||||
- * JackHWMute value is a space-separated list of device names (this
|
|
||||||
- * isn't compatible with device names with spaces in them, so don't use
|
|
||||||
- * such device names!). Note that JackHWMute should be used only when
|
|
||||||
- * the hardware enforces the automatic muting. If the hardware doesn't
|
|
||||||
- * enforce any muting, it may still be tempting to set JackHWMute to
|
|
||||||
- * trick upper software layers to e.g. automatically mute speakers when
|
|
||||||
- * headphones are plugged in, but that's application policy
|
|
||||||
- * configuration that doesn't belong to UCM configuration files.
|
|
||||||
+ * - JackHWMute
|
|
||||||
+ * If this value is set, it indicates that when the jack is plugged
|
|
||||||
+ * in, the hardware automatically mutes some other device(s). The
|
|
||||||
+ * value is a space-separated list of device names. If the device
|
|
||||||
+ * name contains space, it must be enclosed to ' or ", e.g.:
|
|
||||||
+ * JackHWMute "'Dock Headphone' Headphone"
|
|
||||||
+ * Note that JackHWMute should be used only when the hardware enforces
|
|
||||||
+ * the automatic muting. If the hardware doesn't enforce any muting, it
|
|
||||||
+ * may still be tempting to set JackHWMute to trick upper software layers
|
|
||||||
+ * to e.g. automatically mute speakers when headphones are plugged in,
|
|
||||||
+ * but that's application policy configuration that doesn't belong
|
|
||||||
+ * to UCM configuration files.
|
|
||||||
* - MinBufferLevel
|
|
||||||
* - This is used on platform where reported buffer level is not accurate.
|
|
||||||
* E.g. "512", which holds 512 samples in device buffer. Note: this will
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,48 +0,0 @@
|
|||||||
From 2a286ca9a8415571181ce58027686ec332a834e9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Mon, 2 Dec 2019 11:57:18 +0100
|
|
||||||
Subject: [PATCH 07/30] use-case: docs - add PlaybackMixerCopy and
|
|
||||||
CaptureMixerCopy
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 12 ++++++++++++
|
|
||||||
1 file changed, 12 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index e1f5802789ff..71fcc949a117 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -309,8 +309,14 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* - PlaybackMixerElem
|
|
||||||
* - mixer element playback identifier
|
|
||||||
* - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
+ * - PlaybackMixerCopy
|
|
||||||
+ * - additional mixer element playback identifier
|
|
||||||
+ * - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
+ * - those elements should copy the volume and switch settings
|
|
||||||
+ * - element identifiers are separated using the | character
|
|
||||||
* - PlaybackMasterElem
|
|
||||||
* - mixer element playback identifier for the master control
|
|
||||||
+ * - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
* - PlaybackMasterType
|
|
||||||
* - type of the master volume control
|
|
||||||
* - Valid values: "soft" (software attenuation)
|
|
||||||
@@ -319,8 +325,14 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* - CaptureMixerElem
|
|
||||||
* - mixer element capture identifier
|
|
||||||
* - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
+ * - CaptureMixerCopy
|
|
||||||
+ * - additional mixer element capture identifier
|
|
||||||
+ * - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
+ * - those elements should copy the volume and switch settings
|
|
||||||
+ * - element identifiers are separated using the | character
|
|
||||||
* - CaptureMasterElem
|
|
||||||
* - mixer element playback identifier for the master control
|
|
||||||
+ * - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
* - CaptureMasterType
|
|
||||||
* - type of the master volume control
|
|
||||||
* - Valid values: "soft" (software attenuation)
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
|||||||
From a0fc4447bb7c7f9a850a0a85f3a5a32c1509caf4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Tue, 3 Dec 2019 15:01:04 +0100
|
|
||||||
Subject: [PATCH 08/30] ucm: docs - add JackCTL, rearrange JackControl and
|
|
||||||
JackDev
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 22 ++++++++++++++--------
|
|
||||||
1 file changed, 14 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index 71fcc949a117..25998cb9bad5 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -338,14 +338,20 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* - Valid values: "soft" (software attenuation)
|
|
||||||
* - EDIDFile
|
|
||||||
* - Path to EDID file for HDMI devices
|
|
||||||
- * - JackControl, JackDev
|
|
||||||
- * - Jack information for a device. The jack status can be reported via
|
|
||||||
- * a kcontrol and/or via an input device. **JackControl** is the
|
|
||||||
- * kcontrol name of the jack, and **JackDev** is the input device id of
|
|
||||||
- * the jack (if the full input device path is /dev/input/by-id/foo, the
|
|
||||||
- * JackDev value should be "foo"). UCM configuration files should
|
|
||||||
- * contain both JackControl and JackDev when possible, because
|
|
||||||
- * applications are likely to support only one or the other.
|
|
||||||
+ * - JackCTL
|
|
||||||
+ * - jack control device name
|
|
||||||
+ * - JackControl
|
|
||||||
+ * - jack control identificator
|
|
||||||
+ * - can be parsed using snd_use_case_parse_ctl_elem_id()
|
|
||||||
+ * - UCM configuration files should contain both JackControl and JackDev
|
|
||||||
+ * when possible, because applications are likely to support only one
|
|
||||||
+ * or the other
|
|
||||||
+ * - JackDev
|
|
||||||
+ * - the input device id of the jack (if the full input device path is
|
|
||||||
+ * /dev/input/by-id/foo, the JackDev value should be "foo")
|
|
||||||
+ * - UCM configuration files should contain both JackControl and JackDev
|
|
||||||
+ * when possible, because applications are likely to support only one
|
|
||||||
+ * or the other
|
|
||||||
* - JackHWMute
|
|
||||||
* If this value is set, it indicates that when the jack is plugged
|
|
||||||
* in, the hardware automatically mutes some other device(s). The
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
|||||||
From e59034a0bec257cc7422a1e9436d936be8696a6f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
Date: Tue, 3 Dec 2019 18:27:39 +0100
|
|
||||||
Subject: [PATCH 09/30] ucm: Do not fail to parse configs on cards with an
|
|
||||||
empty CardComponents lists
|
|
||||||
|
|
||||||
Since the UCM profiles for all Bay- and Cherry-Trail SST cards have been
|
|
||||||
moved over to UCM2, parsing them fails with:
|
|
||||||
|
|
||||||
ALSA lib ucm_subs.c:220:(uc_mgr_get_substituted_value) variable '${CardComponents}' is not defined in this context!
|
|
||||||
|
|
||||||
This completely breaks audio support on all Bay- and Cherry-Trail devices.
|
|
||||||
|
|
||||||
This is caused by these non-SOF ASoC using cards having an empty
|
|
||||||
CardComponents list. Which in itself is fine, but is rejected by
|
|
||||||
the ucm_subs.c code. This commit changes the ucm_subs code to accept
|
|
||||||
an empty string as a valid value for CardComponents restoring audio
|
|
||||||
functionality on these boards.
|
|
||||||
|
|
||||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/ucm_subs.c | 20 ++++++++++++--------
|
|
||||||
1 file changed, 12 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/ucm_subs.c b/src/ucm/ucm_subs.c
|
|
||||||
index 00afa9e3de0e..90e395f0ab6f 100644
|
|
||||||
--- a/src/ucm/ucm_subs.c
|
|
||||||
+++ b/src/ucm/ucm_subs.c
|
|
||||||
@@ -25,6 +25,7 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ucm_local.h"
|
|
||||||
+#include <stdbool.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
@@ -145,10 +146,11 @@ static char *rval_sysfs(snd_use_case_mgr_t *uc_mgr ATTRIBUTE_UNUSED, const char
|
|
||||||
return strdup(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define MATCH_VARIABLE(name, id, fcn) \
|
|
||||||
+#define MATCH_VARIABLE(name, id, fcn, empty_ok) \
|
|
||||||
if (strncmp((name), (id), sizeof(id) - 1) == 0) { \
|
|
||||||
rval = fcn(uc_mgr); \
|
|
||||||
idsize = sizeof(id) - 1; \
|
|
||||||
+ allow_empty = (empty_ok); \
|
|
||||||
goto __rval; \
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -189,12 +191,14 @@ int uc_mgr_get_substituted_value(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
|
|
||||||
while (*value) {
|
|
||||||
if (*value == '$' && *(value+1) == '{') {
|
|
||||||
- MATCH_VARIABLE(value, "${ConfName}", rval_conf_name);
|
|
||||||
- MATCH_VARIABLE(value, "${CardId}", rval_card_id);
|
|
||||||
- MATCH_VARIABLE(value, "${CardDriver}", rval_card_driver);
|
|
||||||
- MATCH_VARIABLE(value, "${CardName}", rval_card_name);
|
|
||||||
- MATCH_VARIABLE(value, "${CardLongName}", rval_card_longname);
|
|
||||||
- MATCH_VARIABLE(value, "${CardComponents}", rval_card_components);
|
|
||||||
+ bool allow_empty = false;
|
|
||||||
+
|
|
||||||
+ MATCH_VARIABLE(value, "${ConfName}", rval_conf_name, false);
|
|
||||||
+ MATCH_VARIABLE(value, "${CardId}", rval_card_id, false);
|
|
||||||
+ MATCH_VARIABLE(value, "${CardDriver}", rval_card_driver, false);
|
|
||||||
+ MATCH_VARIABLE(value, "${CardName}", rval_card_name, false);
|
|
||||||
+ MATCH_VARIABLE(value, "${CardLongName}", rval_card_longname, false);
|
|
||||||
+ MATCH_VARIABLE(value, "${CardComponents}", rval_card_components, true);
|
|
||||||
MATCH_VARIABLE2(value, "${env:", rval_env);
|
|
||||||
MATCH_VARIABLE2(value, "${sys:", rval_sysfs);
|
|
||||||
err = -EINVAL;
|
|
||||||
@@ -208,7 +212,7 @@ int uc_mgr_get_substituted_value(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
}
|
|
||||||
goto __error;
|
|
||||||
__rval:
|
|
||||||
- if (rval == NULL || rval[0] == '\0') {
|
|
||||||
+ if (rval == NULL || (!allow_empty && rval[0] == '\0')) {
|
|
||||||
free(rval);
|
|
||||||
strncpy(r, value, idsize);
|
|
||||||
r[idsize] = '\0';
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From 8e2c70add782f997f7c269ed3f722888e56ff024 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
||||||
Date: Tue, 3 Dec 2019 18:56:40 +0100
|
|
||||||
Subject: [PATCH 10/30] src/ucm/main.c: fix build without mixer
|
|
||||||
|
|
||||||
Commit 4ce38a5ff466d18039b2606938f866ea3a6c9f3c breaks the build without
|
|
||||||
mixer on:
|
|
||||||
|
|
||||||
CCLD libasound.la
|
|
||||||
/home/buildroot/autobuild/instance-1/output-1/host/lib/gcc/xtensa-buildroot-linux-uclibc/8.3.0/../../../../xtensa-buildroot-linux-uclibc/bin/ld: ucm/.libs/libucm.a(main.o): in function `snd_use_case_set':
|
|
||||||
main.c:(.text+0x185c): undefined reference to `snd_mixer_selem_id_parse'
|
|
||||||
|
|
||||||
Fixes: http://autobuild.buildroot.org/results/4d91c9f82a2a61c50c457a851073b85cc09ea345
|
|
||||||
|
|
||||||
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/main.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/main.c b/src/ucm/main.c
|
|
||||||
index d2078a2381d3..61922f10b7c7 100644
|
|
||||||
--- a/src/ucm/main.c
|
|
||||||
+++ b/src/ucm/main.c
|
|
||||||
@@ -2115,8 +2115,10 @@ int snd_use_case_parse_selem_id(snd_mixer_selem_id_t *dst,
|
|
||||||
const char *ucm_id,
|
|
||||||
const char *value)
|
|
||||||
{
|
|
||||||
+#ifdef BUILD_MIXER
|
|
||||||
if (strcmp(ucm_id, "PlaybackMixerId") == 0 ||
|
|
||||||
strcmp(ucm_id, "CaptureMixerId") == 0)
|
|
||||||
return snd_mixer_selem_id_parse(dst, value);
|
|
||||||
+#endif
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
From ad8527d81b09c4d0edd054b5b1468ce1c50b23cb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Wed, 4 Dec 2019 09:49:40 +0100
|
|
||||||
Subject: [PATCH 11/30] alsa.m4: another try to fix the libatopology detection
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
utils/alsa.m4 | 11 +++++++++--
|
|
||||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/utils/alsa.m4 b/utils/alsa.m4
|
|
||||||
index 4c457f0d4e1d..320e4336a925 100644
|
|
||||||
--- a/utils/alsa.m4
|
|
||||||
+++ b/utils/alsa.m4
|
|
||||||
@@ -22,6 +22,7 @@ alsa_save_CFLAGS="$CFLAGS"
|
|
||||||
alsa_save_LDFLAGS="$LDFLAGS"
|
|
||||||
alsa_save_LIBS="$LIBS"
|
|
||||||
alsa_found=yes
|
|
||||||
+alsa_topology_found=no
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Get the cflags and libraries for alsa
|
|
||||||
@@ -158,11 +159,17 @@ AC_CHECK_LIB([asound], [snd_ctl_open],,
|
|
||||||
alsa_found=no]
|
|
||||||
)
|
|
||||||
if test "x$enable_atopology" = "xyes"; then
|
|
||||||
+alsa_topology_found=yes
|
|
||||||
AC_CHECK_LIB([atopology], [snd_tplg_new],,
|
|
||||||
[ifelse([$3], , [AC_MSG_ERROR(No linkable libatopology was found.)])
|
|
||||||
- alsa_found=no]
|
|
||||||
+ alsa_topology_found=no,
|
|
||||||
+]
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
+else
|
|
||||||
+if test "x$enable_atopology" = "xyes"; then
|
|
||||||
+ alsa_topology_found=yes
|
|
||||||
+fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$alsa_found" = "xyes" ; then
|
|
||||||
@@ -183,7 +190,7 @@ fi
|
|
||||||
|
|
||||||
dnl add the alsa topology library; must be at the end
|
|
||||||
AC_MSG_CHECKING(for ALSA topology LDFLAGS)
|
|
||||||
-if test "x$enable_atopology" = "xyes"; then
|
|
||||||
+if test "x$alsa_topology_found" = "xyes"; then
|
|
||||||
ALSA_TOPOLOGY_LIBS="$ALSA_TOPOLOGY_LIBS -latopology"
|
|
||||||
fi
|
|
||||||
AC_MSG_RESULT($ALSA_TOPOLOGY_LIBS)
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
From 555a5dbdabc5ed3be1ca81865abdb997bc3a6082 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Thu, 5 Dec 2019 16:59:05 +0100
|
|
||||||
Subject: [PATCH 12/30] ucm: docs - add Mic/DigitalMic and multiple devices
|
|
||||||
comments
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 8 ++++++++
|
|
||||||
1 file changed, 8 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index 25998cb9bad5..1736da25b649 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -114,10 +114,18 @@ extern "C" {
|
|
||||||
*
|
|
||||||
* Physical system devices the render and capture audio. Devices can be OR'ed
|
|
||||||
* together to support audio on simultaneous devices.
|
|
||||||
+ *
|
|
||||||
+ * If multiple devices with the same name exists, the number suffixes should
|
|
||||||
+ * be added to these names like HDMI1,HDMI2,HDMI3 etc. No number gaps are
|
|
||||||
+ * allowed. The names with numbers must be continuous.
|
|
||||||
+ *
|
|
||||||
+ * The preference of the devices is determined by the priority value.
|
|
||||||
*/
|
|
||||||
#define SND_USE_CASE_DEV_NONE "None" /**< None Device */
|
|
||||||
#define SND_USE_CASE_DEV_SPEAKER "Speaker" /**< Speaker Device */
|
|
||||||
#define SND_USE_CASE_DEV_LINE "Line" /**< Line Device */
|
|
||||||
+#define SND_USE_CASE_DEV_MIC "Mic" /**< Integrated Analog Microphone */
|
|
||||||
+#define SND_USE_CASE_DEV_DIGITAL_MIC "DigitalMic" /**< Integrated Digital Microphone */
|
|
||||||
#define SND_USE_CASE_DEV_HEADPHONES "Headphones" /**< Headphones Device */
|
|
||||||
#define SND_USE_CASE_DEV_HEADSET "Headset" /**< Headset Device */
|
|
||||||
#define SND_USE_CASE_DEV_HANDSET "Handset" /**< Handset Device */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From 1ad660ddeecb2a364f1ca62aa60f256f7029cfdc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Thu, 5 Dec 2019 17:01:31 +0100
|
|
||||||
Subject: [PATCH 13/30] ucm: docs - remove DigitalMic, it does not have sense
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index 1736da25b649..214a2a4c4691 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -124,8 +124,7 @@ extern "C" {
|
|
||||||
#define SND_USE_CASE_DEV_NONE "None" /**< None Device */
|
|
||||||
#define SND_USE_CASE_DEV_SPEAKER "Speaker" /**< Speaker Device */
|
|
||||||
#define SND_USE_CASE_DEV_LINE "Line" /**< Line Device */
|
|
||||||
-#define SND_USE_CASE_DEV_MIC "Mic" /**< Integrated Analog Microphone */
|
|
||||||
-#define SND_USE_CASE_DEV_DIGITAL_MIC "DigitalMic" /**< Integrated Digital Microphone */
|
|
||||||
+#define SND_USE_CASE_DEV_MIC "Mic" /**< Integrated Microphone */
|
|
||||||
#define SND_USE_CASE_DEV_HEADPHONES "Headphones" /**< Headphones Device */
|
|
||||||
#define SND_USE_CASE_DEV_HEADSET "Headset" /**< Headset Device */
|
|
||||||
#define SND_USE_CASE_DEV_HANDSET "Handset" /**< Handset Device */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From 5473c5d677915b88d5c93d5bcc6cd16bb6a40342 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Thu, 5 Dec 2019 17:19:06 +0100
|
|
||||||
Subject: [PATCH 14/30] ucm: docs - change the Mic description to simple
|
|
||||||
Microphone Device
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index 214a2a4c4691..b04f7b9d38de 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -124,7 +124,7 @@ extern "C" {
|
|
||||||
#define SND_USE_CASE_DEV_NONE "None" /**< None Device */
|
|
||||||
#define SND_USE_CASE_DEV_SPEAKER "Speaker" /**< Speaker Device */
|
|
||||||
#define SND_USE_CASE_DEV_LINE "Line" /**< Line Device */
|
|
||||||
-#define SND_USE_CASE_DEV_MIC "Mic" /**< Integrated Microphone */
|
|
||||||
+#define SND_USE_CASE_DEV_MIC "Mic" /**< Microphone Device */
|
|
||||||
#define SND_USE_CASE_DEV_HEADPHONES "Headphones" /**< Headphones Device */
|
|
||||||
#define SND_USE_CASE_DEV_HEADSET "Headset" /**< Headset Device */
|
|
||||||
#define SND_USE_CASE_DEV_HANDSET "Handset" /**< Handset Device */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From ca67e823833213e140a09ce43b6399b7676616df Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 6 Dec 2019 11:11:54 +0100
|
|
||||||
Subject: [PATCH 15/30] ucm: docs - add note about the sequences and device
|
|
||||||
split
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index b04f7b9d38de..2efcb4d8fdc3 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -119,6 +119,11 @@ extern "C" {
|
|
||||||
* be added to these names like HDMI1,HDMI2,HDMI3 etc. No number gaps are
|
|
||||||
* allowed. The names with numbers must be continuous.
|
|
||||||
*
|
|
||||||
+ * If EnableSequence/DisableSequence controls independent paths in the hardware
|
|
||||||
+ * it is also recommended to split playback and capture UCM devices and use
|
|
||||||
+ * the number suffixes. Example use case: Use the integrated microphone
|
|
||||||
+ * in the laptop instead the microphone in headphones.
|
|
||||||
+ *
|
|
||||||
* The preference of the devices is determined by the priority value.
|
|
||||||
*/
|
|
||||||
#define SND_USE_CASE_DEV_NONE "None" /**< None Device */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,69 +0,0 @@
|
|||||||
From f828dfe549fbab0a920768c63ebd3478272954eb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Tue, 10 Dec 2019 11:48:06 +0100
|
|
||||||
Subject: [PATCH 16/30] ucm: docs - remove MixerCopy values, add Priority for
|
|
||||||
verb, improve priority docs
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/use-case.h | 18 ++++++------------
|
|
||||||
1 file changed, 6 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/use-case.h b/include/use-case.h
|
|
||||||
index 2efcb4d8fdc3..134303afaa18 100644
|
|
||||||
--- a/include/use-case.h
|
|
||||||
+++ b/include/use-case.h
|
|
||||||
@@ -274,6 +274,10 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* Recommended names for values:
|
|
||||||
* - TQ
|
|
||||||
* - Tone Quality
|
|
||||||
+ * - Priority
|
|
||||||
+ * - priority value (1-10000), higher value means higher priority
|
|
||||||
+ * - valid only for verbs
|
|
||||||
+ * - for devices - PlaybackPriority and CapturePriority
|
|
||||||
* - PlaybackPCM
|
|
||||||
* - full PCM playback device name
|
|
||||||
* - PlaybackPCMIsDummy
|
|
||||||
@@ -301,7 +305,7 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* - playback control switch identifier string
|
|
||||||
* - can be parsed using snd_use_case_parse_ctl_elem_id()
|
|
||||||
* - PlaybackPriority
|
|
||||||
- * - priority value (1-10000), default value is 100, higher value means lower priority
|
|
||||||
+ * - priority value (1-10000), higher value means higher priority
|
|
||||||
* - CaptureRate
|
|
||||||
* - capture device sample rate
|
|
||||||
* - CaptureChannels
|
|
||||||
@@ -315,17 +319,12 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* - capture control switch identifier string
|
|
||||||
* - can be parsed using snd_use_case_parse_ctl_elem_id()
|
|
||||||
* - CapturePriority
|
|
||||||
- * - priority value (1-10000), default value is 100, higher value means lower priority
|
|
||||||
+ * - priority value (1-10000), higher value means higher priority
|
|
||||||
* - PlaybackMixer
|
|
||||||
* - name of playback mixer
|
|
||||||
* - PlaybackMixerElem
|
|
||||||
* - mixer element playback identifier
|
|
||||||
* - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
- * - PlaybackMixerCopy
|
|
||||||
- * - additional mixer element playback identifier
|
|
||||||
- * - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
- * - those elements should copy the volume and switch settings
|
|
||||||
- * - element identifiers are separated using the | character
|
|
||||||
* - PlaybackMasterElem
|
|
||||||
* - mixer element playback identifier for the master control
|
|
||||||
* - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
@@ -337,11 +336,6 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
* - CaptureMixerElem
|
|
||||||
* - mixer element capture identifier
|
|
||||||
* - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
- * - CaptureMixerCopy
|
|
||||||
- * - additional mixer element capture identifier
|
|
||||||
- * - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
- * - those elements should copy the volume and switch settings
|
|
||||||
- * - element identifiers are separated using the | character
|
|
||||||
* - CaptureMasterElem
|
|
||||||
* - mixer element playback identifier for the master control
|
|
||||||
* - can be parsed using snd_use_case_parse_selem_id()
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From 1744159180ac94a72036d7232e674c58cedee70a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Libin Yang <libin.yang@linux.intel.com>
|
|
||||||
Date: Wed, 11 Dec 2019 14:07:19 +0800
|
|
||||||
Subject: [PATCH 17/30] ucm: setup conf_format after getting
|
|
||||||
ALSA_CONFIG_UCM_VAR successfully
|
|
||||||
|
|
||||||
Set the conf_format to 1 after getting ALSA_CONFIG_UCM_VAR successfully.
|
|
||||||
Otherwise, the conf_format is not set in this scenario.
|
|
||||||
|
|
||||||
Signed-off-by: Libin Yang <libin.yang@linux.intel.com>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index ba5002779f56..d61124a343e1 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -89,6 +89,8 @@ static void configuration_filename(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
env = getenv(ALSA_CONFIG_UCM2_VAR);
|
|
||||||
if (env == NULL) {
|
|
||||||
env = getenv(ALSA_CONFIG_UCM_VAR);
|
|
||||||
+ if (env)
|
|
||||||
+ uc_mgr->conf_format = 1;
|
|
||||||
} else {
|
|
||||||
uc_mgr->conf_format = 2;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,87 +0,0 @@
|
|||||||
From 9980e18c3c99da42a90a98b140a0ffe7d0f92cd3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Thu, 12 Dec 2019 18:42:33 +0100
|
|
||||||
Subject: [PATCH 18/30] alsa-lib: fix the array parser (unique compound keys)
|
|
||||||
|
|
||||||
The code from the old import may merge arrays wrongly and
|
|
||||||
the result is a compound with same keys like:
|
|
||||||
|
|
||||||
Input:
|
|
||||||
|
|
||||||
lines [
|
|
||||||
"SSP0.OUT, , BUF1.3"
|
|
||||||
]
|
|
||||||
lines [
|
|
||||||
"BUF2.0, , SSP0.IN"
|
|
||||||
]
|
|
||||||
|
|
||||||
Parsed contents:
|
|
||||||
|
|
||||||
lines {
|
|
||||||
0 'SSP0.OUT, , BUF1.3'
|
|
||||||
0 'BUF2.0, , SSP0.IN'
|
|
||||||
}
|
|
||||||
|
|
||||||
Proper parsed contents (create+merge mode):
|
|
||||||
|
|
||||||
lines {
|
|
||||||
0 'SSP0.OUT, , BUF1.3'
|
|
||||||
1 'BUF2.0, , SSP0.IN'
|
|
||||||
}
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/conf.c | 20 +++++++++++++++++---
|
|
||||||
1 file changed, 17 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/conf.c b/src/conf.c
|
|
||||||
index e430650430d1..3e753b266b8d 100644
|
|
||||||
--- a/src/conf.c
|
|
||||||
+++ b/src/conf.c
|
|
||||||
@@ -1226,7 +1226,7 @@ static int parse_value(snd_config_t **_n, snd_config_t *parent, input_t *input,
|
|
||||||
static int parse_defs(snd_config_t *parent, input_t *input, int skip, int override);
|
|
||||||
static int parse_array_defs(snd_config_t *farther, input_t *input, int skip, int override);
|
|
||||||
|
|
||||||
-static int parse_array_def(snd_config_t *parent, input_t *input, int idx, int skip, int override)
|
|
||||||
+static int parse_array_def(snd_config_t *parent, input_t *input, int *idx, int skip, int override)
|
|
||||||
{
|
|
||||||
char *id = NULL;
|
|
||||||
int c;
|
|
||||||
@@ -1234,8 +1234,21 @@ static int parse_array_def(snd_config_t *parent, input_t *input, int idx, int sk
|
|
||||||
snd_config_t *n = NULL;
|
|
||||||
|
|
||||||
if (!skip) {
|
|
||||||
+ snd_config_t *g;
|
|
||||||
char static_id[12];
|
|
||||||
- snprintf(static_id, sizeof(static_id), "%i", idx);
|
|
||||||
+ while (1) {
|
|
||||||
+ snprintf(static_id, sizeof(static_id), "%i", *idx);
|
|
||||||
+ if (_snd_config_search(parent, static_id, -1, &g) == 0) {
|
|
||||||
+ if (override) {
|
|
||||||
+ snd_config_delete(n);
|
|
||||||
+ } else {
|
|
||||||
+ /* merge */
|
|
||||||
+ (*idx)++;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
id = strdup(static_id);
|
|
||||||
if (id == NULL)
|
|
||||||
return -ENOMEM;
|
|
||||||
@@ -1306,9 +1319,10 @@ static int parse_array_defs(snd_config_t *parent, input_t *input, int skip, int
|
|
||||||
unget_char(c, input);
|
|
||||||
if (c == ']')
|
|
||||||
return 0;
|
|
||||||
- err = parse_array_def(parent, input, idx++, skip, override);
|
|
||||||
+ err = parse_array_def(parent, input, &idx, skip, override);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
+ idx++;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From 075ee165e647a6b434f63ca578f2f8faff2a55f6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 16:09:35 +0100
|
|
||||||
Subject: [PATCH 19/30] topology: remove vendor_fd/name from snd_tplg structure
|
|
||||||
- not used
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/tplg_local.h | 5 -----
|
|
||||||
1 file changed, 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index c32267d29510..22648fa51f9b 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -60,11 +60,6 @@ typedef enum _snd_pcm_rates {
|
|
||||||
} snd_pcm_rates_t;
|
|
||||||
|
|
||||||
struct snd_tplg {
|
|
||||||
-
|
|
||||||
- /* opaque vendor data */
|
|
||||||
- int vendor_fd;
|
|
||||||
- char *vendor_name;
|
|
||||||
-
|
|
||||||
/* out file */
|
|
||||||
int out_fd;
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,319 +0,0 @@
|
|||||||
From ce74829db630a49569c79aea4aeb288fdd458dd8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 17:01:03 +0100
|
|
||||||
Subject: [PATCH 20/30] topology: file position and size cleanups
|
|
||||||
|
|
||||||
- try to use size_t/ssize_t
|
|
||||||
- track the position in own variable, do not use lseek
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 121 ++++++++++++++++++++++------------------------
|
|
||||||
src/topology/tplg_local.h | 3 +-
|
|
||||||
2 files changed, 60 insertions(+), 64 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index 5ae3ae89dac7..4e6cbbb08a1a 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -23,28 +23,41 @@
|
|
||||||
/* verbose output detailing each object size and file position */
|
|
||||||
static void verbose(snd_tplg_t *tplg, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
- int offset;
|
|
||||||
va_list va;
|
|
||||||
|
|
||||||
if (!tplg->verbose)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- offset = lseek(tplg->out_fd, 0, SEEK_CUR);
|
|
||||||
-
|
|
||||||
va_start(va, fmt);
|
|
||||||
- fprintf(stdout, "0x%6.6x/%6.6d -", offset, offset);
|
|
||||||
+ fprintf(stdout, "0x%6.6zx/%6.6zd -", tplg->out_pos, tplg->out_pos);
|
|
||||||
vfprintf(stdout, fmt, va);
|
|
||||||
va_end(va);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* write a block, track the position */
|
|
||||||
+static ssize_t twrite(snd_tplg_t *tplg, void *data, size_t data_size)
|
|
||||||
+{
|
|
||||||
+ ssize_t r = write(tplg->out_fd, data, data_size);
|
|
||||||
+ if (r != (ssize_t)data_size) {
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ SNDERR("error: unable to write: %s", strerror(errno));
|
|
||||||
+ return -errno;
|
|
||||||
+ }
|
|
||||||
+ tplg->out_pos += r;
|
|
||||||
+ SNDERR("error: unable to write (partial)");
|
|
||||||
+ return -EIO;
|
|
||||||
+ }
|
|
||||||
+ tplg->out_pos += r;
|
|
||||||
+ return r;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* write out block header to output file */
|
|
||||||
-static int write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
- unsigned int vendor_type, unsigned int version, unsigned int index,
|
|
||||||
- size_t payload_size, int count)
|
|
||||||
+static ssize_t write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
+ unsigned int vendor_type,
|
|
||||||
+ unsigned int version, unsigned int index,
|
|
||||||
+ size_t payload_size, int count)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_hdr hdr;
|
|
||||||
- size_t bytes;
|
|
||||||
- int offset = lseek(tplg->out_fd, 0, SEEK_CUR);
|
|
||||||
|
|
||||||
memset(&hdr, 0, sizeof(hdr));
|
|
||||||
hdr.magic = SND_SOC_TPLG_MAGIC;
|
|
||||||
@@ -58,13 +71,13 @@ static int write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
hdr.count = count;
|
|
||||||
|
|
||||||
/* make sure file offset is aligned with the calculated HDR offset */
|
|
||||||
- if ((unsigned int)offset != tplg->next_hdr_pos) {
|
|
||||||
- SNDERR("error: New header is at offset 0x%x but file"
|
|
||||||
- " offset 0x%x is %s by %d bytes\n",
|
|
||||||
- tplg->next_hdr_pos, offset,
|
|
||||||
- (unsigned int)offset > tplg->next_hdr_pos ? "ahead" : "behind",
|
|
||||||
- abs(offset - tplg->next_hdr_pos));
|
|
||||||
- exit(-EINVAL);
|
|
||||||
+ if (tplg->out_pos != tplg->next_hdr_pos) {
|
|
||||||
+ SNDERR("error: New header is at offset 0x%zx but file"
|
|
||||||
+ " offset 0x%zx is %s by %ld bytes\n",
|
|
||||||
+ tplg->next_hdr_pos, tplg->out_pos,
|
|
||||||
+ tplg->out_pos > tplg->next_hdr_pos ? "ahead" : "behind",
|
|
||||||
+ labs(tplg->out_pos - tplg->next_hdr_pos));
|
|
||||||
+ return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose(tplg, " header index %d type %d count %d size 0x%lx/%ld vendor %d "
|
|
||||||
@@ -74,22 +87,16 @@ static int write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
|
|
||||||
tplg->next_hdr_pos += hdr.payload_size + sizeof(hdr);
|
|
||||||
|
|
||||||
- bytes = write(tplg->out_fd, &hdr, sizeof(hdr));
|
|
||||||
- if (bytes != sizeof(hdr)) {
|
|
||||||
- SNDERR("error: can't write section header %lu\n",
|
|
||||||
- (long unsigned int)bytes);
|
|
||||||
- return bytes;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return bytes;
|
|
||||||
+ return twrite(tplg, &hdr, sizeof(hdr));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
- struct list_head *base, int size, int tplg_type, const char *obj_name)
|
|
||||||
+ struct list_head *base, size_t size, int tplg_type, const char *obj_name)
|
|
||||||
{
|
|
||||||
struct list_head *pos, *sub_pos, *sub_base;
|
|
||||||
struct tplg_elem *elem, *elem_next;
|
|
||||||
- int ret, wsize = 0, total_size = 0, count = 0, block_size = 0;
|
|
||||||
+ size_t total_size = 0, count = 0, block_size = 0;
|
|
||||||
+ ssize_t ret, wsize;
|
|
||||||
|
|
||||||
sub_base = base;
|
|
||||||
list_for_each(pos, base) {
|
|
||||||
@@ -129,12 +136,9 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
elem->route->control,
|
|
||||||
elem->route->sink, elem->size);
|
|
||||||
|
|
||||||
- wsize = write(tplg->out_fd, elem->obj, elem->size);
|
|
||||||
- if (wsize < 0) {
|
|
||||||
- SNDERR("error: failed to write %s %d\n",
|
|
||||||
- obj_name, ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
+ wsize = twrite(tplg, elem->obj, elem->size);
|
|
||||||
+ if (wsize < 0)
|
|
||||||
+ return size;
|
|
||||||
|
|
||||||
total_size += wsize;
|
|
||||||
/* get to the end of sub list */
|
|
||||||
@@ -151,7 +155,7 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
/* make sure we have written the correct size */
|
|
||||||
if (total_size != size) {
|
|
||||||
- SNDERR("error: size mismatch. Expected %d wrote %d\n",
|
|
||||||
+ SNDERR("error: size mismatch. Expected %zu wrote %zu\n",
|
|
||||||
size, total_size);
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
@@ -179,8 +183,7 @@ static int calc_block_size(struct list_head *base)
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int write_block(snd_tplg_t *tplg, struct list_head *base,
|
|
||||||
- int type)
|
|
||||||
+static int write_block(snd_tplg_t *tplg, struct list_head *base, int type)
|
|
||||||
{
|
|
||||||
int size;
|
|
||||||
|
|
||||||
@@ -231,44 +234,36 @@ static int write_block(snd_tplg_t *tplg, struct list_head *base,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* write the manifest including its private data */
|
|
||||||
-static int write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
+static ssize_t write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
- int ret;
|
|
||||||
+ ssize_t ret;
|
|
||||||
|
|
||||||
/* write the header for this block */
|
|
||||||
ret = write_block_header(tplg, SND_SOC_TPLG_TYPE_MANIFEST, 0,
|
|
||||||
tplg->version, 0,
|
|
||||||
sizeof(tplg->manifest) + tplg->manifest.priv.size, 1);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("error: failed to write manifest block %d\n", ret);
|
|
||||||
+ SNDERR("error: failed to write manifest block\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
verbose(tplg, "manifest : write %d bytes\n", sizeof(tplg->manifest));
|
|
||||||
- ret = write(tplg->out_fd, &tplg->manifest, sizeof(tplg->manifest));
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("error: failed to write manifest %d\n", ret);
|
|
||||||
- return ret;
|
|
||||||
+ ret = twrite(tplg, &tplg->manifest, sizeof(tplg->manifest));
|
|
||||||
+ if (ret >= 0) {
|
|
||||||
+ verbose(tplg, "manifest : write %d priv bytes\n", tplg->manifest.priv.size);
|
|
||||||
+ ret = twrite(tplg, tplg->manifest_pdata, tplg->manifest.priv.size);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- verbose(tplg, "manifest : write %d priv bytes\n", tplg->manifest.priv.size);
|
|
||||||
- ret = write(tplg->out_fd, tplg->manifest_pdata, tplg->manifest.priv.size);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("error: failed to write manifest priv data %d\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
+ return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
- int ret;
|
|
||||||
+ ssize_t ret;
|
|
||||||
|
|
||||||
/* write manifest */
|
|
||||||
ret = write_manifest_data(tplg);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write manifest %d\n", ret);
|
|
||||||
+ SNDERR("failed to write manifest %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -276,7 +271,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->mixer_list,
|
|
||||||
SND_TPLG_TYPE_MIXER);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write control elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write control elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -284,7 +279,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->enum_list,
|
|
||||||
SND_TPLG_TYPE_ENUM);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write control elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write control elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -292,7 +287,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->bytes_ext_list,
|
|
||||||
SND_TPLG_TYPE_BYTES);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write control elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write control elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -300,7 +295,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->widget_list,
|
|
||||||
SND_TPLG_TYPE_DAPM_WIDGET);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write widget elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write widget elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -308,7 +303,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->pcm_list,
|
|
||||||
SND_TPLG_TYPE_PCM);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write pcm elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write pcm elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -316,7 +311,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->dai_list,
|
|
||||||
SND_TPLG_TYPE_DAI);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write physical dai elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write physical dai elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -324,7 +319,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->be_list,
|
|
||||||
SND_TPLG_TYPE_BE);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write be elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write be elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -332,7 +327,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->cc_list,
|
|
||||||
SND_TPLG_TYPE_CC);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write cc elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write cc elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -340,7 +335,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->route_list,
|
|
||||||
SND_TPLG_TYPE_DAPM_GRAPH);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write graph elems %d\n", ret);
|
|
||||||
+ SNDERR("failed to write graph elems %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -348,7 +343,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_block(tplg, &tplg->pdata_list,
|
|
||||||
SND_TPLG_TYPE_DATA);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write private data %d\n", ret);
|
|
||||||
+ SNDERR("failed to write private data %zd\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 22648fa51f9b..7b8abcdefbcf 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -62,12 +62,13 @@ typedef enum _snd_pcm_rates {
|
|
||||||
struct snd_tplg {
|
|
||||||
/* out file */
|
|
||||||
int out_fd;
|
|
||||||
+ size_t out_pos;
|
|
||||||
|
|
||||||
int verbose;
|
|
||||||
unsigned int version;
|
|
||||||
|
|
||||||
/* runtime state */
|
|
||||||
- unsigned int next_hdr_pos;
|
|
||||||
+ size_t next_hdr_pos;
|
|
||||||
int index;
|
|
||||||
int channel_idx;
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,179 +0,0 @@
|
|||||||
From 012bd3b28c0d2744db482caca630d5b0a19e4dab Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 18:24:55 +0100
|
|
||||||
Subject: [PATCH 21/30] topology: use an array describing blocks for the main
|
|
||||||
build loop
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 146 +++++++++++++++++++++++--------------------------
|
|
||||||
1 file changed, 67 insertions(+), 79 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index 4e6cbbb08a1a..ec1af42ddf9b 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -258,93 +258,81 @@ static ssize_t write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
|
|
||||||
int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
+ struct wtable {
|
|
||||||
+ const char *name;
|
|
||||||
+ struct list_head *list;
|
|
||||||
+ int type;
|
|
||||||
+ } *wptr, wtable[] = {
|
|
||||||
+ {
|
|
||||||
+ .name = "control mixer elements",
|
|
||||||
+ .list = &tplg->mixer_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_MIXER,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "control enum elements",
|
|
||||||
+ .list = &tplg->enum_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_ENUM,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "control extended (bytes) elements",
|
|
||||||
+ .list = &tplg->bytes_ext_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_BYTES,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "dapm widget elements",
|
|
||||||
+ .list = &tplg->widget_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "pcm elements",
|
|
||||||
+ .list = &tplg->pcm_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_PCM,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "physical dai elements",
|
|
||||||
+ .list = &tplg->dai_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_DAI,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "be elements",
|
|
||||||
+ .list = &tplg->be_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_BE,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "cc elements",
|
|
||||||
+ .list = &tplg->cc_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_CC,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "route (dapm graph) elements",
|
|
||||||
+ .list = &tplg->route_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "private data elements",
|
|
||||||
+ .list = &tplg->pdata_list,
|
|
||||||
+ .type = SND_TPLG_TYPE_DATA,
|
|
||||||
+ },
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
ssize_t ret;
|
|
||||||
+ unsigned int index;
|
|
||||||
|
|
||||||
/* write manifest */
|
|
||||||
ret = write_manifest_data(tplg);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write manifest %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write mixer elems. */
|
|
||||||
- ret = write_block(tplg, &tplg->mixer_list,
|
|
||||||
- SND_TPLG_TYPE_MIXER);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write control elems %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write enum control elems. */
|
|
||||||
- ret = write_block(tplg, &tplg->enum_list,
|
|
||||||
- SND_TPLG_TYPE_ENUM);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write control elems %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write bytes extended control elems. */
|
|
||||||
- ret = write_block(tplg, &tplg->bytes_ext_list,
|
|
||||||
- SND_TPLG_TYPE_BYTES);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write control elems %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write widget elems */
|
|
||||||
- ret = write_block(tplg, &tplg->widget_list,
|
|
||||||
- SND_TPLG_TYPE_DAPM_WIDGET);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write widget elems %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write pcm elems */
|
|
||||||
- ret = write_block(tplg, &tplg->pcm_list,
|
|
||||||
- SND_TPLG_TYPE_PCM);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write pcm elems %zd\n", ret);
|
|
||||||
- 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 %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write be elems */
|
|
||||||
- ret = write_block(tplg, &tplg->be_list,
|
|
||||||
- SND_TPLG_TYPE_BE);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write be elems %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write cc elems */
|
|
||||||
- ret = write_block(tplg, &tplg->cc_list,
|
|
||||||
- SND_TPLG_TYPE_CC);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write cc elems %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* write route elems */
|
|
||||||
- ret = write_block(tplg, &tplg->route_list,
|
|
||||||
- SND_TPLG_TYPE_DAPM_GRAPH);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write graph elems %zd\n", ret);
|
|
||||||
+ SNDERR("failed to write manifest %d\n", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* write private data */
|
|
||||||
- ret = write_block(tplg, &tplg->pdata_list,
|
|
||||||
- SND_TPLG_TYPE_DATA);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- SNDERR("failed to write private data %zd\n", ret);
|
|
||||||
- return ret;
|
|
||||||
+ /* write all blocks */
|
|
||||||
+ for (index = 0; index < ARRAY_SIZE(wtable); index++) {
|
|
||||||
+ wptr = &wtable[index];
|
|
||||||
+ ret = write_block(tplg, wptr->list, wptr->type);
|
|
||||||
+ if (ret < 0) {
|
|
||||||
+ SNDERR("failed to write %s: %s\n", wptr->name, snd_strerror(-ret));
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
From f1f5b48d0cfbce0cc6400daba0020d9385d6645e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 18:26:20 +0100
|
|
||||||
Subject: [PATCH 22/30] topology: use size_t for calc_block_size()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 10 +++++-----
|
|
||||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index ec1af42ddf9b..bbee71d67e94 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -163,11 +163,11 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int calc_block_size(struct list_head *base)
|
|
||||||
+static size_t calc_block_size(struct list_head *base)
|
|
||||||
{
|
|
||||||
struct list_head *pos;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
- int size = 0;
|
|
||||||
+ size_t size = 0;
|
|
||||||
|
|
||||||
list_for_each(pos, base) {
|
|
||||||
|
|
||||||
@@ -185,14 +185,14 @@ static int calc_block_size(struct list_head *base)
|
|
||||||
|
|
||||||
static int write_block(snd_tplg_t *tplg, struct list_head *base, int type)
|
|
||||||
{
|
|
||||||
- int size;
|
|
||||||
+ size_t size;
|
|
||||||
|
|
||||||
/* calculate the block size in bytes for all elems in this list */
|
|
||||||
size = calc_block_size(base);
|
|
||||||
- if (size <= 0)
|
|
||||||
+ if (size == 0)
|
|
||||||
return size;
|
|
||||||
|
|
||||||
- verbose(tplg, " block size for type %d is %d\n", type, size);
|
|
||||||
+ verbose(tplg, " block size for type %d is %zd\n", type, size);
|
|
||||||
|
|
||||||
/* write each elem for this block */
|
|
||||||
switch (type) {
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,178 +0,0 @@
|
|||||||
From 4dcceb5f866deda09e971b1c31d46403c3bd8e9e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 18:49:29 +0100
|
|
||||||
Subject: [PATCH 23/30] topology: merge write_block to tplg_write_data
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 95 ++++++++++++++++++--------------------------------
|
|
||||||
1 file changed, 33 insertions(+), 62 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index bbee71d67e94..f530fcd853c4 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -183,56 +183,6 @@ static size_t calc_block_size(struct list_head *base)
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int write_block(snd_tplg_t *tplg, struct list_head *base, int type)
|
|
||||||
-{
|
|
||||||
- size_t size;
|
|
||||||
-
|
|
||||||
- /* calculate the block size in bytes for all elems in this list */
|
|
||||||
- size = calc_block_size(base);
|
|
||||||
- if (size == 0)
|
|
||||||
- return size;
|
|
||||||
-
|
|
||||||
- verbose(tplg, " block size for type %d is %zd\n", type, size);
|
|
||||||
-
|
|
||||||
- /* write each elem for this block */
|
|
||||||
- switch (type) {
|
|
||||||
- case SND_TPLG_TYPE_MIXER:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_MIXER, "mixer");
|
|
||||||
- case SND_TPLG_TYPE_BYTES:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_BYTES, "bytes");
|
|
||||||
- case SND_TPLG_TYPE_ENUM:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_ENUM, "enum");
|
|
||||||
- case SND_TPLG_TYPE_DAPM_GRAPH:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_DAPM_GRAPH, "route");
|
|
||||||
- case SND_TPLG_TYPE_DAPM_WIDGET:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_DAPM_WIDGET, "widget");
|
|
||||||
- case SND_TPLG_TYPE_PCM:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_PCM, "pcm");
|
|
||||||
- case SND_TPLG_TYPE_BE:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_BACKEND_LINK, "be");
|
|
||||||
- case SND_TPLG_TYPE_CC:
|
|
||||||
- return write_elem_block(tplg, base, size,
|
|
||||||
- SND_SOC_TPLG_TYPE_CODEC_LINK, "cc");
|
|
||||||
- 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;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/* write the manifest including its private data */
|
|
||||||
static ssize_t write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
@@ -262,60 +212,72 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
const char *name;
|
|
||||||
struct list_head *list;
|
|
||||||
int type;
|
|
||||||
+ int tsoc;
|
|
||||||
} *wptr, wtable[] = {
|
|
||||||
{
|
|
||||||
- .name = "control mixer elements",
|
|
||||||
+ .name = "control mixer",
|
|
||||||
.list = &tplg->mixer_list,
|
|
||||||
.type = SND_TPLG_TYPE_MIXER,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_MIXER,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "control enum elements",
|
|
||||||
+ .name = "control enum",
|
|
||||||
.list = &tplg->enum_list,
|
|
||||||
.type = SND_TPLG_TYPE_ENUM,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_ENUM,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "control extended (bytes) elements",
|
|
||||||
+ .name = "control extended (bytes)",
|
|
||||||
.list = &tplg->bytes_ext_list,
|
|
||||||
.type = SND_TPLG_TYPE_BYTES,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_BYTES,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "dapm widget elements",
|
|
||||||
+ .name = "dapm widget",
|
|
||||||
.list = &tplg->widget_list,
|
|
||||||
.type = SND_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "pcm elements",
|
|
||||||
+ .name = "pcm",
|
|
||||||
.list = &tplg->pcm_list,
|
|
||||||
.type = SND_TPLG_TYPE_PCM,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_PCM,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "physical dai elements",
|
|
||||||
+ .name = "physical dai",
|
|
||||||
.list = &tplg->dai_list,
|
|
||||||
.type = SND_TPLG_TYPE_DAI,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_DAI,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "be elements",
|
|
||||||
+ .name = "be",
|
|
||||||
.list = &tplg->be_list,
|
|
||||||
.type = SND_TPLG_TYPE_BE,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_BACKEND_LINK,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "cc elements",
|
|
||||||
+ .name = "cc",
|
|
||||||
.list = &tplg->cc_list,
|
|
||||||
.type = SND_TPLG_TYPE_CC,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_CODEC_LINK,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "route (dapm graph) elements",
|
|
||||||
+ .name = "route (dapm graph)",
|
|
||||||
.list = &tplg->route_list,
|
|
||||||
.type = SND_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
- .name = "private data elements",
|
|
||||||
+ .name = "private data",
|
|
||||||
.list = &tplg->pdata_list,
|
|
||||||
.type = SND_TPLG_TYPE_DATA,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_PDATA,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
ssize_t ret;
|
|
||||||
+ size_t size;
|
|
||||||
unsigned int index;
|
|
||||||
|
|
||||||
/* write manifest */
|
|
||||||
@@ -328,9 +290,18 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
/* write all blocks */
|
|
||||||
for (index = 0; index < ARRAY_SIZE(wtable); index++) {
|
|
||||||
wptr = &wtable[index];
|
|
||||||
- ret = write_block(tplg, wptr->list, wptr->type);
|
|
||||||
+ /* calculate the block size in bytes for all elems in this list */
|
|
||||||
+ size = calc_block_size(wptr->list);
|
|
||||||
+ if (size == 0)
|
|
||||||
+ continue;
|
|
||||||
+ verbose(tplg, " block size for type %s (%d:%d) is %zd\n",
|
|
||||||
+ wptr->name, wptr->type,
|
|
||||||
+ wptr->tsoc, size);
|
|
||||||
+ ret = write_elem_block(tplg, wptr->list, size,
|
|
||||||
+ wptr->tsoc, wptr->name);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write %s: %s\n", wptr->name, snd_strerror(-ret));
|
|
||||||
+ SNDERR("failed to write %s elements: %s\n",
|
|
||||||
+ wptr->name, snd_strerror(-ret));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
|||||||
From c9e9ee3c40e9f50889f2bb4065c4556184998e8f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 18:53:41 +0100
|
|
||||||
Subject: [PATCH 24/30] topology: make vebose output more nice
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 18 ++++++++++--------
|
|
||||||
1 file changed, 10 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index f530fcd853c4..1a22a453695a 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -29,7 +29,7 @@ static void verbose(snd_tplg_t *tplg, const char *fmt, ...)
|
|
||||||
return;
|
|
||||||
|
|
||||||
va_start(va, fmt);
|
|
||||||
- fprintf(stdout, "0x%6.6zx/%6.6zd -", tplg->out_pos, tplg->out_pos);
|
|
||||||
+ fprintf(stdout, "0x%6.6zx/%6.6zd - ", tplg->out_pos, tplg->out_pos);
|
|
||||||
vfprintf(stdout, fmt, va);
|
|
||||||
va_end(va);
|
|
||||||
}
|
|
||||||
@@ -80,7 +80,7 @@ static ssize_t write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- verbose(tplg, " header index %d type %d count %d size 0x%lx/%ld vendor %d "
|
|
||||||
+ verbose(tplg, "header index %d type %d count %d size 0x%lx/%ld vendor %d "
|
|
||||||
"version %d\n", index, type, count,
|
|
||||||
(long unsigned int)payload_size, (long int)payload_size,
|
|
||||||
vendor_type, version);
|
|
||||||
@@ -128,10 +128,10 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (elem->type != SND_TPLG_TYPE_DAPM_GRAPH)
|
|
||||||
- verbose(tplg, " %s '%s': write %d bytes\n",
|
|
||||||
+ verbose(tplg, "%s '%s': write %d bytes\n",
|
|
||||||
obj_name, elem->id, elem->size);
|
|
||||||
else
|
|
||||||
- verbose(tplg, " %s '%s -> %s -> %s': write %d bytes\n",
|
|
||||||
+ verbose(tplg, "%s '%s -> %s -> %s': write %d bytes\n",
|
|
||||||
obj_name, elem->route->source,
|
|
||||||
elem->route->control,
|
|
||||||
elem->route->sink, elem->size);
|
|
||||||
@@ -197,10 +197,10 @@ static ssize_t write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
- verbose(tplg, "manifest : write %d bytes\n", sizeof(tplg->manifest));
|
|
||||||
+ verbose(tplg, "manifest: write %d bytes\n", sizeof(tplg->manifest));
|
|
||||||
ret = twrite(tplg, &tplg->manifest, sizeof(tplg->manifest));
|
|
||||||
if (ret >= 0) {
|
|
||||||
- verbose(tplg, "manifest : write %d priv bytes\n", tplg->manifest.priv.size);
|
|
||||||
+ verbose(tplg, "manifest: write %d priv bytes\n", tplg->manifest.priv.size);
|
|
||||||
ret = twrite(tplg, tplg->manifest_pdata, tplg->manifest.priv.size);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
@@ -294,9 +294,9 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
size = calc_block_size(wptr->list);
|
|
||||||
if (size == 0)
|
|
||||||
continue;
|
|
||||||
- verbose(tplg, " block size for type %s (%d:%d) is %zd\n",
|
|
||||||
+ verbose(tplg, "block size for type %s (%d:%d) is 0x%zx/%zd\n",
|
|
||||||
wptr->name, wptr->type,
|
|
||||||
- wptr->tsoc, size);
|
|
||||||
+ wptr->tsoc, size, size);
|
|
||||||
ret = write_elem_block(tplg, wptr->list, size,
|
|
||||||
wptr->tsoc, wptr->name);
|
|
||||||
if (ret < 0) {
|
|
||||||
@@ -306,5 +306,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ verbose(tplg, "total size is 0x%zx/%zd\n", tplg->out_pos, tplg->out_pos);
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
From 3b9e39dab5ebfb525b4437a644fe54569e419874 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 21:23:52 +0100
|
|
||||||
Subject: [PATCH 25/30] topology: use list_insert() macro in tplg_elem_insert()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/elem.c | 8 +++-----
|
|
||||||
1 file changed, 3 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/elem.c b/src/topology/elem.c
|
|
||||||
index a9d1d8547bd2..2066fad83774 100644
|
|
||||||
--- a/src/topology/elem.c
|
|
||||||
+++ b/src/topology/elem.c
|
|
||||||
@@ -131,7 +131,7 @@ struct tplg_elem *tplg_elem_lookup(struct list_head *base, const char* id,
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* insert a new element into list in the ascending order of index value*/
|
|
||||||
+/* insert a new element into list in the ascending order of index value */
|
|
||||||
static void tplg_elem_insert(struct tplg_elem *elem_p, struct list_head *list)
|
|
||||||
{
|
|
||||||
struct list_head *pos, *p = &(elem_p->list);
|
|
||||||
@@ -142,10 +142,8 @@ static void tplg_elem_insert(struct tplg_elem *elem_p, struct list_head *list)
|
|
||||||
if (elem_p->index < elem->index)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- p->prev = pos->prev;
|
|
||||||
- pos->prev->next = p;
|
|
||||||
- pos->prev = p;
|
|
||||||
- p->next = pos;
|
|
||||||
+ /* insert item before pos */
|
|
||||||
+ list_insert(p, pos->prev, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create a new common element and object */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,81 +0,0 @@
|
|||||||
From 0d6949b7f1f99bf3fcd5cce78483c10f9ca35264 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 21:52:13 +0100
|
|
||||||
Subject: [PATCH 26/30] topology: dapm - coding fixes
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/dapm.c | 15 +++++++--------
|
|
||||||
1 file changed, 7 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index 97c9695b9ebe..cd80a4c03d92 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -152,8 +152,7 @@ static int copy_dapm_control(struct tplg_elem *elem, struct tplg_elem *ref)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check referenced controls for a widget */
|
|
||||||
-static int tplg_build_widget(snd_tplg_t *tplg,
|
|
||||||
- struct tplg_elem *elem)
|
|
||||||
+static int tplg_build_widget(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
{
|
|
||||||
struct tplg_ref *ref;
|
|
||||||
struct list_head *base, *pos;
|
|
||||||
@@ -164,7 +163,7 @@ static int tplg_build_widget(snd_tplg_t *tplg,
|
|
||||||
/* A widget's private data sits before the embedded controls.
|
|
||||||
* So merge the private data blocks at first
|
|
||||||
*/
|
|
||||||
- list_for_each(pos, base) {
|
|
||||||
+ list_for_each(pos, base) {
|
|
||||||
ref = list_entry(pos, struct tplg_ref, list);
|
|
||||||
|
|
||||||
if (ref->type != SND_TPLG_TYPE_DATA)
|
|
||||||
@@ -314,7 +313,7 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-struct tplg_elem* tplg_elem_new_route(snd_tplg_t *tplg)
|
|
||||||
+struct tplg_elem *tplg_elem_new_route(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
struct snd_soc_tplg_dapm_graph_elem *line;
|
|
||||||
@@ -342,7 +341,7 @@ struct tplg_elem* tplg_elem_new_route(snd_tplg_t *tplg)
|
|
||||||
|
|
||||||
/* line is defined as '"source, control, sink"' */
|
|
||||||
static int tplg_parse_line(const char *text,
|
|
||||||
- struct snd_soc_tplg_dapm_graph_elem *line)
|
|
||||||
+ struct snd_soc_tplg_dapm_graph_elem *line)
|
|
||||||
{
|
|
||||||
char buf[LINE_SIZE];
|
|
||||||
unsigned int len, i;
|
|
||||||
@@ -422,7 +421,7 @@ static int tplg_parse_routes(snd_tplg_t *tplg, snd_config_t *cfg, int index)
|
|
||||||
}
|
|
||||||
|
|
||||||
int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -472,7 +471,7 @@ int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
/* DAPM Widget */
|
|
||||||
int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_dapm_widget *widget;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -645,7 +644,7 @@ int tplg_add_route(snd_tplg_t *tplg, struct snd_tplg_graph_elem *t)
|
|
||||||
snd_strlcpy(line->source, t->src, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
if (t->ctl)
|
|
||||||
snd_strlcpy(line->control, t->ctl,
|
|
||||||
- SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
+ SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
snd_strlcpy(line->sink, t->sink, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,103 +0,0 @@
|
|||||||
From 2b50b594dcbf69f8dcc6e8cf673748f7063c3c17 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 21:56:58 +0100
|
|
||||||
Subject: [PATCH 27/30] topology: dapm - merge identical index blocks like for
|
|
||||||
other elems
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/dapm.c | 14 +++++++-------
|
|
||||||
src/topology/elem.c | 2 +-
|
|
||||||
src/topology/tplg_local.h | 1 +
|
|
||||||
3 files changed, 9 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index cd80a4c03d92..ce46913192df 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -313,7 +313,7 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-struct tplg_elem *tplg_elem_new_route(snd_tplg_t *tplg)
|
|
||||||
+struct tplg_elem *tplg_elem_new_route(snd_tplg_t *tplg, int index)
|
|
||||||
{
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
struct snd_soc_tplg_dapm_graph_elem *line;
|
|
||||||
@@ -322,7 +322,8 @@ struct tplg_elem *tplg_elem_new_route(snd_tplg_t *tplg)
|
|
||||||
if (!elem)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
- list_add_tail(&elem->list, &tplg->route_list);
|
|
||||||
+ elem->index = index;
|
|
||||||
+ tplg_elem_insert(elem, &tplg->route_list);
|
|
||||||
strcpy(elem->id, "line");
|
|
||||||
elem->type = SND_TPLG_TYPE_DAPM_GRAPH;
|
|
||||||
elem->size = sizeof(*line);
|
|
||||||
@@ -403,10 +404,9 @@ static int tplg_parse_routes(snd_tplg_t *tplg, snd_config_t *cfg, int index)
|
|
||||||
if (snd_config_get_string(n, &val) < 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- elem = tplg_elem_new_route(tplg);
|
|
||||||
+ elem = tplg_elem_new_route(tplg, index);
|
|
||||||
if (!elem)
|
|
||||||
return -ENOMEM;
|
|
||||||
- elem->index = index;
|
|
||||||
line = elem->route;
|
|
||||||
|
|
||||||
err = tplg_parse_line(val, line);
|
|
||||||
@@ -628,7 +628,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int tplg_add_route(snd_tplg_t *tplg, struct snd_tplg_graph_elem *t)
|
|
||||||
+int tplg_add_route(snd_tplg_t *tplg, struct snd_tplg_graph_elem *t, int index)
|
|
||||||
{
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
struct snd_soc_tplg_dapm_graph_elem *line;
|
|
||||||
@@ -636,7 +636,7 @@ int tplg_add_route(snd_tplg_t *tplg, struct snd_tplg_graph_elem *t)
|
|
||||||
if (!t->src || !t->sink)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- elem = tplg_elem_new_route(tplg);
|
|
||||||
+ elem = tplg_elem_new_route(tplg, index);
|
|
||||||
if (!elem)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
@@ -656,7 +656,7 @@ int tplg_add_graph_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
int i, ret;
|
|
||||||
|
|
||||||
for (i = 0; i < gt->count; i++) {
|
|
||||||
- ret = tplg_add_route(tplg, gt->elem + i);
|
|
||||||
+ ret = tplg_add_route(tplg, gt->elem + i, t->index);
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/elem.c b/src/topology/elem.c
|
|
||||||
index 2066fad83774..140cdd327994 100644
|
|
||||||
--- a/src/topology/elem.c
|
|
||||||
+++ b/src/topology/elem.c
|
|
||||||
@@ -132,7 +132,7 @@ struct tplg_elem *tplg_elem_lookup(struct list_head *base, const char* id,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* insert a new element into list in the ascending order of index value */
|
|
||||||
-static void tplg_elem_insert(struct tplg_elem *elem_p, struct list_head *list)
|
|
||||||
+void tplg_elem_insert(struct tplg_elem *elem_p, struct list_head *list)
|
|
||||||
{
|
|
||||||
struct list_head *pos, *p = &(elem_p->list);
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 7b8abcdefbcf..11efce6d580c 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -273,6 +273,7 @@ int tplg_ref_add_elem(struct tplg_elem *elem, struct tplg_elem *elem_ref);
|
|
||||||
struct tplg_elem *tplg_elem_new(void);
|
|
||||||
void tplg_elem_free(struct tplg_elem *elem);
|
|
||||||
void tplg_elem_free_list(struct list_head *base);
|
|
||||||
+void tplg_elem_insert(struct tplg_elem *elem_p, struct list_head *list);
|
|
||||||
struct tplg_elem *tplg_elem_lookup(struct list_head *base,
|
|
||||||
const char* id,
|
|
||||||
unsigned int type,
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,228 +0,0 @@
|
|||||||
From 780f17126aa8d54fc09694cbf652d4135eb731c0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 13 Dec 2019 22:07:46 +0100
|
|
||||||
Subject: [PATCH 28/30] topology: more coding fixes
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/channel.c | 4 ++--
|
|
||||||
src/topology/ctl.c | 15 ++++++++-------
|
|
||||||
src/topology/elem.c | 6 ++++--
|
|
||||||
src/topology/ops.c | 6 +++---
|
|
||||||
src/topology/pcm.c | 20 ++++++++++++--------
|
|
||||||
src/topology/text.c | 2 +-
|
|
||||||
6 files changed, 30 insertions(+), 23 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/channel.c b/src/topology/channel.c
|
|
||||||
index 8516b23f302d..60f7e219a674 100644
|
|
||||||
--- a/src/topology/channel.c
|
|
||||||
+++ b/src/topology/channel.c
|
|
||||||
@@ -74,8 +74,8 @@ static int lookup_channel(const char *c)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse a channel mapping. */
|
|
||||||
-int tplg_parse_channel(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private)
|
|
||||||
+int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
+ void *private)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index a096252263a5..1db0b16eac95 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -46,7 +46,7 @@ static const struct ctl_access_elem ctl_access[] = {
|
|
||||||
|
|
||||||
/* find CTL access strings and conver to values */
|
|
||||||
static int parse_access_values(snd_config_t *cfg,
|
|
||||||
- struct snd_soc_tplg_ctl_hdr *hdr)
|
|
||||||
+ struct snd_soc_tplg_ctl_hdr *hdr)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -77,7 +77,7 @@ static int parse_access_values(snd_config_t *cfg,
|
|
||||||
|
|
||||||
/* Parse Access */
|
|
||||||
int parse_access(snd_config_t *cfg,
|
|
||||||
- struct snd_soc_tplg_ctl_hdr *hdr)
|
|
||||||
+ struct snd_soc_tplg_ctl_hdr *hdr)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -118,7 +118,7 @@ static int copy_tlv(struct tplg_elem *elem, struct tplg_elem *ref)
|
|
||||||
|
|
||||||
/* check referenced TLV for a mixer control */
|
|
||||||
static int tplg_build_mixer_control(snd_tplg_t *tplg,
|
|
||||||
- struct tplg_elem *elem)
|
|
||||||
+ struct tplg_elem *elem)
|
|
||||||
{
|
|
||||||
struct tplg_ref *ref;
|
|
||||||
struct list_head *base, *pos;
|
|
||||||
@@ -157,7 +157,7 @@ static int tplg_build_mixer_control(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
static void copy_enum_texts(struct tplg_elem *enum_elem,
|
|
||||||
- struct tplg_elem *ref_elem)
|
|
||||||
+ struct tplg_elem *ref_elem)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_enum_control *ec = enum_elem->enum_ctrl;
|
|
||||||
struct tplg_texts *texts = ref_elem->texts;
|
|
||||||
@@ -169,7 +169,7 @@ static void copy_enum_texts(struct tplg_elem *enum_elem,
|
|
||||||
|
|
||||||
/* check referenced text for a enum control */
|
|
||||||
static int tplg_build_enum_control(snd_tplg_t *tplg,
|
|
||||||
- struct tplg_elem *elem)
|
|
||||||
+ struct tplg_elem *elem)
|
|
||||||
{
|
|
||||||
struct tplg_ref *ref;
|
|
||||||
struct list_head *base, *pos;
|
|
||||||
@@ -331,7 +331,7 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
|
|
||||||
/* Parse TLV */
|
|
||||||
int tplg_parse_tlv(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -364,7 +364,8 @@ int tplg_parse_tlv(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
/* Parse Control Bytes */
|
|
||||||
int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ snd_config_t *cfg,
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_bytes_control *be;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
diff --git a/src/topology/elem.c b/src/topology/elem.c
|
|
||||||
index 140cdd327994..d8618cc9d983 100644
|
|
||||||
--- a/src/topology/elem.c
|
|
||||||
+++ b/src/topology/elem.c
|
|
||||||
@@ -107,7 +107,7 @@ void tplg_elem_free_list(struct list_head *base)
|
|
||||||
}
|
|
||||||
|
|
||||||
struct tplg_elem *tplg_elem_lookup(struct list_head *base, const char* id,
|
|
||||||
- unsigned int type, int index)
|
|
||||||
+ unsigned int type, int index)
|
|
||||||
{
|
|
||||||
struct list_head *pos;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -148,7 +148,9 @@ void tplg_elem_insert(struct tplg_elem *elem_p, struct list_head *list)
|
|
||||||
|
|
||||||
/* create a new common element and object */
|
|
||||||
struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, const char *name, enum snd_tplg_type type)
|
|
||||||
+ snd_config_t *cfg,
|
|
||||||
+ const char *name,
|
|
||||||
+ enum snd_tplg_type type)
|
|
||||||
{
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
const char *id, *val = NULL;
|
|
||||||
diff --git a/src/topology/ops.c b/src/topology/ops.c
|
|
||||||
index 6f8dc1ff310f..0f4295a2e50c 100644
|
|
||||||
--- a/src/topology/ops.c
|
|
||||||
+++ b/src/topology/ops.c
|
|
||||||
@@ -48,8 +48,8 @@ static int lookup_ops(const char *c)
|
|
||||||
/* Parse Control operations. Ops can come from standard names above or
|
|
||||||
* bespoke driver controls with numbers >= 256
|
|
||||||
*/
|
|
||||||
-int tplg_parse_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
- snd_config_t *cfg, void *private)
|
|
||||||
+int tplg_parse_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED, snd_config_t *cfg,
|
|
||||||
+ void *private)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -88,7 +88,7 @@ int tplg_parse_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
* bespoke driver controls with numbers >= 256
|
|
||||||
*/
|
|
||||||
int tplg_parse_ext_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
- snd_config_t *cfg, void *private)
|
|
||||||
+ snd_config_t *cfg, void *private)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index 553fd822031b..98a8df979e24 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -63,7 +63,8 @@ struct tplg_elem *lookup_pcm_dai_stream(struct list_head *base, const char* id)
|
|
||||||
|
|
||||||
/* copy referenced caps to the parent (pcm or be dai) */
|
|
||||||
static void copy_stream_caps(const char *id ATTRIBUTE_UNUSED,
|
|
||||||
- struct snd_soc_tplg_stream_caps *caps, struct tplg_elem *ref_elem)
|
|
||||||
+ struct snd_soc_tplg_stream_caps *caps,
|
|
||||||
+ struct tplg_elem *ref_elem)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_stream_caps *ref_caps = ref_elem->stream_caps;
|
|
||||||
|
|
||||||
@@ -75,7 +76,8 @@ static void copy_stream_caps(const char *id ATTRIBUTE_UNUSED,
|
|
||||||
|
|
||||||
/* find and copy the referenced stream caps */
|
|
||||||
static int tplg_build_stream_caps(snd_tplg_t *tplg,
|
|
||||||
- const char *id, int index, struct snd_soc_tplg_stream_caps *caps)
|
|
||||||
+ const char *id, int index,
|
|
||||||
+ struct snd_soc_tplg_stream_caps *caps)
|
|
||||||
{
|
|
||||||
struct tplg_elem *ref_elem = NULL;
|
|
||||||
unsigned int i;
|
|
||||||
@@ -207,7 +209,8 @@ int tplg_build_dais(snd_tplg_t *tplg, unsigned int type)
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tplg_build_stream_cfg(snd_tplg_t *tplg,
|
|
||||||
- struct snd_soc_tplg_stream *stream, int num_streams, int index)
|
|
||||||
+ struct snd_soc_tplg_stream *stream,
|
|
||||||
+ int num_streams, int index)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_stream *strm;
|
|
||||||
struct tplg_elem *ref_elem;
|
|
||||||
@@ -367,7 +370,8 @@ static int split_rate(struct snd_soc_tplg_stream_caps *caps, char *str)
|
|
||||||
|
|
||||||
/* Parse pcm stream capabilities */
|
|
||||||
int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ snd_config_t *cfg,
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_stream_caps *sc;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -637,8 +641,8 @@ static int parse_flag(snd_config_t *n, unsigned int mask_in,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse PCM (for front end DAI & DAI link) in text conf file */
|
|
||||||
-int tplg_parse_pcm(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
+int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_pcm *pcm;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -746,8 +750,8 @@ int tplg_parse_pcm(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse physical DAI */
|
|
||||||
-int tplg_parse_dai(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
+int tplg_parse_dai(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_dai *dai;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
diff --git a/src/topology/text.c b/src/topology/text.c
|
|
||||||
index 72647fe04955..f301a4ded727 100644
|
|
||||||
--- a/src/topology/text.c
|
|
||||||
+++ b/src/topology/text.c
|
|
||||||
@@ -59,7 +59,7 @@ static int parse_text_values(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
|
|
||||||
/* Parse Text data */
|
|
||||||
int tplg_parse_text(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,32 +0,0 @@
|
|||||||
From 75584fe660880b332fbf60dd7968e2ed8b49a38b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Date: Fri, 20 Dec 2019 16:12:50 +0100
|
|
||||||
Subject: [PATCH 30/30] type_compat: Add missing __s64 and __u64 definitions
|
|
||||||
for non-Linux
|
|
||||||
|
|
||||||
Just for the case without Linux-compatible definitions.
|
|
||||||
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
include/sound/type_compat.h | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/sound/type_compat.h b/include/sound/type_compat.h
|
|
||||||
index d4790c1f0e64..5b765f447e2e 100644
|
|
||||||
--- a/include/sound/type_compat.h
|
|
||||||
+++ b/include/sound/type_compat.h
|
|
||||||
@@ -9,9 +9,11 @@
|
|
||||||
typedef uint8_t __u8;
|
|
||||||
typedef uint16_t __u16;
|
|
||||||
typedef uint32_t __u32;
|
|
||||||
+typedef uint64_t __u64;
|
|
||||||
typedef int8_t __s8;
|
|
||||||
typedef int16_t __s16;
|
|
||||||
typedef int32_t __s32;
|
|
||||||
+typedef int64_t __s64;
|
|
||||||
|
|
||||||
#include <endian.h>
|
|
||||||
#include <byteswap.h>
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,133 +0,0 @@
|
|||||||
From 59792f467b38d6a4c4dffdb30528f7fb03d23d96 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Date: Fri, 20 Dec 2019 17:12:37 +0100
|
|
||||||
Subject: [PATCH alsa-lib] uapi: Move typedefs from uapi to sound/*
|
|
||||||
|
|
||||||
For keeping uapi/*.h cleaner.
|
|
||||||
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
include/sound/emu10k1.h | 9 +++++++++
|
|
||||||
include/sound/hdsp.h | 10 ++++++++++
|
|
||||||
include/sound/hdspm.h | 8 ++++++++
|
|
||||||
include/sound/sb16_csp.h | 4 ++++
|
|
||||||
include/sound/uapi/emu10k1.h | 10 ----------
|
|
||||||
include/sound/uapi/hdsp.h | 9 ---------
|
|
||||||
include/sound/uapi/hdspm.h | 8 --------
|
|
||||||
7 files changed, 31 insertions(+), 27 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h
|
|
||||||
index f06ecee51c2b..0832f95bd995 100644
|
|
||||||
--- a/include/sound/emu10k1.h
|
|
||||||
+++ b/include/sound/emu10k1.h
|
|
||||||
@@ -1,2 +1,11 @@
|
|
||||||
#include <alsa/sound/type_compat.h>
|
|
||||||
#include <alsa/sound/uapi/emu10k1.h>
|
|
||||||
+#ifndef __emu10k1_type_defined
|
|
||||||
+#define __emu10k1_type_defined
|
|
||||||
+typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
|
|
||||||
+typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
|
|
||||||
+typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
|
|
||||||
+typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
|
|
||||||
+typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
|
|
||||||
+typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t;
|
|
||||||
+#endif
|
|
||||||
diff --git a/include/sound/hdsp.h b/include/sound/hdsp.h
|
|
||||||
index 78fb745b607a..e8f931569548 100644
|
|
||||||
--- a/include/sound/hdsp.h
|
|
||||||
+++ b/include/sound/hdsp.h
|
|
||||||
@@ -1,2 +1,12 @@
|
|
||||||
#include <alsa/sound/type_compat.h>
|
|
||||||
#include <alsa/sound/uapi/hdsp.h>
|
|
||||||
+#ifndef __hdsp_type_defined
|
|
||||||
+#define __hdsp_type_defined
|
|
||||||
+typedef enum HDSP_IO_Type HDSP_IO_Type;
|
|
||||||
+typedef struct hdsp_peak_rms hdsp_peak_rms_t;
|
|
||||||
+typedef struct hdsp_config_info hdsp_config_info_t;
|
|
||||||
+typedef struct hdsp_firmware hdsp_firmware_t;
|
|
||||||
+typedef struct hdsp_version hdsp_version_t;
|
|
||||||
+typedef struct hdsp_mixer hdsp_mixer_t;
|
|
||||||
+typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
|
|
||||||
+#endif
|
|
||||||
diff --git a/include/sound/hdspm.h b/include/sound/hdspm.h
|
|
||||||
index af6d19eda87f..d9095d9f10bb 100644
|
|
||||||
--- a/include/sound/hdspm.h
|
|
||||||
+++ b/include/sound/hdspm.h
|
|
||||||
@@ -1,2 +1,10 @@
|
|
||||||
#include <alsa/sound/type_compat.h>
|
|
||||||
#include <alsa/sound/uapi/hdspm.h>
|
|
||||||
+#ifndef __hdspm_type_defined
|
|
||||||
+#define __hdspm_type_defined
|
|
||||||
+typedef struct hdspm_peak_rms hdspm_peak_rms_t;
|
|
||||||
+typedef struct hdspm_config_info hdspm_config_info_t;
|
|
||||||
+typedef struct hdspm_version hdspm_version_t;
|
|
||||||
+typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
|
|
||||||
+typedef struct hdspm_mixer hdspm_mixer_t;
|
|
||||||
+#endif
|
|
||||||
diff --git a/include/sound/sb16_csp.h b/include/sound/sb16_csp.h
|
|
||||||
index 24121fcbd888..fd02bc565e21 100644
|
|
||||||
--- a/include/sound/sb16_csp.h
|
|
||||||
+++ b/include/sound/sb16_csp.h
|
|
||||||
@@ -1 +1,5 @@
|
|
||||||
#include <alsa/sound/uapi/sb16_csp.h>
|
|
||||||
+#ifndef __sb16_csp_type_defined
|
|
||||||
+#define __sb16_csp_type_defined
|
|
||||||
+typedef struct snd_sb_csp_microcode snd_sb_csp_microcode_t;
|
|
||||||
+#endif
|
|
||||||
diff --git a/include/sound/uapi/emu10k1.h b/include/sound/uapi/emu10k1.h
|
|
||||||
index c1150e4d0231..6bcd76f64c1c 100644
|
|
||||||
--- a/include/sound/uapi/emu10k1.h
|
|
||||||
+++ b/include/sound/uapi/emu10k1.h
|
|
||||||
@@ -382,14 +382,4 @@ struct snd_emu10k1_fx8010_pcm_rec {
|
|
||||||
#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
|
|
||||||
#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int)
|
|
||||||
|
|
||||||
-#ifndef __KERNEL__
|
|
||||||
-/* typedefs for compatibility to user-space */
|
|
||||||
-typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
|
|
||||||
-typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
|
|
||||||
-typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
|
|
||||||
-typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
|
|
||||||
-typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
|
|
||||||
-typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t;
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
#endif /* _UAPI__SOUND_EMU10K1_H */
|
|
||||||
diff --git a/include/sound/uapi/hdsp.h b/include/sound/uapi/hdsp.h
|
|
||||||
index 88c92a3fb477..7ac2d3f2a9b3 100644
|
|
||||||
--- a/include/sound/uapi/hdsp.h
|
|
||||||
+++ b/include/sound/uapi/hdsp.h
|
|
||||||
@@ -97,13 +97,4 @@ struct hdsp_9632_aeb {
|
|
||||||
|
|
||||||
#define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb)
|
|
||||||
|
|
||||||
-/* typedefs for compatibility to user-space */
|
|
||||||
-typedef enum HDSP_IO_Type HDSP_IO_Type;
|
|
||||||
-typedef struct hdsp_peak_rms hdsp_peak_rms_t;
|
|
||||||
-typedef struct hdsp_config_info hdsp_config_info_t;
|
|
||||||
-typedef struct hdsp_firmware hdsp_firmware_t;
|
|
||||||
-typedef struct hdsp_version hdsp_version_t;
|
|
||||||
-typedef struct hdsp_mixer hdsp_mixer_t;
|
|
||||||
-typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
|
|
||||||
-
|
|
||||||
#endif /* __SOUND_HDSP_H */
|
|
||||||
diff --git a/include/sound/uapi/hdspm.h b/include/sound/uapi/hdspm.h
|
|
||||||
index 2d91f90eb5e1..3fbfd9dc5f51 100644
|
|
||||||
--- a/include/sound/uapi/hdspm.h
|
|
||||||
+++ b/include/sound/uapi/hdspm.h
|
|
||||||
@@ -219,12 +219,4 @@ struct hdspm_mixer_ioctl {
|
|
||||||
/* use indirect access due to the limit of ioctl bit size */
|
|
||||||
#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
|
|
||||||
|
|
||||||
-/* typedefs for compatibility to user-space */
|
|
||||||
-typedef struct hdspm_peak_rms hdspm_peak_rms_t;
|
|
||||||
-typedef struct hdspm_config_info hdspm_config_info_t;
|
|
||||||
-typedef struct hdspm_version hdspm_version_t;
|
|
||||||
-typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
|
|
||||||
-typedef struct hdspm_mixer hdspm_mixer_t;
|
|
||||||
-
|
|
||||||
-
|
|
||||||
#endif
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,128 +0,0 @@
|
|||||||
From 9e2bbccfcc8069a676519149a280f20c1e05f0ac Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Ward <david.ward@ll.mit.edu>
|
|
||||||
Date: Fri, 3 Jan 2020 13:05:51 -0500
|
|
||||||
Subject: [PATCH 32/63] Update the attributes.m4 macro file from xine
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
This file was imported from the xine project. Update it to the current
|
|
||||||
revision, which resolves the "no AC_LANG_SOURCE call detected in body"
|
|
||||||
warnings with Autoconf 2.68 or later.
|
|
||||||
|
|
||||||
Cc: Diego Pettenò <flameeyes@gmail.com>
|
|
||||||
Signed-off-by: David Ward <david.ward@ll.mit.edu>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
m4/attributes.m4 | 33 ++++++++++++++++++++-------------
|
|
||||||
1 file changed, 20 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/m4/attributes.m4 b/m4/attributes.m4
|
|
||||||
index e86456a468e5..3d9c256a09a2 100644
|
|
||||||
--- a/m4/attributes.m4
|
|
||||||
+++ b/m4/attributes.m4
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
dnl Macros to check the presence of generic (non-typed) symbols.
|
|
||||||
-dnl Copyright (c) 2006-2007 Diego Pettenò <flameeyes@gmail.com>
|
|
||||||
-dnl Copyright (c) 2006-2007 xine project
|
|
||||||
+dnl Copyright (c) 2006-2008 Diego Pettenò <flameeyes@gmail.com>
|
|
||||||
+dnl Copyright (c) 2006-2008 xine project
|
|
||||||
dnl
|
|
||||||
dnl This program is free software; you can redistribute it and/or modify
|
|
||||||
dnl it under the terms of the GNU General Public License as published by
|
|
||||||
@@ -25,7 +25,7 @@ dnl License when using or distributing such scripts, even though portions
|
|
||||||
dnl of the text of the Macro appear in them. The GNU General Public
|
|
||||||
dnl License (GPL) does govern all other use of the material that
|
|
||||||
dnl constitutes the Autoconf Macro.
|
|
||||||
-dnl
|
|
||||||
+dnl
|
|
||||||
dnl This special exception to the GPL applies to versions of the
|
|
||||||
dnl Autoconf Macro released by this project. When you make and
|
|
||||||
dnl distribute a modified version of the Autoconf Macro, you may extend
|
|
||||||
@@ -39,7 +39,7 @@ AC_DEFUN([CC_CHECK_CFLAGS_SILENT], [
|
|
||||||
AC_CACHE_VAL(AS_TR_SH([cc_cv_cflags_$1]),
|
|
||||||
[ac_save_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS $1"
|
|
||||||
- AC_COMPILE_IFELSE([int a;],
|
|
||||||
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([int a;])],
|
|
||||||
[eval "AS_TR_SH([cc_cv_cflags_$1])='yes'"],
|
|
||||||
[eval "AS_TR_SH([cc_cv_cflags_$1])='no'"])
|
|
||||||
CFLAGS="$ac_save_CFLAGS"
|
|
||||||
@@ -71,7 +71,7 @@ AC_DEFUN([CC_CHECK_CFLAG_APPEND], [
|
|
||||||
)
|
|
||||||
|
|
||||||
AS_IF([eval test x$]AS_TR_SH([cc_cv_cflags_$1])[ = xyes],
|
|
||||||
- [CFLAGS="$CFLAGS $1"; $2], [$3])
|
|
||||||
+ [CFLAGS="$CFLAGS $1"; DEBUG_CFLAGS="$DEBUG_CFLAGS $1"; $2], [$3])
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl CC_CHECK_CFLAGS_APPEND([FLAG1 FLAG2], [action-if-found], [action-if-not])
|
|
||||||
@@ -89,7 +89,7 @@ AC_DEFUN([CC_CHECK_LDFLAGS], [
|
|
||||||
AS_TR_SH([cc_cv_ldflags_$1]),
|
|
||||||
[ac_save_LDFLAGS="$LDFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS $1"
|
|
||||||
- AC_LINK_IFELSE([int main() { return 1; }],
|
|
||||||
+ AC_LINK_IFELSE([AC_LANG_SOURCE([int main() { return 1; }])],
|
|
||||||
[eval "AS_TR_SH([cc_cv_ldflags_$1])='yes'"],
|
|
||||||
[eval "AS_TR_SH([cc_cv_ldflags_$1])="])
|
|
||||||
LDFLAGS="$ac_save_LDFLAGS"
|
|
||||||
@@ -109,14 +109,21 @@ AC_DEFUN([CC_NOUNDEFINED], [
|
|
||||||
dnl FreeBSD (et al.) does not complete linking for shared objects when pthreads
|
|
||||||
dnl are requested, as different implementations are present; to avoid problems
|
|
||||||
dnl use -Wl,-z,defs only for those platform not behaving this way.
|
|
||||||
- *-freebsd*) ;;
|
|
||||||
+ dnl
|
|
||||||
+ dnl MinGW platforms: for libraries required -no-undefined,
|
|
||||||
+ dnl use it only for libraries in mingw32-w64
|
|
||||||
+
|
|
||||||
+ *-freebsd* | *-openbsd*) ;;
|
|
||||||
+ *-mingw*)
|
|
||||||
+ LDFLAGS_NOUNDEFINED="-no-undefined"
|
|
||||||
+ ;;
|
|
||||||
*)
|
|
||||||
dnl First of all check for the --no-undefined variant of GNU ld. This allows
|
|
||||||
dnl for a much more readable commandline, so that people can understand what
|
|
||||||
dnl it does without going to look for what the heck -z defs does.
|
|
||||||
- for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
|
|
||||||
+ for possible_flags in "-Wl,--no-undefined" "-Wl,-z,defs"; do
|
|
||||||
CC_CHECK_LDFLAGS([$possible_flags], [LDFLAGS_NOUNDEFINED="$possible_flags"])
|
|
||||||
- break
|
|
||||||
+ if test "x$LDFLAGS_NOUNDEFINED" = "x"; then break; fi
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -147,7 +154,7 @@ AC_DEFUN([CC_CHECK_ATTRIBUTE], [
|
|
||||||
AS_TR_SH([cc_cv_attribute_$1]),
|
|
||||||
[ac_save_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS $cc_cv_werror"
|
|
||||||
- AC_COMPILE_IFELSE([$3],
|
|
||||||
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([$3])],
|
|
||||||
[eval "AS_TR_SH([cc_cv_attribute_$1])='yes'"],
|
|
||||||
[eval "AS_TR_SH([cc_cv_attribute_$1])='no'"])
|
|
||||||
CFLAGS="$ac_save_CFLAGS"
|
|
||||||
@@ -257,7 +264,7 @@ AC_DEFUN([CC_FLAG_VISIBILITY], [
|
|
||||||
cc_cv_flag_visibility='yes',
|
|
||||||
cc_cv_flag_visibility='no')
|
|
||||||
CFLAGS="$cc_flag_visibility_save_CFLAGS"])
|
|
||||||
-
|
|
||||||
+
|
|
||||||
AS_IF([test "x$cc_cv_flag_visibility" = "xyes"],
|
|
||||||
[AC_DEFINE([SUPPORT_FLAG_VISIBILITY], 1,
|
|
||||||
[Define this if the compiler supports the -fvisibility flag])
|
|
||||||
@@ -295,11 +302,11 @@ AC_DEFUN([CC_ATTRIBUTE_ALIGNED], [
|
|
||||||
[ac_save_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS $cc_cv_werror"
|
|
||||||
for cc_attribute_align_try in 64 32 16 8 4 2; do
|
|
||||||
- AC_COMPILE_IFELSE([
|
|
||||||
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([
|
|
||||||
int main() {
|
|
||||||
static char c __attribute__ ((aligned($cc_attribute_align_try))) = 0;
|
|
||||||
return c;
|
|
||||||
- }], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
|
|
||||||
+ }])], [cc_cv_attribute_aligned=$cc_attribute_align_try; break])
|
|
||||||
done
|
|
||||||
CFLAGS="$ac_save_CFLAGS"
|
|
||||||
])
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,763 +0,0 @@
|
|||||||
From f373bf1f6eea0f2037a7714e9b55aa65fa00b889 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 14 Dec 2019 13:36:09 +0100
|
|
||||||
Subject: [PATCH 33/63] topology: avoid to use the atoi() directly when
|
|
||||||
expected
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/channel.c | 10 ++--
|
|
||||||
src/topology/ctl.c | 37 ++++++------
|
|
||||||
src/topology/dapm.c | 32 +++++-----
|
|
||||||
src/topology/data.c | 14 ++---
|
|
||||||
src/topology/elem.c | 9 ++-
|
|
||||||
src/topology/ops.c | 2 +-
|
|
||||||
src/topology/parser.c | 29 +++++++++
|
|
||||||
src/topology/pcm.c | 148 ++++++++++++++++++++--------------------------
|
|
||||||
src/topology/tplg_local.h | 2 +
|
|
||||||
9 files changed, 150 insertions(+), 133 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/channel.c b/src/topology/channel.c
|
|
||||||
index 60f7e219a674..4569eb31e0c5 100644
|
|
||||||
--- a/src/topology/channel.c
|
|
||||||
+++ b/src/topology/channel.c
|
|
||||||
@@ -80,8 +80,8 @@ int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
struct snd_soc_tplg_channel *channel = private;
|
|
||||||
- const char *id, *value;
|
|
||||||
- int channel_id;
|
|
||||||
+ const char *id;
|
|
||||||
+ int channel_id, value;
|
|
||||||
|
|
||||||
if (tplg->channel_idx >= SND_SOC_TPLG_MAX_CHAN)
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -109,13 +109,13 @@ int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* get value */
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &value, 0) < 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "reg") == 0)
|
|
||||||
- channel->reg = atoi(value);
|
|
||||||
+ channel->reg = value;
|
|
||||||
else if (strcmp(id, "shift") == 0)
|
|
||||||
- channel->shift = atoi(value);
|
|
||||||
+ channel->shift = value;
|
|
||||||
|
|
||||||
tplg_dbg("\t\t%s = %s\n", id, value);
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index 1db0b16eac95..e1896f46c576 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -286,7 +286,8 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
snd_config_t *n;
|
|
||||||
struct snd_soc_tplg_ctl_tlv *tplg_tlv;
|
|
||||||
struct snd_soc_tplg_tlv_dbscale *scale;
|
|
||||||
- const char *id = NULL, *value = NULL;
|
|
||||||
+ const char *id = NULL;
|
|
||||||
+ int val;
|
|
||||||
|
|
||||||
tplg_dbg(" scale: %s\n", elem->id);
|
|
||||||
|
|
||||||
@@ -310,18 +311,18 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get value */
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &val, 0))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- tplg_dbg("\t%s = %s\n", id, value);
|
|
||||||
+ tplg_dbg("\t%s = %i\n", id, val);
|
|
||||||
|
|
||||||
/* get TLV data */
|
|
||||||
if (strcmp(id, "min") == 0)
|
|
||||||
- scale->min = atoi(value);
|
|
||||||
+ scale->min = val;
|
|
||||||
else if (strcmp(id, "step") == 0)
|
|
||||||
- scale->step = atoi(value);
|
|
||||||
+ scale->step = val;
|
|
||||||
else if (strcmp(id, "mute") == 0)
|
|
||||||
- scale->mute = atoi(value);
|
|
||||||
+ scale->mute = val;
|
|
||||||
else
|
|
||||||
SNDERR("error: unknown key %s\n", id);
|
|
||||||
}
|
|
||||||
@@ -372,7 +373,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id, *val = NULL;
|
|
||||||
- int err;
|
|
||||||
+ int err, ival;
|
|
||||||
bool access_set = false, tlv_set = false;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_BYTES);
|
|
||||||
@@ -398,37 +399,37 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "base") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- be->base = atoi(val);
|
|
||||||
+ be->base = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, be->base);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "num_regs") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- be->num_regs = atoi(val);
|
|
||||||
+ be->num_regs = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, be->num_regs);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "max") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- be->max = atoi(val);
|
|
||||||
+ be->max = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, be->max);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "mask") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 16))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- be->mask = strtol(val, NULL, 16);
|
|
||||||
+ be->mask = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, be->mask);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
@@ -598,7 +599,7 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id, *val = NULL;
|
|
||||||
- int err, j;
|
|
||||||
+ int err, j, ival;
|
|
||||||
bool access_set = false, tlv_set = false;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_MIXER);
|
|
||||||
@@ -647,10 +648,10 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "max") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- mc->max = atoi(val);
|
|
||||||
+ mc->max = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, mc->max);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index ce46913192df..c6fd793d0d72 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -426,7 +426,7 @@ int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
int err;
|
|
||||||
- const char *graph_id, *val = NULL;
|
|
||||||
+ const char *graph_id;
|
|
||||||
int index = -1;
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
@@ -445,9 +445,10 @@ int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "index") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &index, 0))
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ if (index < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
- index = atoi(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "lines") == 0) {
|
|
||||||
@@ -479,6 +480,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id, *val = NULL;
|
|
||||||
int widget_type, err;
|
|
||||||
+ int ival;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_DAPM_WIDGET);
|
|
||||||
if (!elem)
|
|
||||||
@@ -540,55 +542,55 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "shift") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- widget->shift = atoi(val);
|
|
||||||
+ widget->shift = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, widget->shift);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "reg") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- widget->reg = atoi(val);
|
|
||||||
+ widget->reg = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, widget->reg);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "invert") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- widget->invert = atoi(val);
|
|
||||||
+ widget->invert = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, widget->invert);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "subseq") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- widget->subseq= atoi(val);
|
|
||||||
+ widget->subseq = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, widget->subseq);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "event_type") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- widget->event_type = atoi(val);
|
|
||||||
+ widget->event_type = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, widget->event_type);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "event_flags") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- widget->event_flags = atoi(val);
|
|
||||||
+ widget->event_flags = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, widget->event_flags);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 729ce1f4c0b6..0edfe54f3383 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -800,10 +800,10 @@ int tplg_parse_tokens(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
- const char *id, *value;
|
|
||||||
+ const char *id;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
struct tplg_vendor_tokens *tokens;
|
|
||||||
- int num_tokens = 0;
|
|
||||||
+ int num_tokens = 0, value;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_TOKEN);
|
|
||||||
if (!elem)
|
|
||||||
@@ -830,12 +830,12 @@ int tplg_parse_tokens(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (snd_config_get_id(n, &id) < 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &value, 0))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
snd_strlcpy(tokens->token[tokens->num_tokens].id, id,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
- tokens->token[tokens->num_tokens].value = atoi(value);
|
|
||||||
+ tokens->token[tokens->num_tokens].value = value;
|
|
||||||
tplg_dbg("\t\t %s : %d\n", tokens->token[tokens->num_tokens].id,
|
|
||||||
tokens->token[tokens->num_tokens].value);
|
|
||||||
tokens->num_tokens++;
|
|
||||||
@@ -1013,7 +1013,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id, *val = NULL;
|
|
||||||
- int err = 0;
|
|
||||||
+ int err = 0, ival;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_DATA);
|
|
||||||
@@ -1071,10 +1071,10 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "type") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- elem->vendor_type = atoi(val);
|
|
||||||
+ elem->vendor_type = ival;
|
|
||||||
tplg_dbg("\t%s: %d\n", id, elem->index);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/elem.c b/src/topology/elem.c
|
|
||||||
index d8618cc9d983..f2076f7958aa 100644
|
|
||||||
--- a/src/topology/elem.c
|
|
||||||
+++ b/src/topology/elem.c
|
|
||||||
@@ -153,7 +153,7 @@ struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
|
||||||
enum snd_tplg_type type)
|
|
||||||
{
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
- const char *id, *val = NULL;
|
|
||||||
+ const char *id;
|
|
||||||
int obj_size = 0;
|
|
||||||
void *obj;
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
@@ -178,11 +178,14 @@ struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
|
||||||
if (snd_config_get_id(n, &id))
|
|
||||||
continue;
|
|
||||||
if (strcmp(id, "index") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0) {
|
|
||||||
+ if (tplg_get_integer(n, &elem->index, 0)) {
|
|
||||||
+ free(elem);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+ if (elem->index < 0) {
|
|
||||||
free(elem);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
- elem->index = atoi(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (name != NULL)
|
|
||||||
diff --git a/src/topology/ops.c b/src/topology/ops.c
|
|
||||||
index 0f4295a2e50c..073acdcb1453 100644
|
|
||||||
--- a/src/topology/ops.c
|
|
||||||
+++ b/src/topology/ops.c
|
|
||||||
@@ -42,7 +42,7 @@ static int lookup_ops(const char *c)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* cant find string name in our table so we use its ID number */
|
|
||||||
- return atoi(c);
|
|
||||||
+ return strtol(c, NULL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse Control operations. Ops can come from standard names above or
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 5940692da2e2..7e657809307d 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -21,6 +21,35 @@
|
|
||||||
#include "list.h"
|
|
||||||
#include "tplg_local.h"
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Get integer value
|
|
||||||
+ */
|
|
||||||
+int tplg_get_integer(snd_config_t *n, int *val, int base)
|
|
||||||
+{
|
|
||||||
+ const char *str;
|
|
||||||
+ long lval;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ switch (snd_config_get_type(n)) {
|
|
||||||
+ case SND_CONFIG_TYPE_INTEGER:
|
|
||||||
+ err = snd_config_get_integer(n, &lval);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ if (lval < INT_MIN || lval > INT_MAX)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ *val = lval;
|
|
||||||
+ return err;
|
|
||||||
+ case SND_CONFIG_TYPE_STRING:
|
|
||||||
+ err = snd_config_get_string(n, &str);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ *val = strtol(str, NULL, base);
|
|
||||||
+ return 0;
|
|
||||||
+ default:
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Parse compound
|
|
||||||
*/
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index 98a8df979e24..d6c52b4752ee 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -368,6 +368,24 @@ static int split_rate(struct snd_soc_tplg_stream_caps *caps, char *str)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int parse_unsigned(snd_config_t *n, unsigned int *dst)
|
|
||||||
+{
|
|
||||||
+ int ival;
|
|
||||||
+
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0) < 0)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ *dst = ival;
|
|
||||||
+#if TPLG_DEBUG
|
|
||||||
+ {
|
|
||||||
+ const char *id;
|
|
||||||
+ if (snd_config_get_id(n, &id) >= 0)
|
|
||||||
+ tplg_dbg("\t\t%s: %d\n", id, *dst);
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Parse pcm stream capabilities */
|
|
||||||
int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
snd_config_t *cfg,
|
|
||||||
@@ -402,10 +420,10 @@ int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
if (id[0] == '#')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
- return -EINVAL;
|
|
||||||
-
|
|
||||||
if (strcmp(id, "formats") == 0) {
|
|
||||||
+ if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
s = strdup(val);
|
|
||||||
if (s == NULL)
|
|
||||||
return -ENOMEM;
|
|
||||||
@@ -421,6 +439,9 @@ int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "rates") == 0) {
|
|
||||||
+ if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
s = strdup(val);
|
|
||||||
if (!s)
|
|
||||||
return -ENOMEM;
|
|
||||||
@@ -436,68 +457,68 @@ int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "rate_min") == 0) {
|
|
||||||
- sc->rate_min = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->rate_min);
|
|
||||||
+ if (parse_unsigned(n, &sc->rate_min))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "rate_max") == 0) {
|
|
||||||
- sc->rate_max = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->rate_max);
|
|
||||||
+ if (parse_unsigned(n, &sc->rate_max))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "channels_min") == 0) {
|
|
||||||
- sc->channels_min = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->channels_min);
|
|
||||||
+ if (parse_unsigned(n, &sc->channels_min))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "channels_max") == 0) {
|
|
||||||
- sc->channels_max = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->channels_max);
|
|
||||||
+ if (parse_unsigned(n, &sc->channels_max))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "periods_min") == 0) {
|
|
||||||
- sc->periods_min = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->periods_min);
|
|
||||||
+ if (parse_unsigned(n, &sc->periods_min))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "periods_max") == 0) {
|
|
||||||
- sc->periods_max = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->periods_max);
|
|
||||||
+ if (parse_unsigned(n, &sc->periods_max))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "period_size_min") == 0) {
|
|
||||||
- sc->period_size_min = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->period_size_min);
|
|
||||||
+ if (parse_unsigned(n, &sc->period_size_min))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "period_size_max") == 0) {
|
|
||||||
- sc->period_size_max = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->period_size_max);
|
|
||||||
+ if (parse_unsigned(n, &sc->period_size_max))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "buffer_size_min") == 0) {
|
|
||||||
- sc->buffer_size_min = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->buffer_size_min);
|
|
||||||
+ if (parse_unsigned(n, &sc->buffer_size_min))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "buffer_size_max") == 0) {
|
|
||||||
- sc->buffer_size_max = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->buffer_size_max);
|
|
||||||
+ if (parse_unsigned(n, &sc->buffer_size_max))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "sig_bits") == 0) {
|
|
||||||
- sc->sig_bits = atoi(val);
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, sc->sig_bits);
|
|
||||||
+ if (parse_unsigned(n, &sc->sig_bits))
|
|
||||||
+ return -EINVAL;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -674,11 +695,8 @@ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "id") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &pcm->pcm_id))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- pcm->pcm_id = atoi(val);
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, pcm->pcm_id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -784,30 +802,21 @@ int tplg_parse_dai(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "id") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &dai->dai_id))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- dai->dai_id = atoi(val);
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, dai->dai_id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "playback") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &dai->playback))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- dai->playback = atoi(val);
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, dai->playback);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (strcmp(id, "capture") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &dai->capture))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- dai->capture = atoi(val);
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, dai->capture);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -949,11 +958,8 @@ int tplg_parse_link(snd_tplg_t *tplg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "id") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &link->id))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- link->id = atoi(val);
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, link->id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -975,10 +981,8 @@ int tplg_parse_link(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "default_hw_conf_id") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &link->default_hw_config_id))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- link->default_hw_config_id = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1030,7 +1034,7 @@ int tplg_parse_cc(snd_tplg_t *tplg,
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
- const char *id, *val = NULL;
|
|
||||||
+ const char *id;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_CC);
|
|
||||||
if (!elem)
|
|
||||||
@@ -1054,11 +1058,8 @@ int tplg_parse_cc(snd_tplg_t *tplg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "id") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &link->id))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- link->id = atoi(val);
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, link->id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1130,11 +1131,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "id") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->id))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->id = atoi(val);
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, hw_cfg->id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1173,10 +1171,8 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (strcmp(id, "bclk_freq") == 0 ||
|
|
||||||
strcmp(id, "bclk_rate") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->bclk_rate))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->bclk_rate = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1223,19 +1219,15 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (strcmp(id, "fsync_freq") == 0 ||
|
|
||||||
strcmp(id, "fsync_rate") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->fsync_rate))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->fsync_rate = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "mclk_freq") == 0 ||
|
|
||||||
strcmp(id, "mclk_rate") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->mclk_rate))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->mclk_rate = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1275,50 +1267,38 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "tdm_slots") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->tdm_slots))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->tdm_slots = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "tdm_slot_width") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->tdm_slot_width))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->tdm_slot_width = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "tx_slots") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->tx_slots))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->tx_slots = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "rx_slots") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->rx_slots))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->rx_slots = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "tx_channels") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->tx_channels))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->tx_channels = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "rx_channels") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ if (parse_unsigned(n, &hw_cfg->rx_channels))
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- hw_cfg->rx_channels = atoi(val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 101491a42e60..991e0b4121bd 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -280,6 +280,8 @@ struct tplg_elem *tplg_elem_lookup(struct list_head *base,
|
|
||||||
struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
|
||||||
snd_config_t *cfg, const char *name, enum snd_tplg_type type);
|
|
||||||
|
|
||||||
+int tplg_get_integer(snd_config_t *n, int *val, int base);
|
|
||||||
+
|
|
||||||
int tplg_parse_channel(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
snd_config_t *cfg, void *private);
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,207 +0,0 @@
|
|||||||
From 5925a6d870331c631f85ed4e18a8c5e6459b3c36 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 14 Dec 2019 13:50:04 +0100
|
|
||||||
Subject: [PATCH 34/63] topology: use snd_config_get_bool() instead own
|
|
||||||
implementation
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/ctl.c | 9 +++------
|
|
||||||
src/topology/dapm.c | 9 ++++-----
|
|
||||||
src/topology/data.c | 15 ++++++++++++---
|
|
||||||
src/topology/pcm.c | 29 +++++++++++++++--------------
|
|
||||||
4 files changed, 34 insertions(+), 28 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index e1896f46c576..9190efefb575 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -657,13 +657,10 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "invert") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ ival = snd_config_get_bool(n);
|
|
||||||
+ if (ival < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
-
|
|
||||||
- if (strcmp(val, "true") == 0)
|
|
||||||
- mc->invert = 1;
|
|
||||||
- else if (strcmp(val, "false") == 0)
|
|
||||||
- mc->invert = 0;
|
|
||||||
+ mc->invert = ival;
|
|
||||||
|
|
||||||
tplg_dbg("\t%s: %d\n", id, mc->invert);
|
|
||||||
continue;
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index c6fd793d0d72..ad7092107896 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -479,8 +479,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id, *val = NULL;
|
|
||||||
- int widget_type, err;
|
|
||||||
- int ival;
|
|
||||||
+ int widget_type, err, ival;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_DAPM_WIDGET);
|
|
||||||
if (!elem)
|
|
||||||
@@ -531,11 +530,11 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "no_pm") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ ival = snd_config_get_bool(n);
|
|
||||||
+ if (ival < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- if (strcmp(val, "true") == 0)
|
|
||||||
- widget->reg = -1;
|
|
||||||
+ widget->reg = ival ? -1 : 0;
|
|
||||||
|
|
||||||
tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
continue;
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 0edfe54f3383..6b1337b39bad 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -557,6 +557,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
unsigned int type, num_tuples = 0;
|
|
||||||
struct tplg_tuple *tuple;
|
|
||||||
unsigned long int tuple_val;
|
|
||||||
+ int ival;
|
|
||||||
|
|
||||||
snd_config_get_id(cfg, &id);
|
|
||||||
|
|
||||||
@@ -607,25 +608,33 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_UUID:
|
|
||||||
+ if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ continue;
|
|
||||||
if (get_uuid(value, tuple->uuid) < 0)
|
|
||||||
goto err;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_STRING:
|
|
||||||
+ if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ continue;
|
|
||||||
snd_strlcpy(tuple->string, value,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
tplg_dbg("\t\t%s = %s\n", tuple->token, tuple->string);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_BOOL:
|
|
||||||
- if (strcmp(value, "true") == 0)
|
|
||||||
- tuple->value = 1;
|
|
||||||
+ ival = snd_config_get_bool(n);
|
|
||||||
+ if (ival < 0)
|
|
||||||
+ continue;
|
|
||||||
+ tuple->value = ival;
|
|
||||||
tplg_dbg("\t\t%s = %d\n", tuple->token, tuple->value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_BYTE:
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_SHORT:
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_WORD:
|
|
||||||
+ if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ continue;
|
|
||||||
errno = 0;
|
|
||||||
/* no support for negative value */
|
|
||||||
tuple_val = strtoul(value, NULL, 0);
|
|
||||||
@@ -1012,7 +1021,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
- const char *id, *val = NULL;
|
|
||||||
+ const char *id;
|
|
||||||
int err = 0, ival;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index d6c52b4752ee..6364e24f3c43 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -669,8 +669,8 @@ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
- const char *id, *val = NULL;
|
|
||||||
- int err;
|
|
||||||
+ const char *id;
|
|
||||||
+ int err, ival;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_PCM);
|
|
||||||
if (!elem)
|
|
||||||
@@ -709,11 +709,11 @@ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "compress") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ ival = snd_config_get_bool(n);
|
|
||||||
+ if (ival < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- if (strcmp(val, "true") == 0)
|
|
||||||
- pcm->compress = 1;
|
|
||||||
+ pcm->compress = ival;
|
|
||||||
|
|
||||||
tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
continue;
|
|
||||||
@@ -1107,7 +1107,7 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id, *val = NULL;
|
|
||||||
- int ret;
|
|
||||||
+ int ret, ival;
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_HW_CONFIG);
|
|
||||||
if (!elem)
|
|
||||||
@@ -1178,11 +1178,11 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (strcmp(id, "bclk_invert") == 0 ||
|
|
||||||
strcmp(id, "invert_bclk") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ ival = snd_config_get_bool(n);
|
|
||||||
+ if (ival < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- if (!strcmp(val, "true"))
|
|
||||||
- hw_cfg->invert_bclk = true;
|
|
||||||
+ hw_cfg->invert_bclk = ival;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1209,11 +1209,11 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (strcmp(id, "fsync_invert") == 0 ||
|
|
||||||
strcmp(id, "invert_fsync") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ ival = snd_config_get_bool(n);
|
|
||||||
+ if (ival < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- if (!strcmp(val, "true"))
|
|
||||||
- hw_cfg->invert_fsync = true;
|
|
||||||
+ hw_cfg->invert_fsync = ival;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1254,10 +1254,11 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (strcmp(id, "pm_gate_clocks") == 0 ||
|
|
||||||
strcmp(id, "clock_gated") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &val) < 0)
|
|
||||||
+ ival = snd_config_get_bool(n);
|
|
||||||
+ if (ival < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- if (!strcmp(val, "true"))
|
|
||||||
+ if (ival)
|
|
||||||
hw_cfg->clock_gated =
|
|
||||||
SND_SOC_TPLG_DAI_CLK_GATE_GATED;
|
|
||||||
else
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
From 1047a5f3c0d39a3b0579db027f52d7facdf44077 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 14 Dec 2019 13:52:18 +0100
|
|
||||||
Subject: [PATCH 35/63] topology: fix tplg_get_integer() - handle errno ==
|
|
||||||
ERANGE
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/parser.c | 7 ++++++-
|
|
||||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 7e657809307d..667c8d45517b 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -36,14 +36,19 @@ int tplg_get_integer(snd_config_t *n, int *val, int base)
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
if (lval < INT_MIN || lval > INT_MAX)
|
|
||||||
- return -EINVAL;
|
|
||||||
+ return -ERANGE;
|
|
||||||
*val = lval;
|
|
||||||
return err;
|
|
||||||
case SND_CONFIG_TYPE_STRING:
|
|
||||||
err = snd_config_get_string(n, &str);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
+ errno = 0;
|
|
||||||
*val = strtol(str, NULL, base);
|
|
||||||
+ if (errno == ERANGE)
|
|
||||||
+ return -ERANGE;
|
|
||||||
+ if (errno && *val == 0)
|
|
||||||
+ return -EINVAL;
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
return -EINVAL;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,172 +0,0 @@
|
|||||||
From 14e43a11873d14ec6f16967c83629237ef44ac38 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 14 Dec 2019 14:05:49 +0100
|
|
||||||
Subject: [PATCH 36/63] topology: add tplg_get_unsigned() function
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/data.c | 19 +++++--------------
|
|
||||||
src/topology/parser.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
src/topology/pcm.c | 13 ++-----------
|
|
||||||
src/topology/tplg_local.h | 1 +
|
|
||||||
4 files changed, 55 insertions(+), 25 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 6b1337b39bad..9807445e8c37 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -556,7 +556,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
struct tplg_tuple_set *set;
|
|
||||||
unsigned int type, num_tuples = 0;
|
|
||||||
struct tplg_tuple *tuple;
|
|
||||||
- unsigned long int tuple_val;
|
|
||||||
+ unsigned int tuple_val;
|
|
||||||
int ival;
|
|
||||||
|
|
||||||
snd_config_get_id(cfg, &id);
|
|
||||||
@@ -598,10 +598,6 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
if (snd_config_get_id(n, &id) < 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- /* get value */
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
- continue;
|
|
||||||
-
|
|
||||||
tuple = &set->tuple[set->num_tuples];
|
|
||||||
snd_strlcpy(tuple->token, id,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
@@ -633,14 +629,9 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_BYTE:
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_SHORT:
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_WORD:
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
- continue;
|
|
||||||
- errno = 0;
|
|
||||||
- /* no support for negative value */
|
|
||||||
- tuple_val = strtoul(value, NULL, 0);
|
|
||||||
- if ((errno == ERANGE && tuple_val == ULONG_MAX)
|
|
||||||
- || (errno != 0 && tuple_val == 0)) {
|
|
||||||
- SNDERR("error: tuple %s:strtoul fail\n", id);
|
|
||||||
+ ival = tplg_get_unsigned(n, &tuple_val, 0);
|
|
||||||
+ if (ival < 0) {
|
|
||||||
+ SNDERR("error: tuple %s: %s\n", id, snd_strerror(ival));
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -654,7 +645,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tuple->value = (unsigned int) tuple_val;
|
|
||||||
+ tuple->value = tuple_val;
|
|
||||||
tplg_dbg("\t\t%s = 0x%x\n", tuple->token, tuple->value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 667c8d45517b..f56ad97e42b9 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -55,6 +55,53 @@ int tplg_get_integer(snd_config_t *n, int *val, int base)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Get unsigned integer value
|
|
||||||
+ */
|
|
||||||
+int tplg_get_unsigned(snd_config_t *n, unsigned *val, int base)
|
|
||||||
+{
|
|
||||||
+ const char *str;
|
|
||||||
+ long lval;
|
|
||||||
+ long long llval;
|
|
||||||
+ unsigned long uval;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ switch (snd_config_get_type(n)) {
|
|
||||||
+ case SND_CONFIG_TYPE_INTEGER:
|
|
||||||
+ err = snd_config_get_integer(n, &lval);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ if (lval < 0 || lval > UINT_MAX)
|
|
||||||
+ return -ERANGE;
|
|
||||||
+ *val = lval;
|
|
||||||
+ return err;
|
|
||||||
+ case SND_CONFIG_TYPE_INTEGER64:
|
|
||||||
+ err = snd_config_get_integer64(n, &llval);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ if (llval < 0 || llval > UINT_MAX)
|
|
||||||
+ return -ERANGE;
|
|
||||||
+ *val = llval;
|
|
||||||
+ return err;
|
|
||||||
+ case SND_CONFIG_TYPE_STRING:
|
|
||||||
+ err = snd_config_get_string(n, &str);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ errno = 0;
|
|
||||||
+ uval = strtoul(str, NULL, base);
|
|
||||||
+ if (errno == ERANGE && uval == ULONG_MAX)
|
|
||||||
+ return -ERANGE;
|
|
||||||
+ if (errno && uval == 0)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ if (uval > UINT_MAX)
|
|
||||||
+ return -ERANGE;
|
|
||||||
+ *val = uval;
|
|
||||||
+ return 0;
|
|
||||||
+ default:
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Parse compound
|
|
||||||
*/
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index 6364e24f3c43..9b87549cabbd 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -606,8 +606,7 @@ static int tplg_parse_fe_dai(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
struct snd_soc_tplg_pcm *pcm = elem->pcm;
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
- const char *id, *value = NULL;
|
|
||||||
- unsigned long int id_val;
|
|
||||||
+ const char *id;
|
|
||||||
|
|
||||||
snd_config_get_id(cfg, &id);
|
|
||||||
tplg_dbg("\t\tFE DAI %s:\n", id);
|
|
||||||
@@ -622,19 +621,11 @@ static int tplg_parse_fe_dai(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(id, "id") == 0) {
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
- continue;
|
|
||||||
- errno = 0;
|
|
||||||
- /* no support for negative value */
|
|
||||||
- id_val = strtoul(value, NULL, 0);
|
|
||||||
- if ((errno == ERANGE && id_val == ULONG_MAX)
|
|
||||||
- || (errno != 0 && id_val == 0)
|
|
||||||
- || id_val > UINT_MAX) {
|
|
||||||
+ if (tplg_get_unsigned(n, &pcm->dai_id, 0)) {
|
|
||||||
SNDERR("error: invalid fe dai ID\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- pcm->dai_id = (int) id_val;
|
|
||||||
tplg_dbg("\t\t\tindex: %d\n", pcm->dai_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 991e0b4121bd..e16c78d49709 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -281,6 +281,7 @@ struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
|
||||||
snd_config_t *cfg, const char *name, enum snd_tplg_type type);
|
|
||||||
|
|
||||||
int tplg_get_integer(snd_config_t *n, int *val, int base);
|
|
||||||
+int tplg_get_unsigned(snd_config_t *n, unsigned *val, int base);
|
|
||||||
|
|
||||||
int tplg_parse_channel(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
snd_config_t *cfg, void *private);
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,296 +0,0 @@
|
|||||||
From 39fb37fef5bd3b3fa7a63e06a5f0a147197fddb9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 14 Dec 2019 19:13:53 +0100
|
|
||||||
Subject: [PATCH 37/63] topology: convert builder to use the mallocated memory
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 88 +++++++++++++++++++++++++++++++++++++----------
|
|
||||||
src/topology/parser.c | 74 ++++++++++++++++-----------------------
|
|
||||||
src/topology/tplg_local.h | 5 +--
|
|
||||||
3 files changed, 103 insertions(+), 64 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index 1a22a453695a..40943b56e4aa 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -29,7 +29,7 @@ static void verbose(snd_tplg_t *tplg, const char *fmt, ...)
|
|
||||||
return;
|
|
||||||
|
|
||||||
va_start(va, fmt);
|
|
||||||
- fprintf(stdout, "0x%6.6zx/%6.6zd - ", tplg->out_pos, tplg->out_pos);
|
|
||||||
+ fprintf(stdout, "0x%6.6zx/%6.6zd - ", tplg->bin_pos, tplg->bin_pos);
|
|
||||||
vfprintf(stdout, fmt, va);
|
|
||||||
va_end(va);
|
|
||||||
}
|
|
||||||
@@ -37,18 +37,11 @@ static void verbose(snd_tplg_t *tplg, const char *fmt, ...)
|
|
||||||
/* write a block, track the position */
|
|
||||||
static ssize_t twrite(snd_tplg_t *tplg, void *data, size_t data_size)
|
|
||||||
{
|
|
||||||
- ssize_t r = write(tplg->out_fd, data, data_size);
|
|
||||||
- if (r != (ssize_t)data_size) {
|
|
||||||
- if (r < 0) {
|
|
||||||
- SNDERR("error: unable to write: %s", strerror(errno));
|
|
||||||
- return -errno;
|
|
||||||
- }
|
|
||||||
- tplg->out_pos += r;
|
|
||||||
- SNDERR("error: unable to write (partial)");
|
|
||||||
+ if (tplg->bin_pos + data_size > tplg->bin_size)
|
|
||||||
return -EIO;
|
|
||||||
- }
|
|
||||||
- tplg->out_pos += r;
|
|
||||||
- return r;
|
|
||||||
+ memcpy(tplg->bin + tplg->bin_pos, data, data_size);
|
|
||||||
+ tplg->bin_pos += data_size;
|
|
||||||
+ return data_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* write out block header to output file */
|
|
||||||
@@ -71,12 +64,12 @@ static ssize_t write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
hdr.count = count;
|
|
||||||
|
|
||||||
/* make sure file offset is aligned with the calculated HDR offset */
|
|
||||||
- if (tplg->out_pos != tplg->next_hdr_pos) {
|
|
||||||
+ if (tplg->bin_pos != tplg->next_hdr_pos) {
|
|
||||||
SNDERR("error: New header is at offset 0x%zx but file"
|
|
||||||
" offset 0x%zx is %s by %ld bytes\n",
|
|
||||||
- tplg->next_hdr_pos, tplg->out_pos,
|
|
||||||
- tplg->out_pos > tplg->next_hdr_pos ? "ahead" : "behind",
|
|
||||||
- labs(tplg->out_pos - tplg->next_hdr_pos));
|
|
||||||
+ tplg->next_hdr_pos, tplg->bin_pos,
|
|
||||||
+ tplg->bin_pos > tplg->next_hdr_pos ? "ahead" : "behind",
|
|
||||||
+ labs(tplg->bin_pos - tplg->next_hdr_pos));
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -163,6 +156,41 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static size_t calc_manifest_size(snd_tplg_t *tplg)
|
|
||||||
+{
|
|
||||||
+ return sizeof(struct snd_soc_tplg_hdr) +
|
|
||||||
+ sizeof(tplg->manifest) +
|
|
||||||
+ tplg->manifest.priv.size;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static size_t calc_real_size(struct list_head *base)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ struct tplg_elem *elem, *elem_next;
|
|
||||||
+ size_t size = 0;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, base) {
|
|
||||||
+
|
|
||||||
+ elem = list_entry(pos, struct tplg_elem, list);
|
|
||||||
+
|
|
||||||
+ /* compound elems have already been copied to other elems */
|
|
||||||
+ if (elem->compound_elem)
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
+ if (elem->size <= 0)
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
+ size += elem->size;
|
|
||||||
+
|
|
||||||
+ elem_next = list_entry(pos->next, struct tplg_elem, list);
|
|
||||||
+
|
|
||||||
+ if ((pos->next == base) || (elem_next->index != elem->index))
|
|
||||||
+ size += sizeof(struct snd_soc_tplg_hdr);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return size;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static size_t calc_block_size(struct list_head *base)
|
|
||||||
{
|
|
||||||
struct list_head *pos;
|
|
||||||
@@ -277,9 +305,27 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
};
|
|
||||||
|
|
||||||
ssize_t ret;
|
|
||||||
- size_t size;
|
|
||||||
+ size_t total_size, size;
|
|
||||||
unsigned int index;
|
|
||||||
|
|
||||||
+ /* calculate total size */
|
|
||||||
+ total_size = calc_manifest_size(tplg);
|
|
||||||
+ for (index = 0; index < ARRAY_SIZE(wtable); index++) {
|
|
||||||
+ wptr = &wtable[index];
|
|
||||||
+ size = calc_real_size(wptr->list);
|
|
||||||
+ total_size += size;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* allocate new binary output */
|
|
||||||
+ free(tplg->bin);
|
|
||||||
+ tplg->bin = malloc(total_size);
|
|
||||||
+ tplg->bin_pos = 0;
|
|
||||||
+ tplg->bin_size = total_size;
|
|
||||||
+ if (tplg->bin == NULL) {
|
|
||||||
+ tplg->bin_size = 0;
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* write manifest */
|
|
||||||
ret = write_manifest_data(tplg);
|
|
||||||
if (ret < 0) {
|
|
||||||
@@ -306,7 +352,13 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- verbose(tplg, "total size is 0x%zx/%zd\n", tplg->out_pos, tplg->out_pos);
|
|
||||||
+ verbose(tplg, "total size is 0x%zx/%zd\n", tplg->bin_pos, tplg->bin_pos);
|
|
||||||
+
|
|
||||||
+ if (total_size != tplg->bin_pos) {
|
|
||||||
+ SNDERR("total size mismatch (%zd != %zd)\n",
|
|
||||||
+ total_size, tplg->bin_pos);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index f56ad97e42b9..98a9f9e9deac 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -393,50 +393,29 @@ static int tplg_build_integ(snd_tplg_t *tplg)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
|
|
||||||
- const char *outfile)
|
|
||||||
+int snd_tplg_build_file(snd_tplg_t *tplg,
|
|
||||||
+ const char *infile,
|
|
||||||
+ const char *outfile)
|
|
||||||
{
|
|
||||||
snd_config_t *cfg = NULL;
|
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
- tplg->out_fd =
|
|
||||||
- open(outfile, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
|
||||||
- if (tplg->out_fd < 0) {
|
|
||||||
- SNDERR("error: failed to open %s err %d\n",
|
|
||||||
- outfile, -errno);
|
|
||||||
- return -errno;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
err = tplg_load_config(infile, &cfg);
|
|
||||||
if (err < 0) {
|
|
||||||
SNDERR("error: failed to load topology file %s\n",
|
|
||||||
infile);
|
|
||||||
- goto out_close;
|
|
||||||
+ return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = tplg_parse_config(tplg, cfg);
|
|
||||||
if (err < 0) {
|
|
||||||
SNDERR("error: failed to parse topology\n");
|
|
||||||
- goto out;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- err = tplg_build_integ(tplg);
|
|
||||||
- if (err < 0) {
|
|
||||||
- SNDERR("error: failed to check topology integrity\n");
|
|
||||||
- goto out;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- err = tplg_write_data(tplg);
|
|
||||||
- if (err < 0) {
|
|
||||||
- SNDERR("error: failed to write data %d\n", err);
|
|
||||||
- goto out;
|
|
||||||
+ return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
-out:
|
|
||||||
snd_config_delete(cfg);
|
|
||||||
-out_close:
|
|
||||||
- close(tplg->out_fd);
|
|
||||||
- return err;
|
|
||||||
+
|
|
||||||
+ return snd_tplg_build(tplg, outfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
@@ -468,31 +447,38 @@ int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
|
|
||||||
int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
|
|
||||||
{
|
|
||||||
- int err;
|
|
||||||
-
|
|
||||||
- tplg->out_fd =
|
|
||||||
- open(outfile, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
|
||||||
- if (tplg->out_fd < 0) {
|
|
||||||
- SNDERR("error: failed to open %s err %d\n",
|
|
||||||
- outfile, -errno);
|
|
||||||
- return -errno;
|
|
||||||
- }
|
|
||||||
+ int fd, err;
|
|
||||||
+ ssize_t r;
|
|
||||||
|
|
||||||
err = tplg_build_integ(tplg);
|
|
||||||
if (err < 0) {
|
|
||||||
SNDERR("error: failed to check topology integrity\n");
|
|
||||||
- goto out;
|
|
||||||
+ return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = tplg_write_data(tplg);
|
|
||||||
if (err < 0) {
|
|
||||||
SNDERR("error: failed to write data %d\n", err);
|
|
||||||
- goto out;
|
|
||||||
+ return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
-out:
|
|
||||||
- close(tplg->out_fd);
|
|
||||||
- return err;
|
|
||||||
+ fd = open(outfile, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
|
||||||
+ if (fd < 0) {
|
|
||||||
+ SNDERR("error: failed to open %s err %d\n", outfile, -errno);
|
|
||||||
+ return -errno;
|
|
||||||
+ }
|
|
||||||
+ r = write(fd, tplg->bin, tplg->bin_size);
|
|
||||||
+ close(fd);
|
|
||||||
+ if (r < 0) {
|
|
||||||
+ err = -errno;
|
|
||||||
+ SNDERR("error: write error: %s\n", strerror(errno));
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ if ((size_t)r != tplg->bin_size) {
|
|
||||||
+ SNDERR("error: partial write (%zd != %zd)\n", r, tplg->bin_size);
|
|
||||||
+ return -EIO;
|
|
||||||
+ }
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len)
|
|
||||||
@@ -571,8 +557,8 @@ snd_tplg_t *snd_tplg_new(void)
|
|
||||||
|
|
||||||
void snd_tplg_free(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
- if (tplg->manifest_pdata)
|
|
||||||
- free(tplg->manifest_pdata);
|
|
||||||
+ free(tplg->bin);
|
|
||||||
+ free(tplg->manifest_pdata);
|
|
||||||
|
|
||||||
tplg_elem_free_list(&tplg->tlv_list);
|
|
||||||
tplg_elem_free_list(&tplg->widget_list);
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index e16c78d49709..87e6c9a517de 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -60,8 +60,9 @@ typedef enum _snd_pcm_rates {
|
|
||||||
|
|
||||||
struct snd_tplg {
|
|
||||||
/* out file */
|
|
||||||
- int out_fd;
|
|
||||||
- size_t out_pos;
|
|
||||||
+ unsigned char *bin;
|
|
||||||
+ size_t bin_pos;
|
|
||||||
+ size_t bin_size;
|
|
||||||
|
|
||||||
int verbose;
|
|
||||||
unsigned int version;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,173 +0,0 @@
|
|||||||
From bee8d4fcaa52d00950d035ec561513c2b9e7cac7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 14 Dec 2019 19:20:02 +0100
|
|
||||||
Subject: [PATCH 38/63] topology: add binary output from the builder
|
|
||||||
|
|
||||||
- snd_tplg_build_bin()
|
|
||||||
- snd_tplg_build_bin_file()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/topology.h | 22 +++++++++++++-
|
|
||||||
src/topology/parser.c | 79 ++++++++++++++++++++++++++++++++++++++++++---------
|
|
||||||
2 files changed, 87 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/topology.h b/include/topology.h
|
|
||||||
index 27da7308dd62..c9ef554a610f 100644
|
|
||||||
--- a/include/topology.h
|
|
||||||
+++ b/include/topology.h
|
|
||||||
@@ -791,7 +791,18 @@ void snd_tplg_free(snd_tplg_t *tplg);
|
|
||||||
* \return Zero on success, otherwise a negative error code
|
|
||||||
*/
|
|
||||||
int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
|
|
||||||
- const char *outfile);
|
|
||||||
+ const char *outfile);
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * \brief Parse and build topology text file into binary file.
|
|
||||||
+ * \param tplg Topology instance.
|
|
||||||
+ * \param infile Topology text input file to be parsed
|
|
||||||
+ * \param bin Binary topology output buffer (malloc).
|
|
||||||
+ * \param size Binary topology output buffer size in bytes.
|
|
||||||
+ * \return Zero on success, otherwise a negative error code
|
|
||||||
+ */
|
|
||||||
+int snd_tplg_build_bin_file(snd_tplg_t *tplg, const char *infile,
|
|
||||||
+ void **bin, size_t *size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Enable verbose reporting of binary file output
|
|
||||||
@@ -1089,6 +1100,15 @@ int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t);
|
|
||||||
*/
|
|
||||||
int snd_tplg_build(snd_tplg_t *tplg, const char *outfile);
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * \brief Build all registered topology data into memory.
|
|
||||||
+ * \param tplg Topology instance.
|
|
||||||
+ * \param bin Binary topology output buffer (malloc).
|
|
||||||
+ * \param size Binary topology output buffer size in bytes.
|
|
||||||
+ * \return Zero on success, otherwise a negative error code
|
|
||||||
+ */
|
|
||||||
+int snd_tplg_build_bin(snd_tplg_t *tplg, void **bin, size_t *size);
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* \brief Attach private data to topology manifest.
|
|
||||||
* \param tplg Topology instance.
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 98a9f9e9deac..861565b734ad 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -393,9 +393,7 @@ static int tplg_build_integ(snd_tplg_t *tplg)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int snd_tplg_build_file(snd_tplg_t *tplg,
|
|
||||||
- const char *infile,
|
|
||||||
- const char *outfile)
|
|
||||||
+static int tplg_load(snd_tplg_t *tplg, const char *infile)
|
|
||||||
{
|
|
||||||
snd_config_t *cfg = NULL;
|
|
||||||
int err = 0;
|
|
||||||
@@ -414,10 +412,53 @@ int snd_tplg_build_file(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
snd_config_delete(cfg);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int tplg_build(snd_tplg_t *tplg)
|
|
||||||
+{
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ err = tplg_build_integ(tplg);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ SNDERR("error: failed to check topology integrity\n");
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ err = tplg_write_data(tplg);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ SNDERR("error: failed to write data %d\n", err);
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int snd_tplg_build_file(snd_tplg_t *tplg,
|
|
||||||
+ const char *infile,
|
|
||||||
+ const char *outfile)
|
|
||||||
+{
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ err = tplg_load(tplg, infile);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
|
|
||||||
return snd_tplg_build(tplg, outfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
+int snd_tplg_build_bin_file(snd_tplg_t *tplg,
|
|
||||||
+ const char *infile,
|
|
||||||
+ void **bin, size_t *size)
|
|
||||||
+{
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ err = tplg_load(tplg, infile);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+
|
|
||||||
+ return snd_tplg_build_bin(tplg, bin, size);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
{
|
|
||||||
switch (t->type) {
|
|
||||||
@@ -450,17 +491,9 @@ int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
|
|
||||||
int fd, err;
|
|
||||||
ssize_t r;
|
|
||||||
|
|
||||||
- err = tplg_build_integ(tplg);
|
|
||||||
- if (err < 0) {
|
|
||||||
- SNDERR("error: failed to check topology integrity\n");
|
|
||||||
- return err;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- err = tplg_write_data(tplg);
|
|
||||||
- if (err < 0) {
|
|
||||||
- SNDERR("error: failed to write data %d\n", err);
|
|
||||||
+ err = tplg_build(tplg);
|
|
||||||
+ if (err < 0)
|
|
||||||
return err;
|
|
||||||
- }
|
|
||||||
|
|
||||||
fd = open(outfile, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
|
||||||
if (fd < 0) {
|
|
||||||
@@ -481,6 +514,26 @@ int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+int snd_tplg_build_bin(snd_tplg_t *tplg,
|
|
||||||
+ void **bin, size_t *size)
|
|
||||||
+{
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ err = tplg_build(tplg);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+
|
|
||||||
+ err = tplg_build(tplg);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+
|
|
||||||
+ *bin = tplg->bin;
|
|
||||||
+ *size = tplg->bin_size;
|
|
||||||
+ tplg->bin = NULL;
|
|
||||||
+ tplg->bin_size = tplg->bin_pos = 0;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int snd_tplg_set_manifest_data(snd_tplg_t *tplg, const void *data, int len)
|
|
||||||
{
|
|
||||||
if (len <= 0)
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,346 +0,0 @@
|
|||||||
From 22b66731f3dc0eb5149a99ff547eeb84eaf8d54b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 14 Dec 2019 20:32:24 +0100
|
|
||||||
Subject: [PATCH 39/63] topology: parser - recode tplg_parse_config()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/parser.c | 225 +++++++++++++++++++---------------------------
|
|
||||||
src/topology/tplg_local.h | 67 ++++----------
|
|
||||||
2 files changed, 108 insertions(+), 184 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 861565b734ad..82af7cc518d8 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -142,9 +142,88 @@ int tplg_parse_compound(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
||||||
{
|
|
||||||
+ static struct _parser {
|
|
||||||
+ const char *id;
|
|
||||||
+ int (*parser)(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+ } *p, parsers[] = {
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionTLV",
|
|
||||||
+ .parser = tplg_parse_tlv
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionControlMixer",
|
|
||||||
+ .parser = tplg_parse_control_mixer
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionControlEnum",
|
|
||||||
+ .parser = tplg_parse_control_enum
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionControlBytes",
|
|
||||||
+ .parser = tplg_parse_control_bytes
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionWidget",
|
|
||||||
+ .parser = tplg_parse_dapm_widget
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionPCMCapabilities",
|
|
||||||
+ .parser = tplg_parse_stream_caps
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionPCM",
|
|
||||||
+ .parser = tplg_parse_pcm
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionDAI",
|
|
||||||
+ .parser = tplg_parse_dai
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionHWConfig",
|
|
||||||
+ .parser = tplg_parse_hw_config
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionLink",
|
|
||||||
+ .parser = tplg_parse_link
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionBE",
|
|
||||||
+ .parser = tplg_parse_link
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionCC",
|
|
||||||
+ .parser = tplg_parse_cc
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionGraph",
|
|
||||||
+ .parser = tplg_parse_dapm_graph
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionText",
|
|
||||||
+ .parser = tplg_parse_text
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionData",
|
|
||||||
+ .parser = tplg_parse_data
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionVendorTokens",
|
|
||||||
+ .parser = tplg_parse_tokens
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionVendorTuples",
|
|
||||||
+ .parser = tplg_parse_tuples
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .id = "SectionManifest",
|
|
||||||
+ .parser = tplg_parse_manifest_data
|
|
||||||
+ },
|
|
||||||
+ };
|
|
||||||
+ int (*parser)(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id;
|
|
||||||
+ unsigned int idx;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
@@ -159,145 +238,23 @@ static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
||||||
if (snd_config_get_id(n, &id) < 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- if (strcmp(id, "SectionTLV") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_tlv,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
+ parser = NULL;
|
|
||||||
+ for (idx = 0; idx < ARRAY_SIZE(parsers); idx++) {
|
|
||||||
+ p = &parsers[idx];
|
|
||||||
+ if (strcmp(id, p->id) == 0) {
|
|
||||||
+ parser = p->parser;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (strcmp(id, "SectionControlMixer") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_control_mixer, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
+ if (parser == NULL) {
|
|
||||||
+ SNDERR("error: unknown section %s\n", id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (strcmp(id, "SectionControlEnum") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_control_enum, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionControlBytes") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_control_bytes, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionWidget") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_dapm_widget, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionPCMCapabilities") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_stream_caps, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionPCM") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_pcm, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionDAI") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_dai, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionHWConfig") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_hw_config,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionLink") == 0
|
|
||||||
- || strcmp(id, "SectionBE") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_link,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionCC") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_cc,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionGraph") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_dapm_graph, NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionText") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_text,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionData") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_data,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionVendorTokens") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_tokens,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionVendorTuples") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n, tplg_parse_tuples,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (strcmp(id, "SectionManifest") == 0) {
|
|
||||||
- err = tplg_parse_compound(tplg, n,
|
|
||||||
- tplg_parse_manifest_data,
|
|
||||||
- NULL);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- SNDERR("error: unknown section %s\n", id);
|
|
||||||
+ err = tplg_parse_compound(tplg, n, parser, NULL);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 87e6c9a517de..77a681897a85 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -202,59 +202,26 @@ int tplg_parse_compound(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
int tplg_write_data(snd_tplg_t *tplg);
|
|
||||||
|
|
||||||
-int tplg_parse_tlv(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_text(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_tokens(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_tuples(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
+int tplg_parse_tlv(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_text(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_tokens(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_tuples(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_manifest_data(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_control_bytes(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_control_enum(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_control_mixer(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_dapm_widget(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_stream_caps(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_dai(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_link(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_cc(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
+int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
|
|
||||||
void tplg_free_tuples(void *obj);
|
|
||||||
|
|
||||||
-int tplg_parse_manifest_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_control_enum(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_pcm(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_dai(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_link(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_cc(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
-int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED);
|
|
||||||
-
|
|
||||||
int tplg_build_data(snd_tplg_t *tplg);
|
|
||||||
int tplg_build_manifest_data(snd_tplg_t *tplg);
|
|
||||||
int tplg_build_controls(snd_tplg_t *tplg);
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,208 +0,0 @@
|
|||||||
From d52eaba63dfe1d845663a4cd1bf676fafc43874a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sun, 15 Dec 2019 16:03:29 +0100
|
|
||||||
Subject: [PATCH 40/63] topology: add snd_tplg_load() remove
|
|
||||||
snd_tplg_build_bin_file()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/topology.h | 16 ++++-----
|
|
||||||
src/topology/parser.c | 96 ++++++++++++++++++---------------------------------
|
|
||||||
2 files changed, 41 insertions(+), 71 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/topology.h b/include/topology.h
|
|
||||||
index c9ef554a610f..c9f4ffea27de 100644
|
|
||||||
--- a/include/topology.h
|
|
||||||
+++ b/include/topology.h
|
|
||||||
@@ -784,25 +784,23 @@ snd_tplg_t *snd_tplg_new(void);
|
|
||||||
void snd_tplg_free(snd_tplg_t *tplg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
- * \brief Parse and build topology text file into binary file.
|
|
||||||
+ * \brief Load topology from the text buffer.
|
|
||||||
* \param tplg Topology instance.
|
|
||||||
- * \param infile Topology text input file to be parsed
|
|
||||||
- * \param outfile Binary topology output file.
|
|
||||||
+ * \param buf Text buffer.
|
|
||||||
+ * \param size Text buffer size in bytes.
|
|
||||||
* \return Zero on success, otherwise a negative error code
|
|
||||||
*/
|
|
||||||
-int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
|
|
||||||
- const char *outfile);
|
|
||||||
+int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Parse and build topology text file into binary file.
|
|
||||||
* \param tplg Topology instance.
|
|
||||||
* \param infile Topology text input file to be parsed
|
|
||||||
- * \param bin Binary topology output buffer (malloc).
|
|
||||||
- * \param size Binary topology output buffer size in bytes.
|
|
||||||
+ * \param outfile Binary topology output file.
|
|
||||||
* \return Zero on success, otherwise a negative error code
|
|
||||||
*/
|
|
||||||
-int snd_tplg_build_bin_file(snd_tplg_t *tplg, const char *infile,
|
|
||||||
- void **bin, size_t *size);
|
|
||||||
+int snd_tplg_build_file(snd_tplg_t *tplg, const char *infile,
|
|
||||||
+ const char *outfile);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Enable verbose reporting of binary file output
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 82af7cc518d8..ed864d3223c4 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -259,52 +259,30 @@ static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int tplg_load_config(const char *file, snd_config_t **cfg)
|
|
||||||
+static int tplg_load_config(snd_tplg_t *tplg, snd_input_t *in)
|
|
||||||
{
|
|
||||||
- FILE *fp;
|
|
||||||
- snd_input_t *in;
|
|
||||||
snd_config_t *top;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
- fp = fopen(file, "r");
|
|
||||||
- if (fp == NULL) {
|
|
||||||
- SNDERR("error: could not open configuration file %s",
|
|
||||||
- file);
|
|
||||||
- return -errno;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- ret = snd_input_stdio_attach(&in, fp, 1);
|
|
||||||
- if (ret < 0) {
|
|
||||||
- fclose(fp);
|
|
||||||
- SNDERR("error: could not attach stdio %s", file);
|
|
||||||
- return ret;
|
|
||||||
- }
|
|
||||||
ret = snd_config_top(&top);
|
|
||||||
if (ret < 0)
|
|
||||||
- goto err;
|
|
||||||
+ return ret;
|
|
||||||
|
|
||||||
ret = snd_config_load(top, in);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("error: could not load configuration file %s",
|
|
||||||
- file);
|
|
||||||
- goto err_load;
|
|
||||||
+ SNDERR("error: could not load configuration");
|
|
||||||
+ snd_config_delete(top);
|
|
||||||
+ return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
- ret = snd_input_close(in);
|
|
||||||
+ ret = tplg_parse_config(tplg, top);
|
|
||||||
+ snd_config_delete(top);
|
|
||||||
if (ret < 0) {
|
|
||||||
- in = NULL;
|
|
||||||
- goto err_load;
|
|
||||||
+ SNDERR("error: failed to parse topology");
|
|
||||||
+ return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
- *cfg = top;
|
|
||||||
return 0;
|
|
||||||
-
|
|
||||||
-err_load:
|
|
||||||
- snd_config_delete(top);
|
|
||||||
-err:
|
|
||||||
- if (in)
|
|
||||||
- snd_input_close(in);
|
|
||||||
- return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tplg_build_integ(snd_tplg_t *tplg)
|
|
||||||
@@ -350,26 +328,20 @@ static int tplg_build_integ(snd_tplg_t *tplg)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int tplg_load(snd_tplg_t *tplg, const char *infile)
|
|
||||||
+int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size)
|
|
||||||
{
|
|
||||||
- snd_config_t *cfg = NULL;
|
|
||||||
- int err = 0;
|
|
||||||
-
|
|
||||||
- err = tplg_load_config(infile, &cfg);
|
|
||||||
- if (err < 0) {
|
|
||||||
- SNDERR("error: failed to load topology file %s\n",
|
|
||||||
- infile);
|
|
||||||
- return err;
|
|
||||||
- }
|
|
||||||
+ snd_input_t *in;
|
|
||||||
+ int err;
|
|
||||||
|
|
||||||
- err = tplg_parse_config(tplg, cfg);
|
|
||||||
+ err = snd_input_buffer_open(&in, buf, size);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to parse topology\n");
|
|
||||||
+ SNDERR("error: could not create input buffer");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
- snd_config_delete(cfg);
|
|
||||||
- return 0;
|
|
||||||
+ err = tplg_load_config(tplg, in);
|
|
||||||
+ snd_input_close(in);
|
|
||||||
+ return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tplg_build(snd_tplg_t *tplg)
|
|
||||||
@@ -394,26 +366,30 @@ int snd_tplg_build_file(snd_tplg_t *tplg,
|
|
||||||
const char *infile,
|
|
||||||
const char *outfile)
|
|
||||||
{
|
|
||||||
+ FILE *fp;
|
|
||||||
+ snd_input_t *in;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
- err = tplg_load(tplg, infile);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
-
|
|
||||||
- return snd_tplg_build(tplg, outfile);
|
|
||||||
-}
|
|
||||||
+ fp = fopen(infile, "r");
|
|
||||||
+ if (fp == NULL) {
|
|
||||||
+ SNDERR("error: could not open configuration file %s",
|
|
||||||
+ infile);
|
|
||||||
+ return -errno;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
-int snd_tplg_build_bin_file(snd_tplg_t *tplg,
|
|
||||||
- const char *infile,
|
|
||||||
- void **bin, size_t *size)
|
|
||||||
-{
|
|
||||||
- int err;
|
|
||||||
+ err = snd_input_stdio_attach(&in, fp, 1);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ fclose(fp);
|
|
||||||
+ SNDERR("error: could not attach stdio %s", infile);
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- err = tplg_load(tplg, infile);
|
|
||||||
+ err = tplg_load_config(tplg, in);
|
|
||||||
+ snd_input_close(in);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
- return snd_tplg_build_bin(tplg, bin, size);
|
|
||||||
+ return snd_tplg_build(tplg, outfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
@@ -476,10 +452,6 @@ int snd_tplg_build_bin(snd_tplg_t *tplg,
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
|
|
||||||
- err = tplg_build(tplg);
|
|
||||||
- if (err < 0)
|
|
||||||
- return err;
|
|
||||||
-
|
|
||||||
err = tplg_build(tplg);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,464 +0,0 @@
|
|||||||
From 4f076f5b69a873418ecb826a4198e4d95a3a2a6f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sun, 15 Dec 2019 16:15:29 +0100
|
|
||||||
Subject: [PATCH 41/63] topology: move the topology element table from builder
|
|
||||||
to elem
|
|
||||||
|
|
||||||
- use offsetof() for the lists
|
|
||||||
- add other info to describe the elements
|
|
||||||
- use the table in the element constructor
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 98 ++++----------------
|
|
||||||
src/topology/ctl.c | 7 +-
|
|
||||||
src/topology/elem.c | 232 ++++++++++++++++++++++++++++++++--------------
|
|
||||||
src/topology/tplg_local.h | 15 +++
|
|
||||||
4 files changed, 199 insertions(+), 153 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index 40943b56e4aa..cadb55830809 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -236,83 +236,20 @@ static ssize_t write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
|
|
||||||
int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
- struct wtable {
|
|
||||||
- const char *name;
|
|
||||||
- struct list_head *list;
|
|
||||||
- int type;
|
|
||||||
- int tsoc;
|
|
||||||
- } *wptr, wtable[] = {
|
|
||||||
- {
|
|
||||||
- .name = "control mixer",
|
|
||||||
- .list = &tplg->mixer_list,
|
|
||||||
- .type = SND_TPLG_TYPE_MIXER,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_MIXER,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "control enum",
|
|
||||||
- .list = &tplg->enum_list,
|
|
||||||
- .type = SND_TPLG_TYPE_ENUM,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_ENUM,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "control extended (bytes)",
|
|
||||||
- .list = &tplg->bytes_ext_list,
|
|
||||||
- .type = SND_TPLG_TYPE_BYTES,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_BYTES,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "dapm widget",
|
|
||||||
- .list = &tplg->widget_list,
|
|
||||||
- .type = SND_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "pcm",
|
|
||||||
- .list = &tplg->pcm_list,
|
|
||||||
- .type = SND_TPLG_TYPE_PCM,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_PCM,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "physical dai",
|
|
||||||
- .list = &tplg->dai_list,
|
|
||||||
- .type = SND_TPLG_TYPE_DAI,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_DAI,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "be",
|
|
||||||
- .list = &tplg->be_list,
|
|
||||||
- .type = SND_TPLG_TYPE_BE,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_BACKEND_LINK,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "cc",
|
|
||||||
- .list = &tplg->cc_list,
|
|
||||||
- .type = SND_TPLG_TYPE_CC,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_CODEC_LINK,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "route (dapm graph)",
|
|
||||||
- .list = &tplg->route_list,
|
|
||||||
- .type = SND_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .name = "private data",
|
|
||||||
- .list = &tplg->pdata_list,
|
|
||||||
- .type = SND_TPLG_TYPE_DATA,
|
|
||||||
- .tsoc = SND_SOC_TPLG_TYPE_PDATA,
|
|
||||||
- },
|
|
||||||
- };
|
|
||||||
-
|
|
||||||
+ struct tplg_table *tptr;
|
|
||||||
+ struct list_head *list;
|
|
||||||
ssize_t ret;
|
|
||||||
size_t total_size, size;
|
|
||||||
unsigned int index;
|
|
||||||
|
|
||||||
/* calculate total size */
|
|
||||||
total_size = calc_manifest_size(tplg);
|
|
||||||
- for (index = 0; index < ARRAY_SIZE(wtable); index++) {
|
|
||||||
- wptr = &wtable[index];
|
|
||||||
- size = calc_real_size(wptr->list);
|
|
||||||
+ for (index = 0; index < tplg_table_items; index++) {
|
|
||||||
+ tptr = &tplg_table[index];
|
|
||||||
+ if (!tptr->build)
|
|
||||||
+ continue;
|
|
||||||
+ list = (struct list_head *)((void *)tplg + tptr->loff);
|
|
||||||
+ size = calc_real_size(list);
|
|
||||||
total_size += size;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -334,20 +271,23 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* write all blocks */
|
|
||||||
- for (index = 0; index < ARRAY_SIZE(wtable); index++) {
|
|
||||||
- wptr = &wtable[index];
|
|
||||||
+ for (index = 0; index < tplg_table_items; index++) {
|
|
||||||
+ tptr = &tplg_table[index];
|
|
||||||
+ if (!tptr->build)
|
|
||||||
+ continue;
|
|
||||||
+ list = (struct list_head *)((void *)tplg + tptr->loff);
|
|
||||||
/* calculate the block size in bytes for all elems in this list */
|
|
||||||
- size = calc_block_size(wptr->list);
|
|
||||||
+ size = calc_block_size(list);
|
|
||||||
if (size == 0)
|
|
||||||
continue;
|
|
||||||
verbose(tplg, "block size for type %s (%d:%d) is 0x%zx/%zd\n",
|
|
||||||
- wptr->name, wptr->type,
|
|
||||||
- wptr->tsoc, size, size);
|
|
||||||
- ret = write_elem_block(tplg, wptr->list, size,
|
|
||||||
- wptr->tsoc, wptr->name);
|
|
||||||
+ tptr->name, tptr->type,
|
|
||||||
+ tptr->tsoc, size, size);
|
|
||||||
+ ret = write_elem_block(tplg, list, size,
|
|
||||||
+ tptr->tsoc, tptr->name);
|
|
||||||
if (ret < 0) {
|
|
||||||
SNDERR("failed to write %s elements: %s\n",
|
|
||||||
- wptr->name, snd_strerror(-ret));
|
|
||||||
+ tptr->name, snd_strerror(-ret));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index 9190efefb575..539329cd661f 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -284,18 +284,13 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
- struct snd_soc_tplg_ctl_tlv *tplg_tlv;
|
|
||||||
+ struct snd_soc_tplg_ctl_tlv *tplg_tlv = elem->tlv;
|
|
||||||
struct snd_soc_tplg_tlv_dbscale *scale;
|
|
||||||
const char *id = NULL;
|
|
||||||
int val;
|
|
||||||
|
|
||||||
tplg_dbg(" scale: %s\n", elem->id);
|
|
||||||
|
|
||||||
- tplg_tlv = calloc(1, sizeof(*tplg_tlv));
|
|
||||||
- if (!tplg_tlv)
|
|
||||||
- return -ENOMEM;
|
|
||||||
-
|
|
||||||
- elem->tlv = tplg_tlv;
|
|
||||||
tplg_tlv->size = sizeof(struct snd_soc_tplg_ctl_tlv);
|
|
||||||
tplg_tlv->type = SNDRV_CTL_TLVT_DB_SCALE;
|
|
||||||
scale = &tplg_tlv->scale;
|
|
||||||
diff --git a/src/topology/elem.c b/src/topology/elem.c
|
|
||||||
index f2076f7958aa..92ca7da4c4aa 100644
|
|
||||||
--- a/src/topology/elem.c
|
|
||||||
+++ b/src/topology/elem.c
|
|
||||||
@@ -20,6 +20,154 @@
|
|
||||||
#include "list.h"
|
|
||||||
#include "tplg_local.h"
|
|
||||||
|
|
||||||
+struct tplg_table tplg_table[] = {
|
|
||||||
+ {
|
|
||||||
+ .name = "manifest",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, manifest_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_MANIFEST,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_MANIFEST,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_manifest),
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "control mixer",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, mixer_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_MIXER,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_MIXER,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_mixer_control),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "control enum",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, enum_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_ENUM,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_ENUM,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_enum_control),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "control extended (bytes)",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, bytes_ext_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_BYTES,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_BYTES,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_bytes_control),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "dapm widget",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, widget_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_dapm_widget),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "pcm",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, pcm_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_PCM,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_PCM,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_pcm),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "physical dai",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, dai_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_DAI,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_DAI,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_dai),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "be",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, be_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_BE,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_BACKEND_LINK,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_link_config),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "cc",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, cc_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_CC,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_CODEC_LINK,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_link_config),
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "route (dapm graph)",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, route_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
+ .build = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "private data",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, pdata_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_DATA,
|
|
||||||
+ .tsoc = SND_SOC_TPLG_TYPE_PDATA,
|
|
||||||
+ .build = 1,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "text",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, text_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_TEXT,
|
|
||||||
+ .size = sizeof(struct tplg_texts),
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "tlv",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, tlv_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_TLV,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_ctl_tlv),
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "stream config",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, pcm_config_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_STREAM_CONFIG,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_stream),
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "stream capabilities",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, pcm_caps_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_STREAM_CAPS,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_stream_caps),
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "token",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, token_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_TOKEN,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "tuple",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, tuple_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_TUPLE,
|
|
||||||
+ .free = tplg_free_tuples,
|
|
||||||
+ .enew = 1,
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ .name = "hw config",
|
|
||||||
+ .loff = offsetof(snd_tplg_t, hw_cfg_list),
|
|
||||||
+ .type = SND_TPLG_TYPE_HW_CONFIG,
|
|
||||||
+ .size = sizeof(struct snd_soc_tplg_hw_config),
|
|
||||||
+ .enew = 1,
|
|
||||||
+ }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+unsigned int tplg_table_items = ARRAY_SIZE(tplg_table);
|
|
||||||
+
|
|
||||||
int tplg_ref_add(struct tplg_elem *elem, int type, const char* id)
|
|
||||||
{
|
|
||||||
struct tplg_ref *ref;
|
|
||||||
@@ -152,9 +300,12 @@ struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
|
||||||
const char *name,
|
|
||||||
enum snd_tplg_type type)
|
|
||||||
{
|
|
||||||
+ struct tplg_table *tptr;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
+ struct list_head *list;
|
|
||||||
const char *id;
|
|
||||||
int obj_size = 0;
|
|
||||||
+ unsigned index;
|
|
||||||
void *obj;
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -191,79 +342,24 @@ struct tplg_elem* tplg_elem_new_common(snd_tplg_t *tplg,
|
|
||||||
} else if (name != NULL)
|
|
||||||
snd_strlcpy(elem->id, name, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
- switch (type) {
|
|
||||||
- case SND_TPLG_TYPE_DATA:
|
|
||||||
- tplg_elem_insert(elem, &tplg->pdata_list);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_MANIFEST:
|
|
||||||
- tplg_elem_insert(elem, &tplg->manifest_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_manifest);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_TEXT:
|
|
||||||
- tplg_elem_insert(elem, &tplg->text_list);
|
|
||||||
- obj_size = sizeof(struct tplg_texts);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_TLV:
|
|
||||||
- tplg_elem_insert(elem, &tplg->tlv_list);
|
|
||||||
- elem->size = sizeof(struct snd_soc_tplg_ctl_tlv);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_BYTES:
|
|
||||||
- tplg_elem_insert(elem, &tplg->bytes_ext_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_bytes_control);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_ENUM:
|
|
||||||
- tplg_elem_insert(elem, &tplg->enum_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_enum_control);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_MIXER:
|
|
||||||
- tplg_elem_insert(elem, &tplg->mixer_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_mixer_control);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_DAPM_WIDGET:
|
|
||||||
- tplg_elem_insert(elem, &tplg->widget_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_dapm_widget);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_STREAM_CONFIG:
|
|
||||||
- tplg_elem_insert(elem, &tplg->pcm_config_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_stream);
|
|
||||||
+ for (index = 0; index < tplg_table_items; index++) {
|
|
||||||
+ tptr = &tplg_table[index];
|
|
||||||
+ if (!tptr->enew)
|
|
||||||
+ continue;
|
|
||||||
+ if ((int)type != tptr->type)
|
|
||||||
+ continue;
|
|
||||||
break;
|
|
||||||
- case SND_TPLG_TYPE_STREAM_CAPS:
|
|
||||||
- tplg_elem_insert(elem, &tplg->pcm_caps_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_stream_caps);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_PCM:
|
|
||||||
- tplg_elem_insert(elem, &tplg->pcm_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_pcm);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_DAI:
|
|
||||||
- tplg_elem_insert(elem, &tplg->dai_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_dai);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_BE:
|
|
||||||
- case SND_TPLG_TYPE_LINK:
|
|
||||||
- tplg_elem_insert(elem, &tplg->be_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_link_config);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_CC:
|
|
||||||
- tplg_elem_insert(elem, &tplg->cc_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_link_config);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_TOKEN:
|
|
||||||
- tplg_elem_insert(elem, &tplg->token_list);
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_TUPLE:
|
|
||||||
- tplg_elem_insert(elem, &tplg->tuple_list);
|
|
||||||
- elem->free = tplg_free_tuples;
|
|
||||||
- break;
|
|
||||||
- case SND_TPLG_TYPE_HW_CONFIG:
|
|
||||||
- tplg_elem_insert(elem, &tplg->hw_cfg_list);
|
|
||||||
- obj_size = sizeof(struct snd_soc_tplg_hw_config);
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
+ }
|
|
||||||
+ if (index >= tplg_table_items) {
|
|
||||||
free(elem);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ list = (struct list_head *)((void *)tplg + tptr->loff);
|
|
||||||
+ tplg_elem_insert(elem, list);
|
|
||||||
+ obj_size = tptr->size;
|
|
||||||
+ elem->free = tptr->free;
|
|
||||||
+
|
|
||||||
/* create new object too if required */
|
|
||||||
if (obj_size > 0) {
|
|
||||||
obj = calloc(1, obj_size);
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 77a681897a85..0987898f8336 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -196,6 +196,21 @@ struct map_elem {
|
|
||||||
int id;
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* mapping table */
|
|
||||||
+struct tplg_table {
|
|
||||||
+ const char *name;
|
|
||||||
+ off_t loff;
|
|
||||||
+ size_t size;
|
|
||||||
+ int type;
|
|
||||||
+ int tsoc;
|
|
||||||
+ unsigned build: 1;
|
|
||||||
+ unsigned enew: 1;
|
|
||||||
+ void (*free)(void *);
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+extern struct tplg_table tplg_table[];
|
|
||||||
+extern unsigned int tplg_table_items;
|
|
||||||
+
|
|
||||||
int tplg_parse_compound(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
int (*fcn)(snd_tplg_t *, snd_config_t *, void *),
|
|
||||||
void *private);
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,331 +0,0 @@
|
|||||||
From 4a0efdc87355d5789876e20b9530dc85224ad281 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sun, 15 Dec 2019 17:24:50 +0100
|
|
||||||
Subject: [PATCH 42/63] topology: add parser to the tplg_table
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/elem.c | 35 ++++++++++++++++++
|
|
||||||
src/topology/parser.c | 90 +++++------------------------------------------
|
|
||||||
src/topology/tplg_local.h | 3 ++
|
|
||||||
3 files changed, 47 insertions(+), 81 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/elem.c b/src/topology/elem.c
|
|
||||||
index 92ca7da4c4aa..e79a68b71a91 100644
|
|
||||||
--- a/src/topology/elem.c
|
|
||||||
+++ b/src/topology/elem.c
|
|
||||||
@@ -23,112 +23,139 @@
|
|
||||||
struct tplg_table tplg_table[] = {
|
|
||||||
{
|
|
||||||
.name = "manifest",
|
|
||||||
+ .id = "SectionManifest",
|
|
||||||
.loff = offsetof(snd_tplg_t, manifest_list),
|
|
||||||
.type = SND_TPLG_TYPE_MANIFEST,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_MANIFEST,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_manifest),
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_manifest_data,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "control mixer",
|
|
||||||
+ .id = "SectionControlMixer",
|
|
||||||
.loff = offsetof(snd_tplg_t, mixer_list),
|
|
||||||
.type = SND_TPLG_TYPE_MIXER,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_MIXER,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_mixer_control),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_control_mixer,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "control enum",
|
|
||||||
+ .id = "SectionControlEnum",
|
|
||||||
.loff = offsetof(snd_tplg_t, enum_list),
|
|
||||||
.type = SND_TPLG_TYPE_ENUM,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_ENUM,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_enum_control),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_control_enum,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "control extended (bytes)",
|
|
||||||
+ .id = "SectionControlBytes",
|
|
||||||
.loff = offsetof(snd_tplg_t, bytes_ext_list),
|
|
||||||
.type = SND_TPLG_TYPE_BYTES,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_BYTES,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_bytes_control),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_control_bytes,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "dapm widget",
|
|
||||||
+ .id = "SectionWidget",
|
|
||||||
.loff = offsetof(snd_tplg_t, widget_list),
|
|
||||||
.type = SND_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_DAPM_WIDGET,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_dapm_widget),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_dapm_widget,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "pcm",
|
|
||||||
+ .id = "SectionPCM",
|
|
||||||
.loff = offsetof(snd_tplg_t, pcm_list),
|
|
||||||
.type = SND_TPLG_TYPE_PCM,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_PCM,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_pcm),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_pcm,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "physical dai",
|
|
||||||
+ .id = "SectionDAI",
|
|
||||||
.loff = offsetof(snd_tplg_t, dai_list),
|
|
||||||
.type = SND_TPLG_TYPE_DAI,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_DAI,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_dai),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_dai,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "be",
|
|
||||||
+ .id = "SectionBE",
|
|
||||||
+ .id2 = "SectionLink",
|
|
||||||
.loff = offsetof(snd_tplg_t, be_list),
|
|
||||||
.type = SND_TPLG_TYPE_BE,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_BACKEND_LINK,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_link_config),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_link,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "cc",
|
|
||||||
+ .id = "SectionCC",
|
|
||||||
.loff = offsetof(snd_tplg_t, cc_list),
|
|
||||||
.type = SND_TPLG_TYPE_CC,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_CODEC_LINK,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_link_config),
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_cc,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "route (dapm graph)",
|
|
||||||
+ .id = "SectionGraph",
|
|
||||||
.loff = offsetof(snd_tplg_t, route_list),
|
|
||||||
.type = SND_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_DAPM_GRAPH,
|
|
||||||
.build = 1,
|
|
||||||
+ .parse = tplg_parse_dapm_graph,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "private data",
|
|
||||||
+ .id = "SectionData",
|
|
||||||
.loff = offsetof(snd_tplg_t, pdata_list),
|
|
||||||
.type = SND_TPLG_TYPE_DATA,
|
|
||||||
.tsoc = SND_SOC_TPLG_TYPE_PDATA,
|
|
||||||
.build = 1,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_data,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "text",
|
|
||||||
+ .id = "SectionText",
|
|
||||||
.loff = offsetof(snd_tplg_t, text_list),
|
|
||||||
.type = SND_TPLG_TYPE_TEXT,
|
|
||||||
.size = sizeof(struct tplg_texts),
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_text,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "tlv",
|
|
||||||
+ .id = "SectionTLV",
|
|
||||||
.loff = offsetof(snd_tplg_t, tlv_list),
|
|
||||||
.type = SND_TPLG_TYPE_TLV,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_ctl_tlv),
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_tlv,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "stream config",
|
|
||||||
@@ -139,30 +166,38 @@ struct tplg_table tplg_table[] = {
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "stream capabilities",
|
|
||||||
+ .id = "SectionPCMCapabilities",
|
|
||||||
.loff = offsetof(snd_tplg_t, pcm_caps_list),
|
|
||||||
.type = SND_TPLG_TYPE_STREAM_CAPS,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_stream_caps),
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_stream_caps,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "token",
|
|
||||||
+ .id = "SectionVendorTokens",
|
|
||||||
.loff = offsetof(snd_tplg_t, token_list),
|
|
||||||
.type = SND_TPLG_TYPE_TOKEN,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_tokens,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "tuple",
|
|
||||||
+ .id = "SectionVendorTuples",
|
|
||||||
.loff = offsetof(snd_tplg_t, tuple_list),
|
|
||||||
.type = SND_TPLG_TYPE_TUPLE,
|
|
||||||
.free = tplg_free_tuples,
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_tuples,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.name = "hw config",
|
|
||||||
+ .id = "SectionHWConfig",
|
|
||||||
.loff = offsetof(snd_tplg_t, hw_cfg_list),
|
|
||||||
.type = SND_TPLG_TYPE_HW_CONFIG,
|
|
||||||
.size = sizeof(struct snd_soc_tplg_hw_config),
|
|
||||||
.enew = 1,
|
|
||||||
+ .parse = tplg_parse_hw_config,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index ed864d3223c4..11202769391c 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -142,87 +142,11 @@ int tplg_parse_compound(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
||||||
{
|
|
||||||
- static struct _parser {
|
|
||||||
- const char *id;
|
|
||||||
- int (*parser)(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
- } *p, parsers[] = {
|
|
||||||
- {
|
|
||||||
- .id = "SectionTLV",
|
|
||||||
- .parser = tplg_parse_tlv
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionControlMixer",
|
|
||||||
- .parser = tplg_parse_control_mixer
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionControlEnum",
|
|
||||||
- .parser = tplg_parse_control_enum
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionControlBytes",
|
|
||||||
- .parser = tplg_parse_control_bytes
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionWidget",
|
|
||||||
- .parser = tplg_parse_dapm_widget
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionPCMCapabilities",
|
|
||||||
- .parser = tplg_parse_stream_caps
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionPCM",
|
|
||||||
- .parser = tplg_parse_pcm
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionDAI",
|
|
||||||
- .parser = tplg_parse_dai
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionHWConfig",
|
|
||||||
- .parser = tplg_parse_hw_config
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionLink",
|
|
||||||
- .parser = tplg_parse_link
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionBE",
|
|
||||||
- .parser = tplg_parse_link
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionCC",
|
|
||||||
- .parser = tplg_parse_cc
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionGraph",
|
|
||||||
- .parser = tplg_parse_dapm_graph
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionText",
|
|
||||||
- .parser = tplg_parse_text
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionData",
|
|
||||||
- .parser = tplg_parse_data
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionVendorTokens",
|
|
||||||
- .parser = tplg_parse_tokens
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionVendorTuples",
|
|
||||||
- .parser = tplg_parse_tuples
|
|
||||||
- },
|
|
||||||
- {
|
|
||||||
- .id = "SectionManifest",
|
|
||||||
- .parser = tplg_parse_manifest_data
|
|
||||||
- },
|
|
||||||
- };
|
|
||||||
int (*parser)(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
const char *id;
|
|
||||||
+ struct tplg_table *p;
|
|
||||||
unsigned int idx;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
@@ -239,10 +163,14 @@ static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
parser = NULL;
|
|
||||||
- for (idx = 0; idx < ARRAY_SIZE(parsers); idx++) {
|
|
||||||
- p = &parsers[idx];
|
|
||||||
- if (strcmp(id, p->id) == 0) {
|
|
||||||
- parser = p->parser;
|
|
||||||
+ for (idx = 0; idx < tplg_table_items; idx++) {
|
|
||||||
+ p = &tplg_table[idx];
|
|
||||||
+ if (p->id && strcmp(id, p->id) == 0) {
|
|
||||||
+ parser = p->parse;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ if (p->id2 && strcmp(id, p->id2) == 0) {
|
|
||||||
+ parser = p->parse;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 0987898f8336..bea88ba35608 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -199,6 +199,8 @@ struct map_elem {
|
|
||||||
/* mapping table */
|
|
||||||
struct tplg_table {
|
|
||||||
const char *name;
|
|
||||||
+ const char *id;
|
|
||||||
+ const char *id2;
|
|
||||||
off_t loff;
|
|
||||||
size_t size;
|
|
||||||
int type;
|
|
||||||
@@ -206,6 +208,7 @@ struct tplg_table {
|
|
||||||
unsigned build: 1;
|
|
||||||
unsigned enew: 1;
|
|
||||||
void (*free)(void *);
|
|
||||||
+ int (*parse)(snd_tplg_t *tplg, snd_config_t *cfg, void *priv);
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct tplg_table tplg_table[];
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,109 +0,0 @@
|
|||||||
From b336aea507b80493cdae439f09f710eec4bcd4ae Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 20 Dec 2019 14:59:00 +0100
|
|
||||||
Subject: [PATCH 44/63] topology: add snd_tplg_create() with flags
|
|
||||||
|
|
||||||
Add SND_TPLG_CREATE_VERBOSE and SND_TPLG_CREATE_DAPM_NOSORT
|
|
||||||
flags for the special operations.
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/topology.h | 10 ++++++++++
|
|
||||||
src/topology/dapm.c | 5 ++++-
|
|
||||||
src/topology/parser.c | 10 +++++++++-
|
|
||||||
src/topology/tplg_local.h | 1 +
|
|
||||||
4 files changed, 24 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/topology.h b/include/topology.h
|
|
||||||
index 69aa5ed733e3..63c13a9885e9 100644
|
|
||||||
--- a/include/topology.h
|
|
||||||
+++ b/include/topology.h
|
|
||||||
@@ -771,12 +771,22 @@ enum snd_tplg_type {
|
|
||||||
/** Fit for all user cases */
|
|
||||||
#define SND_TPLG_INDEX_ALL 0
|
|
||||||
|
|
||||||
+/** Flags for the snd_tplg_create */
|
|
||||||
+#define SND_TPLG_CREATE_VERBOSE (1<<0) /*!< Verbose output */
|
|
||||||
+#define SND_TPLG_CREATE_DAPM_NOSORT (1<<1) /*!< Do not sort DAPM objects by index */
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* \brief Create a new topology parser instance.
|
|
||||||
* \return New topology parser instance
|
|
||||||
*/
|
|
||||||
snd_tplg_t *snd_tplg_new(void);
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * \brief Create a new topology parser instance.
|
|
||||||
+ * \return New topology parser instance
|
|
||||||
+ */
|
|
||||||
+snd_tplg_t *snd_tplg_create(int flags);
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* \brief Free a topology parser instance.
|
|
||||||
* \param tplg Topology parser instance
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index 2bdacedca125..d6c15fc1dfaa 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -268,7 +268,10 @@ struct tplg_elem *tplg_elem_new_route(snd_tplg_t *tplg, int index)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
elem->index = index;
|
|
||||||
- tplg_elem_insert(elem, &tplg->route_list);
|
|
||||||
+ if (tplg->dapm_sort)
|
|
||||||
+ tplg_elem_insert(elem, &tplg->route_list);
|
|
||||||
+ else
|
|
||||||
+ list_add_tail(&elem->list, &tplg->route_list);
|
|
||||||
strcpy(elem->id, "line");
|
|
||||||
elem->type = SND_TPLG_TYPE_DAPM_GRAPH;
|
|
||||||
elem->size = sizeof(*line);
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index de5edd1b6591..8f810f751533 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -432,7 +432,7 @@ static bool is_little_endian(void)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
-snd_tplg_t *snd_tplg_new(void)
|
|
||||||
+snd_tplg_t *snd_tplg_create(int flags)
|
|
||||||
{
|
|
||||||
snd_tplg_t *tplg;
|
|
||||||
|
|
||||||
@@ -445,6 +445,9 @@ snd_tplg_t *snd_tplg_new(void)
|
|
||||||
if (!tplg)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
+ tplg->verbose = !!(flags & SND_TPLG_CREATE_VERBOSE);
|
|
||||||
+ tplg->dapm_sort = (flags & SND_TPLG_CREATE_DAPM_NOSORT) == 0;
|
|
||||||
+
|
|
||||||
tplg->manifest.size = sizeof(struct snd_soc_tplg_manifest);
|
|
||||||
|
|
||||||
INIT_LIST_HEAD(&tplg->tlv_list);
|
|
||||||
@@ -469,6 +472,11 @@ snd_tplg_t *snd_tplg_new(void)
|
|
||||||
return tplg;
|
|
||||||
}
|
|
||||||
|
|
||||||
+snd_tplg_t *snd_tplg_new(void)
|
|
||||||
+{
|
|
||||||
+ return snd_tplg_create(0);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void snd_tplg_free(snd_tplg_t *tplg)
|
|
||||||
{
|
|
||||||
free(tplg->bin);
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 42a3aa96ba0e..74b3a55cada4 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -66,6 +66,7 @@ struct snd_tplg {
|
|
||||||
size_t bin_size;
|
|
||||||
|
|
||||||
int verbose;
|
|
||||||
+ unsigned int dapm_sort: 1;
|
|
||||||
unsigned int version;
|
|
||||||
|
|
||||||
/* runtime state */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
From 0793ef064a97afd0b1335af0d187ede227b90582 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 20 Dec 2019 21:28:30 +0100
|
|
||||||
Subject: [PATCH 45/63] topology: add snd_tplg_version() function
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/topology.h | 6 ++++++
|
|
||||||
src/topology/parser.c | 5 +++++
|
|
||||||
2 files changed, 11 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/topology.h b/include/topology.h
|
|
||||||
index 63c13a9885e9..37bced1a4434 100644
|
|
||||||
--- a/include/topology.h
|
|
||||||
+++ b/include/topology.h
|
|
||||||
@@ -775,6 +775,12 @@ enum snd_tplg_type {
|
|
||||||
#define SND_TPLG_CREATE_VERBOSE (1<<0) /*!< Verbose output */
|
|
||||||
#define SND_TPLG_CREATE_DAPM_NOSORT (1<<1) /*!< Do not sort DAPM objects by index */
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * \brief Return the version of the topology library.
|
|
||||||
+ * \return A static string with the version number.
|
|
||||||
+ */
|
|
||||||
+const char *snd_tplg_version(void);
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* \brief Create a new topology parser instance.
|
|
||||||
* \return New topology parser instance
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 8f810f751533..1eaa24bd42f5 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -503,3 +503,8 @@ void snd_tplg_free(snd_tplg_t *tplg)
|
|
||||||
|
|
||||||
free(tplg);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+const char *snd_tplg_version(void)
|
|
||||||
+{
|
|
||||||
+ return SND_LIB_VERSION_STR;
|
|
||||||
+}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,876 +0,0 @@
|
|||||||
From f42b2c088a23e1c6156c0d5710efd7689b8c15be Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 20 Dec 2019 23:48:40 +0100
|
|
||||||
Subject: [PATCH 46/63] topology: cleanup the SNDERR() calls
|
|
||||||
|
|
||||||
- remove the wrong new lines
|
|
||||||
- remove error/warning prefixes (error is error)
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 16 +++++++--------
|
|
||||||
src/topology/channel.c | 2 +-
|
|
||||||
src/topology/ctl.c | 36 +++++++++++++++-------------------
|
|
||||||
src/topology/dapm.c | 40 +++++++++++++++++--------------------
|
|
||||||
src/topology/data.c | 53 +++++++++++++++++++++++++-------------------------
|
|
||||||
src/topology/parser.c | 33 +++++++++++++++----------------
|
|
||||||
src/topology/pcm.c | 29 +++++++++++++--------------
|
|
||||||
src/topology/text.c | 2 +-
|
|
||||||
8 files changed, 99 insertions(+), 112 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index cadb55830809..74c44405e653 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -65,8 +65,8 @@ static ssize_t write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
|
|
||||||
/* make sure file offset is aligned with the calculated HDR offset */
|
|
||||||
if (tplg->bin_pos != tplg->next_hdr_pos) {
|
|
||||||
- SNDERR("error: New header is at offset 0x%zx but file"
|
|
||||||
- " offset 0x%zx is %s by %ld bytes\n",
|
|
||||||
+ SNDERR("New header is at offset 0x%zx but file"
|
|
||||||
+ " offset 0x%zx is %s by %ld bytes",
|
|
||||||
tplg->next_hdr_pos, tplg->bin_pos,
|
|
||||||
tplg->bin_pos > tplg->next_hdr_pos ? "ahead" : "behind",
|
|
||||||
labs(tplg->bin_pos - tplg->next_hdr_pos));
|
|
||||||
@@ -108,7 +108,7 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
ret = write_block_header(tplg, tplg_type, elem->vendor_type,
|
|
||||||
tplg->version, elem->index, block_size, count);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("error: failed to write %s block %d\n",
|
|
||||||
+ SNDERR("failed to write %s block %d",
|
|
||||||
obj_name, ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -148,7 +148,7 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
/* make sure we have written the correct size */
|
|
||||||
if (total_size != size) {
|
|
||||||
- SNDERR("error: size mismatch. Expected %zu wrote %zu\n",
|
|
||||||
+ SNDERR("size mismatch. Expected %zu wrote %zu",
|
|
||||||
size, total_size);
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
@@ -221,7 +221,7 @@ static ssize_t write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
tplg->version, 0,
|
|
||||||
sizeof(tplg->manifest) + tplg->manifest.priv.size, 1);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("error: failed to write manifest block\n");
|
|
||||||
+ SNDERR("failed to write manifest block");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
/* write manifest */
|
|
||||||
ret = write_manifest_data(tplg);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write manifest %d\n", ret);
|
|
||||||
+ SNDERR("failed to write manifest %d", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -286,7 +286,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
ret = write_elem_block(tplg, list, size,
|
|
||||||
tptr->tsoc, tptr->name);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("failed to write %s elements: %s\n",
|
|
||||||
+ SNDERR("failed to write %s elements: %s",
|
|
||||||
tptr->name, snd_strerror(-ret));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -295,7 +295,7 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
verbose(tplg, "total size is 0x%zx/%zd\n", tplg->bin_pos, tplg->bin_pos);
|
|
||||||
|
|
||||||
if (total_size != tplg->bin_pos) {
|
|
||||||
- SNDERR("total size mismatch (%zd != %zd)\n",
|
|
||||||
+ SNDERR("total size mismatch (%zd != %zd)",
|
|
||||||
total_size, tplg->bin_pos);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/channel.c b/src/topology/channel.c
|
|
||||||
index b54a10c89379..110775a8053d 100644
|
|
||||||
--- a/src/topology/channel.c
|
|
||||||
+++ b/src/topology/channel.c
|
|
||||||
@@ -104,7 +104,7 @@ int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
channel_id = lookup_channel(id);
|
|
||||||
if (channel_id < 0) {
|
|
||||||
- SNDERR("error: invalid channel %s\n", id);
|
|
||||||
+ SNDERR("invalid channel %s", id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index 979cc1b035f1..03874b27c76f 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -94,7 +94,7 @@ int parse_access(snd_config_t *cfg,
|
|
||||||
if (strcmp(id, "access") == 0) {
|
|
||||||
err = parse_access_values(n, hdr);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to parse access");
|
|
||||||
+ SNDERR("failed to parse access");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
@@ -187,8 +187,8 @@ static int tplg_build_mixer_control(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ref->elem) {
|
|
||||||
- SNDERR("error: cannot find '%s' referenced by"
|
|
||||||
- " control '%s'\n", ref->id, elem->id);
|
|
||||||
+ SNDERR("cannot find '%s' referenced by"
|
|
||||||
+ " control '%s'", ref->id, elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
} else if (err < 0)
|
|
||||||
return err;
|
|
||||||
@@ -236,8 +236,8 @@ static int tplg_build_enum_control(snd_tplg_t *tplg,
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
if (!ref->elem) {
|
|
||||||
- SNDERR("error: cannot find '%s' referenced by"
|
|
||||||
- " control '%s'\n", ref->id, elem->id);
|
|
||||||
+ SNDERR("cannot find '%s' referenced by"
|
|
||||||
+ " control '%s'", ref->id, elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -341,10 +341,8 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
|
|
||||||
/* get ID */
|
|
||||||
- if (snd_config_get_id(n, &id) < 0) {
|
|
||||||
- SNDERR("error: cant get ID\n");
|
|
||||||
+ if (snd_config_get_id(n, &id) < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
- }
|
|
||||||
|
|
||||||
/* get value */
|
|
||||||
if (tplg_get_integer(n, &val, 0))
|
|
||||||
@@ -360,7 +358,7 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
else if (strcmp(id, "mute") == 0)
|
|
||||||
scale->mute = val;
|
|
||||||
else
|
|
||||||
- SNDERR("error: unknown key %s\n", id);
|
|
||||||
+ SNDERR("unknown id '%s'", id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -389,7 +387,7 @@ int tplg_parse_tlv(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (strcmp(id, "scale") == 0) {
|
|
||||||
err = tplg_parse_tlv_dbscale(n, elem);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to DBScale");
|
|
||||||
+ SNDERR("failed to DBScale");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
@@ -651,8 +649,7 @@ int tplg_parse_control_enum(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (strcmp(id, "channel") == 0) {
|
|
||||||
if (ec->num_channels >= SND_SOC_TPLG_MAX_CHAN) {
|
|
||||||
- SNDERR("error: too many channels %s\n",
|
|
||||||
- elem->id);
|
|
||||||
+ SNDERR("too many channels %s", elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -779,8 +776,7 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
if (strcmp(id, "channel") == 0) {
|
|
||||||
if (mc->num_channels >= SND_SOC_TPLG_MAX_CHAN) {
|
|
||||||
- SNDERR("error: too many channels %s\n",
|
|
||||||
- elem->id);
|
|
||||||
+ SNDERR("too many channels %s", elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -933,7 +929,7 @@ static int init_ctl_hdr(struct snd_soc_tplg_ctl_hdr *hdr,
|
|
||||||
struct snd_soc_tplg_tlv_dbscale *scale;
|
|
||||||
|
|
||||||
if (!tlvt) {
|
|
||||||
- SNDERR("error: missing TLV data\n");
|
|
||||||
+ SNDERR("missing TLV data");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -952,7 +948,7 @@ static int init_ctl_hdr(struct snd_soc_tplg_ctl_hdr *hdr,
|
|
||||||
|
|
||||||
/* TODO: add support for other TLV types */
|
|
||||||
default:
|
|
||||||
- SNDERR("error: unsupported TLV type %d\n", tlv->type);
|
|
||||||
+ SNDERR("unsupported TLV type %d", tlv->type);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -971,7 +967,7 @@ int tplg_add_mixer(snd_tplg_t *tplg, struct snd_tplg_mixer_template *mixer,
|
|
||||||
tplg_dbg(" Control Mixer: %s\n", mixer->hdr.name);
|
|
||||||
|
|
||||||
if (mixer->hdr.type != SND_SOC_TPLG_TYPE_MIXER) {
|
|
||||||
- SNDERR("error: invalid mixer type %d\n", mixer->hdr.type);
|
|
||||||
+ SNDERR("invalid mixer type %d", mixer->hdr.type);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1039,7 +1035,7 @@ int tplg_add_enum(snd_tplg_t *tplg, struct snd_tplg_enum_template *enum_ctl,
|
|
||||||
tplg_dbg(" Control Enum: %s\n", enum_ctl->hdr.name);
|
|
||||||
|
|
||||||
if (enum_ctl->hdr.type != SND_SOC_TPLG_TYPE_ENUM) {
|
|
||||||
- SNDERR("error: invalid enum type %d\n", enum_ctl->hdr.type);
|
|
||||||
+ SNDERR("invalid enum type %d", enum_ctl->hdr.type);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1113,7 +1109,7 @@ int tplg_add_bytes(snd_tplg_t *tplg, struct snd_tplg_bytes_template *bytes_ctl,
|
|
||||||
tplg_dbg(" Control Bytes: %s\n", bytes_ctl->hdr.name);
|
|
||||||
|
|
||||||
if (bytes_ctl->hdr.type != SND_SOC_TPLG_TYPE_BYTES) {
|
|
||||||
- SNDERR("error: invalid bytes type %d\n", bytes_ctl->hdr.type);
|
|
||||||
+ SNDERR("invalid bytes type %d", bytes_ctl->hdr.type);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1157,7 +1153,7 @@ int tplg_add_bytes(snd_tplg_t *tplg, struct snd_tplg_bytes_template *bytes_ctl,
|
|
||||||
if (be->hdr.access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
|
|
||||||
if ((be->hdr.access & SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE)
|
|
||||||
!= SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE) {
|
|
||||||
- SNDERR("error: Invalid TLV bytes control access 0x%x\n",
|
|
||||||
+ SNDERR("Invalid TLV bytes control access 0x%x",
|
|
||||||
be->hdr.access);
|
|
||||||
tplg_elem_free(elem);
|
|
||||||
return -EINVAL;
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index d6c15fc1dfaa..f61fe07157ac 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -154,8 +154,7 @@ static int tplg_build_widget(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ref->elem) {
|
|
||||||
- SNDERR("error: cannot find '%s'"
|
|
||||||
- " referenced by widget '%s'\n",
|
|
||||||
+ SNDERR("cannot find '%s' referenced by widget '%s'",
|
|
||||||
ref->id, elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -179,8 +178,7 @@ int tplg_build_widgets(snd_tplg_t *tplg)
|
|
||||||
|
|
||||||
elem = list_entry(pos, struct tplg_elem, list);
|
|
||||||
if (!elem->widget || elem->type != SND_TPLG_TYPE_DAPM_WIDGET) {
|
|
||||||
- SNDERR("error: invalid widget '%s'\n",
|
|
||||||
- elem->id);
|
|
||||||
+ SNDERR("invalid widget '%s'", elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -207,8 +205,7 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
elem = list_entry(pos, struct tplg_elem, list);
|
|
||||||
|
|
||||||
if (!elem->route || elem->type != SND_TPLG_TYPE_DAPM_GRAPH) {
|
|
||||||
- SNDERR("error: invalid route '%s'\n",
|
|
||||||
- elem->id);
|
|
||||||
+ SNDERR("invalid route '%s'", elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -218,14 +215,13 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
|
|
||||||
/* validate sink */
|
|
||||||
if (strlen(route->sink) <= 0) {
|
|
||||||
- SNDERR("error: no sink\n");
|
|
||||||
+ SNDERR("no sink");
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (!tplg_elem_lookup(&tplg->widget_list, route->sink,
|
|
||||||
SND_TPLG_TYPE_DAPM_WIDGET, SND_TPLG_INDEX_ALL)) {
|
|
||||||
- SNDERR("warning: undefined sink widget/stream '%s'\n",
|
|
||||||
- route->sink);
|
|
||||||
+ SNDERR("undefined sink widget/stream '%s'", route->sink);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate control name */
|
|
||||||
@@ -234,21 +230,21 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
SND_TPLG_TYPE_MIXER, elem->index) &&
|
|
||||||
!tplg_elem_lookup(&tplg->enum_list, route->control,
|
|
||||||
SND_TPLG_TYPE_ENUM, elem->index)) {
|
|
||||||
- SNDERR("warning: Undefined mixer/enum control '%s'\n",
|
|
||||||
- route->control);
|
|
||||||
+ SNDERR("Undefined mixer/enum control '%s'",
|
|
||||||
+ route->control);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* validate source */
|
|
||||||
if (strlen(route->source) <= 0) {
|
|
||||||
- SNDERR("error: no source\n");
|
|
||||||
+ SNDERR("no source");
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (!tplg_elem_lookup(&tplg->widget_list, route->source,
|
|
||||||
SND_TPLG_TYPE_DAPM_WIDGET, SND_TPLG_INDEX_ALL)) {
|
|
||||||
- SNDERR("warning: Undefined source widget/stream '%s'\n",
|
|
||||||
- route->source);
|
|
||||||
+ SNDERR("Undefined source widget/stream '%s'",
|
|
||||||
+ route->source);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* add graph to manifest */
|
|
||||||
@@ -300,7 +296,7 @@ static int tplg_parse_line(const char *text,
|
|
||||||
|
|
||||||
len = strlen(buf);
|
|
||||||
if (len <= 2) {
|
|
||||||
- SNDERR("error: invalid route \"%s\"\n", buf);
|
|
||||||
+ SNDERR("invalid route \"%s\"", buf);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -309,7 +305,7 @@ static int tplg_parse_line(const char *text,
|
|
||||||
if (buf[i] == ',')
|
|
||||||
goto second;
|
|
||||||
}
|
|
||||||
- SNDERR("error: invalid route \"%s\"\n", buf);
|
|
||||||
+ SNDERR("invalid route \"%s\"", buf);
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
second:
|
|
||||||
@@ -323,7 +319,7 @@ second:
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
- SNDERR("error: invalid route \"%s\"\n", buf);
|
|
||||||
+ SNDERR("invalid route \"%s\"", buf);
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
done:
|
|
||||||
@@ -378,7 +374,7 @@ int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
int index = -1;
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
- SNDERR("error: compound is expected for dapm graph definition\n");
|
|
||||||
+ SNDERR("compound is expected for dapm graph definition");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -401,13 +397,13 @@ int tplg_parse_dapm_graph(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (strcmp(id, "lines") == 0) {
|
|
||||||
if (index < 0) {
|
|
||||||
- SNDERR("error: failed to parse dapm graph %s, missing index\n",
|
|
||||||
+ SNDERR("failed to parse dapm graph %s, missing index",
|
|
||||||
graph_id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
err = tplg_parse_routes(tplg, n, index);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to parse dapm graph %s\n",
|
|
||||||
+ SNDERR("failed to parse dapm graph %s",
|
|
||||||
graph_id);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
@@ -528,7 +524,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
widget_type = lookup_widget(val);
|
|
||||||
if (widget_type < 0){
|
|
||||||
- SNDERR("Widget '%s': Unsupported widget type %s\n",
|
|
||||||
+ SNDERR("widget '%s': Unsupported widget type %s",
|
|
||||||
elem->id, val);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -821,7 +817,7 @@ int tplg_add_widget_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
- SNDERR("error: widget %s: invalid type %d for ctl %d\n",
|
|
||||||
+ SNDERR("widget %s: invalid type %d for ctl %d",
|
|
||||||
wt->name, ct->type, i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 11cd73f5ed6e..f00ed3011869 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -61,7 +61,7 @@ struct snd_soc_tplg_private *get_priv_data(struct tplg_elem *elem)
|
|
||||||
priv = &elem->pcm->priv;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- SNDERR("error: '%s': no support for private data for type %d\n",
|
|
||||||
+ SNDERR("'%s': no support for private data for type %d",
|
|
||||||
elem->id, elem->type);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ int tplg_parse_refs(snd_config_t *cfg, struct tplg_elem *elem,
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cfg_type != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
- SNDERR("error: compound type expected for %s", elem->id);
|
|
||||||
+ SNDERR("compound type expected for %s", elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -183,8 +183,7 @@ static int tplg_parse_data_file(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
|
|
||||||
fp = fopen(filename, "r");
|
|
||||||
if (fp == NULL) {
|
|
||||||
- SNDERR("error: invalid data file path '%s'\n",
|
|
||||||
- filename);
|
|
||||||
+ SNDERR("invalid data file path '%s'", filename);
|
|
||||||
return -errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -192,12 +191,12 @@ static int tplg_parse_data_file(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
size = ftell(fp);
|
|
||||||
fseek(fp, 0L, SEEK_SET);
|
|
||||||
if (size <= 0) {
|
|
||||||
- SNDERR("error: invalid data file size %zu\n", size);
|
|
||||||
+ SNDERR("invalid data file size %zu", size);
|
|
||||||
ret = -EINVAL;
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
if (size > TPLG_MAX_PRIV_SIZE) {
|
|
||||||
- SNDERR("error: data file too big %zu\n", size);
|
|
||||||
+ SNDERR("data file too big %zu", size);
|
|
||||||
ret = -EINVAL;
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
@@ -350,7 +349,7 @@ static int get_uuid(const char *str, unsigned char *uuid_le)
|
|
||||||
if ((errno == ERANGE && val == ULONG_MAX)
|
|
||||||
|| (errno != 0 && val == 0)
|
|
||||||
|| (val > UCHAR_MAX)) {
|
|
||||||
- SNDERR("error: invalid value for uuid\n");
|
|
||||||
+ SNDERR("invalid value for uuid");
|
|
||||||
ret = -EINVAL;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
@@ -365,7 +364,7 @@ static int get_uuid(const char *str, unsigned char *uuid_le)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (values < 16) {
|
|
||||||
- SNDERR("error: less than 16 integers for uuid\n");
|
|
||||||
+ SNDERR("less than 16 integers for uuid");
|
|
||||||
ret = -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -446,7 +445,7 @@ static int tplg_parse_data_hex(snd_config_t *cfg, struct tplg_elem *elem,
|
|
||||||
|
|
||||||
num = get_hex_num(value);
|
|
||||||
if (num <= 0) {
|
|
||||||
- SNDERR("error: malformed hex variable list %s\n", value);
|
|
||||||
+ SNDERR("malformed hex variable list %s", value);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -454,7 +453,7 @@ static int tplg_parse_data_hex(snd_config_t *cfg, struct tplg_elem *elem,
|
|
||||||
priv = elem->data;
|
|
||||||
|
|
||||||
if (size > TPLG_MAX_PRIV_SIZE) {
|
|
||||||
- SNDERR("error: data too big %d\n", size);
|
|
||||||
+ SNDERR("data too big %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -492,7 +491,7 @@ static int get_token_value(const char *token_id,
|
|
||||||
return tokens->token[i].value;
|
|
||||||
}
|
|
||||||
|
|
||||||
- SNDERR("error: cannot find token id '%s'\n", token_id);
|
|
||||||
+ SNDERR("cannot find token id '%s'", token_id);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -579,7 +578,7 @@ static int copy_tuples(struct tplg_elem *elem,
|
|
||||||
* tuple_set->num_tuples;
|
|
||||||
size += set_size;
|
|
||||||
if (size > TPLG_MAX_PRIV_SIZE) {
|
|
||||||
- SNDERR("error: data too big %d\n", size);
|
|
||||||
+ SNDERR("data too big %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -662,13 +661,13 @@ static int build_tuples(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
ref->id, SND_TPLG_TYPE_TUPLE, elem->index);
|
|
||||||
tuples = ref->elem;
|
|
||||||
if (!tuples) {
|
|
||||||
- SNDERR("error: cannot find tuples %s\n", ref->id);
|
|
||||||
+ SNDERR("cannot find tuples %s", ref->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
tokens = get_tokens(tplg, tuples);
|
|
||||||
if (!tokens) {
|
|
||||||
- SNDERR("error: cannot find token for %s\n", ref->id);
|
|
||||||
+ SNDERR("cannot find token for %s", ref->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -762,7 +761,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
|
|
||||||
type = get_tuple_type(id);
|
|
||||||
if (type < 0) {
|
|
||||||
- SNDERR("error: invalid tuple type '%s'", id);
|
|
||||||
+ SNDERR("invalid tuple type '%s'", id);
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -819,7 +818,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_WORD:
|
|
||||||
ival = tplg_get_unsigned(n, &tuple_val, 0);
|
|
||||||
if (ival < 0) {
|
|
||||||
- SNDERR("error: tuple %s: %s\n", id, snd_strerror(ival));
|
|
||||||
+ SNDERR("tuple %s: %s", id, snd_strerror(ival));
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -829,7 +828,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
&& tuple_val > USHRT_MAX)
|
|
||||||
|| (type == SND_SOC_TPLG_TUPLE_TYPE_BYTE
|
|
||||||
&& tuple_val > UCHAR_MAX)) {
|
|
||||||
- SNDERR("error: tuple %s: invalid value\n", id);
|
|
||||||
+ SNDERR("tuple %s: invalid value", id);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -941,7 +940,7 @@ static int parse_tuple_sets(snd_config_t *cfg,
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
if (snd_config_get_id(cfg, &id) >= 0)
|
|
||||||
- SNDERR("error: compound type expected for %s", id);
|
|
||||||
+ SNDERR("compound type expected for %s", id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -959,8 +958,8 @@ static int parse_tuple_sets(snd_config_t *cfg,
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
if (snd_config_get_type(n) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
- SNDERR("error: compound type expected for %s, is %d",
|
|
||||||
- id, snd_config_get_type(n));
|
|
||||||
+ SNDERR("compound type expected for %s, is %d",
|
|
||||||
+ id, snd_config_get_type(n));
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1169,7 +1168,7 @@ int tplg_parse_manifest_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (!list_empty(&tplg->manifest_list)) {
|
|
||||||
- SNDERR("error: already has manifest data\n");
|
|
||||||
+ SNDERR("already has manifest data");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1326,7 +1325,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (strcmp(id, "file") == 0) {
|
|
||||||
err = tplg_parse_data_file(n, elem);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to parse data file\n");
|
|
||||||
+ SNDERR("failed to parse data file");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
@@ -1335,7 +1334,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (strcmp(id, "bytes") == 0) {
|
|
||||||
err = tplg_parse_data_hex(n, elem, 1);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to parse data bytes\n");
|
|
||||||
+ SNDERR("failed to parse data bytes");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
@@ -1344,7 +1343,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (strcmp(id, "shorts") == 0) {
|
|
||||||
err = tplg_parse_data_hex(n, elem, 2);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to parse data shorts\n");
|
|
||||||
+ SNDERR("failed to parse data shorts");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
@@ -1353,7 +1352,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (strcmp(id, "words") == 0) {
|
|
||||||
err = tplg_parse_data_hex(n, elem, 4);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to parse data words\n");
|
|
||||||
+ SNDERR("failed to parse data words");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
@@ -1470,8 +1469,8 @@ int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
|
|
||||||
ref_elem = tplg_elem_lookup(&tplg->pdata_list,
|
|
||||||
ref->id, SND_TPLG_TYPE_DATA, elem->index);
|
|
||||||
if (!ref_elem) {
|
|
||||||
- SNDERR("error: cannot find data '%s' referenced by"
|
|
||||||
- " element '%s'\n", ref->id, elem->id);
|
|
||||||
+ SNDERR("cannot find data '%s' referenced by"
|
|
||||||
+ " element '%s'", ref->id, elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index 1eaa24bd42f5..5a5dd14f2bdd 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -122,7 +122,7 @@ int tplg_parse_compound(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
- SNDERR("error: compound type expected for %s", id);
|
|
||||||
+ SNDERR("compound type expected for %s", id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ int tplg_parse_compound(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
- SNDERR("error: compound type expected for %s, is %d",
|
|
||||||
+ SNDERR("compound type expected for %s, is %d",
|
|
||||||
id, snd_config_get_type(cfg));
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -155,7 +155,7 @@ static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
- SNDERR("error: compound type expected at top level");
|
|
||||||
+ SNDERR("compound type expected at top level");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -180,7 +180,7 @@ static int tplg_parse_config(snd_tplg_t *tplg, snd_config_t *cfg)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parser == NULL) {
|
|
||||||
- SNDERR("error: unknown section %s\n", id);
|
|
||||||
+ SNDERR("unknown section %s", id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -202,7 +202,7 @@ static int tplg_load_config(snd_tplg_t *tplg, snd_input_t *in)
|
|
||||||
|
|
||||||
ret = snd_config_load(top, in);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("error: could not load configuration");
|
|
||||||
+ SNDERR("could not load configuration");
|
|
||||||
snd_config_delete(top);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -210,7 +210,7 @@ static int tplg_load_config(snd_tplg_t *tplg, snd_input_t *in)
|
|
||||||
ret = tplg_parse_config(tplg, top);
|
|
||||||
snd_config_delete(top);
|
|
||||||
if (ret < 0) {
|
|
||||||
- SNDERR("error: failed to parse topology");
|
|
||||||
+ SNDERR("failed to parse topology");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -267,7 +267,7 @@ int snd_tplg_load(snd_tplg_t *tplg, const char *buf, size_t size)
|
|
||||||
|
|
||||||
err = snd_input_buffer_open(&in, buf, size);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: could not create input buffer");
|
|
||||||
+ SNDERR("could not create input buffer");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -282,13 +282,13 @@ static int tplg_build(snd_tplg_t *tplg)
|
|
||||||
|
|
||||||
err = tplg_build_integ(tplg);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to check topology integrity\n");
|
|
||||||
+ SNDERR("failed to check topology integrity");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = tplg_write_data(tplg);
|
|
||||||
if (err < 0) {
|
|
||||||
- SNDERR("error: failed to write data %d\n", err);
|
|
||||||
+ SNDERR("failed to write data %d", err);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
@@ -304,15 +304,14 @@ int snd_tplg_build_file(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
fp = fopen(infile, "r");
|
|
||||||
if (fp == NULL) {
|
|
||||||
- SNDERR("error: could not open configuration file %s",
|
|
||||||
- infile);
|
|
||||||
+ SNDERR("could not open configuration file %s", infile);
|
|
||||||
return -errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
err = snd_input_stdio_attach(&in, fp, 1);
|
|
||||||
if (err < 0) {
|
|
||||||
fclose(fp);
|
|
||||||
- SNDERR("error: could not attach stdio %s", infile);
|
|
||||||
+ SNDERR("could not attach stdio %s", infile);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -346,7 +345,7 @@ int snd_tplg_add_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
case SND_TPLG_TYPE_CC:
|
|
||||||
return tplg_add_link_object(tplg, t);
|
|
||||||
default:
|
|
||||||
- SNDERR("error: invalid object type %d\n", t->type);
|
|
||||||
+ SNDERR("invalid object type %d", t->type);
|
|
||||||
return -EINVAL;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -362,18 +361,18 @@ int snd_tplg_build(snd_tplg_t *tplg, const char *outfile)
|
|
||||||
|
|
||||||
fd = open(outfile, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
|
|
||||||
if (fd < 0) {
|
|
||||||
- SNDERR("error: failed to open %s err %d\n", outfile, -errno);
|
|
||||||
+ SNDERR("failed to open %s err %d", outfile, -errno);
|
|
||||||
return -errno;
|
|
||||||
}
|
|
||||||
r = write(fd, tplg->bin, tplg->bin_size);
|
|
||||||
close(fd);
|
|
||||||
if (r < 0) {
|
|
||||||
err = -errno;
|
|
||||||
- SNDERR("error: write error: %s\n", strerror(errno));
|
|
||||||
+ SNDERR("write error: %s", strerror(errno));
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
if ((size_t)r != tplg->bin_size) {
|
|
||||||
- SNDERR("error: partial write (%zd != %zd)\n", r, tplg->bin_size);
|
|
||||||
+ SNDERR("partial write (%zd != %zd)", r, tplg->bin_size);
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
@@ -437,7 +436,7 @@ snd_tplg_t *snd_tplg_create(int flags)
|
|
||||||
snd_tplg_t *tplg;
|
|
||||||
|
|
||||||
if (!is_little_endian()) {
|
|
||||||
- SNDERR("error: cannot support big-endian machines\n");
|
|
||||||
+ SNDERR("cannot support big-endian machines");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index d09fbe42f5da..bc3070816867 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -116,8 +116,8 @@ static int build_pcm(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
if (!ref->elem) {
|
|
||||||
- SNDERR("error: cannot find '%s' referenced by"
|
|
||||||
- " PCM '%s'\n", ref->id, elem->id);
|
|
||||||
+ SNDERR("cannot find '%s' referenced by"
|
|
||||||
+ " PCM '%s'", ref->id, elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -137,7 +137,7 @@ int tplg_build_pcms(snd_tplg_t *tplg, unsigned int type)
|
|
||||||
|
|
||||||
elem = list_entry(pos, struct tplg_elem, list);
|
|
||||||
if (elem->type != type) {
|
|
||||||
- SNDERR("error: invalid elem '%s'\n", elem->id);
|
|
||||||
+ SNDERR("invalid elem '%s'", elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -196,7 +196,7 @@ int tplg_build_dais(snd_tplg_t *tplg, unsigned int type)
|
|
||||||
|
|
||||||
elem = list_entry(pos, struct tplg_elem, list);
|
|
||||||
if (elem->type != type) {
|
|
||||||
- SNDERR("error: invalid elem '%s'\n", elem->id);
|
|
||||||
+ SNDERR("invalid elem '%s'", elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -251,8 +251,8 @@ static int build_link(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
ref->elem = tplg_elem_lookup(&tplg->hw_cfg_list,
|
|
||||||
ref->id, SND_TPLG_TYPE_HW_CONFIG, elem->index);
|
|
||||||
if (!ref->elem) {
|
|
||||||
- SNDERR("error: cannot find HW config '%s'"
|
|
||||||
- " referenced by link '%s'\n",
|
|
||||||
+ SNDERR("cannot find HW config '%s'"
|
|
||||||
+ " referenced by link '%s'",
|
|
||||||
ref->id, elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -320,7 +320,7 @@ static int split_format(struct snd_soc_tplg_stream_caps *caps, char *str)
|
|
||||||
while ((s != NULL) && (i < SND_SOC_TPLG_MAX_FORMATS)) {
|
|
||||||
format = snd_pcm_format_value(s);
|
|
||||||
if (format == SND_PCM_FORMAT_UNKNOWN) {
|
|
||||||
- SNDERR("error: unsupported stream format %s\n", s);
|
|
||||||
+ SNDERR("unsupported stream format %s", s);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -363,7 +363,7 @@ static int split_rate(struct snd_soc_tplg_stream_caps *caps, char *str)
|
|
||||||
rate = get_rate_value(s);
|
|
||||||
|
|
||||||
if (rate == SND_PCM_RATE_UNKNOWN) {
|
|
||||||
- SNDERR("error: unsupported stream rate %s\n", s);
|
|
||||||
+ SNDERR("unsupported stream rate %s", s);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -758,7 +758,7 @@ static int tplg_parse_fe_dai(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
|
|
||||||
if (strcmp(id, "id") == 0) {
|
|
||||||
if (tplg_get_unsigned(n, &pcm->dai_id, 0)) {
|
|
||||||
- SNDERR("error: invalid fe dai ID\n");
|
|
||||||
+ SNDERR("invalid fe dai ID");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1379,7 +1379,7 @@ static int get_audio_hw_format(const char *val)
|
|
||||||
if (strcasecmp(audio_hw_formats[i].name, val) == 0)
|
|
||||||
return audio_hw_formats[i].type;
|
|
||||||
|
|
||||||
- SNDERR("error: invalid audio HW format %s\n", val);
|
|
||||||
+ SNDERR("invalid audio HW format %s", val);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1452,8 +1452,7 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
/* For backwards capability,
|
|
||||||
* "master" == "codec is slave"
|
|
||||||
*/
|
|
||||||
- SNDERR("warning: deprecated bclk value '%s'\n",
|
|
||||||
- val);
|
|
||||||
+ SNDERR("deprecated bclk value '%s'", val);
|
|
||||||
|
|
||||||
hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CS;
|
|
||||||
} else if (!strcmp(val, "codec_slave")) {
|
|
||||||
@@ -1490,8 +1489,7 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
/* For backwards capability,
|
|
||||||
* "master" == "codec is slave"
|
|
||||||
*/
|
|
||||||
- SNDERR("warning: deprecated fsync value '%s'\n",
|
|
||||||
- val);
|
|
||||||
+ SNDERR("deprecated fsync value '%s'", val);
|
|
||||||
|
|
||||||
hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CS;
|
|
||||||
} else if (!strcmp(val, "codec_slave")) {
|
|
||||||
@@ -1535,8 +1533,7 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
/* For backwards capability,
|
|
||||||
* "master" == "for codec, mclk is input"
|
|
||||||
*/
|
|
||||||
- SNDERR("warning: deprecated mclk value '%s'\n",
|
|
||||||
- val);
|
|
||||||
+ SNDERR("deprecated mclk value '%s'", val);
|
|
||||||
|
|
||||||
hw_cfg->mclk_direction = SND_SOC_TPLG_MCLK_CI;
|
|
||||||
} else if (!strcmp(val, "codec_mclk_in")) {
|
|
||||||
diff --git a/src/topology/text.c b/src/topology/text.c
|
|
||||||
index e9386e7df492..6dbf22305fd3 100644
|
|
||||||
--- a/src/topology/text.c
|
|
||||||
+++ b/src/topology/text.c
|
|
||||||
@@ -38,7 +38,7 @@ static int parse_text_values(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
|
|
||||||
if (j == SND_SOC_TPLG_NUM_TEXTS) {
|
|
||||||
- tplg_dbg("error: text string number exceeds %d\n", j);
|
|
||||||
+ tplg_dbg("text string number exceeds %d\n", j);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
|||||||
From 712fbacf160f899582a9adc3f30f297211b063bb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 27 Dec 2019 19:32:03 +0100
|
|
||||||
Subject: [PATCH 47/63] topology: dapm - fix the SNDERR() - Undefined
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/dapm.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index f61fe07157ac..88bddca3c08e 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -230,7 +230,7 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
SND_TPLG_TYPE_MIXER, elem->index) &&
|
|
||||||
!tplg_elem_lookup(&tplg->enum_list, route->control,
|
|
||||||
SND_TPLG_TYPE_ENUM, elem->index)) {
|
|
||||||
- SNDERR("Undefined mixer/enum control '%s'",
|
|
||||||
+ SNDERR("undefined mixer/enum control '%s'",
|
|
||||||
route->control);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -243,7 +243,7 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
}
|
|
||||||
if (!tplg_elem_lookup(&tplg->widget_list, route->source,
|
|
||||||
SND_TPLG_TYPE_DAPM_WIDGET, SND_TPLG_INDEX_ALL)) {
|
|
||||||
- SNDERR("Undefined source widget/stream '%s'",
|
|
||||||
+ SNDERR("undefined source widget/stream '%s'",
|
|
||||||
route->source);
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
From 07d779143bfd24448034cd55945b46c46407247c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 28 Dec 2019 10:18:34 +0100
|
|
||||||
Subject: [PATCH 48/63] topology: fix the unitialized tuples
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/data.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index f00ed3011869..4e43fcc9d5a7 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -601,6 +601,7 @@ static int copy_tuples(struct tplg_elem *elem,
|
|
||||||
elem->data = priv;
|
|
||||||
|
|
||||||
array = (struct snd_soc_tplg_vendor_array *)(priv->data + off);
|
|
||||||
+ memset(array, 0, set_size);
|
|
||||||
array->size = set_size;
|
|
||||||
array->type = tuple_set->type;
|
|
||||||
array->num_elems = tuple_set->num_tuples;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,96 +0,0 @@
|
|||||||
From 2947d83c1322bcdb31c1da180acb0f779a63dcdd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sat, 28 Dec 2019 21:44:03 +0100
|
|
||||||
Subject: [PATCH 49/63] topology: implement shorter hexa uuid 00:00 parser
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/data.c | 37 +++++++++++++++++++++++++++++++------
|
|
||||||
1 file changed, 31 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 4e43fcc9d5a7..1ddd3c509e64 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -22,8 +22,8 @@
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#define UUID_FORMAT "\
|
|
||||||
-0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, \
|
|
||||||
-0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x, 0x%02x"
|
|
||||||
+%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:\
|
|
||||||
+%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
|
|
||||||
|
|
||||||
/* Get private data buffer of an element */
|
|
||||||
struct snd_soc_tplg_private *get_priv_data(struct tplg_elem *elem)
|
|
||||||
@@ -316,7 +316,6 @@ format2:
|
|
||||||
values++;
|
|
||||||
s += 2;
|
|
||||||
}
|
|
||||||
- s++;
|
|
||||||
}
|
|
||||||
|
|
||||||
s++;
|
|
||||||
@@ -341,6 +340,32 @@ static int get_uuid(const char *str, unsigned char *uuid_le)
|
|
||||||
if (tmp == NULL)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
+ if (strchr(tmp, ':') == NULL)
|
|
||||||
+ goto data2;
|
|
||||||
+
|
|
||||||
+ s = strtok(tmp, ":");
|
|
||||||
+ while (s != NULL) {
|
|
||||||
+ errno = 0;
|
|
||||||
+ val = strtoul(s, NULL, 16);
|
|
||||||
+ if ((errno == ERANGE && val == ULONG_MAX)
|
|
||||||
+ || (errno != 0 && val == 0)
|
|
||||||
+ || (val > UCHAR_MAX)) {
|
|
||||||
+ SNDERR("invalid value for uuid");
|
|
||||||
+ ret = -EINVAL;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ *(uuid_le + values) = (unsigned char)val;
|
|
||||||
+
|
|
||||||
+ values++;
|
|
||||||
+ if (values >= 16)
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ s = strtok(NULL, ":");
|
|
||||||
+ }
|
|
||||||
+ goto out;
|
|
||||||
+
|
|
||||||
+data2:
|
|
||||||
s = strtok(tmp, ",");
|
|
||||||
|
|
||||||
while (s != NULL) {
|
|
||||||
@@ -354,7 +379,7 @@ static int get_uuid(const char *str, unsigned char *uuid_le)
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
- *(uuid_le + values) = (unsigned char)val;
|
|
||||||
+ *(uuid_le + values) = (unsigned char)val;
|
|
||||||
|
|
||||||
values++;
|
|
||||||
if (values >= 16)
|
|
||||||
@@ -413,7 +438,7 @@ static int copy_data_hex(char *data, int off, const char *str, int width)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
p += off;
|
|
||||||
- s = strtok(tmp, ",");
|
|
||||||
+ s = strtok(tmp, ",:");
|
|
||||||
|
|
||||||
while (s != NULL) {
|
|
||||||
ret = write_hex(p, s, width);
|
|
||||||
@@ -422,7 +447,7 @@ static int copy_data_hex(char *data, int off, const char *str, int width)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
- s = strtok(NULL, ",");
|
|
||||||
+ s = strtok(NULL, ",:");
|
|
||||||
p += width;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
|||||||
From 1482d1f254fe42d83d904e52c911df8693b62653 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Sun, 29 Dec 2019 20:05:14 +0100
|
|
||||||
Subject: [PATCH 50/63] topology: fix the TPLG_DEBUG compilation
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/channel.c | 2 +-
|
|
||||||
src/topology/data.c | 5 ++++-
|
|
||||||
src/topology/pcm.c | 2 +-
|
|
||||||
3 files changed, 6 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/channel.c b/src/topology/channel.c
|
|
||||||
index 110775a8053d..390c3f164e97 100644
|
|
||||||
--- a/src/topology/channel.c
|
|
||||||
+++ b/src/topology/channel.c
|
|
||||||
@@ -129,7 +129,7 @@ int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
else if (strcmp(id, "shift") == 0)
|
|
||||||
channel->shift = value;
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s = %s\n", id, value);
|
|
||||||
+ tplg_dbg("\t\t%s = %d\n", id, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
tplg->channel_idx++;
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 1ddd3c509e64..7b4bdccde602 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -230,9 +230,11 @@ err:
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void dump_priv_data(struct tplg_elem *elem)
|
|
||||||
+static void dump_priv_data(struct tplg_elem *elem ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
+#ifdef TPLG_DEBUG
|
|
||||||
struct snd_soc_tplg_private *priv = elem->data;
|
|
||||||
+ unsigned char *p = (unsigned char *)priv->data;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
tplg_dbg(" elem size = %d, priv data size = %d\n",
|
|
||||||
@@ -246,6 +248,7 @@ static void dump_priv_data(struct tplg_elem *elem)
|
|
||||||
}
|
|
||||||
|
|
||||||
tplg_dbg("\n\n");
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int check_nibble(unsigned char c)
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index bc3070816867..8e5afbe6ea72 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -881,7 +881,7 @@ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
pcm->compress = ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %d\n", id, ival);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
|||||||
From c765615bce7903a0f3e3d5e7826483708398c184 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Tue, 31 Dec 2019 15:27:58 +0100
|
|
||||||
Subject: [PATCH 51/63] topology: fix the ops parser (accept integer/hexa
|
|
||||||
values)
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/ops.c | 36 +++++++++++++++++++++++++-----------
|
|
||||||
1 file changed, 25 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/ops.c b/src/topology/ops.c
|
|
||||||
index ad72ef1b2cb6..2885c7814604 100644
|
|
||||||
--- a/src/topology/ops.c
|
|
||||||
+++ b/src/topology/ops.c
|
|
||||||
@@ -67,6 +67,7 @@ int tplg_parse_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED, snd_config_t *cfg,
|
|
||||||
snd_config_t *n;
|
|
||||||
struct snd_soc_tplg_ctl_hdr *hdr = private;
|
|
||||||
const char *id, *value;
|
|
||||||
+ int ival;
|
|
||||||
|
|
||||||
tplg_dbg("\tOps\n");
|
|
||||||
hdr->size = sizeof(*hdr);
|
|
||||||
@@ -80,17 +81,23 @@ int tplg_parse_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED, snd_config_t *cfg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* get value - try strings then ints */
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
- continue;
|
|
||||||
+ if (snd_config_get_type(n) == SND_CONFIG_TYPE_STRING) {
|
|
||||||
+ if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ continue;
|
|
||||||
+ ival = lookup_ops(value);
|
|
||||||
+ } else {
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (strcmp(id, "info") == 0)
|
|
||||||
- hdr->ops.info = lookup_ops(value);
|
|
||||||
+ hdr->ops.info = ival;
|
|
||||||
else if (strcmp(id, "put") == 0)
|
|
||||||
- hdr->ops.put = lookup_ops(value);
|
|
||||||
+ hdr->ops.put = ival;
|
|
||||||
else if (strcmp(id, "get") == 0)
|
|
||||||
- hdr->ops.get = lookup_ops(value);
|
|
||||||
+ hdr->ops.get = ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s = %s\n", id, value);
|
|
||||||
+ tplg_dbg("\t\t%s = %d\n", id, ival);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -146,6 +153,7 @@ int tplg_parse_ext_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
snd_config_t *n;
|
|
||||||
struct snd_soc_tplg_bytes_control *be = private;
|
|
||||||
const char *id, *value;
|
|
||||||
+ int ival;
|
|
||||||
|
|
||||||
tplg_dbg("\tExt Ops\n");
|
|
||||||
|
|
||||||
@@ -158,15 +166,21 @@ int tplg_parse_ext_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* get value - try strings then ints */
|
|
||||||
- if (snd_config_get_string(n, &value) < 0)
|
|
||||||
- continue;
|
|
||||||
+ if (snd_config_get_type(n) == SND_CONFIG_TYPE_STRING) {
|
|
||||||
+ if (snd_config_get_string(n, &value) < 0)
|
|
||||||
+ continue;
|
|
||||||
+ ival = lookup_ops(value);
|
|
||||||
+ } else {
|
|
||||||
+ if (tplg_get_integer(n, &ival, 0))
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (strcmp(id, "info") == 0)
|
|
||||||
- be->ext_ops.info = lookup_ops(value);
|
|
||||||
+ be->ext_ops.info = ival;
|
|
||||||
else if (strcmp(id, "put") == 0)
|
|
||||||
- be->ext_ops.put = lookup_ops(value);
|
|
||||||
+ be->ext_ops.put = ival;
|
|
||||||
else if (strcmp(id, "get") == 0)
|
|
||||||
- be->ext_ops.get = lookup_ops(value);
|
|
||||||
+ be->ext_ops.get = ival;
|
|
||||||
|
|
||||||
tplg_dbg("\t\t%s = %s\n", id, value);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
From 0ba4d6d9c0ae4576f35724d2a5735990f09ceeb0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Wed, 1 Jan 2020 19:10:20 +0100
|
|
||||||
Subject: [PATCH 52/63] topology: fix the wrong memory access (object realloc)
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/pcm.c | 5 +++--
|
|
||||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index 8e5afbe6ea72..bd72895971f5 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -252,8 +252,8 @@ static int build_link(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
ref->id, SND_TPLG_TYPE_HW_CONFIG, elem->index);
|
|
||||||
if (!ref->elem) {
|
|
||||||
SNDERR("cannot find HW config '%s'"
|
|
||||||
- " referenced by link '%s'",
|
|
||||||
- ref->id, elem->id);
|
|
||||||
+ " referenced by link '%s'",
|
|
||||||
+ ref->id, elem->id);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -267,6 +267,7 @@ static int build_link(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
err = tplg_copy_data(tplg, elem, ref);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
+ link = elem->link; /* realloc */
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,39 +0,0 @@
|
|||||||
From cb88813ff71226af5d16f8853d186ff7c572dbe0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 3 Jan 2020 22:07:11 +0100
|
|
||||||
Subject: [PATCH 54/63] topology: move the elem->list delete to
|
|
||||||
tplg_elem_free()
|
|
||||||
|
|
||||||
The tplg_elem_free() is called in the error path from many places
|
|
||||||
and it is expected that the element object will be unregistered
|
|
||||||
from the tplg structure, too.
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/elem.c | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/elem.c b/src/topology/elem.c
|
|
||||||
index ed5b5f13054f..cbd7f4b636c1 100644
|
|
||||||
--- a/src/topology/elem.c
|
|
||||||
+++ b/src/topology/elem.c
|
|
||||||
@@ -301,6 +301,8 @@ struct tplg_elem *tplg_elem_new(void)
|
|
||||||
|
|
||||||
void tplg_elem_free(struct tplg_elem *elem)
|
|
||||||
{
|
|
||||||
+ list_del(&elem->list);
|
|
||||||
+
|
|
||||||
tplg_ref_free_list(&elem->ref_list);
|
|
||||||
|
|
||||||
/* free struct snd_tplg_ object,
|
|
||||||
@@ -323,7 +325,6 @@ void tplg_elem_free_list(struct list_head *base)
|
|
||||||
|
|
||||||
list_for_each_safe(pos, npos, base) {
|
|
||||||
elem = list_entry(pos, struct tplg_elem, list);
|
|
||||||
- list_del(&elem->list);
|
|
||||||
tplg_elem_free(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,654 +0,0 @@
|
|||||||
From ae6522e10621839a15f5a439091af7542d84d3e5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 3 Jan 2020 22:31:27 +0100
|
|
||||||
Subject: [PATCH 55/63] topology: unify the log mechanism
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/Makefile.am | 3 ++-
|
|
||||||
src/topology/builder.c | 54 +++++++++++++++++++++--------------------------
|
|
||||||
src/topology/ctl.c | 30 +++++++++++++-------------
|
|
||||||
src/topology/dapm.c | 19 +++++++++--------
|
|
||||||
src/topology/data.c | 26 +++++++++++------------
|
|
||||||
src/topology/decoder.c | 32 ++++++++--------------------
|
|
||||||
src/topology/log.c | 34 +++++++++++++++++++++++++++++
|
|
||||||
src/topology/pcm.c | 48 ++++++++++++++++++++---------------------
|
|
||||||
src/topology/tplg_local.h | 8 ++++++-
|
|
||||||
9 files changed, 138 insertions(+), 116 deletions(-)
|
|
||||||
create mode 100644 src/topology/log.c
|
|
||||||
|
|
||||||
diff --git a/src/topology/Makefile.am b/src/topology/Makefile.am
|
|
||||||
index 12d1d4455883..9f48891f5c28 100644
|
|
||||||
--- a/src/topology/Makefile.am
|
|
||||||
+++ b/src/topology/Makefile.am
|
|
||||||
@@ -29,7 +29,8 @@ libatopology_la_SOURCES =\
|
|
||||||
ops.c \
|
|
||||||
elem.c \
|
|
||||||
save.c \
|
|
||||||
- decoder.c
|
|
||||||
+ decoder.c \
|
|
||||||
+ log.c
|
|
||||||
|
|
||||||
noinst_HEADERS = tplg_local.h
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index 74c44405e653..7af5de084d84 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -20,20 +20,6 @@
|
|
||||||
#include "list.h"
|
|
||||||
#include "tplg_local.h"
|
|
||||||
|
|
||||||
-/* verbose output detailing each object size and file position */
|
|
||||||
-static void verbose(snd_tplg_t *tplg, const char *fmt, ...)
|
|
||||||
-{
|
|
||||||
- va_list va;
|
|
||||||
-
|
|
||||||
- if (!tplg->verbose)
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
- va_start(va, fmt);
|
|
||||||
- fprintf(stdout, "0x%6.6zx/%6.6zd - ", tplg->bin_pos, tplg->bin_pos);
|
|
||||||
- vfprintf(stdout, fmt, va);
|
|
||||||
- va_end(va);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
/* write a block, track the position */
|
|
||||||
static ssize_t twrite(snd_tplg_t *tplg, void *data, size_t data_size)
|
|
||||||
{
|
|
||||||
@@ -73,10 +59,11 @@ static ssize_t write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- verbose(tplg, "header index %d type %d count %d size 0x%lx/%ld vendor %d "
|
|
||||||
- "version %d\n", index, type, count,
|
|
||||||
- (long unsigned int)payload_size, (long int)payload_size,
|
|
||||||
- vendor_type, version);
|
|
||||||
+ tplg_log(tplg, 'B', tplg->bin_pos,
|
|
||||||
+ "header index %d type %d count %d size 0x%lx/%ld vendor %d "
|
|
||||||
+ "version %d", index, type, count,
|
|
||||||
+ (long unsigned int)payload_size, (long int)payload_size,
|
|
||||||
+ vendor_type, version);
|
|
||||||
|
|
||||||
tplg->next_hdr_pos += hdr.payload_size + sizeof(hdr);
|
|
||||||
|
|
||||||
@@ -121,13 +108,15 @@ static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (elem->type != SND_TPLG_TYPE_DAPM_GRAPH)
|
|
||||||
- verbose(tplg, "%s '%s': write %d bytes\n",
|
|
||||||
- obj_name, elem->id, elem->size);
|
|
||||||
+ tplg_log(tplg, 'B', tplg->bin_pos,
|
|
||||||
+ "%s '%s': write %d bytes",
|
|
||||||
+ obj_name, elem->id, elem->size);
|
|
||||||
else
|
|
||||||
- verbose(tplg, "%s '%s -> %s -> %s': write %d bytes\n",
|
|
||||||
- obj_name, elem->route->source,
|
|
||||||
- elem->route->control,
|
|
||||||
- elem->route->sink, elem->size);
|
|
||||||
+ tplg_log(tplg, 'B', tplg->bin_pos,
|
|
||||||
+ "%s '%s -> %s -> %s': write %d bytes",
|
|
||||||
+ obj_name, elem->route->source,
|
|
||||||
+ elem->route->control,
|
|
||||||
+ elem->route->sink, elem->size);
|
|
||||||
|
|
||||||
wsize = twrite(tplg, elem->obj, elem->size);
|
|
||||||
if (wsize < 0)
|
|
||||||
@@ -225,10 +214,13 @@ static ssize_t write_manifest_data(snd_tplg_t *tplg)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
- verbose(tplg, "manifest: write %d bytes\n", sizeof(tplg->manifest));
|
|
||||||
+ tplg_log(tplg, 'B', tplg->bin_pos, "manifest: write %d bytes",
|
|
||||||
+ sizeof(tplg->manifest));
|
|
||||||
ret = twrite(tplg, &tplg->manifest, sizeof(tplg->manifest));
|
|
||||||
if (ret >= 0) {
|
|
||||||
- verbose(tplg, "manifest: write %d priv bytes\n", tplg->manifest.priv.size);
|
|
||||||
+ tplg_log(tplg, 'B', tplg->bin_pos,
|
|
||||||
+ "manifest: write %d priv bytes",
|
|
||||||
+ tplg->manifest.priv.size);
|
|
||||||
ret = twrite(tplg, tplg->manifest_pdata, tplg->manifest.priv.size);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
@@ -280,9 +272,10 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
size = calc_block_size(list);
|
|
||||||
if (size == 0)
|
|
||||||
continue;
|
|
||||||
- verbose(tplg, "block size for type %s (%d:%d) is 0x%zx/%zd\n",
|
|
||||||
- tptr->name, tptr->type,
|
|
||||||
- tptr->tsoc, size, size);
|
|
||||||
+ tplg_log(tplg, 'B', tplg->bin_pos,
|
|
||||||
+ "block size for type %s (%d:%d) is 0x%zx/%zd",
|
|
||||||
+ tptr->name, tptr->type,
|
|
||||||
+ tptr->tsoc, size, size);
|
|
||||||
ret = write_elem_block(tplg, list, size,
|
|
||||||
tptr->tsoc, tptr->name);
|
|
||||||
if (ret < 0) {
|
|
||||||
@@ -292,7 +285,8 @@ int tplg_write_data(snd_tplg_t *tplg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- verbose(tplg, "total size is 0x%zx/%zd\n", tplg->bin_pos, tplg->bin_pos);
|
|
||||||
+ tplg_log(tplg, 'B', tplg->bin_pos, "total size is 0x%zx/%zd",
|
|
||||||
+ tplg->bin_pos, tplg->bin_pos);
|
|
||||||
|
|
||||||
if (total_size != tplg->bin_pos) {
|
|
||||||
SNDERR("total size mismatch (%zd != %zd)",
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index 24d437aa4a2e..a5a81148d1eb 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -1216,8 +1216,8 @@ int tplg_decode_control_mixer1(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "mixer: size %d TLV size %d private size %d",
|
|
||||||
- mc->size, mc->hdr.tlv.size, mc->priv.size);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "mixer: size %d TLV size %d private size %d",
|
|
||||||
+ mc->size, mc->hdr.tlv.size, mc->priv.size);
|
|
||||||
if (size != mc->size + mc->priv.size) {
|
|
||||||
SNDERR("mixer: unexpected element size %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -1233,7 +1233,7 @@ int tplg_decode_control_mixer1(snd_tplg_t *tplg,
|
|
||||||
mt->min = mc->min;
|
|
||||||
mt->max = mc->max;
|
|
||||||
mt->platform_max = mc->platform_max;
|
|
||||||
- tplg_dv(tplg, pos, "mixer: name '%s' access 0x%x",
|
|
||||||
+ tplg_log(tplg, 'D', pos, "mixer: name '%s' access 0x%x",
|
|
||||||
mt->hdr.name, mt->hdr.access);
|
|
||||||
if (mc->num_channels > 0) {
|
|
||||||
map = tplg_calloc(heap, sizeof(*map));
|
|
||||||
@@ -1261,16 +1261,16 @@ int tplg_decode_control_mixer1(snd_tplg_t *tplg,
|
|
||||||
db->min = mc->hdr.tlv.scale.min;
|
|
||||||
db->step = mc->hdr.tlv.scale.step;
|
|
||||||
db->mute = mc->hdr.tlv.scale.mute;
|
|
||||||
- tplg_dv(tplg, pos, "mixer: dB scale TLV: min %d step %d mute %d",
|
|
||||||
- db->min, db->step, db->mute);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "mixer: dB scale TLV: min %d step %d mute %d",
|
|
||||||
+ db->min, db->step, db->mute);
|
|
||||||
} else {
|
|
||||||
SNDERR("mixer: wrong TLV size %d", mc->hdr.tlv.size);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
mt->priv = &mc->priv;
|
|
||||||
- tplg_dv(tplg, pos + offsetof(struct snd_soc_tplg_mixer_control, priv),
|
|
||||||
- "mixer: private start");
|
|
||||||
+ tplg_log(tplg, 'D', pos + offsetof(struct snd_soc_tplg_mixer_control, priv),
|
|
||||||
+ "mixer: private start");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1338,8 +1338,8 @@ int tplg_decode_control_enum1(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "enum: size %d private size %d",
|
|
||||||
- ec->size, ec->priv.size);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "enum: size %d private size %d",
|
|
||||||
+ ec->size, ec->priv.size);
|
|
||||||
if (size != ec->size + ec->priv.size) {
|
|
||||||
SNDERR("enum: unexpected element size %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -1380,8 +1380,8 @@ int tplg_decode_control_enum1(snd_tplg_t *tplg,
|
|
||||||
cmt.num_channels = ec->num_channels;
|
|
||||||
for (i = 0; i < cmt.num_channels; i++) {
|
|
||||||
struct snd_tplg_channel_elem *channel = &cmt.channel[i];
|
|
||||||
- tplg_dv(tplg, pos + ((void *)&ec->channel[i] - (void *)ec),
|
|
||||||
- "enum: channel size %d", ec->channel[i].size);
|
|
||||||
+ tplg_log(tplg, 'D', pos + ((void *)&ec->channel[i] - (void *)ec),
|
|
||||||
+ "enum: channel size %d", ec->channel[i].size);
|
|
||||||
channel->reg = ec->channel[i].reg;
|
|
||||||
channel->shift = ec->channel[i].shift;
|
|
||||||
channel->id = ec->channel[i].id;
|
|
||||||
@@ -1452,8 +1452,8 @@ int tplg_decode_control_bytes1(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "control bytes: size %d private size %d",
|
|
||||||
- bc->size, bc->priv.size);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "control bytes: size %d private size %d",
|
|
||||||
+ bc->size, bc->priv.size);
|
|
||||||
if (size != bc->size + bc->priv.size) {
|
|
||||||
SNDERR("bytes: unexpected element size %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -1473,8 +1473,8 @@ int tplg_decode_control_bytes1(snd_tplg_t *tplg,
|
|
||||||
bt->ext_ops.get = bc->ext_ops.get;
|
|
||||||
bt->ext_ops.put = bc->ext_ops.put;
|
|
||||||
bt->ext_ops.info = bc->ext_ops.info;
|
|
||||||
- tplg_dv(tplg, pos, "control bytes: name '%s' access 0x%x",
|
|
||||||
- bt->hdr.name, bt->hdr.access);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "control bytes: name '%s' access 0x%x",
|
|
||||||
+ bt->hdr.name, bt->hdr.access);
|
|
||||||
|
|
||||||
bt->priv = &bc->priv;
|
|
||||||
return 0;
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index 9fab2d92c150..0bf64833c11f 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -895,8 +895,8 @@ next:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "dapm widget: size %d private size %d kcontrols %d",
|
|
||||||
- w->size, w->priv.size, w->num_kcontrols);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "dapm widget: size %d private size %d kcontrols %d",
|
|
||||||
+ w->size, w->priv.size, w->num_kcontrols);
|
|
||||||
|
|
||||||
wt = tplg_calloc(&heap, sizeof(*wt) + sizeof(void *) * w->num_kcontrols);
|
|
||||||
if (wt == NULL)
|
|
||||||
@@ -913,7 +913,8 @@ next:
|
|
||||||
wt->event_flags = w->event_flags;
|
|
||||||
wt->event_type = w->event_type;
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "dapm widget: name '%s' sname '%s'", wt->name, wt->sname);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "dapm widget: name '%s' sname '%s'",
|
|
||||||
+ wt->name, wt->sname);
|
|
||||||
|
|
||||||
if (sizeof(*w) + w->priv.size > size) {
|
|
||||||
SNDERR("dapm widget: wrong private data size %d",
|
|
||||||
@@ -921,8 +922,8 @@ next:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos + offsetof(struct snd_soc_tplg_dapm_widget, priv),
|
|
||||||
- "dapm widget: private start");
|
|
||||||
+ tplg_log(tplg, 'D', pos + offsetof(struct snd_soc_tplg_dapm_widget, priv),
|
|
||||||
+ "dapm widget: private start");
|
|
||||||
|
|
||||||
wt->priv = &w->priv;
|
|
||||||
bin += sizeof(*w) + w->priv.size;
|
|
||||||
@@ -942,7 +943,7 @@ next:
|
|
||||||
wt->num_ctls++;
|
|
||||||
mc = bin;
|
|
||||||
size2 = mc->size + mc->priv.size;
|
|
||||||
- tplg_dv(tplg, pos, "kcontrol mixer size %zd", size2);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "kcontrol mixer size %zd", size2);
|
|
||||||
if (size2 > size) {
|
|
||||||
SNDERR("dapm widget: small mixer size %d",
|
|
||||||
size2);
|
|
||||||
@@ -962,7 +963,7 @@ next:
|
|
||||||
wt->num_ctls++;
|
|
||||||
ec = bin;
|
|
||||||
size2 = ec->size + ec->priv.size;
|
|
||||||
- tplg_dv(tplg, pos, "kcontrol enum size %zd", size2);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "kcontrol enum size %zd", size2);
|
|
||||||
if (size2 > size) {
|
|
||||||
SNDERR("dapm widget: small enum size %d",
|
|
||||||
size2);
|
|
||||||
@@ -982,7 +983,7 @@ next:
|
|
||||||
wt->num_ctls++;
|
|
||||||
bc = bin;
|
|
||||||
size2 = bc->size + bc->priv.size;
|
|
||||||
- tplg_dv(tplg, pos, "kcontrol bytes size %zd", size2);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "kcontrol bytes size %zd", size2);
|
|
||||||
if (size2 > size) {
|
|
||||||
SNDERR("dapm widget: small bytes size %d",
|
|
||||||
size2);
|
|
||||||
@@ -1049,7 +1050,7 @@ int tplg_decode_dapm_graph(snd_tplg_t *tplg,
|
|
||||||
ge->ctl = g->control;
|
|
||||||
ge->sink = g->sink;
|
|
||||||
gt->count++;
|
|
||||||
- tplg_dv(tplg, pos, "dapm graph: src='%s' ctl='%s' sink='%s'",
|
|
||||||
+ tplg_log(tplg, 'D', pos, "dapm graph: src='%s' ctl='%s' sink='%s'",
|
|
||||||
ge->src, ge->ctl, ge->sink);
|
|
||||||
bin += sizeof(*g);
|
|
||||||
size -= sizeof(*g);
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 64563920a4e2..0b513428da80 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -1604,7 +1604,7 @@ int tplg_decode_manifest_data(snd_tplg_t *tplg,
|
|
||||||
if (!elem)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "manifest: private size %d", size);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "manifest: private size %d", size);
|
|
||||||
return tplg_add_data(tplg, elem, bin, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1664,7 +1664,7 @@ static int tplg_verify_tuple_set(snd_tplg_t *tplg, size_t pos,
|
|
||||||
|
|
||||||
va = bin;
|
|
||||||
if (size < sizeof(*va) || size < va->size) {
|
|
||||||
- tplg_dv(tplg, pos, "tuple set verify: wrong size %d", size);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "tuple set verify: wrong size %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1677,20 +1677,20 @@ static int tplg_verify_tuple_set(snd_tplg_t *tplg, size_t pos,
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_SHORT:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- tplg_dv(tplg, pos, "tuple set verify: unknown array type %d", va->type);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "tuple set verify: unknown array type %d", va->type);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
j = tplg_get_tuple_size(va->type) * va->num_elems;
|
|
||||||
if (j + sizeof(*va) != va->size) {
|
|
||||||
- tplg_dv(tplg, pos, "tuple set verify: wrong vendor array size %d "
|
|
||||||
- "(expected %d for %d count %d)",
|
|
||||||
- va->size, j + sizeof(*va), va->type, va->num_elems);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "tuple set verify: wrong vendor array size %d "
|
|
||||||
+ "(expected %d for %d count %d)",
|
|
||||||
+ va->size, j + sizeof(*va), va->type, va->num_elems);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (va->num_elems > 4096) {
|
|
||||||
- tplg_dv(tplg, pos, "tuple set verify: tuples overflow %d", va->num_elems);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "tuple set verify: tuples overflow %d", va->num_elems);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1748,8 +1748,8 @@ static int tplg_decode_tuple_set(snd_tplg_t *tplg,
|
|
||||||
set->type = va->type;
|
|
||||||
set->num_tuples = va->num_elems;
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "tuple set: type %d (%s) tuples %d size %d", set->type,
|
|
||||||
- get_tuple_type_name(set->type), set->num_tuples, va->size);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "tuple set: type %d (%s) tuples %d size %d", set->type,
|
|
||||||
+ get_tuple_type_name(set->type), set->num_tuples, va->size);
|
|
||||||
for (j = 0; j < set->num_tuples; j++) {
|
|
||||||
tuple = &set->tuple[j];
|
|
||||||
switch (va->type) {
|
|
||||||
@@ -1798,14 +1798,14 @@ static int tplg_verify_tuples(snd_tplg_t *tplg, size_t pos,
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (size < sizeof(*va)) {
|
|
||||||
- tplg_dv(tplg, pos, "tuples: small size %d", size);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "tuples: small size %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
next:
|
|
||||||
va = bin;
|
|
||||||
if (size < sizeof(*va)) {
|
|
||||||
- tplg_dv(tplg, pos, "tuples: unexpected vendor arry size %d", size);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "tuples: unexpected vendor arry size %d", size);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1903,7 +1903,7 @@ next:
|
|
||||||
return err;
|
|
||||||
tuples = NULL;
|
|
||||||
}
|
|
||||||
- tplg_dv(tplg, pos, "add bytes: size %d", tp->size);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "add bytes: size %d", tp->size);
|
|
||||||
snprintf(suffix, sizeof(suffix), "data%u", block++);
|
|
||||||
err = tplg_add_data_bytes(tplg, parent, suffix, tp->array, tp->size);
|
|
||||||
} else {
|
|
||||||
@@ -1929,7 +1929,7 @@ next:
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- tplg_dv(tplg, pos, "decode tuples: size %d", tp->size);
|
|
||||||
+ tplg_log(tplg, 'A', pos, "decode tuples: size %d", tp->size);
|
|
||||||
err = tplg_decode_tuples(tplg, pos, parent, tuples, tp->array, tp->size);
|
|
||||||
num_tuples++;
|
|
||||||
}
|
|
||||||
diff --git a/src/topology/decoder.c b/src/topology/decoder.c
|
|
||||||
index 2d6a8969756a..66ebe5d8a668 100644
|
|
||||||
--- a/src/topology/decoder.c
|
|
||||||
+++ b/src/topology/decoder.c
|
|
||||||
@@ -18,21 +18,6 @@
|
|
||||||
#include "list.h"
|
|
||||||
#include "tplg_local.h"
|
|
||||||
|
|
||||||
-/* verbose output detailing each object size and file position */
|
|
||||||
-void tplg_dv(snd_tplg_t *tplg, size_t pos, const char *fmt, ...)
|
|
||||||
-{
|
|
||||||
- va_list va;
|
|
||||||
-
|
|
||||||
- if (!tplg->verbose)
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
- va_start(va, fmt);
|
|
||||||
- fprintf(stdout, "D0x%6.6zx/%6.6zd - ", pos, pos);
|
|
||||||
- vfprintf(stdout, fmt, va);
|
|
||||||
- va_end(va);
|
|
||||||
- putc('\n', stdout);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
int tplg_decode_template(snd_tplg_t *tplg,
|
|
||||||
size_t pos,
|
|
||||||
struct snd_soc_tplg_hdr *hdr,
|
|
||||||
@@ -41,7 +26,8 @@ int tplg_decode_template(snd_tplg_t *tplg,
|
|
||||||
int type;
|
|
||||||
|
|
||||||
type = tplg_get_type(hdr->type);
|
|
||||||
- tplg_dv(tplg, pos, "template: asoc type %d library type %d", hdr->type, type);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "template: asoc type %d library type %d",
|
|
||||||
+ hdr->type, type);
|
|
||||||
if (type < 0)
|
|
||||||
return type;
|
|
||||||
|
|
||||||
@@ -50,8 +36,8 @@ int tplg_decode_template(snd_tplg_t *tplg,
|
|
||||||
t->index = hdr->index;
|
|
||||||
t->version = hdr->version;
|
|
||||||
t->vendor_type = hdr->vendor_type;
|
|
||||||
- tplg_dv(tplg, pos, "template: index %d version %d vendor_type %d",
|
|
||||||
- hdr->index, hdr->version, hdr->vendor_type);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "template: index %d version %d vendor_type %d",
|
|
||||||
+ hdr->index, hdr->version, hdr->vendor_type);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -71,11 +57,11 @@ int snd_tplg_decode(snd_tplg_t *tplg, void *bin, size_t size, int dflags)
|
|
||||||
while (1) {
|
|
||||||
pos = b - bin;
|
|
||||||
if (size == pos) {
|
|
||||||
- tplg_dv(tplg, pos, "block: success (total %zd)", size);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "block: success (total %zd)", size);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (size - pos < sizeof(*hdr)) {
|
|
||||||
- tplg_dv(tplg, pos, "block: small size");
|
|
||||||
+ tplg_log(tplg, 'D', pos, "block: small size");
|
|
||||||
SNDERR("incomplete header data to decode");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -85,8 +71,8 @@ int snd_tplg_decode(snd_tplg_t *tplg, void *bin, size_t size, int dflags)
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "block: abi %d size %d payload size %d",
|
|
||||||
- hdr->abi, hdr->size, hdr->payload_size);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "block: abi %d size %d payload size %d",
|
|
||||||
+ hdr->abi, hdr->size, hdr->payload_size);
|
|
||||||
if (hdr->abi != SND_SOC_TPLG_ABI_VERSION) {
|
|
||||||
SNDERR("unsupported ABI version %d", hdr->abi);
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -127,7 +113,7 @@ int snd_tplg_decode(snd_tplg_t *tplg, void *bin, size_t size, int dflags)
|
|
||||||
SNDERR("unknown block type %d", hdr->type);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
- tplg_dv(tplg, pos, "block: type %d - %s", hdr->type, tptr->name);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "block: type %d - %s", hdr->type, tptr->name);
|
|
||||||
err = tptr->decod(tplg, pos, hdr, b + hdr->size, hdr->payload_size);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
diff --git a/src/topology/log.c b/src/topology/log.c
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..1ca365287c22
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/src/topology/log.c
|
|
||||||
@@ -0,0 +1,34 @@
|
|
||||||
+/*
|
|
||||||
+ Copyright (c) 2019 Red Hat Inc.
|
|
||||||
+ All rights reserved.
|
|
||||||
+
|
|
||||||
+ This library is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU Lesser General Public License as
|
|
||||||
+ published by the Free Software Foundation; either version 2.1 of
|
|
||||||
+ the License, or (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU Lesser General Public License for more details.
|
|
||||||
+
|
|
||||||
+ Authors: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
+*/
|
|
||||||
+
|
|
||||||
+#include "list.h"
|
|
||||||
+#include "tplg_local.h"
|
|
||||||
+
|
|
||||||
+/* verbose output detailing each object size and file position */
|
|
||||||
+void tplg_log_(snd_tplg_t *tplg, char type, size_t pos, const char *fmt, ...)
|
|
||||||
+{
|
|
||||||
+ va_list va;
|
|
||||||
+
|
|
||||||
+ if (!tplg->verbose)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ va_start(va, fmt);
|
|
||||||
+ fprintf(stdout, "%c0x%6.6zx/%6.6zd - ", type, pos, pos);
|
|
||||||
+ vfprintf(stdout, fmt, va);
|
|
||||||
+ va_end(va);
|
|
||||||
+ putc('\n', stdout);
|
|
||||||
+}
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index 4e04a6bc3d78..918e3e9a957f 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -1969,21 +1969,21 @@ next:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "pcm: size %d private size %d streams %d",
|
|
||||||
- pcm->size, pcm->priv.size, pcm->num_streams);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "pcm: size %d private size %d streams %d",
|
|
||||||
+ pcm->size, pcm->priv.size, pcm->num_streams);
|
|
||||||
|
|
||||||
pt->pcm_name = pcm->pcm_name;
|
|
||||||
- tplg_dv(tplg, pos, "pcm: pcm_name '%s'", pt->pcm_name);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "pcm: pcm_name '%s'", pt->pcm_name);
|
|
||||||
pt->dai_name = pcm->dai_name;
|
|
||||||
- tplg_dv(tplg, pos, "pcm: dai_name '%s'", pt->dai_name);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "pcm: dai_name '%s'", pt->dai_name);
|
|
||||||
pt->pcm_id = pcm->pcm_id;
|
|
||||||
pt->dai_id = pcm->dai_id;
|
|
||||||
- tplg_dv(tplg, pos, "pcm: pcm_id %d dai_id %d", pt->pcm_id, pt->dai_id);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "pcm: pcm_id %d dai_id %d", pt->pcm_id, pt->dai_id);
|
|
||||||
pt->playback = pcm->playback;
|
|
||||||
pt->capture = pcm->capture;
|
|
||||||
pt->compress = pcm->compress;
|
|
||||||
- tplg_dv(tplg, pos, "pcm: playback %d capture %d compress",
|
|
||||||
- pt->playback, pt->capture, pt->compress);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "pcm: playback %d capture %d compress",
|
|
||||||
+ pt->playback, pt->capture, pt->compress);
|
|
||||||
pt->num_streams = pcm->num_streams;
|
|
||||||
pt->flag_mask = pcm->flag_mask;
|
|
||||||
pt->flags = pcm->flags;
|
|
||||||
@@ -1995,8 +1995,8 @@ next:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
stream->name = pcm->stream[i].name;
|
|
||||||
- tplg_dv(tplg, pos + offsetof(struct snd_soc_tplg_pcm, stream[i]),
|
|
||||||
- "stream %d: '%s'", i, stream->name);
|
|
||||||
+ tplg_log(tplg, 'D', pos + offsetof(struct snd_soc_tplg_pcm, stream[i]),
|
|
||||||
+ "stream %d: '%s'", i, stream->name);
|
|
||||||
stream->format = pcm->stream[i].format;
|
|
||||||
stream->rate = pcm->stream[i].rate;
|
|
||||||
stream->period_bytes = pcm->stream[i].period_bytes;
|
|
||||||
@@ -2016,8 +2016,8 @@ next:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
cap->name = pcm->caps[i].name;
|
|
||||||
- tplg_dv(tplg, pos + offsetof(struct snd_soc_tplg_pcm, caps[i]),
|
|
||||||
- "caps %d: '%s'", i, cap->name);
|
|
||||||
+ tplg_log(tplg, 'D', pos + offsetof(struct snd_soc_tplg_pcm, caps[i]),
|
|
||||||
+ "caps %d: '%s'", i, cap->name);
|
|
||||||
cap->formats = pcm->caps[i].formats;
|
|
||||||
cap->rates = pcm->caps[i].rates;
|
|
||||||
cap->rate_min = pcm->caps[i].rate_min;
|
|
||||||
@@ -2033,8 +2033,8 @@ next:
|
|
||||||
cap->sig_bits = pcm->caps[i].sig_bits;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos + offsetof(struct snd_soc_tplg_pcm, priv),
|
|
||||||
- "pcm: private start");
|
|
||||||
+ tplg_log(tplg, 'D', pos + offsetof(struct snd_soc_tplg_pcm, priv),
|
|
||||||
+ "pcm: private start");
|
|
||||||
pt->priv = &pcm->priv;
|
|
||||||
|
|
||||||
bin += sizeof(*pcm) + pcm->priv.size;
|
|
||||||
@@ -2120,16 +2120,16 @@ next:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos, "link: size %d private size %d streams %d "
|
|
||||||
- "hw_configs %d",
|
|
||||||
- link->size, link->priv.size, link->num_streams,
|
|
||||||
- link->num_hw_configs);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "link: size %d private size %d streams %d "
|
|
||||||
+ "hw_configs %d",
|
|
||||||
+ link->size, link->priv.size, link->num_streams,
|
|
||||||
+ link->num_hw_configs);
|
|
||||||
|
|
||||||
lt.id = link->id;
|
|
||||||
lt.name = link->name;
|
|
||||||
- tplg_dv(tplg, pos, "link: name '%s'", lt.name);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "link: name '%s'", lt.name);
|
|
||||||
lt.stream_name = link->stream_name;
|
|
||||||
- tplg_dv(tplg, pos, "link: stream_name '%s'", lt.stream_name);
|
|
||||||
+ tplg_log(tplg, 'D', pos, "link: stream_name '%s'", lt.stream_name);
|
|
||||||
lt.num_streams = link->num_streams;
|
|
||||||
lt.num_hw_configs = link->num_hw_configs;
|
|
||||||
lt.default_hw_config_id = link->default_hw_config_id;
|
|
||||||
@@ -2143,9 +2143,9 @@ next:
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
stream->name = link->stream[i].name;
|
|
||||||
- tplg_dv(tplg,
|
|
||||||
- pos + offsetof(struct snd_soc_tplg_link_config, stream[i]),
|
|
||||||
- "stream %d: '%s'", i, stream->name);
|
|
||||||
+ tplg_log(tplg, 'D',
|
|
||||||
+ pos + offsetof(struct snd_soc_tplg_link_config, stream[i]),
|
|
||||||
+ "stream %d: '%s'", i, stream->name);
|
|
||||||
stream->format = link->stream[i].format;
|
|
||||||
stream->rate = link->stream[i].rate;
|
|
||||||
stream->period_bytes = link->stream[i].period_bytes;
|
|
||||||
@@ -2192,8 +2192,8 @@ next:
|
|
||||||
}
|
|
||||||
lt.hw_config = hws;
|
|
||||||
|
|
||||||
- tplg_dv(tplg, pos + offsetof(struct snd_soc_tplg_pcm, priv),
|
|
||||||
- "link: private start");
|
|
||||||
+ tplg_log(tplg, 'D', pos + offsetof(struct snd_soc_tplg_pcm, priv),
|
|
||||||
+ "link: private start");
|
|
||||||
lt.priv = &link->priv;
|
|
||||||
|
|
||||||
bin += sizeof(*link) + link->priv.size;
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index 22fc5fba48b9..e061db755ed2 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -226,6 +226,13 @@ struct tplg_table {
|
|
||||||
extern struct tplg_table tplg_table[];
|
|
||||||
extern unsigned int tplg_table_items;
|
|
||||||
|
|
||||||
+#define tplg_log(tplg, type, pos, fmt, args...) do { \
|
|
||||||
+ if ((tplg)->verbose) \
|
|
||||||
+ tplg_log_((tplg), (type), (pos), (fmt), ##args); \
|
|
||||||
+} while (0)
|
|
||||||
+
|
|
||||||
+void tplg_log_(snd_tplg_t *tplg, char type, size_t pos, const char *fmt, ...);
|
|
||||||
+
|
|
||||||
void *tplg_calloc(struct list_head *heap, size_t size);
|
|
||||||
void tplg_free(struct list_head *heap);
|
|
||||||
|
|
||||||
@@ -373,7 +380,6 @@ int tplg_save_stream_caps(snd_tplg_t *tplg, struct tplg_elem *elem,
|
|
||||||
int tplg_save_dai(snd_tplg_t *tplg, struct tplg_elem *elem,
|
|
||||||
char **dst, const char *pfx);
|
|
||||||
|
|
||||||
-void tplg_dv(snd_tplg_t *tplg, size_t pos, const char *fmt, ...);
|
|
||||||
int tplg_decode_template(snd_tplg_t *tplg,
|
|
||||||
size_t pos,
|
|
||||||
struct snd_soc_tplg_hdr *hdr,
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,784 +0,0 @@
|
|||||||
From d768da27e7f9f56328c61ed5d37c17ce075cbc6e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 3 Jan 2020 22:44:15 +0100
|
|
||||||
Subject: [PATCH 56/63] topology: tplg_dbg() cleanups
|
|
||||||
|
|
||||||
- remove newline at the end
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/channel.c | 6 +++---
|
|
||||||
src/topology/ctl.c | 40 ++++++++++++++++++++--------------------
|
|
||||||
src/topology/dapm.c | 32 ++++++++++++++++----------------
|
|
||||||
src/topology/data.c | 48 +++++++++++++++++++++++++++---------------------
|
|
||||||
src/topology/ops.c | 8 ++++----
|
|
||||||
src/topology/pcm.c | 36 ++++++++++++++++++------------------
|
|
||||||
src/topology/text.c | 6 +++---
|
|
||||||
7 files changed, 91 insertions(+), 85 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/channel.c b/src/topology/channel.c
|
|
||||||
index 390c3f164e97..47d5ea4c419a 100644
|
|
||||||
--- a/src/topology/channel.c
|
|
||||||
+++ b/src/topology/channel.c
|
|
||||||
@@ -100,7 +100,7 @@ int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
channel += tplg->channel_idx;
|
|
||||||
snd_config_get_id(cfg, &id);
|
|
||||||
- tplg_dbg("\tChannel %s at index %d\n", id, tplg->channel_idx);
|
|
||||||
+ tplg_dbg("\tChannel %s at index %d", id, tplg->channel_idx);
|
|
||||||
|
|
||||||
channel_id = lookup_channel(id);
|
|
||||||
if (channel_id < 0) {
|
|
||||||
@@ -110,7 +110,7 @@ int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
channel->id = channel_id;
|
|
||||||
channel->size = sizeof(*channel);
|
|
||||||
- tplg_dbg("\tChan %s = %d\n", id, channel->id);
|
|
||||||
+ tplg_dbg("\tChan %s = %d", id, channel->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ int tplg_parse_channel(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
else if (strcmp(id, "shift") == 0)
|
|
||||||
channel->shift = value;
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s = %d\n", id, value);
|
|
||||||
+ tplg_dbg("\t\t%s = %d", id, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
tplg->channel_idx++;
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index a5a81148d1eb..41dc2ddbb826 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -54,7 +54,7 @@ static int parse_access_values(snd_config_t *cfg,
|
|
||||||
const char *value = NULL;
|
|
||||||
unsigned int j;
|
|
||||||
|
|
||||||
- tplg_dbg(" Access:\n");
|
|
||||||
+ tplg_dbg(" Access:");
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
@@ -67,7 +67,7 @@ static int parse_access_values(snd_config_t *cfg,
|
|
||||||
for (j = 0; j < ARRAY_SIZE(ctl_access); j++) {
|
|
||||||
if (strcmp(value, ctl_access[j].name) == 0) {
|
|
||||||
hdr->access |= ctl_access[j].value;
|
|
||||||
- tplg_dbg("\t%s\n", value);
|
|
||||||
+ tplg_dbg("\t%s", value);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -150,7 +150,7 @@ static int copy_tlv(struct tplg_elem *elem, struct tplg_elem *ref)
|
|
||||||
struct snd_soc_tplg_mixer_control *mixer_ctrl = elem->mixer_ctrl;
|
|
||||||
struct snd_soc_tplg_ctl_tlv *tlv = ref->tlv;
|
|
||||||
|
|
||||||
- tplg_dbg("TLV '%s' used by '%s\n", ref->id, elem->id);
|
|
||||||
+ tplg_dbg("TLV '%s' used by '%s", ref->id, elem->id);
|
|
||||||
|
|
||||||
/* TLV has a fixed size */
|
|
||||||
mixer_ctrl->hdr.tlv = *tlv;
|
|
||||||
@@ -330,7 +330,7 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
const char *id = NULL;
|
|
||||||
int val;
|
|
||||||
|
|
||||||
- tplg_dbg(" scale: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" scale: %s", elem->id);
|
|
||||||
|
|
||||||
tplg_tlv->size = sizeof(struct snd_soc_tplg_ctl_tlv);
|
|
||||||
tplg_tlv->type = SNDRV_CTL_TLVT_DB_SCALE;
|
|
||||||
@@ -348,7 +348,7 @@ static int tplg_parse_tlv_dbscale(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
if (tplg_get_integer(n, &val, 0))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- tplg_dbg("\t%s = %i\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s = %i", id, val);
|
|
||||||
|
|
||||||
/* get TLV data */
|
|
||||||
if (strcmp(id, "min") == 0)
|
|
||||||
@@ -450,7 +450,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
snd_strlcpy(be->hdr.name, elem->id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
be->hdr.type = SND_SOC_TPLG_TYPE_BYTES;
|
|
||||||
|
|
||||||
- tplg_dbg(" Control Bytes: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Control Bytes: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
@@ -468,7 +468,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
be->base = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, be->base);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, be->base);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -477,7 +477,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
be->num_regs = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, be->num_regs);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, be->num_regs);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -486,7 +486,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
be->max = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, be->max);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, be->max);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -495,7 +495,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
be->mask = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, be->mask);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, be->mask);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -515,7 +515,7 @@ int tplg_parse_control_bytes(snd_tplg_t *tplg,
|
|
||||||
return err;
|
|
||||||
|
|
||||||
tlv_set = true;
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -625,7 +625,7 @@ int tplg_parse_control_enum(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
ec->channel[j].reg = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dbg(" Control Enum: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Control Enum: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -644,7 +644,7 @@ int tplg_parse_control_enum(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
tplg_ref_add(elem, SND_TPLG_TYPE_TEXT, val);
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -761,7 +761,7 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
for (j = 0; j < SND_SOC_TPLG_MAX_CHAN; j++)
|
|
||||||
mc->channel[j].reg = -1;
|
|
||||||
|
|
||||||
- tplg_dbg(" Control Mixer: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Control Mixer: %s", elem->id);
|
|
||||||
|
|
||||||
/* giterate trough each mixer elment */
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
@@ -795,7 +795,7 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
mc->max = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, mc->max);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, mc->max);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -805,7 +805,7 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
mc->invert = ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, mc->invert);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, mc->invert);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -826,7 +826,7 @@ int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
return err;
|
|
||||||
|
|
||||||
tlv_set = true;
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -981,7 +981,7 @@ int tplg_add_mixer(snd_tplg_t *tplg, struct snd_tplg_mixer_template *mixer,
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
int ret, i, num_channels;
|
|
||||||
|
|
||||||
- tplg_dbg(" Control Mixer: %s\n", mixer->hdr.name);
|
|
||||||
+ tplg_dbg(" Control Mixer: %s", mixer->hdr.name);
|
|
||||||
|
|
||||||
if (mixer->hdr.type != SND_SOC_TPLG_TYPE_MIXER) {
|
|
||||||
SNDERR("invalid mixer type %d", mixer->hdr.type);
|
|
||||||
@@ -1045,7 +1045,7 @@ int tplg_add_enum(snd_tplg_t *tplg, struct snd_tplg_enum_template *enum_ctl,
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
int ret, i, num_items, num_channels;
|
|
||||||
|
|
||||||
- tplg_dbg(" Control Enum: %s\n", enum_ctl->hdr.name);
|
|
||||||
+ tplg_dbg(" Control Enum: %s", enum_ctl->hdr.name);
|
|
||||||
|
|
||||||
if (enum_ctl->hdr.type != SND_SOC_TPLG_TYPE_ENUM) {
|
|
||||||
SNDERR("invalid enum type %d", enum_ctl->hdr.type);
|
|
||||||
@@ -1128,7 +1128,7 @@ int tplg_add_bytes(snd_tplg_t *tplg, struct snd_tplg_bytes_template *bytes_ctl,
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
- tplg_dbg(" Control Bytes: %s\n", bytes_ctl->hdr.name);
|
|
||||||
+ tplg_dbg(" Control Bytes: %s", bytes_ctl->hdr.name);
|
|
||||||
|
|
||||||
if (bytes_ctl->hdr.type != SND_SOC_TPLG_TYPE_BYTES) {
|
|
||||||
SNDERR("invalid bytes type %d", bytes_ctl->hdr.type);
|
|
||||||
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
|
|
||||||
index 0bf64833c11f..cb85e66734f6 100644
|
|
||||||
--- a/src/topology/dapm.c
|
|
||||||
+++ b/src/topology/dapm.c
|
|
||||||
@@ -76,8 +76,8 @@ static int copy_dapm_control(struct tplg_elem *elem, struct tplg_elem *ref)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_dapm_widget *widget = elem->widget;
|
|
||||||
|
|
||||||
- tplg_dbg("Control '%s' used by '%s'\n", ref->id, elem->id);
|
|
||||||
- tplg_dbg("\tparent size: %d + %d -> %d, priv size -> %d\n",
|
|
||||||
+ tplg_dbg("Control '%s' used by '%s'", ref->id, elem->id);
|
|
||||||
+ tplg_dbg("\tparent size: %d + %d -> %d, priv size -> %d",
|
|
||||||
elem->size, ref->size, elem->size + ref->size,
|
|
||||||
widget->priv.size);
|
|
||||||
|
|
||||||
@@ -210,8 +210,8 @@ int tplg_build_routes(snd_tplg_t *tplg)
|
|
||||||
}
|
|
||||||
|
|
||||||
route = elem->route;
|
|
||||||
- tplg_dbg("\nCheck route: sink '%s', control '%s', source '%s'\n",
|
|
||||||
- route->sink, route->control, route->source);
|
|
||||||
+ tplg_dbg("Check route: sink '%s', control '%s', source '%s'",
|
|
||||||
+ route->sink, route->control, route->source);
|
|
||||||
|
|
||||||
/* validate sink */
|
|
||||||
if (strlen(route->sink) <= 0) {
|
|
||||||
@@ -357,7 +357,7 @@ static int tplg_parse_routes(snd_tplg_t *tplg, snd_config_t *cfg, int index)
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
- tplg_dbg("route: sink '%s', control '%s', source '%s'\n",
|
|
||||||
+ tplg_dbg("route: sink '%s', control '%s', source '%s'",
|
|
||||||
line->sink, line->control, line->source);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -520,7 +520,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
if (!elem)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
- tplg_dbg(" Widget: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Widget: %s", elem->id);
|
|
||||||
|
|
||||||
widget = elem->widget;
|
|
||||||
snd_strlcpy(widget->name, elem->id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
@@ -550,7 +550,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
}
|
|
||||||
|
|
||||||
widget->id = widget_type;
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -560,7 +560,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
snd_strlcpy(widget->sname, val,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -571,7 +571,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
widget->reg = ival ? -1 : 0;
|
|
||||||
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -580,7 +580,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
widget->shift = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, widget->shift);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, widget->shift);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -589,7 +589,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
widget->reg = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, widget->reg);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, widget->reg);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -598,7 +598,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
widget->invert = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, widget->invert);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, widget->invert);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -607,7 +607,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
widget->subseq = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, widget->subseq);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, widget->subseq);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -616,7 +616,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
widget->event_type = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, widget->event_type);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, widget->event_type);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -625,7 +625,7 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
widget->event_flags = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, widget->event_flags);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, widget->event_flags);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -767,7 +767,7 @@ int tplg_add_widget_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
int i, ret = 0;
|
|
||||||
|
|
||||||
- tplg_dbg("Widget: %s\n", wt->name);
|
|
||||||
+ tplg_dbg("Widget: %s", wt->name);
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, NULL, wt->name,
|
|
||||||
SND_TPLG_TYPE_DAPM_WIDGET);
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 0b513428da80..37c4591987db 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -87,7 +87,7 @@ int tplg_parse_refs(snd_config_t *cfg, struct tplg_elem *elem,
|
|
||||||
if (snd_config_get_string(cfg, &val) < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- tplg_dbg("\tref data: %s\n", val);
|
|
||||||
+ tplg_dbg("\tref data: %s", val);
|
|
||||||
err = tplg_ref_add(elem, type, val);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
@@ -108,7 +108,7 @@ int tplg_parse_refs(snd_config_t *cfg, struct tplg_elem *elem,
|
|
||||||
if (snd_config_get_string(n, &val) < 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- tplg_dbg("\tref data: %s\n", val);
|
|
||||||
+ tplg_dbg("\tref data: %s", val);
|
|
||||||
err = tplg_ref_add(elem, type, val);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
@@ -169,7 +169,7 @@ static int tplg_parse_data_file(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
size_t size, bytes_read;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
- tplg_dbg("data DataFile: %s\n", elem->id);
|
|
||||||
+ tplg_dbg("data DataFile: %s", elem->id);
|
|
||||||
|
|
||||||
if (snd_config_get_string(cfg, &value) < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -235,19 +235,25 @@ static void dump_priv_data(struct tplg_elem *elem ATTRIBUTE_UNUSED)
|
|
||||||
#ifdef TPLG_DEBUG
|
|
||||||
struct snd_soc_tplg_private *priv = elem->data;
|
|
||||||
unsigned char *p = (unsigned char *)priv->data;
|
|
||||||
+ char buf[128], buf2[8];
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
- tplg_dbg(" elem size = %d, priv data size = %d\n",
|
|
||||||
+ tplg_dbg(" elem size = %d, priv data size = %d",
|
|
||||||
elem->size, priv->size);
|
|
||||||
|
|
||||||
+ buf[0] = '\0';
|
|
||||||
for (i = 0; i < priv->size; i++) {
|
|
||||||
- if (i > 0 && (i % 16) == 0)
|
|
||||||
- tplg_dbg("\n");
|
|
||||||
+ if (i > 0 && (i % 16) == 0) {
|
|
||||||
+ tplg_dbg("%s", buf);
|
|
||||||
+ buf[0] = '\0';
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- tplg_dbg(" %02x:", *p++);
|
|
||||||
+ snprintf(buf2, sizeof(buf2), " %02x", *p++);
|
|
||||||
+ strcat(buf, buf2);
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dbg("\n\n");
|
|
||||||
+ if (buf[0])
|
|
||||||
+ tplg_dbg("%s", buf);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -466,7 +472,7 @@ static int tplg_parse_data_hex(snd_config_t *cfg, struct tplg_elem *elem,
|
|
||||||
int size, esize, off, num;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
- tplg_dbg(" data: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" data: %s", elem->id);
|
|
||||||
|
|
||||||
if (snd_config_get_string(cfg, &value) < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -683,7 +689,7 @@ static int build_tuples(snd_tplg_t *tplg, struct tplg_elem *elem)
|
|
||||||
if (ref->type != SND_TPLG_TYPE_TUPLE)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- tplg_dbg("tuples '%s' used by data '%s'\n", ref->id, elem->id);
|
|
||||||
+ tplg_dbg("tuples '%s' used by data '%s'", ref->id, elem->id);
|
|
||||||
|
|
||||||
if (!ref->elem)
|
|
||||||
ref->elem = tplg_elem_lookup(&tplg->tuple_list,
|
|
||||||
@@ -799,7 +805,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
if (!num_tuples)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- tplg_dbg("\t %d %s tuples:\n", num_tuples, id);
|
|
||||||
+ tplg_dbg("\t %d %s tuples:", num_tuples, id);
|
|
||||||
set = calloc(1, sizeof(*set) + num_tuples * sizeof(struct tplg_tuple));
|
|
||||||
if (!set)
|
|
||||||
return -ENOMEM;
|
|
||||||
@@ -831,7 +837,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
continue;
|
|
||||||
snd_strlcpy(tuple->string, value,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
- tplg_dbg("\t\t%s = %s\n", tuple->token, tuple->string);
|
|
||||||
+ tplg_dbg("\t\t%s = %s", tuple->token, tuple->string);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_BOOL:
|
|
||||||
@@ -839,7 +845,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
if (ival < 0)
|
|
||||||
continue;
|
|
||||||
tuple->value = ival;
|
|
||||||
- tplg_dbg("\t\t%s = %d\n", tuple->token, tuple->value);
|
|
||||||
+ tplg_dbg("\t\t%s = %d", tuple->token, tuple->value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SND_SOC_TPLG_TUPLE_TYPE_BYTE:
|
|
||||||
@@ -862,7 +868,7 @@ static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
}
|
|
||||||
|
|
||||||
tuple->value = tuple_val;
|
|
||||||
- tplg_dbg("\t\t%s = 0x%x\n", tuple->token, tuple->value);
|
|
||||||
+ tplg_dbg("\t\t%s = 0x%x", tuple->token, tuple->value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
@@ -1047,7 +1053,7 @@ int tplg_parse_tokens(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (!num_tokens)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- tplg_dbg(" Vendor tokens: %s, %d tokens\n", elem->id, num_tokens);
|
|
||||||
+ tplg_dbg(" Vendor tokens: %s, %d tokens", elem->id, num_tokens);
|
|
||||||
|
|
||||||
tokens = calloc(1, sizeof(*tokens)
|
|
||||||
+ num_tokens * sizeof(struct tplg_token));
|
|
||||||
@@ -1067,7 +1073,7 @@ int tplg_parse_tokens(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
snd_strlcpy(tokens->token[tokens->num_tokens].id, id,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
tokens->token[tokens->num_tokens].value = value;
|
|
||||||
- tplg_dbg("\t\t %s : %d\n", tokens->token[tokens->num_tokens].id,
|
|
||||||
+ tplg_dbg("\t\t %s : %d", tokens->token[tokens->num_tokens].id,
|
|
||||||
tokens->token[tokens->num_tokens].value);
|
|
||||||
tokens->num_tokens++;
|
|
||||||
}
|
|
||||||
@@ -1116,7 +1122,7 @@ int tplg_parse_tuples(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (!elem)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
- tplg_dbg(" Vendor Tuples: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Vendor Tuples: %s", elem->id);
|
|
||||||
|
|
||||||
tuples = calloc(1, sizeof(*tuples));
|
|
||||||
if (!tuples)
|
|
||||||
@@ -1133,7 +1139,7 @@ int tplg_parse_tuples(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
if (snd_config_get_string(n, &value) < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
tplg_ref_add(elem, SND_TPLG_TYPE_TOKEN, value);
|
|
||||||
- tplg_dbg("\t refer to vendor tokens: %s\n", value);
|
|
||||||
+ tplg_dbg("\t refer to vendor tokens: %s", value);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(id, "tuples") == 0) {
|
|
||||||
@@ -1208,7 +1214,7 @@ int tplg_parse_manifest_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
manifest = elem->manifest;
|
|
||||||
manifest->size = elem->size;
|
|
||||||
|
|
||||||
- tplg_dbg(" Manifest: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Manifest: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
@@ -1402,7 +1408,7 @@ int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
elem->vendor_type = ival;
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, elem->index);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, elem->index);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1506,7 +1512,7 @@ int tplg_copy_data(snd_tplg_t *tplg, struct tplg_elem *elem,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dbg("Data '%s' used by '%s'\n", ref->id, elem->id);
|
|
||||||
+ tplg_dbg("Data '%s' used by '%s'", ref->id, elem->id);
|
|
||||||
/* overlook empty private data */
|
|
||||||
if (!ref_elem->data || !ref_elem->data->size) {
|
|
||||||
ref->elem = ref_elem;
|
|
||||||
diff --git a/src/topology/ops.c b/src/topology/ops.c
|
|
||||||
index 2885c7814604..110eef58851d 100644
|
|
||||||
--- a/src/topology/ops.c
|
|
||||||
+++ b/src/topology/ops.c
|
|
||||||
@@ -69,7 +69,7 @@ int tplg_parse_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED, snd_config_t *cfg,
|
|
||||||
const char *id, *value;
|
|
||||||
int ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\tOps\n");
|
|
||||||
+ tplg_dbg("\tOps");
|
|
||||||
hdr->size = sizeof(*hdr);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
@@ -97,7 +97,7 @@ int tplg_parse_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED, snd_config_t *cfg,
|
|
||||||
else if (strcmp(id, "get") == 0)
|
|
||||||
hdr->ops.get = ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s = %d\n", id, ival);
|
|
||||||
+ tplg_dbg("\t\t%s = %d", id, ival);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -155,7 +155,7 @@ int tplg_parse_ext_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
const char *id, *value;
|
|
||||||
int ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\tExt Ops\n");
|
|
||||||
+ tplg_dbg("\tExt Ops");
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@ int tplg_parse_ext_ops(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
else if (strcmp(id, "get") == 0)
|
|
||||||
be->ext_ops.get = ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s = %s\n", id, value);
|
|
||||||
+ tplg_dbg("\t\t%s = %s", id, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index 918e3e9a957f..da88783f2b09 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -68,7 +68,7 @@ static void copy_stream_caps(const char *id ATTRIBUTE_UNUSED,
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_stream_caps *ref_caps = ref_elem->stream_caps;
|
|
||||||
|
|
||||||
- tplg_dbg("Copy pcm caps (%ld bytes) from '%s' to '%s' \n",
|
|
||||||
+ tplg_dbg("Copy pcm caps (%ld bytes) from '%s' to '%s'",
|
|
||||||
sizeof(*caps), ref_elem->id, id);
|
|
||||||
|
|
||||||
*caps = *ref_caps;
|
|
||||||
@@ -388,7 +388,7 @@ static int parse_unsigned(snd_config_t *n, unsigned int *dst)
|
|
||||||
{
|
|
||||||
const char *id;
|
|
||||||
if (snd_config_get_id(n, &id) >= 0)
|
|
||||||
- tplg_dbg("\t\t%s: %d\n", id, *dst);
|
|
||||||
+ tplg_dbg("\t\t%s: %d", id, *dst);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
@@ -415,7 +415,7 @@ int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
sc->size = elem->size;
|
|
||||||
snd_strlcpy(sc->name, elem->id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
- tplg_dbg(" PCM Capabilities: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" PCM Capabilities: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
@@ -442,7 +442,7 @@ int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -460,7 +460,7 @@ int tplg_parse_stream_caps(snd_tplg_t *tplg,
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -625,7 +625,7 @@ static int tplg_parse_streams(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
|
|
||||||
snd_config_get_id(cfg, &id);
|
|
||||||
|
|
||||||
- tplg_dbg("\t%s:\n", id);
|
|
||||||
+ tplg_dbg("\t%s:", id);
|
|
||||||
|
|
||||||
switch (elem->type) {
|
|
||||||
case SND_TPLG_TYPE_PCM:
|
|
||||||
@@ -672,7 +672,7 @@ static int tplg_parse_streams(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
snd_strlcpy(caps[stream].name, value,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t%s\n\t\t\t%s\n", id, value);
|
|
||||||
+ tplg_dbg("\t\t%s\n\t\t\t%s", id, value);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -746,7 +746,7 @@ static int tplg_parse_fe_dai(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
const char *id;
|
|
||||||
|
|
||||||
snd_config_get_id(cfg, &id);
|
|
||||||
- tplg_dbg("\t\tFE DAI %s:\n", id);
|
|
||||||
+ tplg_dbg("\t\tFE DAI %s:", id);
|
|
||||||
snd_strlcpy(pcm->dai_name, id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
@@ -763,7 +763,7 @@ static int tplg_parse_fe_dai(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
- tplg_dbg("\t\t\tindex: %d\n", pcm->dai_id);
|
|
||||||
+ tplg_dbg("\t\t\tindex: %d", pcm->dai_id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -847,7 +847,7 @@ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
pcm->size = elem->size;
|
|
||||||
snd_strlcpy(pcm->pcm_name, elem->id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
- tplg_dbg(" PCM: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" PCM: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -882,7 +882,7 @@ int tplg_parse_pcm(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
|
|
||||||
pcm->compress = ival;
|
|
||||||
|
|
||||||
- tplg_dbg("\t%s: %d\n", id, ival);
|
|
||||||
+ tplg_dbg("\t%s: %d", id, ival);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -988,7 +988,7 @@ int tplg_parse_dai(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
snd_strlcpy(dai->dai_name, elem->id,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
- tplg_dbg(" DAI: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" DAI: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -1142,7 +1142,7 @@ int tplg_parse_link(snd_tplg_t *tplg,
|
|
||||||
link->size = elem->size;
|
|
||||||
snd_strlcpy(link->name, elem->id, SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
|
|
||||||
- tplg_dbg(" Link: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Link: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -1168,7 +1168,7 @@ int tplg_parse_link(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
snd_strlcpy(link->stream_name, val,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
- tplg_dbg("\t%s: %s\n", id, val);
|
|
||||||
+ tplg_dbg("\t%s: %s", id, val);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1280,7 +1280,7 @@ int tplg_parse_cc(snd_tplg_t *tplg,
|
|
||||||
link = elem->link;
|
|
||||||
link->size = elem->size;
|
|
||||||
|
|
||||||
- tplg_dbg(" CC: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" CC: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -1412,7 +1412,7 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
hw_cfg = elem->hw_cfg;
|
|
||||||
hw_cfg->size = elem->size;
|
|
||||||
|
|
||||||
- tplg_dbg(" Link HW config: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Link HW config: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
|
|
||||||
@@ -1719,7 +1719,7 @@ int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
int ret, i;
|
|
||||||
|
|
||||||
- tplg_dbg("PCM: %s, DAI %s\n", pcm_tpl->pcm_name, pcm_tpl->dai_name);
|
|
||||||
+ tplg_dbg("PCM: %s, DAI %s", pcm_tpl->pcm_name, pcm_tpl->dai_name);
|
|
||||||
|
|
||||||
if (pcm_tpl->num_streams > SND_SOC_TPLG_STREAM_CONFIG_MAX)
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -1881,7 +1881,7 @@ int tplg_add_dai_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
int ret, i;
|
|
||||||
|
|
||||||
- tplg_dbg("DAI %s\n", dai_tpl->dai_name);
|
|
||||||
+ tplg_dbg("DAI %s", dai_tpl->dai_name);
|
|
||||||
|
|
||||||
elem = tplg_elem_new_common(tplg, NULL, dai_tpl->dai_name,
|
|
||||||
SND_TPLG_TYPE_DAI);
|
|
||||||
diff --git a/src/topology/text.c b/src/topology/text.c
|
|
||||||
index 6dbf22305fd3..507c5450ab14 100644
|
|
||||||
--- a/src/topology/text.c
|
|
||||||
+++ b/src/topology/text.c
|
|
||||||
@@ -32,13 +32,13 @@ static int parse_text_values(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
const char *value = NULL;
|
|
||||||
int j = 0;
|
|
||||||
|
|
||||||
- tplg_dbg(" Text Values: %s\n", elem->id);
|
|
||||||
+ tplg_dbg(" Text Values: %s", elem->id);
|
|
||||||
|
|
||||||
snd_config_for_each(i, next, cfg) {
|
|
||||||
n = snd_config_iterator_entry(i);
|
|
||||||
|
|
||||||
if (j == SND_SOC_TPLG_NUM_TEXTS) {
|
|
||||||
- tplg_dbg("text string number exceeds %d\n", j);
|
|
||||||
+ tplg_dbg("text string number exceeds %d", j);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ static int parse_text_values(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
|
|
||||||
snd_strlcpy(&texts->items[j][0], value,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
- tplg_dbg("\t%s\n", &texts->items[j][0]);
|
|
||||||
+ tplg_dbg("\t%s", &texts->items[j][0]);
|
|
||||||
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,201 +0,0 @@
|
|||||||
From b20b400e2f598c86abaf697d66396cecd49b3e14 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 3 Jan 2020 22:56:48 +0100
|
|
||||||
Subject: [PATCH 57/63] topology: cosmetic changes (functions)
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/builder.c | 3 ++-
|
|
||||||
src/topology/ctl.c | 5 +++--
|
|
||||||
src/topology/data.c | 17 +++++++++--------
|
|
||||||
src/topology/parser.c | 4 ++--
|
|
||||||
src/topology/pcm.c | 16 ++++++++--------
|
|
||||||
5 files changed, 24 insertions(+), 21 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/builder.c b/src/topology/builder.c
|
|
||||||
index 7af5de084d84..15757668d7d4 100644
|
|
||||||
--- a/src/topology/builder.c
|
|
||||||
+++ b/src/topology/builder.c
|
|
||||||
@@ -71,7 +71,8 @@ static ssize_t write_block_header(snd_tplg_t *tplg, unsigned int type,
|
|
||||||
}
|
|
||||||
|
|
||||||
static int write_elem_block(snd_tplg_t *tplg,
|
|
||||||
- struct list_head *base, size_t size, int tplg_type, const char *obj_name)
|
|
||||||
+ struct list_head *base, size_t size,
|
|
||||||
+ int tplg_type, const char *obj_name)
|
|
||||||
{
|
|
||||||
struct list_head *pos, *sub_pos, *sub_base;
|
|
||||||
struct tplg_elem *elem, *elem_next;
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index 41dc2ddbb826..b78f1c54be05 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -600,7 +600,7 @@ int tplg_save_control_bytes(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
|
|
||||||
/* Parse Control Enums. */
|
|
||||||
int tplg_parse_control_enum(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_enum_control *ec;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -736,7 +736,8 @@ int tplg_save_control_enum(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
* Mixer control. Supports multiple channels.
|
|
||||||
*/
|
|
||||||
int tplg_parse_control_mixer(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ snd_config_t *cfg,
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_mixer_control *mc;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index 37c4591987db..b63e98cd7282 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -516,7 +516,7 @@ static int tplg_parse_data_hex(snd_config_t *cfg, struct tplg_elem *elem,
|
|
||||||
|
|
||||||
/* get the token integer value from its id */
|
|
||||||
static int get_token_value(const char *token_id,
|
|
||||||
- struct tplg_vendor_tokens *tokens)
|
|
||||||
+ struct tplg_vendor_tokens *tokens)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
@@ -589,7 +589,8 @@ unsigned int tplg_get_tuple_size(int type)
|
|
||||||
|
|
||||||
/* Add a tuples object to the private buffer of its parent data element */
|
|
||||||
static int copy_tuples(struct tplg_elem *elem,
|
|
||||||
- struct tplg_vendor_tuples *tuples, struct tplg_vendor_tokens *tokens)
|
|
||||||
+ struct tplg_vendor_tuples *tuples,
|
|
||||||
+ struct tplg_vendor_tokens *tokens)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_private *priv = elem->data, *priv2;
|
|
||||||
struct tplg_tuple_set *tuple_set;
|
|
||||||
@@ -781,7 +782,7 @@ static const char *get_tuple_type_name(unsigned int type)
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_tuple_set(snd_config_t *cfg,
|
|
||||||
- struct tplg_tuple_set **s)
|
|
||||||
+ struct tplg_tuple_set **s)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -965,7 +966,7 @@ static int tplg_save_tuple_set(struct tplg_vendor_tuples *tuples,
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_tuple_sets(snd_config_t *cfg,
|
|
||||||
- struct tplg_vendor_tuples *tuples)
|
|
||||||
+ struct tplg_vendor_tuples *tuples)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -1033,7 +1034,7 @@ int tplg_save_tuple_sets(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
/* Parse vendor tokens
|
|
||||||
*/
|
|
||||||
int tplg_parse_tokens(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -1109,7 +1110,7 @@ int tplg_save_tokens(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
/* Parse vendor tuples.
|
|
||||||
*/
|
|
||||||
int tplg_parse_tuples(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
@@ -1193,7 +1194,7 @@ void tplg_free_tuples(void *obj)
|
|
||||||
/* Parse manifest's data references
|
|
||||||
*/
|
|
||||||
int tplg_parse_manifest_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_manifest *manifest;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -1341,7 +1342,7 @@ int tplg_build_manifest_data(snd_tplg_t *tplg)
|
|
||||||
* words, tuples.
|
|
||||||
*/
|
|
||||||
int tplg_parse_data(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- void *private ATTRIBUTE_UNUSED)
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
snd_config_t *n;
|
|
||||||
diff --git a/src/topology/parser.c b/src/topology/parser.c
|
|
||||||
index d7783a93ab6b..436e48416a43 100644
|
|
||||||
--- a/src/topology/parser.c
|
|
||||||
+++ b/src/topology/parser.c
|
|
||||||
@@ -110,8 +110,8 @@ int tplg_get_unsigned(snd_config_t *n, unsigned *val, int base)
|
|
||||||
* Parse compound
|
|
||||||
*/
|
|
||||||
int tplg_parse_compound(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
- int (*fcn)(snd_tplg_t *, snd_config_t *, void *),
|
|
||||||
- void *private)
|
|
||||||
+ int (*fcn)(snd_tplg_t *, snd_config_t *, void *),
|
|
||||||
+ void *private)
|
|
||||||
{
|
|
||||||
const char *id;
|
|
||||||
snd_config_iterator_t i, next;
|
|
||||||
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
|
|
||||||
index da88783f2b09..61159d33357c 100644
|
|
||||||
--- a/src/topology/pcm.c
|
|
||||||
+++ b/src/topology/pcm.c
|
|
||||||
@@ -1124,8 +1124,8 @@ static int parse_hw_config_refs(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 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)
|
|
||||||
+int tplg_parse_link(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_link_config *link;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -1264,8 +1264,8 @@ int tplg_save_link(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse cc */
|
|
||||||
-int tplg_parse_cc(snd_tplg_t *tplg,
|
|
||||||
- snd_config_t *cfg, void *private ATTRIBUTE_UNUSED)
|
|
||||||
+int tplg_parse_cc(snd_tplg_t *tplg, snd_config_t *cfg,
|
|
||||||
+ void *private ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_link_config *link;
|
|
||||||
struct tplg_elem *elem;
|
|
||||||
@@ -1307,8 +1307,8 @@ int tplg_parse_cc(snd_tplg_t *tplg,
|
|
||||||
|
|
||||||
/* save CC */
|
|
||||||
int tplg_save_cc(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
- struct tplg_elem *elem,
|
|
||||||
- char **dst, const char *pfx)
|
|
||||||
+ struct tplg_elem *elem,
|
|
||||||
+ char **dst, const char *pfx)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_link_config *link = elem->link;
|
|
||||||
char pfx2[16];
|
|
||||||
@@ -1668,7 +1668,7 @@ int tplg_save_hw_config(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
|
|
||||||
|
|
||||||
/* copy stream object */
|
|
||||||
static void tplg_add_stream_object(struct snd_soc_tplg_stream *strm,
|
|
||||||
- struct snd_tplg_stream_template *strm_tpl)
|
|
||||||
+ struct snd_tplg_stream_template *strm_tpl)
|
|
||||||
{
|
|
||||||
snd_strlcpy(strm->name, strm_tpl->name,
|
|
||||||
SNDRV_CTL_ELEM_ID_NAME_MAXLEN);
|
|
||||||
@@ -1773,7 +1773,7 @@ int tplg_add_pcm_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
|
|
||||||
|
|
||||||
/* Set link HW config from C API template */
|
|
||||||
static int set_link_hw_config(struct snd_soc_tplg_hw_config *cfg,
|
|
||||||
- struct snd_tplg_hw_config_template *tpl)
|
|
||||||
+ struct snd_tplg_hw_config_template *tpl)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From 14ad963e192f101246e9b559d3b3fd41268330fb Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Fries <David@Fries.net>
|
|
||||||
Date: Tue, 7 Jan 2020 09:18:10 -0600
|
|
||||||
Subject: [PATCH 58/63] mixer: Fix memory leak for more than 16 file descriptor
|
|
||||||
case
|
|
||||||
|
|
||||||
Signed-off-by: David Fries <David@Fries.net>
|
|
||||||
Reviewed-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
src/mixer/mixer.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c
|
|
||||||
index 8205647449d2..b1af99456c8d 100644
|
|
||||||
--- a/src/mixer/mixer.c
|
|
||||||
+++ b/src/mixer/mixer.c
|
|
||||||
@@ -767,7 +767,7 @@ int snd_mixer_wait(snd_mixer_t *mixer, int timeout)
|
|
||||||
if (count < 0)
|
|
||||||
return count;
|
|
||||||
if ((unsigned int) count > sizeof(spfds) / sizeof(spfds[0])) {
|
|
||||||
- pfds = malloc(count * sizeof(*pfds));
|
|
||||||
+ pfds = alloca(count * sizeof(*pfds));
|
|
||||||
if (!pfds)
|
|
||||||
return -ENOMEM;
|
|
||||||
err = snd_mixer_poll_descriptors(mixer, pfds,
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
|||||||
From a78dd1bd1e9b47c2aee9b1e066de515b6854695a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Bertware <bert.marcelis@outlook.com>
|
|
||||||
Date: Mon, 13 Jan 2020 10:21:33 +0100
|
|
||||||
Subject: [PATCH 59/63] Quote strings containing [ or ] when saving an alsa
|
|
||||||
config
|
|
||||||
|
|
||||||
Signed-off-by: Bert Marcelis <bert.marcelis@outlook.com>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/conf.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/conf.c b/src/conf.c
|
|
||||||
index c4db9f21a15e..50d0403452a0 100644
|
|
||||||
--- a/src/conf.c
|
|
||||||
+++ b/src/conf.c
|
|
||||||
@@ -1531,6 +1531,8 @@ static void string_print(char *str, int id, snd_output_t *out)
|
|
||||||
case '.':
|
|
||||||
case '{':
|
|
||||||
case '}':
|
|
||||||
+ case '[':
|
|
||||||
+ case ']':
|
|
||||||
case '\'':
|
|
||||||
case '"':
|
|
||||||
goto quoted;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From b34715004f4a1aabb85c5b9f03ba9f200638ee97 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Wed, 15 Jan 2020 09:41:05 +0100
|
|
||||||
Subject: [PATCH 60/63] ucm: fix the configuration directory (longname) for
|
|
||||||
ucm2
|
|
||||||
|
|
||||||
The new ucm2 expects that the longname directory is shared with
|
|
||||||
the driver directory. Fix that for 'Syntax 2'.
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 4 +++-
|
|
||||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index d61124a343e1..b3970a13bf73 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -1649,7 +1649,9 @@ __longname:
|
|
||||||
|
|
||||||
if (err == 0) {
|
|
||||||
/* got device-specific file that matches the card long name */
|
|
||||||
- snd_strlcpy(uc_mgr->conf_file_name, longname, sizeof(uc_mgr->conf_file_name));
|
|
||||||
+ if (uc_mgr->conf_format < 2)
|
|
||||||
+ snd_strlcpy(uc_mgr->conf_file_name, longname,
|
|
||||||
+ sizeof(uc_mgr->conf_file_name));
|
|
||||||
goto __parse;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,209 +0,0 @@
|
|||||||
From fe6425af751a768a2ba6cf7d430a85553d3b84f6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Wed, 15 Jan 2020 10:31:56 +0100
|
|
||||||
Subject: [PATCH 61/63] ucm: split conf_file_name and conf_dir_name
|
|
||||||
|
|
||||||
With ucm2, the file name might differ from the directory
|
|
||||||
name. Also, allocate those fields.
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/main.c | 7 ++++---
|
|
||||||
src/ucm/parser.c | 37 ++++++++++++++++++++++++++-----------
|
|
||||||
src/ucm/ucm_local.h | 4 ++--
|
|
||||||
src/ucm/ucm_subs.c | 2 +-
|
|
||||||
src/ucm/utils.c | 4 ++++
|
|
||||||
5 files changed, 37 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/main.c b/src/ucm/main.c
|
|
||||||
index 61922f10b7c7..23e15bd8dacb 100644
|
|
||||||
--- a/src/ucm/main.c
|
|
||||||
+++ b/src/ucm/main.c
|
|
||||||
@@ -1700,12 +1700,13 @@ int snd_use_case_get(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
err = 0;
|
|
||||||
} else if (strcmp(identifier, "_file") == 0) {
|
|
||||||
/* get the conf file name of the opened card */
|
|
||||||
- if ((uc_mgr->card_name == NULL)
|
|
||||||
- || (uc_mgr->conf_file_name[0] == '\0')) {
|
|
||||||
+ if ((uc_mgr->card_name == NULL) ||
|
|
||||||
+ (uc_mgr->conf_file_name == NULL) ||
|
|
||||||
+ (uc_mgr->conf_file_name[0] == '\0')) {
|
|
||||||
err = -ENOENT;
|
|
||||||
goto __end;
|
|
||||||
}
|
|
||||||
- *value = strndup(uc_mgr->conf_file_name, MAX_FILE);
|
|
||||||
+ *value = strdup(uc_mgr->conf_file_name);
|
|
||||||
if (*value == NULL) {
|
|
||||||
err = -ENOMEM;
|
|
||||||
goto __end;
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index b3970a13bf73..1bfde0be327d 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -124,6 +124,16 @@ static void configuration_filename(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
configuration_filename2(fn, fn_len, 2, dir, file, suffix);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Replace mallocated string
|
|
||||||
+ */
|
|
||||||
+static char *replace_string(char **dst, const char *value)
|
|
||||||
+{
|
|
||||||
+ free(*dst);
|
|
||||||
+ *dst = strdup(value);
|
|
||||||
+ return *dst;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Parse string
|
|
||||||
*/
|
|
||||||
@@ -1186,7 +1196,7 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
|
|
||||||
/* open Verb file for reading */
|
|
||||||
configuration_filename(uc_mgr, filename, sizeof(filename),
|
|
||||||
- uc_mgr->conf_file_name, file, "");
|
|
||||||
+ uc_mgr->conf_dir_name, file, "");
|
|
||||||
err = uc_mgr_config_load(uc_mgr->conf_format, filename, &cfg);
|
|
||||||
if (err < 0) {
|
|
||||||
uc_error("error: failed to open verb file %s : %d",
|
|
||||||
@@ -1404,16 +1414,16 @@ static int parse_master_file(snd_use_case_mgr_t *uc_mgr, snd_config_t *cfg)
|
|
||||||
if (uc_mgr->conf_format >= 2) {
|
|
||||||
err = snd_config_search(cfg, "Syntax", &n);
|
|
||||||
if (err < 0) {
|
|
||||||
- uc_error("Syntax field not found in %s", uc_mgr->conf_file_name);
|
|
||||||
+ uc_error("Syntax field not found in %s", uc_mgr->conf_dir_name);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
err = snd_config_get_integer(n, &l);
|
|
||||||
if (err < 0) {
|
|
||||||
- uc_error("Syntax field is invalid in %s", uc_mgr->conf_file_name);
|
|
||||||
+ uc_error("Syntax field is invalid in %s", uc_mgr->conf_dir_name);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
if (l < 2 || l > SYNTAX_VERSION_MAX) {
|
|
||||||
- uc_error("Incompatible syntax %d in %s", l, uc_mgr->conf_file_name);
|
|
||||||
+ uc_error("Incompatible syntax %d in %s", l, uc_mgr->conf_dir_name);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
/* delete this field to avoid strcmp() call in the loop */
|
|
||||||
@@ -1561,8 +1571,9 @@ static int get_by_card(snd_use_case_mgr_t *mgr, const char *ctl_name, char *long
|
|
||||||
return err;
|
|
||||||
|
|
||||||
_name = snd_ctl_card_info_get_name(info);
|
|
||||||
+ if (replace_string(&mgr->conf_dir_name, _name) == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
_long_name = snd_ctl_card_info_get_longname(info);
|
|
||||||
- snd_strlcpy(mgr->conf_file_name, _name, sizeof(mgr->conf_file_name));
|
|
||||||
snd_strlcpy(longname, _long_name, MAX_CARD_LONG_NAME);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -1585,7 +1596,7 @@ static int load_master_config(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
if (getenv(ALSA_CONFIG_UCM2_VAR) || !getenv(ALSA_CONFIG_UCM_VAR)) {
|
|
||||||
uc_mgr->conf_format = 2;
|
|
||||||
configuration_filename(uc_mgr, filename, sizeof(filename),
|
|
||||||
- uc_mgr->conf_file_name, card_name, ".conf");
|
|
||||||
+ uc_mgr->conf_dir_name, card_name, ".conf");
|
|
||||||
if (access(filename, R_OK) == 0)
|
|
||||||
goto __load;
|
|
||||||
}
|
|
||||||
@@ -1608,6 +1619,9 @@ __load:
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (replace_string(&uc_mgr->conf_file_name, card_name) == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1632,7 +1646,8 @@ int uc_mgr_import_master_config(snd_use_case_mgr_t *uc_mgr)
|
|
||||||
char longname[MAX_CARD_LONG_NAME];
|
|
||||||
int err;
|
|
||||||
|
|
||||||
- snd_strlcpy(uc_mgr->conf_file_name, uc_mgr->card_name, sizeof(uc_mgr->conf_file_name));
|
|
||||||
+ if (replace_string(&uc_mgr->conf_dir_name, uc_mgr->card_name) == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
|
|
||||||
if (strncmp(name, "hw:", 3) == 0) {
|
|
||||||
err = get_by_card(uc_mgr, name, longname);
|
|
||||||
@@ -1650,14 +1665,14 @@ __longname:
|
|
||||||
if (err == 0) {
|
|
||||||
/* got device-specific file that matches the card long name */
|
|
||||||
if (uc_mgr->conf_format < 2)
|
|
||||||
- snd_strlcpy(uc_mgr->conf_file_name, longname,
|
|
||||||
- sizeof(uc_mgr->conf_file_name));
|
|
||||||
+ snd_strlcpy(uc_mgr->conf_dir_name, longname,
|
|
||||||
+ sizeof(uc_mgr->conf_dir_name));
|
|
||||||
goto __parse;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* standard path */
|
|
||||||
- err = load_master_config(uc_mgr, uc_mgr->conf_file_name, &cfg, 0);
|
|
||||||
+ err = load_master_config(uc_mgr, uc_mgr->conf_dir_name, &cfg, 0);
|
|
||||||
if (err < 0)
|
|
||||||
goto __error;
|
|
||||||
|
|
||||||
@@ -1673,7 +1688,7 @@ __parse:
|
|
||||||
|
|
||||||
__error:
|
|
||||||
uc_mgr_free_ctl_list(uc_mgr);
|
|
||||||
- uc_mgr->conf_file_name[0] = '\0';
|
|
||||||
+ uc_mgr->conf_dir_name[0] = '\0';
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h
|
|
||||||
index ba9615078ef8..63e0f3bf1697 100644
|
|
||||||
--- a/src/ucm/ucm_local.h
|
|
||||||
+++ b/src/ucm/ucm_local.h
|
|
||||||
@@ -187,7 +187,6 @@ struct use_case_verb {
|
|
||||||
/* verb transition list */
|
|
||||||
struct list_head transition_list;
|
|
||||||
|
|
||||||
- /* hardware devices that can be used with this use case */
|
|
||||||
struct list_head device_list;
|
|
||||||
|
|
||||||
/* component device list */
|
|
||||||
@@ -205,7 +204,8 @@ struct use_case_verb {
|
|
||||||
*/
|
|
||||||
struct snd_use_case_mgr {
|
|
||||||
char *card_name;
|
|
||||||
- char conf_file_name[MAX_CARD_LONG_NAME];
|
|
||||||
+ char *conf_file_name;
|
|
||||||
+ char *conf_dir_name;
|
|
||||||
char *comment;
|
|
||||||
int conf_format;
|
|
||||||
|
|
||||||
diff --git a/src/ucm/ucm_subs.c b/src/ucm/ucm_subs.c
|
|
||||||
index 90e395f0ab6f..d931f603ddd7 100644
|
|
||||||
--- a/src/ucm/ucm_subs.c
|
|
||||||
+++ b/src/ucm/ucm_subs.c
|
|
||||||
@@ -31,7 +31,7 @@
|
|
||||||
|
|
||||||
static char *rval_conf_name(snd_use_case_mgr_t *uc_mgr)
|
|
||||||
{
|
|
||||||
- if (uc_mgr->conf_file_name[0])
|
|
||||||
+ if (uc_mgr->conf_file_name && uc_mgr->conf_file_name[0])
|
|
||||||
return strdup(uc_mgr->conf_file_name);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
diff --git a/src/ucm/utils.c b/src/ucm/utils.c
|
|
||||||
index cde1d672e7b4..daa568c16a30 100644
|
|
||||||
--- a/src/ucm/utils.c
|
|
||||||
+++ b/src/ucm/utils.c
|
|
||||||
@@ -441,7 +441,11 @@ void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr)
|
|
||||||
uc_mgr_free_sequence(&uc_mgr->default_list);
|
|
||||||
uc_mgr_free_value(&uc_mgr->value_list);
|
|
||||||
free(uc_mgr->comment);
|
|
||||||
+ free(uc_mgr->conf_dir_name);
|
|
||||||
+ free(uc_mgr->conf_file_name);
|
|
||||||
uc_mgr->comment = NULL;
|
|
||||||
+ uc_mgr->conf_dir_name = NULL;
|
|
||||||
+ uc_mgr->conf_file_name = NULL;
|
|
||||||
uc_mgr->active_verb = NULL;
|
|
||||||
INIT_LIST_HEAD(&uc_mgr->active_devices);
|
|
||||||
INIT_LIST_HEAD(&uc_mgr->active_modifiers);
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,58 +0,0 @@
|
|||||||
From ebf5213cd61824b10bcaf67c570919e2a9ea0e1f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Wed, 15 Jan 2020 10:40:01 +0100
|
|
||||||
Subject: [PATCH 62/63] ucm: remove MAX_FILE definition and use correct
|
|
||||||
PATH_MAX
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 6 +++---
|
|
||||||
src/ucm/ucm_local.h | 1 -
|
|
||||||
2 files changed, 3 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index 1bfde0be327d..6c13fafdabbf 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -1167,7 +1167,7 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
snd_config_t *n;
|
|
||||||
struct use_case_verb *verb;
|
|
||||||
snd_config_t *cfg;
|
|
||||||
- char filename[MAX_FILE];
|
|
||||||
+ char filename[PATH_MAX];
|
|
||||||
int err;
|
|
||||||
|
|
||||||
/* allocate verb */
|
|
||||||
@@ -1582,7 +1582,7 @@ static int get_by_card(snd_use_case_mgr_t *mgr, const char *ctl_name, char *long
|
|
||||||
static int load_master_config(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
const char *card_name, snd_config_t **cfg, int longname)
|
|
||||||
{
|
|
||||||
- char filename[MAX_FILE];
|
|
||||||
+ char filename[PATH_MAX];
|
|
||||||
int err;
|
|
||||||
|
|
||||||
if (strnlen(card_name, MAX_CARD_LONG_NAME) == MAX_CARD_LONG_NAME) {
|
|
||||||
@@ -1733,7 +1733,7 @@ static int is_component_directory(const char *dir)
|
|
||||||
*/
|
|
||||||
int uc_mgr_scan_master_configs(const char **_list[])
|
|
||||||
{
|
|
||||||
- char filename[MAX_FILE], dfl[MAX_FILE];
|
|
||||||
+ char filename[PATH_MAX], dfl[PATH_MAX];
|
|
||||||
char *env = getenv(ALSA_CONFIG_UCM2_VAR);
|
|
||||||
const char **list, *d_name;
|
|
||||||
snd_config_t *cfg, *c;
|
|
||||||
diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h
|
|
||||||
index 63e0f3bf1697..fa9fc16661bb 100644
|
|
||||||
--- a/src/ucm/ucm_local.h
|
|
||||||
+++ b/src/ucm/ucm_local.h
|
|
||||||
@@ -42,7 +42,6 @@
|
|
||||||
|
|
||||||
#define SYNTAX_VERSION_MAX 2
|
|
||||||
|
|
||||||
-#define MAX_FILE 256
|
|
||||||
#define MAX_CARD_SHORT_NAME 32
|
|
||||||
#define MAX_CARD_LONG_NAME 80
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
From fbe1ac4a09933f527aff860aad035586367f21b4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Wed, 15 Jan 2020 10:41:35 +0100
|
|
||||||
Subject: [PATCH 63/63] topology: remove MAX_FILE definition and use correct
|
|
||||||
PATH_MAX
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/topology/data.c | 2 +-
|
|
||||||
src/topology/tplg_local.h | 1 -
|
|
||||||
2 files changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/data.c b/src/topology/data.c
|
|
||||||
index b63e98cd7282..5742b35773f6 100644
|
|
||||||
--- a/src/topology/data.c
|
|
||||||
+++ b/src/topology/data.c
|
|
||||||
@@ -163,7 +163,7 @@ static int tplg_parse_data_file(snd_config_t *cfg, struct tplg_elem *elem)
|
|
||||||
{
|
|
||||||
struct snd_soc_tplg_private *priv = NULL;
|
|
||||||
const char *value = NULL;
|
|
||||||
- char filename[MAX_FILE];
|
|
||||||
+ char filename[PATH_MAX];
|
|
||||||
char *env = getenv(ALSA_CONFIG_TPLG_VAR);
|
|
||||||
FILE *fp;
|
|
||||||
size_t size, bytes_read;
|
|
||||||
diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
|
|
||||||
index e061db755ed2..5ace0d1919e1 100644
|
|
||||||
--- a/src/topology/tplg_local.h
|
|
||||||
+++ b/src/topology/tplg_local.h
|
|
||||||
@@ -29,7 +29,6 @@
|
|
||||||
#define tplg_dbg(fmt, arg...) do { } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#define MAX_FILE 256
|
|
||||||
#define TPLG_MAX_PRIV_SIZE (1024 * 128)
|
|
||||||
|
|
||||||
/** The name of the environment variable containing the tplg directory */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,103 +0,0 @@
|
|||||||
From 7d3fec6ac68de0244621ae0aca7474d159336639 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 17 Jan 2020 18:21:08 +0100
|
|
||||||
Subject: [PATCH 64/74] ucm: parser - cosmetic fixes in the comments
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 63 ++++++++++++++++++++++++++++----------------------------
|
|
||||||
1 file changed, 31 insertions(+), 32 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index 6c13fafdabbf..6c5d29026e5e 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -676,42 +676,41 @@ static int parse_value(snd_use_case_mgr_t *uc_mgr ATTRIBUTE_UNUSED,
|
|
||||||
/*
|
|
||||||
* Parse Modifier Use cases
|
|
||||||
*
|
|
||||||
- * # Each modifier is described in new section. N modifiers are allowed
|
|
||||||
- * SectionModifier."Capture Voice" {
|
|
||||||
+ * # Each modifier is described in new section. N modifiers are allowed
|
|
||||||
+ * SectionModifier."Capture Voice" {
|
|
||||||
*
|
|
||||||
- * Comment "Record voice call"
|
|
||||||
+ * Comment "Record voice call"
|
|
||||||
*
|
|
||||||
- * SupportedDevice [
|
|
||||||
- * "x"
|
|
||||||
- * "y"
|
|
||||||
- * ]
|
|
||||||
- *
|
|
||||||
- * ConflictingDevice [
|
|
||||||
- * "x"
|
|
||||||
- * "y"
|
|
||||||
- * ]
|
|
||||||
+ * SupportedDevice [
|
|
||||||
+ * "x"
|
|
||||||
+ * "y"
|
|
||||||
+ * ]
|
|
||||||
*
|
|
||||||
- * EnableSequence [
|
|
||||||
- * ....
|
|
||||||
- * ]
|
|
||||||
+ * ConflictingDevice [
|
|
||||||
+ * "x"
|
|
||||||
+ * "y"
|
|
||||||
+ * ]
|
|
||||||
*
|
|
||||||
- * DisableSequence [
|
|
||||||
- * ...
|
|
||||||
- * ]
|
|
||||||
+ * EnableSequence [
|
|
||||||
+ * ....
|
|
||||||
+ * ]
|
|
||||||
*
|
|
||||||
- * TransitionSequence."ToModifierName" [
|
|
||||||
- * ...
|
|
||||||
- * ]
|
|
||||||
+ * DisableSequence [
|
|
||||||
+ * ...
|
|
||||||
+ * ]
|
|
||||||
*
|
|
||||||
- * # Optional TQ and ALSA PCMs
|
|
||||||
- * Value {
|
|
||||||
- * TQ Voice
|
|
||||||
- * CapturePCM "hw:1"
|
|
||||||
- * PlaybackVolume "name='Master Playback Volume',index=2"
|
|
||||||
- * PlaybackSwitch "name='Master Playback Switch',index=2"
|
|
||||||
- * }
|
|
||||||
+ * TransitionSequence."ToModifierName" [
|
|
||||||
+ * ...
|
|
||||||
+ * ]
|
|
||||||
*
|
|
||||||
- * }
|
|
||||||
+ * # Optional TQ and ALSA PCMs
|
|
||||||
+ * Value {
|
|
||||||
+ * TQ Voice
|
|
||||||
+ * CapturePCM "hw:1"
|
|
||||||
+ * PlaybackVolume "name='Master Playback Volume',index=2"
|
|
||||||
+ * PlaybackSwitch "name='Master Playback Switch',index=2"
|
|
||||||
+ * }
|
|
||||||
+ * }
|
|
||||||
*
|
|
||||||
* SupportedDevice and ConflictingDevice cannot be specified together.
|
|
||||||
* Both are optional.
|
|
||||||
@@ -836,11 +835,11 @@ static int parse_modifier(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
/*
|
|
||||||
* Parse Device Use Cases
|
|
||||||
*
|
|
||||||
- *# Each device is described in new section. N devices are allowed
|
|
||||||
- *SectionDevice."Headphones" {
|
|
||||||
+ * # Each device is described in new section. N devices are allowed
|
|
||||||
+ * SectionDevice."Headphones" {
|
|
||||||
* Comment "Headphones connected to 3.5mm jack"
|
|
||||||
*
|
|
||||||
- * upportedDevice [
|
|
||||||
+ * SupportedDevice [
|
|
||||||
* "x"
|
|
||||||
* "y"
|
|
||||||
* ]
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
From b2fe99277a73ec80eac0bd221672dd4aa02defa7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tanu Kaskinen <tanuk@iki.fi>
|
|
||||||
Date: Fri, 20 Dec 2019 09:26:12 +0200
|
|
||||||
Subject: [PATCH 65/74] configure.ac: remove an unnecessary libtool fix
|
|
||||||
|
|
||||||
This code was added in commit 75d393a563efb578c79364a277087c6326267f52
|
|
||||||
without explaining why. I assume it was a mistake, since it looks like
|
|
||||||
the libtool problem should have gone away a long time ago. The referenced
|
|
||||||
wiki page https://wiki.debian.org/RpathIssue says:
|
|
||||||
|
|
||||||
Since libtool 1.5.2 (released 2004-01-25), on Linux libtool no
|
|
||||||
longer sets RPATH for any directories in the dynamic linker search
|
|
||||||
path, so this should no longer be an issue unless upstream used a
|
|
||||||
really old version of libtool when creating their distribution
|
|
||||||
tarball.
|
|
||||||
|
|
||||||
This code caused problems in OpenEmbedded, where the libtool script is
|
|
||||||
named "x86_64-oe-linux-libtool" or similar rather than just "libtool",
|
|
||||||
so the sed command failed with a file not found error. Rather than
|
|
||||||
adapting the code to OpenEmbedded's peculiarities, it seems best to just
|
|
||||||
remove the unnecessary code altogether.
|
|
||||||
|
|
||||||
Note: The rpath is set (hardcoded) for 'make' but it is corrected
|
|
||||||
for 'make install' by libtool.
|
|
||||||
|
|
||||||
Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
configure.ac | 11 -----------
|
|
||||||
1 file changed, 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 886f87bc4458..fb60c03086da 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -765,14 +765,3 @@ test "$build_seq" = "yes" && echo "#include <alsa/seq.h>" >> include/asoundlib.h
|
|
||||||
test "$build_seq" = "yes" && echo "#include <alsa/seqmid.h>" >> include/asoundlib.h
|
|
||||||
test "$build_seq" = "yes" && echo "#include <alsa/seq_midi_event.h>" >> include/asoundlib.h
|
|
||||||
cat "$srcdir"/include/asoundlib-tail.h >> include/asoundlib.h
|
|
||||||
-
|
|
||||||
-dnl Taken from https://wiki.debian.org/RpathIssue
|
|
||||||
-case $host in
|
|
||||||
- *-*-linux-gnu)
|
|
||||||
- AC_MSG_RESULT([Fixing libtool for -rpath problems.])
|
|
||||||
- sed < libtool > libtool-2 \
|
|
||||||
- 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
|
|
||||||
- mv libtool-2 libtool
|
|
||||||
- chmod 755 libtool
|
|
||||||
- ;;
|
|
||||||
-esac
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
From c5a09b0feaf759957dfac2c797b652781a0d41fe Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Mon, 3 Feb 2020 14:44:13 +0100
|
|
||||||
Subject: [PATCH 66/74] ucm: parser - use correct filename in
|
|
||||||
parser_master_file()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index 6c5d29026e5e..dbbd381755b1 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -1413,16 +1413,16 @@ static int parse_master_file(snd_use_case_mgr_t *uc_mgr, snd_config_t *cfg)
|
|
||||||
if (uc_mgr->conf_format >= 2) {
|
|
||||||
err = snd_config_search(cfg, "Syntax", &n);
|
|
||||||
if (err < 0) {
|
|
||||||
- uc_error("Syntax field not found in %s", uc_mgr->conf_dir_name);
|
|
||||||
+ uc_error("Syntax field not found in %s", uc_mgr->conf_file_name);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
err = snd_config_get_integer(n, &l);
|
|
||||||
if (err < 0) {
|
|
||||||
- uc_error("Syntax field is invalid in %s", uc_mgr->conf_dir_name);
|
|
||||||
+ uc_error("Syntax field is invalid in %s", uc_mgr->conf_file_name);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
if (l < 2 || l > SYNTAX_VERSION_MAX) {
|
|
||||||
- uc_error("Incompatible syntax %d in %s", l, uc_mgr->conf_dir_name);
|
|
||||||
+ uc_error("Incompatible syntax %d in %s", l, uc_mgr->conf_file_name);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
/* delete this field to avoid strcmp() call in the loop */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
From 71a1367bcabc50f99302d8c76395f1cb84975775 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Mon, 3 Feb 2020 15:24:19 +0100
|
|
||||||
Subject: [PATCH 67/74] ucm: the ucm2/ subdirectory is driver name based
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 12 +++++++-----
|
|
||||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index dbbd381755b1..f576fde429cf 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -1515,7 +1515,7 @@ static int get_card_long_name(snd_use_case_mgr_t *mgr, char *longname)
|
|
||||||
int card, err;
|
|
||||||
snd_ctl_t *ctl;
|
|
||||||
snd_ctl_card_info_t *info;
|
|
||||||
- const char *_name, *_long_name;
|
|
||||||
+ const char *_driver, *_name, *_long_name;
|
|
||||||
|
|
||||||
snd_ctl_card_info_alloca(&info);
|
|
||||||
|
|
||||||
@@ -1535,9 +1535,11 @@ static int get_card_long_name(snd_use_case_mgr_t *mgr, char *longname)
|
|
||||||
err = get_card_info(mgr, name, &ctl, info);
|
|
||||||
|
|
||||||
if (err == 0) {
|
|
||||||
+ _driver = snd_ctl_card_info_get_driver(info);
|
|
||||||
_name = snd_ctl_card_info_get_name(info);
|
|
||||||
_long_name = snd_ctl_card_info_get_longname(info);
|
|
||||||
- if (!strcmp(card_name, _name) ||
|
|
||||||
+ if (!strcmp(card_name, _driver) ||
|
|
||||||
+ !strcmp(card_name, _name) ||
|
|
||||||
!strcmp(card_name, _long_name)) {
|
|
||||||
snd_strlcpy(longname, _long_name, MAX_CARD_LONG_NAME);
|
|
||||||
return 0;
|
|
||||||
@@ -1560,7 +1562,7 @@ static int get_by_card(snd_use_case_mgr_t *mgr, const char *ctl_name, char *long
|
|
||||||
{
|
|
||||||
snd_ctl_t *ctl;
|
|
||||||
snd_ctl_card_info_t *info;
|
|
||||||
- const char *_name, *_long_name;
|
|
||||||
+ const char *_driver, *_long_name;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
snd_ctl_card_info_alloca(&info);
|
|
||||||
@@ -1569,8 +1571,8 @@ static int get_by_card(snd_use_case_mgr_t *mgr, const char *ctl_name, char *long
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
- _name = snd_ctl_card_info_get_name(info);
|
|
||||||
- if (replace_string(&mgr->conf_dir_name, _name) == NULL)
|
|
||||||
+ _driver = snd_ctl_card_info_get_driver(info);
|
|
||||||
+ if (replace_string(&mgr->conf_dir_name, _driver) == NULL)
|
|
||||||
return -ENOMEM;
|
|
||||||
_long_name = snd_ctl_card_info_get_longname(info);
|
|
||||||
snd_strlcpy(longname, _long_name, MAX_CARD_LONG_NAME);
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,393 +0,0 @@
|
|||||||
From 251bc204a1e7f1bf1d12b452f2b62e15543bba94 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 7 Feb 2020 10:09:07 +0100
|
|
||||||
Subject: [PATCH 68/74] ucm: implement RenameDevice and RemoveDevice verb
|
|
||||||
management
|
|
||||||
|
|
||||||
With the conditionals, it may be useful to define the devices
|
|
||||||
in the included configuration files. To satisfy the specification
|
|
||||||
requirements (device naming) those device names might require
|
|
||||||
to be renamed or deleted wrong references from the conflicting
|
|
||||||
or supported lists.
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/ucm/ucm_local.h | 15 ++++++
|
|
||||||
src/ucm/utils.c | 123 ++++++++++++++++++++++++++++++++++++++++++++-----
|
|
||||||
3 files changed, 254 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index f576fde429cf..f9a8f6283c3a 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -985,6 +985,71 @@ static int parse_device(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Parse Device Rename/Delete Command
|
|
||||||
+ *
|
|
||||||
+ * # The devices might be renamed to allow the better conditional runtime
|
|
||||||
+ * # evaluation. Bellow example renames Speaker1 device to Speaker and
|
|
||||||
+ * # removes Speaker2 device.
|
|
||||||
+ * RenameDevice."Speaker1" "Speaker"
|
|
||||||
+ * RemoveDevice."Speaker2" "Speaker2"
|
|
||||||
+ */
|
|
||||||
+static int parse_dev_name_list(snd_config_t *cfg,
|
|
||||||
+ struct list_head *list)
|
|
||||||
+{
|
|
||||||
+ snd_config_t *n;
|
|
||||||
+ snd_config_iterator_t i, next;
|
|
||||||
+ const char *id, *name1;
|
|
||||||
+ char *name2;
|
|
||||||
+ struct ucm_dev_name *dev;
|
|
||||||
+ snd_config_iterator_t pos;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ if (snd_config_get_id(cfg, &id) < 0)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if (snd_config_get_type(cfg) != SND_CONFIG_TYPE_COMPOUND) {
|
|
||||||
+ uc_error("compound type expected for %s", id);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ snd_config_for_each(i, next, cfg) {
|
|
||||||
+ n = snd_config_iterator_entry(i);
|
|
||||||
+
|
|
||||||
+ if (snd_config_get_id(n, &name1) < 0)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ err = parse_string(n, &name2);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ uc_error("error: failed to get target device name for '%s'", name1);
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* skip duplicates */
|
|
||||||
+ list_for_each(pos, list) {
|
|
||||||
+ dev = list_entry(pos, struct ucm_dev_name, list);
|
|
||||||
+ if (strcmp(dev->name1, name1) == 0) {
|
|
||||||
+ free(name2);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dev = calloc(1, sizeof(*dev));
|
|
||||||
+ if (dev == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ dev->name1 = strdup(name1);
|
|
||||||
+ if (dev->name1 == NULL) {
|
|
||||||
+ free(dev);
|
|
||||||
+ free(name2);
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+ dev->name2 = name2;
|
|
||||||
+ list_add_tail(&dev->list, list);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int parse_compound_check_legacy(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
snd_config_t *cfg,
|
|
||||||
int (*fcn)(snd_use_case_mgr_t *, snd_config_t *, void *, void *),
|
|
||||||
@@ -1044,7 +1109,39 @@ static int parse_modifier_name(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
void *data1,
|
|
||||||
void *data2 ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
- return parse_compound_check_legacy(uc_mgr, cfg, parse_modifier, data1);
|
|
||||||
+ return parse_compound(uc_mgr, cfg, parse_modifier, data1, data2);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int verb_device_management(struct use_case_verb *verb)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ struct ucm_dev_name *dev;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ /* rename devices */
|
|
||||||
+ list_for_each(pos, &verb->rename_list) {
|
|
||||||
+ dev = list_entry(pos, struct ucm_dev_name, list);
|
|
||||||
+ err = uc_mgr_rename_device(verb, dev->name1, dev->name2);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ uc_error("error: cannot rename device '%s' to '%s'", dev->name1, dev->name2);
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* remove devices */
|
|
||||||
+ list_for_each(pos, &verb->rename_list) {
|
|
||||||
+ dev = list_entry(pos, struct ucm_dev_name, list);
|
|
||||||
+ err = uc_mgr_remove_device(verb, dev->name2);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ uc_error("error: cannot remove device '%s'", dev->name2);
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* those lists are no longer used */
|
|
||||||
+ uc_mgr_free_dev_name_list(&verb->rename_list);
|
|
||||||
+ uc_mgr_free_dev_name_list(&verb->remove_list);
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1180,6 +1277,8 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
INIT_LIST_HEAD(&verb->cmpt_device_list);
|
|
||||||
INIT_LIST_HEAD(&verb->modifier_list);
|
|
||||||
INIT_LIST_HEAD(&verb->value_list);
|
|
||||||
+ INIT_LIST_HEAD(&verb->rename_list);
|
|
||||||
+ INIT_LIST_HEAD(&verb->remove_list);
|
|
||||||
list_add_tail(&verb->list, &uc_mgr->verb_list);
|
|
||||||
if (use_case_name == NULL)
|
|
||||||
return -EINVAL;
|
|
||||||
@@ -1249,6 +1348,26 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ /* device renames */
|
|
||||||
+ if (strcmp(id, "RenameDevice") == 0) {
|
|
||||||
+ err = parse_dev_name_list(n, &verb->rename_list);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ uc_error("error: %s failed to parse device rename",
|
|
||||||
+ file);
|
|
||||||
+ goto _err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* device remove */
|
|
||||||
+ if (strcmp(id, "RemoveDevice") == 0) {
|
|
||||||
+ err = parse_dev_name_list(n, &verb->remove_list);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ uc_error("error: %s failed to parse device remove",
|
|
||||||
+ file);
|
|
||||||
+ goto _err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
snd_config_delete(cfg);
|
|
||||||
@@ -1258,6 +1377,14 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
uc_error("error: no use case device defined", file);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ /* do device rename and delete */
|
|
||||||
+ err = verb_device_management(verb);
|
|
||||||
+ if (err < 0) {
|
|
||||||
+ uc_error("error: device management error in verb '%s'", verb->name);
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
_err:
|
|
||||||
diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h
|
|
||||||
index fa9fc16661bb..ba8d2acb3355 100644
|
|
||||||
--- a/src/ucm/ucm_local.h
|
|
||||||
+++ b/src/ucm/ucm_local.h
|
|
||||||
@@ -117,6 +117,12 @@ struct ctl_list {
|
|
||||||
snd_ctl_card_info_t *ctl_info;
|
|
||||||
};
|
|
||||||
|
|
||||||
+struct ucm_dev_name {
|
|
||||||
+ struct list_head list;
|
|
||||||
+ char *name1;
|
|
||||||
+ char *name2;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Describes a Use Case Modifier and it's enable and disable sequences.
|
|
||||||
* A use case verb can have N modifiers.
|
|
||||||
@@ -196,6 +202,10 @@ struct use_case_verb {
|
|
||||||
|
|
||||||
/* value list */
|
|
||||||
struct list_head value_list;
|
|
||||||
+
|
|
||||||
+ /* temporary modifications lists */
|
|
||||||
+ struct list_head rename_list;
|
|
||||||
+ struct list_head remove_list;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -252,6 +262,11 @@ int uc_mgr_config_load(int format, const char *file, snd_config_t **cfg);
|
|
||||||
int uc_mgr_import_master_config(snd_use_case_mgr_t *uc_mgr);
|
|
||||||
int uc_mgr_scan_master_configs(const char **_list[]);
|
|
||||||
|
|
||||||
+int uc_mgr_remove_device(struct use_case_verb *verb, const char *name);
|
|
||||||
+int uc_mgr_rename_device(struct use_case_verb *verb, const char *src,
|
|
||||||
+ const char *dst);
|
|
||||||
+
|
|
||||||
+void uc_mgr_free_dev_name_list(struct list_head *base);
|
|
||||||
void uc_mgr_free_sequence_element(struct sequence_element *seq);
|
|
||||||
void uc_mgr_free_transition_element(struct transition_sequence *seq);
|
|
||||||
void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr);
|
|
||||||
diff --git a/src/ucm/utils.c b/src/ucm/utils.c
|
|
||||||
index daa568c16a30..60a591725835 100644
|
|
||||||
--- a/src/ucm/utils.c
|
|
||||||
+++ b/src/ucm/utils.c
|
|
||||||
@@ -328,6 +328,44 @@ void uc_mgr_free_dev_list(struct dev_list *dev_list)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+int uc_mgr_rename_in_dev_list(struct dev_list *dev_list, const char *src,
|
|
||||||
+ const char *dst)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ struct dev_list_node *dlist;
|
|
||||||
+ char *dst1;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, &dev_list->list) {
|
|
||||||
+ dlist = list_entry(pos, struct dev_list_node, list);
|
|
||||||
+ if (strcmp(dlist->name, src) == 0) {
|
|
||||||
+ dst1 = strdup(dst);
|
|
||||||
+ if (dst1 == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ free(dlist->name);
|
|
||||||
+ dlist->name = dst1;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return -ENOENT;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int uc_mgr_remove_from_dev_list(struct dev_list *dev_list, const char *name)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ struct dev_list_node *dlist;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, &dev_list->list) {
|
|
||||||
+ dlist = list_entry(pos, struct dev_list_node, list);
|
|
||||||
+ if (strcmp(dlist->name, name) == 0) {
|
|
||||||
+ free(dlist->name);
|
|
||||||
+ list_del(&dlist->list);
|
|
||||||
+ free(dlist);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return -ENODEV;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void uc_mgr_free_sequence_element(struct sequence_element *seq)
|
|
||||||
{
|
|
||||||
if (seq == NULL)
|
|
||||||
@@ -381,6 +419,20 @@ void uc_mgr_free_transition(struct list_head *base)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+void uc_mgr_free_dev_name_list(struct list_head *base)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos, *npos;
|
|
||||||
+ struct ucm_dev_name *dev;
|
|
||||||
+
|
|
||||||
+ list_for_each_safe(pos, npos, base) {
|
|
||||||
+ dev = list_entry(pos, struct ucm_dev_name, list);
|
|
||||||
+ list_del(&dev->list);
|
|
||||||
+ free(dev->name1);
|
|
||||||
+ free(dev->name2);
|
|
||||||
+ free(dev);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void uc_mgr_free_modifier(struct list_head *base)
|
|
||||||
{
|
|
||||||
struct list_head *pos, *npos;
|
|
||||||
@@ -400,23 +452,68 @@ void uc_mgr_free_modifier(struct list_head *base)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-void uc_mgr_free_device(struct list_head *base)
|
|
||||||
+void uc_mgr_free_device(struct use_case_device *dev)
|
|
||||||
+{
|
|
||||||
+ free(dev->name);
|
|
||||||
+ free(dev->comment);
|
|
||||||
+ uc_mgr_free_sequence(&dev->enable_list);
|
|
||||||
+ uc_mgr_free_sequence(&dev->disable_list);
|
|
||||||
+ uc_mgr_free_transition(&dev->transition_list);
|
|
||||||
+ uc_mgr_free_dev_list(&dev->dev_list);
|
|
||||||
+ uc_mgr_free_value(&dev->value_list);
|
|
||||||
+ list_del(&dev->list);
|
|
||||||
+ free(dev);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void uc_mgr_free_device_list(struct list_head *base)
|
|
||||||
{
|
|
||||||
struct list_head *pos, *npos;
|
|
||||||
struct use_case_device *dev;
|
|
||||||
|
|
||||||
list_for_each_safe(pos, npos, base) {
|
|
||||||
dev = list_entry(pos, struct use_case_device, list);
|
|
||||||
- free(dev->name);
|
|
||||||
- free(dev->comment);
|
|
||||||
- uc_mgr_free_sequence(&dev->enable_list);
|
|
||||||
- uc_mgr_free_sequence(&dev->disable_list);
|
|
||||||
- uc_mgr_free_transition(&dev->transition_list);
|
|
||||||
- uc_mgr_free_dev_list(&dev->dev_list);
|
|
||||||
- uc_mgr_free_value(&dev->value_list);
|
|
||||||
- list_del(&dev->list);
|
|
||||||
- free(dev);
|
|
||||||
+ uc_mgr_free_device(dev);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int uc_mgr_rename_device(struct use_case_verb *verb, const char *src,
|
|
||||||
+ const char *dst)
|
|
||||||
+{
|
|
||||||
+ struct use_case_device *device;
|
|
||||||
+ struct list_head *pos, *npos;
|
|
||||||
+ char *dst1;
|
|
||||||
+
|
|
||||||
+ /* no errors when device is not found */
|
|
||||||
+ list_for_each_safe(pos, npos, &verb->device_list) {
|
|
||||||
+ device = list_entry(pos, struct use_case_device, list);
|
|
||||||
+ if (strcmp(device->name, src) == 0) {
|
|
||||||
+ dst1 = strdup(dst);
|
|
||||||
+ if (dst1 == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ free(device->name);
|
|
||||||
+ device->name = dst1;
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ uc_mgr_rename_in_dev_list(&device->dev_list, src, dst);
|
|
||||||
+ }
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int uc_mgr_remove_device(struct use_case_verb *verb, const char *name)
|
|
||||||
+{
|
|
||||||
+ struct use_case_device *device;
|
|
||||||
+ struct list_head *pos, *npos;
|
|
||||||
+
|
|
||||||
+ list_for_each_safe(pos, npos, &verb->device_list) {
|
|
||||||
+ device = list_entry(pos, struct use_case_device, list);
|
|
||||||
+ if (strcmp(device->name, name) == 0) {
|
|
||||||
+ uc_mgr_free_device(device);
|
|
||||||
+ continue;
|
|
||||||
+ }
|
|
||||||
+ uc_mgr_remove_from_dev_list(&device->dev_list, name);
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
+ return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr)
|
|
||||||
@@ -432,9 +529,11 @@ void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr)
|
|
||||||
uc_mgr_free_sequence(&verb->disable_list);
|
|
||||||
uc_mgr_free_transition(&verb->transition_list);
|
|
||||||
uc_mgr_free_value(&verb->value_list);
|
|
||||||
- uc_mgr_free_device(&verb->device_list);
|
|
||||||
- uc_mgr_free_device(&verb->cmpt_device_list);
|
|
||||||
+ uc_mgr_free_device_list(&verb->device_list);
|
|
||||||
+ uc_mgr_free_device_list(&verb->cmpt_device_list);
|
|
||||||
uc_mgr_free_modifier(&verb->modifier_list);
|
|
||||||
+ uc_mgr_free_dev_name_list(&verb->rename_list);
|
|
||||||
+ uc_mgr_free_dev_name_list(&verb->remove_list);
|
|
||||||
list_del(&verb->list);
|
|
||||||
free(verb);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,135 +0,0 @@
|
|||||||
From fdf96312fa3c9261db2954afcde8c6a15d2ebe44 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Fri, 7 Feb 2020 16:18:11 +0100
|
|
||||||
Subject: [PATCH 69/74] ucm: fill missing device entries (conflicting /
|
|
||||||
supported)
|
|
||||||
|
|
||||||
It is not necessary to maintain this information in sync in the configuration
|
|
||||||
files. Fill the missing entries to the complementary devices.
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
|
|
||||||
src/ucm/ucm_local.h | 1 +
|
|
||||||
src/ucm/utils.c | 25 +++++++++++++++++++++++++
|
|
||||||
3 files changed, 75 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index f9a8f6283c3a..23bf6a63f31e 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -1112,6 +1112,52 @@ static int parse_modifier_name(snd_use_case_mgr_t *uc_mgr,
|
|
||||||
return parse_compound(uc_mgr, cfg, parse_modifier, data1, data2);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int verb_dev_list_add(struct use_case_verb *verb,
|
|
||||||
+ enum dev_list_type dst_type,
|
|
||||||
+ const char *dst,
|
|
||||||
+ const char *src)
|
|
||||||
+{
|
|
||||||
+ struct use_case_device *device;
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, &verb->device_list) {
|
|
||||||
+ device = list_entry(pos, struct use_case_device, list);
|
|
||||||
+ if (strcmp(device->name, dst) != 0)
|
|
||||||
+ continue;
|
|
||||||
+ if (device->dev_list.type != dst_type) {
|
|
||||||
+ if (list_empty(&device->dev_list.list)) {
|
|
||||||
+ device->dev_list.type = dst_type;
|
|
||||||
+ } else {
|
|
||||||
+ uc_error("error: incompatible device list type ('%s', '%s')",
|
|
||||||
+ device->name, src);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return uc_mgr_put_to_dev_list(&device->dev_list, src);
|
|
||||||
+ }
|
|
||||||
+ return -ENOENT;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int verb_dev_list_check(struct use_case_verb *verb)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos, *pos2;
|
|
||||||
+ struct use_case_device *device;
|
|
||||||
+ struct dev_list_node *dlist;
|
|
||||||
+ int err;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, &verb->device_list) {
|
|
||||||
+ device = list_entry(pos, struct use_case_device, list);
|
|
||||||
+ list_for_each(pos2, &device->dev_list.list) {
|
|
||||||
+ dlist = list_entry(pos2, struct dev_list_node, list);
|
|
||||||
+ err = verb_dev_list_add(verb, device->dev_list.type,
|
|
||||||
+ dlist->name, device->name);
|
|
||||||
+ if (err < 0)
|
|
||||||
+ return err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int verb_device_management(struct use_case_verb *verb)
|
|
||||||
{
|
|
||||||
struct list_head *pos;
|
|
||||||
@@ -1141,7 +1187,9 @@ static int verb_device_management(struct use_case_verb *verb)
|
|
||||||
/* those lists are no longer used */
|
|
||||||
uc_mgr_free_dev_name_list(&verb->rename_list);
|
|
||||||
uc_mgr_free_dev_name_list(&verb->remove_list);
|
|
||||||
- return 0;
|
|
||||||
+
|
|
||||||
+ /* handle conflicting/supported lists */
|
|
||||||
+ return verb_dev_list_check(verb);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h
|
|
||||||
index ba8d2acb3355..acec4bf67e30 100644
|
|
||||||
--- a/src/ucm/ucm_local.h
|
|
||||||
+++ b/src/ucm/ucm_local.h
|
|
||||||
@@ -262,6 +262,7 @@ int uc_mgr_config_load(int format, const char *file, snd_config_t **cfg);
|
|
||||||
int uc_mgr_import_master_config(snd_use_case_mgr_t *uc_mgr);
|
|
||||||
int uc_mgr_scan_master_configs(const char **_list[]);
|
|
||||||
|
|
||||||
+int uc_mgr_put_to_dev_list(struct dev_list *dev_list, const char *name);
|
|
||||||
int uc_mgr_remove_device(struct use_case_verb *verb, const char *name);
|
|
||||||
int uc_mgr_rename_device(struct use_case_verb *verb, const char *src,
|
|
||||||
const char *dst);
|
|
||||||
diff --git a/src/ucm/utils.c b/src/ucm/utils.c
|
|
||||||
index 60a591725835..50b2a1df4a6a 100644
|
|
||||||
--- a/src/ucm/utils.c
|
|
||||||
+++ b/src/ucm/utils.c
|
|
||||||
@@ -328,6 +328,31 @@ void uc_mgr_free_dev_list(struct dev_list *dev_list)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+int uc_mgr_put_to_dev_list(struct dev_list *dev_list, const char *name)
|
|
||||||
+{
|
|
||||||
+ struct list_head *pos;
|
|
||||||
+ struct dev_list_node *dlist;
|
|
||||||
+ char *n;
|
|
||||||
+
|
|
||||||
+ list_for_each(pos, &dev_list->list) {
|
|
||||||
+ dlist = list_entry(pos, struct dev_list_node, list);
|
|
||||||
+ if (strcmp(dlist->name, name) == 0)
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ dlist = calloc(1, sizeof(*dlist));
|
|
||||||
+ if (dlist == NULL)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ n = strdup(name);
|
|
||||||
+ if (n == NULL) {
|
|
||||||
+ free(dlist);
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ }
|
|
||||||
+ dlist->name = n;
|
|
||||||
+ list_add(&dlist->list, &dev_list->list);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int uc_mgr_rename_in_dev_list(struct dev_list *dev_list, const char *src,
|
|
||||||
const char *dst)
|
|
||||||
{
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,110 +0,0 @@
|
|||||||
From 43e137c06451bbdd7998ec5bef20ef82d9f4e5a7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Date: Mon, 10 Feb 2020 12:47:19 +0100
|
|
||||||
Subject: [PATCH 70/74] control: Remove access to the deprecated dimen fields
|
|
||||||
|
|
||||||
The dimen fields of control element has been deprecated, and it's
|
|
||||||
finally dropped in kernel 5.6 ABI definition. Remove the
|
|
||||||
corresponding accesses in alsa-lib code.
|
|
||||||
|
|
||||||
As of this patch, it's disabled via ifdef, just to be sure. The
|
|
||||||
disabled code should be removed in a later stage as a cleanup.
|
|
||||||
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
src/control/control.c | 24 ++++++++++++++++++++----
|
|
||||||
1 file changed, 20 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/control/control.c b/src/control/control.c
|
|
||||||
index 33650155cac7..27f421350fb7 100644
|
|
||||||
--- a/src/control/control.c
|
|
||||||
+++ b/src/control/control.c
|
|
||||||
@@ -303,6 +303,7 @@ int snd_ctl_elem_info(snd_ctl_t *ctl, snd_ctl_elem_info_t *info)
|
|
||||||
return ctl->ops->element_info(ctl, info);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#if 0 /* deprecated */
|
|
||||||
static bool validate_element_member_dimension(snd_ctl_elem_info_t *info)
|
|
||||||
{
|
|
||||||
unsigned int members;
|
|
||||||
@@ -328,6 +329,9 @@ static bool validate_element_member_dimension(snd_ctl_elem_info_t *info)
|
|
||||||
|
|
||||||
return members == info->count;
|
|
||||||
}
|
|
||||||
+#else /* deprecated */
|
|
||||||
+#define validate_element_member_dimension(info) true
|
|
||||||
+#endif /* deprecated */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Create and add some user-defined control elements of integer type.
|
|
||||||
@@ -2510,11 +2514,12 @@ const char *snd_ctl_elem_info_get_item_name(const snd_ctl_elem_info_t *obj)
|
|
||||||
* #snd_ctl_elem_info_get_dimensions is deprecated without any replacement.
|
|
||||||
*/
|
|
||||||
#ifndef DOXYGEN
|
|
||||||
-EXPORT_SYMBOL int INTERNAL(snd_ctl_elem_info_get_dimensions)(const snd_ctl_elem_info_t *obj)
|
|
||||||
+EXPORT_SYMBOL int INTERNAL(snd_ctl_elem_info_get_dimensions)(const snd_ctl_elem_info_t *obj ATTRIBUTE_UNUSED)
|
|
||||||
#else
|
|
||||||
int snd_ctl_elem_info_get_dimensions(const snd_ctl_elem_info_t *obj)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
+#if 0 /* deprecated */
|
|
||||||
int i;
|
|
||||||
|
|
||||||
assert(obj);
|
|
||||||
@@ -2522,6 +2527,9 @@ int snd_ctl_elem_info_get_dimensions(const snd_ctl_elem_info_t *obj)
|
|
||||||
if (obj->dimen.d[i])
|
|
||||||
break;
|
|
||||||
return i + 1;
|
|
||||||
+#else
|
|
||||||
+ return -EINVAL;
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
use_default_symbol_version(__snd_ctl_elem_info_get_dimensions, snd_ctl_elem_info_get_dimensions, ALSA_0.9.3);
|
|
||||||
|
|
||||||
@@ -2535,15 +2543,19 @@ use_default_symbol_version(__snd_ctl_elem_info_get_dimensions, snd_ctl_elem_info
|
|
||||||
* #snd_ctl_elem_info_get_dimension is deprecated without any replacement.
|
|
||||||
*/
|
|
||||||
#ifndef DOXYGEN
|
|
||||||
-EXPORT_SYMBOL int INTERNAL(snd_ctl_elem_info_get_dimension)(const snd_ctl_elem_info_t *obj, unsigned int idx)
|
|
||||||
+EXPORT_SYMBOL int INTERNAL(snd_ctl_elem_info_get_dimension)(const snd_ctl_elem_info_t *obj ATTRIBUTE_UNUSED, unsigned int idx ATTRIBUTE_UNUSED)
|
|
||||||
#else
|
|
||||||
int snd_ctl_elem_info_get_dimension(const snd_ctl_elem_info_t *obj, unsigned int idx)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
+#if 0 /* deprecated */
|
|
||||||
assert(obj);
|
|
||||||
if (idx > 3)
|
|
||||||
return 0;
|
|
||||||
return obj->dimen.d[idx];
|
|
||||||
+#else /* deprecated */
|
|
||||||
+ return -EINVAL;
|
|
||||||
+#endif /* deprecated */
|
|
||||||
}
|
|
||||||
use_default_symbol_version(__snd_ctl_elem_info_get_dimension, snd_ctl_elem_info_get_dimension, ALSA_0.9.3);
|
|
||||||
|
|
||||||
@@ -2565,9 +2577,10 @@ use_default_symbol_version(__snd_ctl_elem_info_get_dimension, snd_ctl_elem_info_
|
|
||||||
* \deprecated Since 1.1.5
|
|
||||||
* #snd_ctl_elem_info_set_dimension is deprecated without any replacement.
|
|
||||||
*/
|
|
||||||
-int snd_ctl_elem_info_set_dimension(snd_ctl_elem_info_t *info,
|
|
||||||
- const int dimension[4])
|
|
||||||
+int snd_ctl_elem_info_set_dimension(snd_ctl_elem_info_t *info ATTRIBUTE_UNUSED,
|
|
||||||
+ const int dimension[4] ATTRIBUTE_UNUSED)
|
|
||||||
{
|
|
||||||
+#if 0 /* deprecated */
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (info == NULL)
|
|
||||||
@@ -2581,6 +2594,9 @@ int snd_ctl_elem_info_set_dimension(snd_ctl_elem_info_t *info,
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
+#else /* deprecated */
|
|
||||||
+ return -EINVAL;
|
|
||||||
+#endif /* deprecated */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From beb6b178e6d0ca4a9b6c528bac9bfa899b733462 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Date: Mon, 10 Feb 2020 12:49:25 +0100
|
|
||||||
Subject: [PATCH 71/74] topology: Drop SNDRV_CTL_ELEM_ACCESS_TIMESTAMP access
|
|
||||||
|
|
||||||
SNDRV_CTL_ELEM_ACCESS_TIMESTAMP is removed from 5.6 kernel ABI as the
|
|
||||||
ctl timestamp field has been never used and deprecated.
|
|
||||||
Drop the corresponding access from the topology code, too.
|
|
||||||
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
src/topology/ctl.c | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/topology/ctl.c b/src/topology/ctl.c
|
|
||||||
index b78f1c54be05..90241b6318c5 100644
|
|
||||||
--- a/src/topology/ctl.c
|
|
||||||
+++ b/src/topology/ctl.c
|
|
||||||
@@ -35,7 +35,6 @@ static const struct ctl_access_elem ctl_access[] = {
|
|
||||||
{"read", SNDRV_CTL_ELEM_ACCESS_READ},
|
|
||||||
{"write", SNDRV_CTL_ELEM_ACCESS_WRITE},
|
|
||||||
{"volatile", SNDRV_CTL_ELEM_ACCESS_VOLATILE},
|
|
||||||
- {"timestamp", SNDRV_CTL_ELEM_ACCESS_TIMESTAMP},
|
|
||||||
{"tlv_read", SNDRV_CTL_ELEM_ACCESS_TLV_READ},
|
|
||||||
{"tlv_write", SNDRV_CTL_ELEM_ACCESS_TLV_WRITE},
|
|
||||||
{"tlv_command", SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND},
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,721 +0,0 @@
|
|||||||
From 5bbe8b2fb90e78d6ff35eeddbc2b579b8e05cd8f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Date: Mon, 10 Feb 2020 12:50:50 +0100
|
|
||||||
Subject: [PATCH 72/74] uapi: Sync with 5.6 kernel ABI
|
|
||||||
|
|
||||||
This is a sync with 5.6-rc1 kernel headers. The copy is performed
|
|
||||||
from the sanitized headers installed via make headers_install.
|
|
||||||
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
include/sound/uapi/asequencer.h | 12 +-
|
|
||||||
include/sound/uapi/asoc.h | 9 +-
|
|
||||||
include/sound/uapi/asound.h | 319 ++++++++++++++++++++++++++--------------
|
|
||||||
include/sound/uapi/emu10k1.h | 12 +-
|
|
||||||
include/sound/uapi/hdsp.h | 4 +
|
|
||||||
include/sound/uapi/hdspm.h | 4 +
|
|
||||||
include/sound/uapi/sb16_csp.h | 6 +-
|
|
||||||
7 files changed, 235 insertions(+), 131 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/include/sound/uapi/asequencer.h b/include/sound/uapi/asequencer.h
|
|
||||||
index a75e14edc957..2d600320e2ae 100644
|
|
||||||
--- a/include/sound/uapi/asequencer.h
|
|
||||||
+++ b/include/sound/uapi/asequencer.h
|
|
||||||
@@ -20,8 +20,8 @@
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
-#ifndef _UAPI__SOUND_ASEQUENCER_H
|
|
||||||
-#define _UAPI__SOUND_ASEQUENCER_H
|
|
||||||
+#ifndef __SOUND_ASEQUENCER_H
|
|
||||||
+#define __SOUND_ASEQUENCER_H
|
|
||||||
|
|
||||||
#include <sound/asound.h>
|
|
||||||
|
|
||||||
@@ -339,9 +339,9 @@ struct snd_seq_running_info {
|
|
||||||
|
|
||||||
/* client types */
|
|
||||||
typedef int __bitwise snd_seq_client_type_t;
|
|
||||||
-#define NO_CLIENT ((__force snd_seq_client_type_t) 0)
|
|
||||||
-#define USER_CLIENT ((__force snd_seq_client_type_t) 1)
|
|
||||||
-#define KERNEL_CLIENT ((__force snd_seq_client_type_t) 2)
|
|
||||||
+#define NO_CLIENT ((snd_seq_client_type_t) 0)
|
|
||||||
+#define USER_CLIENT ((snd_seq_client_type_t) 1)
|
|
||||||
+#define KERNEL_CLIENT ((snd_seq_client_type_t) 2)
|
|
||||||
|
|
||||||
/* event filter flags */
|
|
||||||
#define SNDRV_SEQ_FILTER_BROADCAST (1<<0) /* accept broadcast messages */
|
|
||||||
@@ -609,4 +609,4 @@ struct snd_seq_query_subs {
|
|
||||||
#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT _IOWR('S', 0x51, struct snd_seq_client_info)
|
|
||||||
#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT _IOWR('S', 0x52, struct snd_seq_port_info)
|
|
||||||
|
|
||||||
-#endif /* _UAPI__SOUND_ASEQUENCER_H */
|
|
||||||
+#endif /* __SOUND_ASEQUENCER_H */
|
|
||||||
diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h
|
|
||||||
index a74ca232f1fc..4efb4ec42500 100644
|
|
||||||
--- a/include/sound/uapi/asoc.h
|
|
||||||
+++ b/include/sound/uapi/asoc.h
|
|
||||||
@@ -17,7 +17,6 @@
|
|
||||||
#define __LINUX_UAPI_SND_ASOC_H
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
|
||||||
-#include <sound/asound.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Maximum number of channels topology kcontrol can represent.
|
|
||||||
@@ -587,7 +586,7 @@ struct snd_soc_tplg_manifest_v4 {
|
|
||||||
__le32 pcm_elems; /* number of PCM elements */
|
|
||||||
__le32 dai_link_elems; /* number of DAI link elements */
|
|
||||||
struct snd_soc_tplg_private priv;
|
|
||||||
-} __packed;
|
|
||||||
+} __attribute__((packed));
|
|
||||||
|
|
||||||
/* Stream Capabilities v4 */
|
|
||||||
struct snd_soc_tplg_stream_caps_v4 {
|
|
||||||
@@ -605,7 +604,7 @@ struct snd_soc_tplg_stream_caps_v4 {
|
|
||||||
__le32 period_size_max; /* max period size bytes */
|
|
||||||
__le32 buffer_size_min; /* min buffer size bytes */
|
|
||||||
__le32 buffer_size_max; /* max buffer size bytes */
|
|
||||||
-} __packed;
|
|
||||||
+} __attribute__((packed));
|
|
||||||
|
|
||||||
/* PCM v4 */
|
|
||||||
struct snd_soc_tplg_pcm_v4 {
|
|
||||||
@@ -620,7 +619,7 @@ struct snd_soc_tplg_pcm_v4 {
|
|
||||||
struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */
|
|
||||||
__le32 num_streams; /* number of streams */
|
|
||||||
struct snd_soc_tplg_stream_caps_v4 caps[2]; /* playback and capture for DAI */
|
|
||||||
-} __packed;
|
|
||||||
+} __attribute__((packed));
|
|
||||||
|
|
||||||
/* Physical link config v4 */
|
|
||||||
struct snd_soc_tplg_link_config_v4 {
|
|
||||||
@@ -628,6 +627,6 @@ struct snd_soc_tplg_link_config_v4 {
|
|
||||||
__le32 id; /* unique ID - used to match */
|
|
||||||
struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */
|
|
||||||
__le32 num_streams; /* number of streams */
|
|
||||||
-} __packed;
|
|
||||||
+} __attribute__((packed));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
diff --git a/include/sound/uapi/asound.h b/include/sound/uapi/asound.h
|
|
||||||
index df1153cea0b7..ec610c270411 100644
|
|
||||||
--- a/include/sound/uapi/asound.h
|
|
||||||
+++ b/include/sound/uapi/asound.h
|
|
||||||
@@ -21,19 +21,19 @@
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#ifndef _UAPI__SOUND_ASOUND_H
|
|
||||||
-#define _UAPI__SOUND_ASOUND_H
|
|
||||||
+#ifndef __SOUND_ASOUND_H
|
|
||||||
+#define __SOUND_ASOUND_H
|
|
||||||
|
|
||||||
#if defined(__KERNEL__) || defined(__linux__)
|
|
||||||
#include <linux/types.h>
|
|
||||||
+#include <asm/byteorder.h>
|
|
||||||
#else
|
|
||||||
+#include <endian.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#ifndef __KERNEL__
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <time.h>
|
|
||||||
-#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* protocol version
|
|
||||||
@@ -138,7 +138,7 @@ struct snd_hwdep_dsp_status {
|
|
||||||
struct snd_hwdep_dsp_image {
|
|
||||||
unsigned int index; /* W: DSP index */
|
|
||||||
unsigned char name[64]; /* W: ID (e.g. file name) */
|
|
||||||
- unsigned char __user *image; /* W: binary image */
|
|
||||||
+ unsigned char *image; /* W: binary image */
|
|
||||||
size_t length; /* W: size of image in bytes */
|
|
||||||
unsigned long driver_data; /* W: driver-specific data */
|
|
||||||
};
|
|
||||||
@@ -154,7 +154,7 @@ struct snd_hwdep_dsp_image {
|
|
||||||
* *
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
-#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 14)
|
|
||||||
+#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 15)
|
|
||||||
|
|
||||||
typedef unsigned long snd_pcm_uframes_t;
|
|
||||||
typedef signed long snd_pcm_sframes_t;
|
|
||||||
@@ -182,66 +182,66 @@ enum {
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef int __bitwise snd_pcm_access_t;
|
|
||||||
-#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0) /* interleaved mmap */
|
|
||||||
-#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1) /* noninterleaved mmap */
|
|
||||||
-#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2) /* complex mmap */
|
|
||||||
-#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3) /* readi/writei */
|
|
||||||
-#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4) /* readn/writen */
|
|
||||||
+#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((snd_pcm_access_t) 0) /* interleaved mmap */
|
|
||||||
+#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((snd_pcm_access_t) 1) /* noninterleaved mmap */
|
|
||||||
+#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((snd_pcm_access_t) 2) /* complex mmap */
|
|
||||||
+#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((snd_pcm_access_t) 3) /* readi/writei */
|
|
||||||
+#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((snd_pcm_access_t) 4) /* readn/writen */
|
|
||||||
#define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED
|
|
||||||
|
|
||||||
typedef int __bitwise snd_pcm_format_t;
|
|
||||||
-#define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0)
|
|
||||||
-#define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1)
|
|
||||||
-#define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2)
|
|
||||||
-#define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3)
|
|
||||||
-#define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4)
|
|
||||||
-#define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5)
|
|
||||||
-#define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6) /* low three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10)
|
|
||||||
-#define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11)
|
|
||||||
-#define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12)
|
|
||||||
-#define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13)
|
|
||||||
-#define SNDRV_PCM_FORMAT_FLOAT_LE ((__force snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
|
|
||||||
-#define SNDRV_PCM_FORMAT_FLOAT_BE ((__force snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
|
|
||||||
-#define SNDRV_PCM_FORMAT_FLOAT64_LE ((__force snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
|
|
||||||
-#define SNDRV_PCM_FORMAT_FLOAT64_BE ((__force snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
|
|
||||||
-#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */
|
|
||||||
-#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */
|
|
||||||
-#define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20)
|
|
||||||
-#define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21)
|
|
||||||
-#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22)
|
|
||||||
-#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23)
|
|
||||||
-#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24)
|
|
||||||
-#define SNDRV_PCM_FORMAT_S20_LE ((__force snd_pcm_format_t) 25) /* in four bytes, LSB justified */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S20_BE ((__force snd_pcm_format_t) 26) /* in four bytes, LSB justified */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U20_LE ((__force snd_pcm_format_t) 27) /* in four bytes, LSB justified */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U20_BE ((__force snd_pcm_format_t) 28) /* in four bytes, LSB justified */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S8 ((snd_pcm_format_t) 0)
|
|
||||||
+#define SNDRV_PCM_FORMAT_U8 ((snd_pcm_format_t) 1)
|
|
||||||
+#define SNDRV_PCM_FORMAT_S16_LE ((snd_pcm_format_t) 2)
|
|
||||||
+#define SNDRV_PCM_FORMAT_S16_BE ((snd_pcm_format_t) 3)
|
|
||||||
+#define SNDRV_PCM_FORMAT_U16_LE ((snd_pcm_format_t) 4)
|
|
||||||
+#define SNDRV_PCM_FORMAT_U16_BE ((snd_pcm_format_t) 5)
|
|
||||||
+#define SNDRV_PCM_FORMAT_S24_LE ((snd_pcm_format_t) 6) /* low three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S24_BE ((snd_pcm_format_t) 7) /* low three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U24_LE ((snd_pcm_format_t) 8) /* low three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U24_BE ((snd_pcm_format_t) 9) /* low three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S32_LE ((snd_pcm_format_t) 10)
|
|
||||||
+#define SNDRV_PCM_FORMAT_S32_BE ((snd_pcm_format_t) 11)
|
|
||||||
+#define SNDRV_PCM_FORMAT_U32_LE ((snd_pcm_format_t) 12)
|
|
||||||
+#define SNDRV_PCM_FORMAT_U32_BE ((snd_pcm_format_t) 13)
|
|
||||||
+#define SNDRV_PCM_FORMAT_FLOAT_LE ((snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
|
|
||||||
+#define SNDRV_PCM_FORMAT_FLOAT_BE ((snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
|
|
||||||
+#define SNDRV_PCM_FORMAT_FLOAT64_LE ((snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
|
|
||||||
+#define SNDRV_PCM_FORMAT_FLOAT64_BE ((snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
|
|
||||||
+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */
|
|
||||||
+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */
|
|
||||||
+#define SNDRV_PCM_FORMAT_MU_LAW ((snd_pcm_format_t) 20)
|
|
||||||
+#define SNDRV_PCM_FORMAT_A_LAW ((snd_pcm_format_t) 21)
|
|
||||||
+#define SNDRV_PCM_FORMAT_IMA_ADPCM ((snd_pcm_format_t) 22)
|
|
||||||
+#define SNDRV_PCM_FORMAT_MPEG ((snd_pcm_format_t) 23)
|
|
||||||
+#define SNDRV_PCM_FORMAT_GSM ((snd_pcm_format_t) 24)
|
|
||||||
+#define SNDRV_PCM_FORMAT_S20_LE ((snd_pcm_format_t) 25) /* in four bytes, LSB justified */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S20_BE ((snd_pcm_format_t) 26) /* in four bytes, LSB justified */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U20_LE ((snd_pcm_format_t) 27) /* in four bytes, LSB justified */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U20_BE ((snd_pcm_format_t) 28) /* in four bytes, LSB justified */
|
|
||||||
/* gap in the numbering for a future standard linear format */
|
|
||||||
-#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31)
|
|
||||||
-#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43) /* in three bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_G723_24 ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */
|
|
||||||
-#define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
|
|
||||||
-#define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */
|
|
||||||
-#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
|
|
||||||
-#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
|
|
||||||
-#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
|
|
||||||
-#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
|
|
||||||
-#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
|
|
||||||
+#define SNDRV_PCM_FORMAT_SPECIAL ((snd_pcm_format_t) 31)
|
|
||||||
+#define SNDRV_PCM_FORMAT_S24_3LE ((snd_pcm_format_t) 32) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S24_3BE ((snd_pcm_format_t) 33) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U24_3LE ((snd_pcm_format_t) 34) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U24_3BE ((snd_pcm_format_t) 35) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S20_3LE ((snd_pcm_format_t) 36) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S20_3BE ((snd_pcm_format_t) 37) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U20_3LE ((snd_pcm_format_t) 38) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U20_3BE ((snd_pcm_format_t) 39) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S18_3LE ((snd_pcm_format_t) 40) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_S18_3BE ((snd_pcm_format_t) 41) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U18_3LE ((snd_pcm_format_t) 42) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_U18_3BE ((snd_pcm_format_t) 43) /* in three bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_G723_24 ((snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_G723_24_1B ((snd_pcm_format_t) 45) /* 1 sample in 1 byte */
|
|
||||||
+#define SNDRV_PCM_FORMAT_G723_40 ((snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
|
|
||||||
+#define SNDRV_PCM_FORMAT_G723_40_1B ((snd_pcm_format_t) 47) /* 1 sample in 1 byte */
|
|
||||||
+#define SNDRV_PCM_FORMAT_DSD_U8 ((snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
|
|
||||||
+#define SNDRV_PCM_FORMAT_DSD_U16_LE ((snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
|
|
||||||
+#define SNDRV_PCM_FORMAT_DSD_U32_LE ((snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
|
|
||||||
+#define SNDRV_PCM_FORMAT_DSD_U16_BE ((snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
|
|
||||||
+#define SNDRV_PCM_FORMAT_DSD_U32_BE ((snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
|
|
||||||
#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
|
|
||||||
#define SNDRV_PCM_FORMAT_FIRST SNDRV_PCM_FORMAT_S8
|
|
||||||
|
|
||||||
@@ -273,7 +273,7 @@ typedef int __bitwise snd_pcm_format_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef int __bitwise snd_pcm_subformat_t;
|
|
||||||
-#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0)
|
|
||||||
+#define SNDRV_PCM_SUBFORMAT_STD ((snd_pcm_subformat_t) 0)
|
|
||||||
#define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD
|
|
||||||
|
|
||||||
#define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */
|
|
||||||
@@ -301,24 +301,35 @@ typedef int __bitwise snd_pcm_subformat_t;
|
|
||||||
#define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */
|
|
||||||
#define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */
|
|
||||||
|
|
||||||
-
|
|
||||||
+#if (__BITS_PER_LONG == 32 && defined(__USE_TIME_BITS64)) || defined __KERNEL__
|
|
||||||
+#define __SND_STRUCT_TIME64
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
typedef int __bitwise snd_pcm_state_t;
|
|
||||||
-#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */
|
|
||||||
-#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */
|
|
||||||
-#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */
|
|
||||||
-#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */
|
|
||||||
-#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */
|
|
||||||
-#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */
|
|
||||||
-#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */
|
|
||||||
-#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */
|
|
||||||
-#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */
|
|
||||||
+#define SNDRV_PCM_STATE_OPEN ((snd_pcm_state_t) 0) /* stream is open */
|
|
||||||
+#define SNDRV_PCM_STATE_SETUP ((snd_pcm_state_t) 1) /* stream has a setup */
|
|
||||||
+#define SNDRV_PCM_STATE_PREPARED ((snd_pcm_state_t) 2) /* stream is ready to start */
|
|
||||||
+#define SNDRV_PCM_STATE_RUNNING ((snd_pcm_state_t) 3) /* stream is running */
|
|
||||||
+#define SNDRV_PCM_STATE_XRUN ((snd_pcm_state_t) 4) /* stream reached an xrun */
|
|
||||||
+#define SNDRV_PCM_STATE_DRAINING ((snd_pcm_state_t) 5) /* stream is draining */
|
|
||||||
+#define SNDRV_PCM_STATE_PAUSED ((snd_pcm_state_t) 6) /* stream is paused */
|
|
||||||
+#define SNDRV_PCM_STATE_SUSPENDED ((snd_pcm_state_t) 7) /* hardware is suspended */
|
|
||||||
+#define SNDRV_PCM_STATE_DISCONNECTED ((snd_pcm_state_t) 8) /* hardware is disconnected */
|
|
||||||
#define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED
|
|
||||||
|
|
||||||
enum {
|
|
||||||
SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
|
|
||||||
- SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
|
|
||||||
- SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_STATUS_OLD = 0x80000000,
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD = 0x81000000,
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_STATUS_NEW = 0x82000000,
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW = 0x83000000,
|
|
||||||
+#ifdef __SND_STRUCT_TIME64
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_STATUS = SNDRV_PCM_MMAP_OFFSET_STATUS_NEW,
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_CONTROL = SNDRV_PCM_MMAP_OFFSET_CONTROL_NEW,
|
|
||||||
+#else
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_STATUS = SNDRV_PCM_MMAP_OFFSET_STATUS_OLD,
|
|
||||||
+ SNDRV_PCM_MMAP_OFFSET_CONTROL = SNDRV_PCM_MMAP_OFFSET_CONTROL_OLD,
|
|
||||||
+#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
union snd_pcm_sync_id {
|
|
||||||
@@ -456,8 +467,12 @@ enum {
|
|
||||||
SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* explicit padding avoids incompatibility between i386 and x86-64 */
|
|
||||||
+typedef struct { unsigned char pad[sizeof(time_t) - sizeof(int)]; } __time_pad;
|
|
||||||
+
|
|
||||||
struct snd_pcm_status {
|
|
||||||
snd_pcm_state_t state; /* stream state */
|
|
||||||
+ __time_pad pad1; /* align to timespec */
|
|
||||||
struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */
|
|
||||||
struct timespec tstamp; /* reference timestamp */
|
|
||||||
snd_pcm_uframes_t appl_ptr; /* appl ptr */
|
|
||||||
@@ -474,16 +489,42 @@ struct snd_pcm_status {
|
|
||||||
unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */
|
|
||||||
};
|
|
||||||
|
|
||||||
-struct snd_pcm_mmap_status {
|
|
||||||
+/*
|
|
||||||
+ * For mmap operations, we need the 64-bit layout, both for compat mode,
|
|
||||||
+ * and for y2038 compatibility. For 64-bit applications, the two definitions
|
|
||||||
+ * are identical, so we keep the traditional version.
|
|
||||||
+ */
|
|
||||||
+#ifdef __SND_STRUCT_TIME64
|
|
||||||
+#define __snd_pcm_mmap_status64 snd_pcm_mmap_status
|
|
||||||
+#define __snd_pcm_mmap_control64 snd_pcm_mmap_control
|
|
||||||
+#define __snd_pcm_sync_ptr64 snd_pcm_sync_ptr
|
|
||||||
+#define __snd_timespec64 timespec
|
|
||||||
+struct __snd_timespec {
|
|
||||||
+ __s32 tv_sec;
|
|
||||||
+ __s32 tv_nsec;
|
|
||||||
+};
|
|
||||||
+#else
|
|
||||||
+#define __snd_pcm_mmap_status snd_pcm_mmap_status
|
|
||||||
+#define __snd_pcm_mmap_control snd_pcm_mmap_control
|
|
||||||
+#define __snd_pcm_sync_ptr snd_pcm_sync_ptr
|
|
||||||
+#define __snd_timespec timespec
|
|
||||||
+struct __snd_timespec64 {
|
|
||||||
+ __s64 tv_sec;
|
|
||||||
+ __s64 tv_nsec;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+struct __snd_pcm_mmap_status {
|
|
||||||
snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */
|
|
||||||
int pad1; /* Needed for 64 bit alignment */
|
|
||||||
snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */
|
|
||||||
- struct timespec tstamp; /* Timestamp */
|
|
||||||
+ struct __snd_timespec tstamp; /* Timestamp */
|
|
||||||
snd_pcm_state_t suspended_state; /* RO: suspended stream state */
|
|
||||||
- struct timespec audio_tstamp; /* from sample counter or wall clock */
|
|
||||||
+ struct __snd_timespec audio_tstamp; /* from sample counter or wall clock */
|
|
||||||
};
|
|
||||||
|
|
||||||
-struct snd_pcm_mmap_control {
|
|
||||||
+struct __snd_pcm_mmap_control {
|
|
||||||
snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */
|
|
||||||
snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */
|
|
||||||
};
|
|
||||||
@@ -492,27 +533,72 @@ struct snd_pcm_mmap_control {
|
|
||||||
#define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */
|
|
||||||
#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */
|
|
||||||
|
|
||||||
-struct snd_pcm_sync_ptr {
|
|
||||||
+struct __snd_pcm_sync_ptr {
|
|
||||||
unsigned int flags;
|
|
||||||
union {
|
|
||||||
- struct snd_pcm_mmap_status status;
|
|
||||||
+ struct __snd_pcm_mmap_status status;
|
|
||||||
unsigned char reserved[64];
|
|
||||||
} s;
|
|
||||||
union {
|
|
||||||
- struct snd_pcm_mmap_control control;
|
|
||||||
+ struct __snd_pcm_mmap_control control;
|
|
||||||
+ unsigned char reserved[64];
|
|
||||||
+ } c;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
|
|
||||||
+typedef char __pad_before_uframe[sizeof(__u64) - sizeof(snd_pcm_uframes_t)];
|
|
||||||
+typedef char __pad_after_uframe[0];
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
|
|
||||||
+typedef char __pad_before_uframe[0];
|
|
||||||
+typedef char __pad_after_uframe[sizeof(__u64) - sizeof(snd_pcm_uframes_t)];
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+struct __snd_pcm_mmap_status64 {
|
|
||||||
+ snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */
|
|
||||||
+ __u32 pad1; /* Needed for 64 bit alignment */
|
|
||||||
+ __pad_before_uframe __pad1;
|
|
||||||
+ snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */
|
|
||||||
+ __pad_after_uframe __pad2;
|
|
||||||
+ struct __snd_timespec64 tstamp; /* Timestamp */
|
|
||||||
+ snd_pcm_state_t suspended_state;/* RO: suspended stream state */
|
|
||||||
+ __u32 pad3; /* Needed for 64 bit alignment */
|
|
||||||
+ struct __snd_timespec64 audio_tstamp; /* sample counter or wall clock */
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct __snd_pcm_mmap_control64 {
|
|
||||||
+ __pad_before_uframe __pad1;
|
|
||||||
+ snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */
|
|
||||||
+ __pad_before_uframe __pad2;
|
|
||||||
+
|
|
||||||
+ __pad_before_uframe __pad3;
|
|
||||||
+ snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */
|
|
||||||
+ __pad_after_uframe __pad4;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct __snd_pcm_sync_ptr64 {
|
|
||||||
+ __u32 flags;
|
|
||||||
+ __u32 pad1;
|
|
||||||
+ union {
|
|
||||||
+ struct __snd_pcm_mmap_status64 status;
|
|
||||||
+ unsigned char reserved[64];
|
|
||||||
+ } s;
|
|
||||||
+ union {
|
|
||||||
+ struct __snd_pcm_mmap_control64 control;
|
|
||||||
unsigned char reserved[64];
|
|
||||||
} c;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct snd_xferi {
|
|
||||||
snd_pcm_sframes_t result;
|
|
||||||
- void __user *buf;
|
|
||||||
+ void *buf;
|
|
||||||
snd_pcm_uframes_t frames;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct snd_xfern {
|
|
||||||
snd_pcm_sframes_t result;
|
|
||||||
- void __user * __user *bufs;
|
|
||||||
+ void * *bufs;
|
|
||||||
snd_pcm_uframes_t frames;
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -584,6 +670,8 @@ enum {
|
|
||||||
#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status)
|
|
||||||
#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t)
|
|
||||||
#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22)
|
|
||||||
+#define __SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct __snd_pcm_sync_ptr)
|
|
||||||
+#define __SNDRV_PCM_IOCTL_SYNC_PTR64 _IOWR('A', 0x23, struct __snd_pcm_sync_ptr64)
|
|
||||||
#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
|
|
||||||
#define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status)
|
|
||||||
#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info)
|
|
||||||
@@ -614,7 +702,7 @@ enum {
|
|
||||||
* Raw MIDI section - /dev/snd/midi??
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0)
|
|
||||||
+#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 1)
|
|
||||||
|
|
||||||
enum {
|
|
||||||
SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
|
|
||||||
@@ -650,6 +738,7 @@ struct snd_rawmidi_params {
|
|
||||||
|
|
||||||
struct snd_rawmidi_status {
|
|
||||||
int stream;
|
|
||||||
+ __time_pad pad1;
|
|
||||||
struct timespec tstamp; /* Timestamp */
|
|
||||||
size_t avail; /* available bytes */
|
|
||||||
size_t xruns; /* count of overruns since last status (in bytes) */
|
|
||||||
@@ -667,7 +756,7 @@ struct snd_rawmidi_status {
|
|
||||||
* Timer section - /dev/snd/timer
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6)
|
|
||||||
+#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)
|
|
||||||
|
|
||||||
enum {
|
|
||||||
SNDRV_TIMER_CLASS_NONE = -1,
|
|
||||||
@@ -772,7 +861,7 @@ struct snd_timer_status {
|
|
||||||
|
|
||||||
#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int)
|
|
||||||
#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id)
|
|
||||||
-#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int)
|
|
||||||
+#define SNDRV_TIMER_IOCTL_TREAD_OLD _IOW('T', 0x02, int)
|
|
||||||
#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo)
|
|
||||||
#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams)
|
|
||||||
#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus)
|
|
||||||
@@ -785,6 +874,15 @@ struct snd_timer_status {
|
|
||||||
#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1)
|
|
||||||
#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2)
|
|
||||||
#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3)
|
|
||||||
+#define SNDRV_TIMER_IOCTL_TREAD64 _IOW('T', 0xa4, int)
|
|
||||||
+
|
|
||||||
+#if __BITS_PER_LONG == 64
|
|
||||||
+#define SNDRV_TIMER_IOCTL_TREAD SNDRV_TIMER_IOCTL_TREAD_OLD
|
|
||||||
+#else
|
|
||||||
+#define SNDRV_TIMER_IOCTL_TREAD ((sizeof(__kernel_long_t) >= sizeof(time_t)) ? \
|
|
||||||
+ SNDRV_TIMER_IOCTL_TREAD_OLD : \
|
|
||||||
+ SNDRV_TIMER_IOCTL_TREAD64)
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
struct snd_timer_read {
|
|
||||||
unsigned int resolution;
|
|
||||||
@@ -812,8 +910,10 @@ enum {
|
|
||||||
|
|
||||||
struct snd_timer_tread {
|
|
||||||
int event;
|
|
||||||
+ __time_pad pad1;
|
|
||||||
struct timespec tstamp;
|
|
||||||
unsigned int val;
|
|
||||||
+ __time_pad pad2;
|
|
||||||
};
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
@@ -822,7 +922,7 @@ struct snd_timer_tread {
|
|
||||||
* *
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
-#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)
|
|
||||||
+#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 8)
|
|
||||||
|
|
||||||
struct snd_ctl_card_info {
|
|
||||||
int card; /* card number */
|
|
||||||
@@ -837,30 +937,30 @@ struct snd_ctl_card_info {
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef int __bitwise snd_ctl_elem_type_t;
|
|
||||||
-#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */
|
|
||||||
-#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */
|
|
||||||
-#define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2) /* integer type */
|
|
||||||
-#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3) /* enumerated type */
|
|
||||||
-#define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4) /* byte array */
|
|
||||||
-#define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */
|
|
||||||
-#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */
|
|
||||||
+#define SNDRV_CTL_ELEM_TYPE_NONE ((snd_ctl_elem_type_t) 0) /* invalid */
|
|
||||||
+#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((snd_ctl_elem_type_t) 1) /* boolean type */
|
|
||||||
+#define SNDRV_CTL_ELEM_TYPE_INTEGER ((snd_ctl_elem_type_t) 2) /* integer type */
|
|
||||||
+#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((snd_ctl_elem_type_t) 3) /* enumerated type */
|
|
||||||
+#define SNDRV_CTL_ELEM_TYPE_BYTES ((snd_ctl_elem_type_t) 4) /* byte array */
|
|
||||||
+#define SNDRV_CTL_ELEM_TYPE_IEC958 ((snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */
|
|
||||||
+#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((snd_ctl_elem_type_t) 6) /* 64-bit integer type */
|
|
||||||
#define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64
|
|
||||||
|
|
||||||
typedef int __bitwise snd_ctl_elem_iface_t;
|
|
||||||
-#define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0) /* global control */
|
|
||||||
-#define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */
|
|
||||||
-#define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */
|
|
||||||
-#define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3) /* PCM device */
|
|
||||||
-#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */
|
|
||||||
-#define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5) /* timer device */
|
|
||||||
-#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6) /* sequencer client */
|
|
||||||
+#define SNDRV_CTL_ELEM_IFACE_CARD ((snd_ctl_elem_iface_t) 0) /* global control */
|
|
||||||
+#define SNDRV_CTL_ELEM_IFACE_HWDEP ((snd_ctl_elem_iface_t) 1) /* hardware dependent device */
|
|
||||||
+#define SNDRV_CTL_ELEM_IFACE_MIXER ((snd_ctl_elem_iface_t) 2) /* virtual mixer device */
|
|
||||||
+#define SNDRV_CTL_ELEM_IFACE_PCM ((snd_ctl_elem_iface_t) 3) /* PCM device */
|
|
||||||
+#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((snd_ctl_elem_iface_t) 4) /* RawMidi device */
|
|
||||||
+#define SNDRV_CTL_ELEM_IFACE_TIMER ((snd_ctl_elem_iface_t) 5) /* timer device */
|
|
||||||
+#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((snd_ctl_elem_iface_t) 6) /* sequencer client */
|
|
||||||
#define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER
|
|
||||||
|
|
||||||
#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0)
|
|
||||||
#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1)
|
|
||||||
#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
|
|
||||||
#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */
|
|
||||||
-#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3) /* when was control changed */
|
|
||||||
+// (1 << 3) is unused.
|
|
||||||
#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */
|
|
||||||
#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */
|
|
||||||
#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
|
|
||||||
@@ -896,7 +996,7 @@ struct snd_ctl_elem_list {
|
|
||||||
unsigned int space; /* W: count of element IDs to get */
|
|
||||||
unsigned int used; /* R: count of element IDs set */
|
|
||||||
unsigned int count; /* R: count of all elements */
|
|
||||||
- struct snd_ctl_elem_id __user *pids; /* R: IDs */
|
|
||||||
+ struct snd_ctl_elem_id *pids; /* R: IDs */
|
|
||||||
unsigned char reserved[50];
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -926,11 +1026,7 @@ struct snd_ctl_elem_info {
|
|
||||||
} enumerated;
|
|
||||||
unsigned char reserved[128];
|
|
||||||
} value;
|
|
||||||
- union {
|
|
||||||
- unsigned short d[4]; /* dimensions */
|
|
||||||
- unsigned short *d_ptr; /* indirect - obsoleted */
|
|
||||||
- } dimen;
|
|
||||||
- unsigned char reserved[64-4*sizeof(unsigned short)];
|
|
||||||
+ unsigned char reserved[64];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct snd_ctl_elem_value {
|
|
||||||
@@ -955,8 +1051,7 @@ struct snd_ctl_elem_value {
|
|
||||||
} bytes;
|
|
||||||
struct snd_aes_iec958 iec958;
|
|
||||||
} value; /* RO */
|
|
||||||
- struct timespec tstamp;
|
|
||||||
- unsigned char reserved[128-sizeof(struct timespec)];
|
|
||||||
+ unsigned char reserved[128];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct snd_ctl_tlv {
|
|
||||||
@@ -1035,4 +1130,4 @@ struct snd_ctl_event {
|
|
||||||
#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream"
|
|
||||||
#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
|
|
||||||
|
|
||||||
-#endif /* _UAPI__SOUND_ASOUND_H */
|
|
||||||
+#endif /* __SOUND_ASOUND_H */
|
|
||||||
diff --git a/include/sound/uapi/emu10k1.h b/include/sound/uapi/emu10k1.h
|
|
||||||
index 6bcd76f64c1c..78d794c03cd4 100644
|
|
||||||
--- a/include/sound/uapi/emu10k1.h
|
|
||||||
+++ b/include/sound/uapi/emu10k1.h
|
|
||||||
@@ -20,8 +20,12 @@
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
-#ifndef _UAPI__SOUND_EMU10K1_H
|
|
||||||
-#define _UAPI__SOUND_EMU10K1_H
|
|
||||||
+#ifndef __SOUND_EMU10K1_H
|
|
||||||
+#define __SOUND_EMU10K1_H
|
|
||||||
+
|
|
||||||
+#ifdef __linux__
|
|
||||||
+#include <linux/types.h>
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ---- FX8010 ----
|
|
||||||
@@ -256,13 +260,11 @@
|
|
||||||
#define EMU10K1_DBG_SINGLE_STEP_ADDR 0x000001ff /* single step address */
|
|
||||||
|
|
||||||
/* tank memory address line */
|
|
||||||
-#ifndef __KERNEL__
|
|
||||||
#define TANKMEMADDRREG_ADDR_MASK 0x000fffff /* 20 bit tank address field */
|
|
||||||
#define TANKMEMADDRREG_CLEAR 0x00800000 /* Clear tank memory */
|
|
||||||
#define TANKMEMADDRREG_ALIGN 0x00400000 /* Align read or write relative to tank access */
|
|
||||||
#define TANKMEMADDRREG_WRITE 0x00200000 /* Write to tank memory */
|
|
||||||
#define TANKMEMADDRREG_READ 0x00100000 /* Read from tank memory */
|
|
||||||
-#endif
|
|
||||||
|
|
||||||
struct snd_emu10k1_fx8010_info {
|
|
||||||
unsigned int internal_tram_size; /* in samples */
|
|
||||||
@@ -382,4 +384,4 @@ struct snd_emu10k1_fx8010_pcm_rec {
|
|
||||||
#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
|
|
||||||
#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int)
|
|
||||||
|
|
||||||
-#endif /* _UAPI__SOUND_EMU10K1_H */
|
|
||||||
+#endif /* __SOUND_EMU10K1_H */
|
|
||||||
diff --git a/include/sound/uapi/hdsp.h b/include/sound/uapi/hdsp.h
|
|
||||||
index 7ac2d3f2a9b3..b8df62b60f4d 100644
|
|
||||||
--- a/include/sound/uapi/hdsp.h
|
|
||||||
+++ b/include/sound/uapi/hdsp.h
|
|
||||||
@@ -20,6 +20,10 @@
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#ifdef __linux__
|
|
||||||
+#include <linux/types.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#define HDSP_MATRIX_MIXER_SIZE 2048
|
|
||||||
|
|
||||||
enum HDSP_IO_Type {
|
|
||||||
diff --git a/include/sound/uapi/hdspm.h b/include/sound/uapi/hdspm.h
|
|
||||||
index 3fbfd9dc5f51..14af3d00ea3f 100644
|
|
||||||
--- a/include/sound/uapi/hdspm.h
|
|
||||||
+++ b/include/sound/uapi/hdspm.h
|
|
||||||
@@ -21,6 +21,10 @@
|
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
+#ifdef __linux__
|
|
||||||
+#include <linux/types.h>
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
|
|
||||||
#define HDSPM_MAX_CHANNELS 64
|
|
||||||
|
|
||||||
diff --git a/include/sound/uapi/sb16_csp.h b/include/sound/uapi/sb16_csp.h
|
|
||||||
index e64851481d88..55db0b44a8b7 100644
|
|
||||||
--- a/include/sound/uapi/sb16_csp.h
|
|
||||||
+++ b/include/sound/uapi/sb16_csp.h
|
|
||||||
@@ -20,8 +20,8 @@
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
-#ifndef _UAPI__SOUND_SB16_CSP_H
|
|
||||||
-#define _UAPI__SOUND_SB16_CSP_H
|
|
||||||
+#ifndef __SOUND_SB16_CSP_H
|
|
||||||
+#define __SOUND_SB16_CSP_H
|
|
||||||
|
|
||||||
|
|
||||||
/* CSP modes */
|
|
||||||
@@ -120,4 +120,4 @@ struct snd_sb_csp_info {
|
|
||||||
#define SNDRV_SB_CSP_IOCTL_RESTART _IO('H', 0x16)
|
|
||||||
|
|
||||||
|
|
||||||
-#endif /* _UAPI__SOUND_SB16_CSP_H */
|
|
||||||
+#endif /* __SOUND_SB16_CSP_H */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,25 +0,0 @@
|
|||||||
From 5bc3d4c4c14c6a54f61465987fe7e1a097288e4b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
Date: Mon, 10 Feb 2020 13:18:23 +0100
|
|
||||||
Subject: [PATCH 73/74] ucm: parser - add error message to verb_dev_list_add()
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
src/ucm/parser.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
|
|
||||||
index 23bf6a63f31e..8d6eea31f8e7 100644
|
|
||||||
--- a/src/ucm/parser.c
|
|
||||||
+++ b/src/ucm/parser.c
|
|
||||||
@@ -1135,6 +1135,7 @@ static int verb_dev_list_add(struct use_case_verb *verb,
|
|
||||||
}
|
|
||||||
return uc_mgr_put_to_dev_list(&device->dev_list, src);
|
|
||||||
}
|
|
||||||
+ uc_error("error: unable to find device '%s'", dst);
|
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From b367274b4dcdd1e83e6e7211dd2c08df05c8a998 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Rolf Eike Beer <eb@emlix.com>
|
|
||||||
Date: Tue, 11 Feb 2020 11:22:18 +0100
|
|
||||||
Subject: [PATCH 74/74] do not set close-on-exec flag on descriptor if it was
|
|
||||||
already set
|
|
||||||
|
|
||||||
There is no need to set this again if O_CLOEXEC is supported.
|
|
||||||
|
|
||||||
Signed-off-by: Rolf Eike Beer <eb@emlix.com>
|
|
||||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
||||||
---
|
|
||||||
include/local.h | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/include/local.h b/include/local.h
|
|
||||||
index ea0ec32d96b3..ed6ba93664dd 100644
|
|
||||||
--- a/include/local.h
|
|
||||||
+++ b/include/local.h
|
|
||||||
@@ -320,8 +320,10 @@ static inline int snd_open_device(const char *filename, int fmode)
|
|
||||||
fd = rsm_open_device(filename, fmode);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
+#ifndef O_CLOEXEC
|
|
||||||
if (fd >= 0)
|
|
||||||
fcntl(fd, F_SETFD, FD_CLOEXEC);
|
|
||||||
+#endif
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:958e260e3673f1f6ff6b2d2c0df3fc2e469bea5b2957163ce96ce17f23e87943
|
|
||||||
size 1004129
|
|
3
alsa-lib-1.2.2.tar.bz2
Normal file
3
alsa-lib-1.2.2.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d8e853d8805574777bbe40937812ad1419c9ea7210e176f0def3e6ed255ab3ec
|
||||||
|
size 1030747
|
88
alsa.changes
88
alsa.changes
@ -1,3 +1,91 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 13 14:37:03 CET 2020 - tiwai@suse.de
|
||||||
|
|
||||||
|
- Update to alsa-lib 1.2.2:
|
||||||
|
including previous fixes
|
||||||
|
- Backport recent upstream fixes:
|
||||||
|
conf updates, PCM ordering fix, configure fix;
|
||||||
|
0001-conf-change-the-order-of-PCM-devices-in-alsa.conf.patch
|
||||||
|
0002-conf-namehint-add-omit_noargs-to-the-hint-section.patch
|
||||||
|
0003-Change-PCM-device-number-of-Asus-Xonar-U5.patch
|
||||||
|
0004-configure-add-embed-for-python3-config-python-3.8.patch
|
||||||
|
0005-conf-USB-Audio-Add-C-Media-USB-Headphone-Set-to-the-.patch
|
||||||
|
- Drop obsoleted patches:
|
||||||
|
0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch
|
||||||
|
0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch
|
||||||
|
0003-ucm-add-_identifiers-list.patch
|
||||||
|
0004-namehint-correct-the-args-check.patch
|
||||||
|
0005-namehint-improve-the-previous-patch-check-the-return.patch
|
||||||
|
0006-ucm-docs-allow-spaces-in-device-names-for-JackHWMute.patch
|
||||||
|
0007-use-case-docs-add-PlaybackMixerCopy-and-CaptureMixer.patch
|
||||||
|
0008-ucm-docs-add-JackCTL-rearrange-JackControl-and-JackD.patch
|
||||||
|
0009-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch
|
||||||
|
0010-src-ucm-main.c-fix-build-without-mixer.patch
|
||||||
|
0011-alsa.m4-another-try-to-fix-the-libatopology-detectio.patch
|
||||||
|
0012-ucm-docs-add-Mic-DigitalMic-and-multiple-devices-com.patch
|
||||||
|
0013-ucm-docs-remove-DigitalMic-it-does-not-have-sense.patch
|
||||||
|
0014-ucm-docs-change-the-Mic-description-to-simple-Microp.patch
|
||||||
|
0015-ucm-docs-add-note-about-the-sequences-and-device-spl.patch
|
||||||
|
0016-ucm-docs-remove-MixerCopy-values-add-Priority-for-ve.patch
|
||||||
|
0017-ucm-setup-conf_format-after-getting-ALSA_CONFIG_UCM_.patch
|
||||||
|
0018-alsa-lib-fix-the-array-parser-unique-compound-keys.patch
|
||||||
|
0019-topology-remove-vendor_fd-name-from-snd_tplg-structu.patch
|
||||||
|
0020-topology-file-position-and-size-cleanups.patch
|
||||||
|
0021-topology-use-an-array-describing-blocks-for-the-main.patch
|
||||||
|
0022-topology-use-size_t-for-calc_block_size.patch
|
||||||
|
0023-topology-merge-write_block-to-tplg_write_data.patch
|
||||||
|
0024-topology-make-vebose-output-more-nice.patch
|
||||||
|
0025-topology-use-list_insert-macro-in-tplg_elem_insert.patch
|
||||||
|
0026-topology-dapm-coding-fixes.patch
|
||||||
|
0027-topology-dapm-merge-identical-index-blocks-like-for-.patch
|
||||||
|
0028-topology-more-coding-fixes.patch
|
||||||
|
0029-Fix-alsa-sound-.h-for-external-programs.patch
|
||||||
|
0030-type_compat-Add-missing-__s64-and-__u64-definitions-.patch
|
||||||
|
0031-uapi-Move-typedefs-from-uapi-to-sound.patch
|
||||||
|
0032-Update-the-attributes.m4-macro-file-from-xine.patch
|
||||||
|
0033-topology-avoid-to-use-the-atoi-directly-when-expecte.patch
|
||||||
|
0034-topology-use-snd_config_get_bool-instead-own-impleme.patch
|
||||||
|
0035-topology-fix-tplg_get_integer-handle-errno-ERANGE.patch
|
||||||
|
0036-topology-add-tplg_get_unsigned-function.patch
|
||||||
|
0037-topology-convert-builder-to-use-the-mallocated-memor.patch
|
||||||
|
0038-topology-add-binary-output-from-the-builder.patch
|
||||||
|
0039-topology-parser-recode-tplg_parse_config.patch
|
||||||
|
0040-topology-add-snd_tplg_load-remove-snd_tplg_build_bin.patch
|
||||||
|
0041-topology-move-the-topology-element-table-from-builde.patch
|
||||||
|
0042-topology-add-parser-to-the-tplg_table.patch
|
||||||
|
0043-topology-add-snd_tplg_save.patch
|
||||||
|
0044-topology-add-snd_tplg_create-with-flags.patch
|
||||||
|
0045-topology-add-snd_tplg_version-function.patch
|
||||||
|
0046-topology-cleanup-the-SNDERR-calls.patch
|
||||||
|
0047-topology-dapm-fix-the-SNDERR-Undefined.patch
|
||||||
|
0048-topology-fix-the-unitialized-tuples.patch
|
||||||
|
0049-topology-implement-shorter-hexa-uuid-00-00-parser.patch
|
||||||
|
0050-topology-fix-the-TPLG_DEBUG-compilation.patch
|
||||||
|
0051-topology-fix-the-ops-parser-accept-integer-hexa-valu.patch
|
||||||
|
0052-topology-fix-the-wrong-memory-access-object-realloc.patch
|
||||||
|
0053-topology-implement-snd_tplg_decode.patch
|
||||||
|
0054-topology-move-the-elem-list-delete-to-tplg_elem_free.patch
|
||||||
|
0055-topology-unify-the-log-mechanism.patch
|
||||||
|
0056-topology-tplg_dbg-cleanups.patch
|
||||||
|
0057-topology-cosmetic-changes-functions.patch
|
||||||
|
0058-mixer-Fix-memory-leak-for-more-than-16-file-descript.patch
|
||||||
|
0059-Quote-strings-containing-or-when-saving-an-alsa-conf.patch
|
||||||
|
0060-ucm-fix-the-configuration-directory-longname-for-ucm.patch
|
||||||
|
0061-ucm-split-conf_file_name-and-conf_dir_name.patch
|
||||||
|
0062-ucm-remove-MAX_FILE-definition-and-use-correct-PATH_.patch
|
||||||
|
0063-topology-remove-MAX_FILE-definition-and-use-correct-.patch
|
||||||
|
0064-ucm-parser-cosmetic-fixes-in-the-comments.patch
|
||||||
|
0065-configure.ac-remove-an-unnecessary-libtool-fix.patch
|
||||||
|
0066-ucm-parser-use-correct-filename-in-parser_master_fil.patch
|
||||||
|
0067-ucm-the-ucm2-subdirectory-is-driver-name-based.patch
|
||||||
|
0068-ucm-implement-RenameDevice-and-RemoveDevice-verb-man.patch
|
||||||
|
0069-ucm-fill-missing-device-entries-conflicting-supporte.patch
|
||||||
|
0070-control-Remove-access-to-the-deprecated-dimen-fields.patch
|
||||||
|
0071-topology-Drop-SNDRV_CTL_ELEM_ACCESS_TIMESTAMP-access.patch
|
||||||
|
0072-uapi-Sync-with-5.6-kernel-ABI.patch
|
||||||
|
0073-ucm-parser-add-error-message-to-verb_dev_list_add.patch
|
||||||
|
0074-do-not-set-close-on-exec-flag-on-descriptor-if-it-wa.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Feb 12 20:36:56 CET 2020 - tiwai@suse.de
|
Wed Feb 12 20:36:56 CET 2020 - tiwai@suse.de
|
||||||
|
|
||||||
|
150
alsa.spec
150
alsa.spec
@ -26,7 +26,7 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
Name: alsa
|
Name: alsa
|
||||||
Version: 1.2.1.2
|
Version: 1.2.2
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Advanced Linux Sound Architecture
|
Summary: Advanced Linux Sound Architecture
|
||||||
License: LGPL-2.1-or-later
|
License: LGPL-2.1-or-later
|
||||||
@ -48,80 +48,11 @@ Source31: all_notes_off.bin
|
|||||||
Source32: all_notes_off.mid
|
Source32: all_notes_off.mid
|
||||||
Source34: alsa-init.sh
|
Source34: alsa-init.sh
|
||||||
# upstream fixes
|
# upstream fixes
|
||||||
Patch1: 0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch
|
Patch1: 0001-conf-change-the-order-of-PCM-devices-in-alsa.conf.patch
|
||||||
Patch2: 0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch
|
Patch2: 0002-conf-namehint-add-omit_noargs-to-the-hint-section.patch
|
||||||
Patch3: 0003-ucm-add-_identifiers-list.patch
|
Patch3: 0003-Change-PCM-device-number-of-Asus-Xonar-U5.patch
|
||||||
Patch4: 0004-namehint-correct-the-args-check.patch
|
Patch4: 0004-configure-add-embed-for-python3-config-python-3.8.patch
|
||||||
Patch5: 0005-namehint-improve-the-previous-patch-check-the-return.patch
|
Patch5: 0005-conf-USB-Audio-Add-C-Media-USB-Headphone-Set-to-the-.patch
|
||||||
Patch6: 0006-ucm-docs-allow-spaces-in-device-names-for-JackHWMute.patch
|
|
||||||
Patch7: 0007-use-case-docs-add-PlaybackMixerCopy-and-CaptureMixer.patch
|
|
||||||
Patch8: 0008-ucm-docs-add-JackCTL-rearrange-JackControl-and-JackD.patch
|
|
||||||
Patch9: 0009-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch
|
|
||||||
Patch10: 0010-src-ucm-main.c-fix-build-without-mixer.patch
|
|
||||||
Patch11: 0011-alsa.m4-another-try-to-fix-the-libatopology-detectio.patch
|
|
||||||
Patch12: 0012-ucm-docs-add-Mic-DigitalMic-and-multiple-devices-com.patch
|
|
||||||
Patch13: 0013-ucm-docs-remove-DigitalMic-it-does-not-have-sense.patch
|
|
||||||
Patch14: 0014-ucm-docs-change-the-Mic-description-to-simple-Microp.patch
|
|
||||||
Patch15: 0015-ucm-docs-add-note-about-the-sequences-and-device-spl.patch
|
|
||||||
Patch16: 0016-ucm-docs-remove-MixerCopy-values-add-Priority-for-ve.patch
|
|
||||||
Patch17: 0017-ucm-setup-conf_format-after-getting-ALSA_CONFIG_UCM_.patch
|
|
||||||
Patch18: 0018-alsa-lib-fix-the-array-parser-unique-compound-keys.patch
|
|
||||||
Patch19: 0019-topology-remove-vendor_fd-name-from-snd_tplg-structu.patch
|
|
||||||
Patch20: 0020-topology-file-position-and-size-cleanups.patch
|
|
||||||
Patch21: 0021-topology-use-an-array-describing-blocks-for-the-main.patch
|
|
||||||
Patch22: 0022-topology-use-size_t-for-calc_block_size.patch
|
|
||||||
Patch23: 0023-topology-merge-write_block-to-tplg_write_data.patch
|
|
||||||
Patch24: 0024-topology-make-vebose-output-more-nice.patch
|
|
||||||
Patch25: 0025-topology-use-list_insert-macro-in-tplg_elem_insert.patch
|
|
||||||
Patch26: 0026-topology-dapm-coding-fixes.patch
|
|
||||||
Patch27: 0027-topology-dapm-merge-identical-index-blocks-like-for-.patch
|
|
||||||
Patch28: 0028-topology-more-coding-fixes.patch
|
|
||||||
Patch29: 0029-Fix-alsa-sound-.h-for-external-programs.patch
|
|
||||||
Patch30: 0030-type_compat-Add-missing-__s64-and-__u64-definitions-.patch
|
|
||||||
Patch31: 0031-uapi-Move-typedefs-from-uapi-to-sound.patch
|
|
||||||
Patch32: 0032-Update-the-attributes.m4-macro-file-from-xine.patch
|
|
||||||
Patch33: 0033-topology-avoid-to-use-the-atoi-directly-when-expecte.patch
|
|
||||||
Patch34: 0034-topology-use-snd_config_get_bool-instead-own-impleme.patch
|
|
||||||
Patch35: 0035-topology-fix-tplg_get_integer-handle-errno-ERANGE.patch
|
|
||||||
Patch36: 0036-topology-add-tplg_get_unsigned-function.patch
|
|
||||||
Patch37: 0037-topology-convert-builder-to-use-the-mallocated-memor.patch
|
|
||||||
Patch38: 0038-topology-add-binary-output-from-the-builder.patch
|
|
||||||
Patch39: 0039-topology-parser-recode-tplg_parse_config.patch
|
|
||||||
Patch40: 0040-topology-add-snd_tplg_load-remove-snd_tplg_build_bin.patch
|
|
||||||
Patch41: 0041-topology-move-the-topology-element-table-from-builde.patch
|
|
||||||
Patch42: 0042-topology-add-parser-to-the-tplg_table.patch
|
|
||||||
Patch43: 0043-topology-add-snd_tplg_save.patch
|
|
||||||
Patch44: 0044-topology-add-snd_tplg_create-with-flags.patch
|
|
||||||
Patch45: 0045-topology-add-snd_tplg_version-function.patch
|
|
||||||
Patch46: 0046-topology-cleanup-the-SNDERR-calls.patch
|
|
||||||
Patch47: 0047-topology-dapm-fix-the-SNDERR-Undefined.patch
|
|
||||||
Patch48: 0048-topology-fix-the-unitialized-tuples.patch
|
|
||||||
Patch49: 0049-topology-implement-shorter-hexa-uuid-00-00-parser.patch
|
|
||||||
Patch50: 0050-topology-fix-the-TPLG_DEBUG-compilation.patch
|
|
||||||
Patch51: 0051-topology-fix-the-ops-parser-accept-integer-hexa-valu.patch
|
|
||||||
Patch52: 0052-topology-fix-the-wrong-memory-access-object-realloc.patch
|
|
||||||
Patch53: 0053-topology-implement-snd_tplg_decode.patch
|
|
||||||
Patch54: 0054-topology-move-the-elem-list-delete-to-tplg_elem_free.patch
|
|
||||||
Patch55: 0055-topology-unify-the-log-mechanism.patch
|
|
||||||
Patch56: 0056-topology-tplg_dbg-cleanups.patch
|
|
||||||
Patch57: 0057-topology-cosmetic-changes-functions.patch
|
|
||||||
Patch58: 0058-mixer-Fix-memory-leak-for-more-than-16-file-descript.patch
|
|
||||||
Patch59: 0059-Quote-strings-containing-or-when-saving-an-alsa-conf.patch
|
|
||||||
Patch60: 0060-ucm-fix-the-configuration-directory-longname-for-ucm.patch
|
|
||||||
Patch61: 0061-ucm-split-conf_file_name-and-conf_dir_name.patch
|
|
||||||
Patch62: 0062-ucm-remove-MAX_FILE-definition-and-use-correct-PATH_.patch
|
|
||||||
Patch63: 0063-topology-remove-MAX_FILE-definition-and-use-correct-.patch
|
|
||||||
Patch64: 0064-ucm-parser-cosmetic-fixes-in-the-comments.patch
|
|
||||||
Patch65: 0065-configure.ac-remove-an-unnecessary-libtool-fix.patch
|
|
||||||
Patch66: 0066-ucm-parser-use-correct-filename-in-parser_master_fil.patch
|
|
||||||
Patch67: 0067-ucm-the-ucm2-subdirectory-is-driver-name-based.patch
|
|
||||||
Patch68: 0068-ucm-implement-RenameDevice-and-RemoveDevice-verb-man.patch
|
|
||||||
Patch69: 0069-ucm-fill-missing-device-entries-conflicting-supporte.patch
|
|
||||||
Patch70: 0070-control-Remove-access-to-the-deprecated-dimen-fields.patch
|
|
||||||
Patch71: 0071-topology-Drop-SNDRV_CTL_ELEM_ACCESS_TIMESTAMP-access.patch
|
|
||||||
Patch72: 0072-uapi-Sync-with-5.6-kernel-ABI.patch
|
|
||||||
Patch73: 0073-ucm-parser-add-error-message-to-verb_dev_list_add.patch
|
|
||||||
Patch74: 0074-do-not-set-close-on-exec-flag-on-descriptor-if-it-wa.patch
|
|
||||||
# rest suse fixes
|
# rest suse fixes
|
||||||
Patch101: alsa-lib-ignore-non-accessible-ALSA_CONFIG_PATH.patch
|
Patch101: alsa-lib-ignore-non-accessible-ALSA_CONFIG_PATH.patch
|
||||||
BuildRequires: doxygen
|
BuildRequires: doxygen
|
||||||
@ -211,75 +142,6 @@ This package contains the library for ALSA topology support.
|
|||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
%patch5 -p1
|
%patch5 -p1
|
||||||
%patch6 -p1
|
|
||||||
%patch7 -p1
|
|
||||||
%patch8 -p1
|
|
||||||
%patch9 -p1
|
|
||||||
%patch10 -p1
|
|
||||||
%patch11 -p1
|
|
||||||
%patch12 -p1
|
|
||||||
%patch13 -p1
|
|
||||||
%patch14 -p1
|
|
||||||
%patch15 -p1
|
|
||||||
%patch16 -p1
|
|
||||||
%patch17 -p1
|
|
||||||
%patch18 -p1
|
|
||||||
%patch19 -p1
|
|
||||||
%patch20 -p1
|
|
||||||
%patch21 -p1
|
|
||||||
%patch22 -p1
|
|
||||||
%patch23 -p1
|
|
||||||
%patch24 -p1
|
|
||||||
%patch25 -p1
|
|
||||||
%patch26 -p1
|
|
||||||
%patch27 -p1
|
|
||||||
%patch28 -p1
|
|
||||||
%patch29 -p1
|
|
||||||
%patch30 -p1
|
|
||||||
%patch31 -p1
|
|
||||||
%patch32 -p1
|
|
||||||
%patch33 -p1
|
|
||||||
%patch34 -p1
|
|
||||||
%patch35 -p1
|
|
||||||
%patch36 -p1
|
|
||||||
%patch37 -p1
|
|
||||||
%patch38 -p1
|
|
||||||
%patch39 -p1
|
|
||||||
%patch40 -p1
|
|
||||||
%patch41 -p1
|
|
||||||
%patch42 -p1
|
|
||||||
%patch43 -p1
|
|
||||||
%patch44 -p1
|
|
||||||
%patch45 -p1
|
|
||||||
%patch46 -p1
|
|
||||||
%patch47 -p1
|
|
||||||
%patch48 -p1
|
|
||||||
%patch49 -p1
|
|
||||||
%patch50 -p1
|
|
||||||
%patch51 -p1
|
|
||||||
%patch52 -p1
|
|
||||||
%patch53 -p1
|
|
||||||
%patch54 -p1
|
|
||||||
%patch55 -p1
|
|
||||||
%patch56 -p1
|
|
||||||
%patch57 -p1
|
|
||||||
%patch58 -p1
|
|
||||||
%patch59 -p1
|
|
||||||
%patch60 -p1
|
|
||||||
%patch61 -p1
|
|
||||||
%patch62 -p1
|
|
||||||
%patch63 -p1
|
|
||||||
%patch64 -p1
|
|
||||||
%patch65 -p1
|
|
||||||
%patch66 -p1
|
|
||||||
%patch67 -p1
|
|
||||||
%patch68 -p1
|
|
||||||
%patch69 -p1
|
|
||||||
%patch70 -p1
|
|
||||||
%patch71 -p1
|
|
||||||
%patch72 -p1
|
|
||||||
%patch73 -p1
|
|
||||||
%patch74 -p1
|
|
||||||
%patch101 -p1
|
%patch101 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
Loading…
x
Reference in New Issue
Block a user