alsa-ucm: Set profiles by their struct instance, not their name

While switching profiles, it's possible that we will want to do more
work besides switching UCM verbs. The alsa-card module already has our
profiles as structs, but passes in only the names instead of the entire
struct. Make things work with the struct instead, so we can add other
things (like a UCM context) to it and use those here.

Co-authored-by: Tanu Kaskinen <tanuk@iki.fi>
[Alper: Split into its own commit and integrated Tanu's snippet.]
Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Link: 880ff393f1
[Wim: Apply to acp_card_set_profile() as well]
Co-authored-by: Wim Taymans <wtaymans@redhat.com>
This commit is contained in:
Jaroslav Kysela 2023-03-20 15:13:41 +01:00 committed by Wim Taymans
parent 396382ebb2
commit a5d87a43df
3 changed files with 9 additions and 11 deletions

View file

@ -1508,8 +1508,7 @@ int acp_card_set_profile(struct acp_card *card, uint32_t new_index, uint32_t fla
/* if UCM is available for this card then update the verb */ /* if UCM is available for this card then update the verb */
if (impl->use_ucm && !(np->profile.flags & ACP_PROFILE_PRO)) { if (impl->use_ucm && !(np->profile.flags & ACP_PROFILE_PRO)) {
if ((res = pa_alsa_ucm_set_profile(&impl->ucm, impl, if ((res = pa_alsa_ucm_set_profile(&impl->ucm, impl,
np->profile.flags & ACP_PROFILE_OFF ? NULL : np->profile.name, np->profile.flags & ACP_PROFILE_OFF ? NULL : np, op)) < 0) {
op ? op->profile.name : NULL)) < 0) {
return res; return res;
} }
} }

View file

@ -1459,19 +1459,18 @@ void pa_alsa_ucm_add_ports(
} }
/* Change UCM verb and device to match selected card profile */ /* Change UCM verb and device to match selected card profile */
int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, const char *new_profile, const char *old_profile) { int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_profile *new_profile, pa_alsa_profile *old_profile) {
int ret = 0; int ret = 0;
const char *profile; const char *profile;
pa_alsa_ucm_verb *verb; pa_alsa_ucm_verb *verb;
if (new_profile == old_profile) if (new_profile == old_profile)
return ret; return 0;
else if (new_profile == NULL || old_profile == NULL)
profile = new_profile ? new_profile : SND_USE_CASE_VERB_INACTIVE; if (new_profile == NULL)
else if (!pa_streq(new_profile, old_profile)) profile = SND_USE_CASE_VERB_INACTIVE;
profile = new_profile;
else else
return ret; profile = new_profile->name;
/* change verb */ /* change verb */
pa_log_info("Set UCM verb to %s", profile); pa_log_info("Set UCM verb to %s", profile);
@ -2461,7 +2460,7 @@ pa_alsa_profile_set* pa_alsa_ucm_add_profile_set(pa_alsa_ucm_config *ucm, pa_cha
return NULL; return NULL;
} }
int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, const char *new_profile, const char *old_profile) { int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_profile *new_profile, pa_alsa_profile *old_profile) {
return -1; return -1;
} }

View file

@ -147,7 +147,7 @@ typedef struct pa_alsa_ucm_volume pa_alsa_ucm_volume;
int pa_alsa_ucm_query_profiles(pa_alsa_ucm_config *ucm, int card_index); int pa_alsa_ucm_query_profiles(pa_alsa_ucm_config *ucm, int card_index);
pa_alsa_profile_set* pa_alsa_ucm_add_profile_set(pa_alsa_ucm_config *ucm, pa_channel_map *default_channel_map); pa_alsa_profile_set* pa_alsa_ucm_add_profile_set(pa_alsa_ucm_config *ucm, pa_channel_map *default_channel_map);
int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, const char *new_profile, const char *old_profile); int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_profile *new_profile, pa_alsa_profile *old_profile);
int pa_alsa_ucm_get_verb(snd_use_case_mgr_t *uc_mgr, const char *verb_name, const char *verb_desc, pa_alsa_ucm_verb **p_verb); int pa_alsa_ucm_get_verb(snd_use_case_mgr_t *uc_mgr, const char *verb_name, const char *verb_desc, pa_alsa_ucm_verb **p_verb);