summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2019-11-26 17:35:15 +0100
committerJaroslav Kysela <perex@perex.cz>2019-11-26 17:35:18 +0100
commit4c89f4eb905a075971537a11798dea37cf723bdf (patch)
tree76e2d8fc719339ae0997d87655f2d936462019b4
parentcf630e4e5478af674fa94d90b6f1971f25babe44 (diff)
downloadalsa-lib-4c89f4eb905a075971537a11798dea37cf723bdf.tar.gz
ucm: fix the cdev initialization sequence
The default values must be set before the defaults UCM sequence is executed. Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--src/ucm/main.c85
1 files changed, 42 insertions, 43 deletions
diff --git a/src/ucm/main.c b/src/ucm/main.c
index 078f1fbe..b0b6ffb3 100644
--- a/src/ucm/main.c
+++ b/src/ucm/main.c
@@ -489,6 +489,45 @@ static int execute_component_seq(snd_use_case_mgr_t *uc_mgr,
return err;
}
+static int add_auto_value(snd_use_case_mgr_t *uc_mgr, const char *key, char *value)
+{
+ char *s;
+ int err;
+
+ err = get_value1(uc_mgr, &value, &uc_mgr->value_list, key);
+ if (err == -ENOENT) {
+ s = strdup(value);
+ if (s == NULL)
+ return -ENOMEM;
+ return uc_mgr_add_value(&uc_mgr->value_list, key, s);
+ } else if (err < 0) {
+ return err;
+ }
+ free(value);
+ return 0;
+}
+
+static int add_auto_values(snd_use_case_mgr_t *uc_mgr)
+{
+ struct ctl_list *ctl_list;
+ const char *id;
+ char buf[40];
+ int err;
+
+ ctl_list = uc_mgr_get_one_ctl(uc_mgr);
+ if (ctl_list) {
+ id = snd_ctl_card_info_get_id(ctl_list->ctl_info);
+ snprintf(buf, sizeof(buf), "hw:%s", id);
+ err = add_auto_value(uc_mgr, "PlaybackCTL", buf);
+ if (err < 0)
+ return err;
+ err = add_auto_value(uc_mgr, "CaptureCTL", buf);
+ if (err < 0)
+ return err;
+ }
+ return 0;
+}
+
/**
* \brief Import master config and execute the default sequence
* \param uc_mgr Use case manager
@@ -501,6 +540,9 @@ static int import_master_config(snd_use_case_mgr_t *uc_mgr)
err = uc_mgr_import_master_config(uc_mgr);
if (err < 0)
return err;
+ err = add_auto_values(uc_mgr);
+ if (err < 0)
+ return err;
err = execute_sequence(uc_mgr, &uc_mgr->default_list,
&uc_mgr->value_list, NULL, NULL);
if (err < 0)
@@ -882,45 +924,6 @@ static int set_device(snd_use_case_mgr_t *uc_mgr,
return err;
}
-static int add_auto_value(snd_use_case_mgr_t *uc_mgr, const char *key, char *value)
-{
- char *s;
- int err;
-
- err = get_value1(uc_mgr, &value, &uc_mgr->value_list, key);
- if (err == -ENOENT) {
- s = strdup(value);
- if (s == NULL)
- return -ENOMEM;
- return uc_mgr_add_value(&uc_mgr->value_list, key, s);
- } else if (err < 0) {
- return err;
- }
- free(value);
- return 0;
-}
-
-static int add_auto_values(snd_use_case_mgr_t *uc_mgr)
-{
- struct ctl_list *ctl_list;
- const char *id;
- char buf[40];
- int err;
-
- ctl_list = uc_mgr_get_one_ctl(uc_mgr);
- if (ctl_list) {
- id = snd_ctl_card_info_get_id(ctl_list->ctl_info);
- snprintf(buf, sizeof(buf), "hw:%s", id);
- err = add_auto_value(uc_mgr, "PlaybackCTL", buf);
- if (err < 0)
- return err;
- err = add_auto_value(uc_mgr, "CaptureCTL", buf);
- if (err < 0)
- return err;
- }
- return 0;
-}
-
/**
* \brief Init sound card use case manager.
* \param uc_mgr Returned use case manager pointer
@@ -959,10 +962,6 @@ int snd_use_case_mgr_open(snd_use_case_mgr_t **uc_mgr,
goto err;
}
- err = add_auto_values(mgr);
- if (err < 0)
- goto err;
-
*uc_mgr = mgr;
return 0;