summaryrefslogtreecommitdiff
path: root/src/modules/alsa
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/alsa')
-rw-r--r--src/modules/alsa/alsa-mixer.h5
-rw-r--r--src/modules/alsa/alsa-ucm.c20
-rw-r--r--src/modules/alsa/alsa-ucm.h5
3 files changed, 16 insertions, 14 deletions
diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h
index 91b0ca017..b56d88113 100644
--- a/src/modules/alsa/alsa-mixer.h
+++ b/src/modules/alsa/alsa-mixer.h
@@ -318,7 +318,7 @@ struct pa_alsa_mapping {
pa_sink *sink;
pa_source *source;
- /* ucm device context*/
+ /* ucm device context */
pa_alsa_ucm_mapping_context ucm_context;
};
@@ -342,6 +342,9 @@ struct pa_alsa_profile {
pa_idxset *input_mappings;
pa_idxset *output_mappings;
+
+ /* ucm device context */
+ pa_alsa_ucm_profile_context ucm_context;
};
struct pa_alsa_decibel_fix {
diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
index a40c3d764..20ddd9f7a 100644
--- a/src/modules/alsa/alsa-ucm.c
+++ b/src/modules/alsa/alsa-ucm.c
@@ -1438,10 +1438,13 @@ int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_prof
if (new_profile == old_profile)
return 0;
- if (new_profile == NULL)
+ if (new_profile == NULL) {
profile = SND_USE_CASE_VERB_INACTIVE;
- else
+ verb = NULL;
+ } else {
profile = new_profile->name;
+ verb = new_profile->ucm_context.verb;
+ }
/* change verb */
pa_log_info("Set UCM verb to %s", profile);
@@ -1449,17 +1452,7 @@ int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_prof
pa_log("Failed to set verb %s", profile);
ret = -1;
}
-
- /* find active verb */
- ucm->active_verb = NULL;
- PA_LLIST_FOREACH(verb, ucm->verbs) {
- const char *verb_name;
- verb_name = pa_proplist_gets(verb->proplist, PA_ALSA_PROP_UCM_NAME);
- if (pa_streq(verb_name, profile)) {
- ucm->active_verb = verb;
- break;
- }
- }
+ ucm->active_verb = verb;
update_mixer_paths(card->ports, profile);
return ret;
@@ -1832,6 +1825,7 @@ static int ucm_create_profile(
p->profile_set = ps;
p->name = pa_xstrdup(verb_name);
p->description = pa_xstrdup(verb_desc);
+ p->ucm_context.verb = verb;
p->output_mappings = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
p->input_mappings = pa_idxset_new(pa_idxset_trivial_hash_func, pa_idxset_trivial_compare_func);
diff --git a/src/modules/alsa/alsa-ucm.h b/src/modules/alsa/alsa-ucm.h
index e411a9262..1652aff8f 100644
--- a/src/modules/alsa/alsa-ucm.h
+++ b/src/modules/alsa/alsa-ucm.h
@@ -140,6 +140,7 @@ typedef struct pa_alsa_ucm_modifier pa_alsa_ucm_modifier;
typedef struct pa_alsa_ucm_device pa_alsa_ucm_device;
typedef struct pa_alsa_ucm_config pa_alsa_ucm_config;
typedef struct pa_alsa_ucm_mapping_context pa_alsa_ucm_mapping_context;
+typedef struct pa_alsa_ucm_profile_context pa_alsa_ucm_profile_context;
typedef struct pa_alsa_ucm_port_data pa_alsa_ucm_port_data;
typedef struct pa_alsa_ucm_volume pa_alsa_ucm_volume;
@@ -265,6 +266,10 @@ struct pa_alsa_ucm_mapping_context {
pa_idxset *ucm_modifiers;
};
+struct pa_alsa_ucm_profile_context {
+ pa_alsa_ucm_verb *verb;
+};
+
struct pa_alsa_ucm_port_data {
pa_alsa_ucm_config *ucm;
pa_device_port *core_port;