ucm: fix the port / ucm device activation on boot

The UCM device must be activated using the pa_alsa_ucm_set_port()
call on boot (the sink creation time). In case when the
mixer controls are not defined for the application in the
UCM configuration, the mixer_handle is NULL.

Call the pa_alsa_ucm_set_port() before the mixer_handle check.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
Jaroslav Kysela 2020-03-31 13:24:36 +02:00 committed by Tanu Kaskinen
parent 77d00b1cce
commit fc5f263e59
2 changed files with 18 additions and 8 deletions

View file

@ -2138,6 +2138,15 @@ static int setup_mixer(struct userdata *u, bool ignore_dB) {
pa_assert(u);
/* This code is before the u->mixer_handle check, because if the UCM
* configuration doesn't specify volume or mute controls, u->mixer_handle
* will be NULL, but the UCM device enable sequence will still need to be
* executed. */
if (u->sink->active_port && u->ucm_context) {
if (pa_alsa_ucm_set_port(u->ucm_context, u->sink->active_port, true) < 0)
return -1;
}
if (!u->mixer_handle)
return 0;
@ -2155,10 +2164,6 @@ static int setup_mixer(struct userdata *u, bool ignore_dB) {
} else {
pa_alsa_ucm_port_data *data;
/* First activate the port on the UCM side */
if (pa_alsa_ucm_set_port(u->ucm_context, u->sink->active_port, true) < 0)
return -1;
data = PA_DEVICE_PORT_DATA(u->sink->active_port);
/* Now activate volume controls, if any */

View file

@ -1844,6 +1844,15 @@ static int setup_mixer(struct userdata *u, bool ignore_dB) {
pa_assert(u);
/* This code is before the u->mixer_handle check, because if the UCM
* configuration doesn't specify volume or mute controls, u->mixer_handle
* will be NULL, but the UCM device enable sequence will still need to be
* executed. */
if (u->source->active_port && u->ucm_context) {
if (pa_alsa_ucm_set_port(u->ucm_context, u->source->active_port, false) < 0)
return -1;
}
if (!u->mixer_handle)
return 0;
@ -1861,10 +1870,6 @@ static int setup_mixer(struct userdata *u, bool ignore_dB) {
} else {
pa_alsa_ucm_port_data *data;
/* First activate the port on the UCM side */
if (pa_alsa_ucm_set_port(u->ucm_context, u->source->active_port, false) < 0)
return -1;
data = PA_DEVICE_PORT_DATA(u->source->active_port);
/* Now activate volume controls, if any */