#include "alsa-mixer.h"
#include "alsa-util.h"
+static int setting_select(pa_alsa_setting *s, snd_mixer_t *m);
+
struct description_map {
const char *name;
const char *description;
return r;
}
-int pa_alsa_path_select(pa_alsa_path *p, snd_mixer_t *m, bool device_is_muted) {
+int pa_alsa_path_select(pa_alsa_path *p, pa_alsa_setting *s, snd_mixer_t *m, bool device_is_muted) {
pa_alsa_element *e;
int r = 0;
return -1;
}
+ if (s)
+ setting_select(s, m);
+
/* Finally restore hw mute to the device mute status. */
if (p->mute_during_activation) {
PA_LLIST_FOREACH(e, p->elements) {
return r;
}
-int pa_alsa_setting_select(pa_alsa_setting *s, snd_mixer_t *m) {
+static int setting_select(pa_alsa_setting *s, snd_mixer_t *m) {
pa_alsa_option *o;
uint32_t idx;
pa_alsa_direction_t direction;
};
-int pa_alsa_setting_select(pa_alsa_setting *s, snd_mixer_t *m);
void pa_alsa_setting_dump(pa_alsa_setting *s);
void pa_alsa_option_dump(pa_alsa_option *o);
int pa_alsa_path_get_mute(pa_alsa_path *path, snd_mixer_t *m, pa_bool_t *muted);
int pa_alsa_path_set_volume(pa_alsa_path *path, snd_mixer_t *m, const pa_channel_map *cm, pa_cvolume *v, pa_bool_t deferred_volume, pa_bool_t write_to_hw);
int pa_alsa_path_set_mute(pa_alsa_path *path, snd_mixer_t *m, pa_bool_t muted);
-int pa_alsa_path_select(pa_alsa_path *p, snd_mixer_t *m, bool device_is_muted);
+int pa_alsa_path_select(pa_alsa_path *p, pa_alsa_setting *s, snd_mixer_t *m, bool device_is_muted);
void pa_alsa_path_set_callback(pa_alsa_path *p, snd_mixer_t *m, snd_mixer_elem_callback_t cb, void *userdata);
void pa_alsa_path_free(pa_alsa_path *p);
data = PA_DEVICE_PORT_DATA(p);
pa_assert_se(u->mixer_path = data->path);
- pa_alsa_path_select(u->mixer_path, u->mixer_handle, s->muted);
-
- if (data->setting)
- pa_alsa_setting_select(data->setting, u->mixer_handle);
+ pa_alsa_path_select(u->mixer_path, data->setting, u->mixer_handle, s->muted);
mixer_volume_init(u);
data = PA_DEVICE_PORT_DATA(u->sink->active_port);
u->mixer_path = data->path;
- pa_alsa_path_select(data->path, u->mixer_handle, u->sink->muted);
-
- if (data->setting)
- pa_alsa_setting_select(data->setting, u->mixer_handle);
+ pa_alsa_path_select(data->path, data->setting, u->mixer_handle, u->sink->muted);
} else {
if (u->mixer_path) {
/* Hmm, we have only a single path, then let's activate it */
- pa_alsa_path_select(u->mixer_path, u->mixer_handle, u->sink->muted);
+ pa_alsa_path_select(u->mixer_path, u->mixer_path->settings, u->mixer_handle, u->sink->muted);
- if (u->mixer_path->settings)
- pa_alsa_setting_select(u->mixer_path->settings, u->mixer_handle);
} else
return 0;
}
data = PA_DEVICE_PORT_DATA(p);
pa_assert_se(u->mixer_path = data->path);
- pa_alsa_path_select(u->mixer_path, u->mixer_handle, s->muted);
-
- if (data->setting)
- pa_alsa_setting_select(data->setting, u->mixer_handle);
+ pa_alsa_path_select(u->mixer_path, data->setting, u->mixer_handle, s->muted);
mixer_volume_init(u);
data = PA_DEVICE_PORT_DATA(u->source->active_port);
u->mixer_path = data->path;
- pa_alsa_path_select(data->path, u->mixer_handle, u->source->muted);
-
- if (data->setting)
- pa_alsa_setting_select(data->setting, u->mixer_handle);
+ pa_alsa_path_select(data->path, data->setting, u->mixer_handle, u->source->muted);
} else {
if (u->mixer_path) {
/* Hmm, we have only a single path, then let's activate it */
- pa_alsa_path_select(u->mixer_path, u->mixer_handle, u->source->muted);
-
- if (u->mixer_path->settings)
- pa_alsa_setting_select(u->mixer_path->settings, u->mixer_handle);
+ pa_alsa_path_select(u->mixer_path, u->mixer_path->settings, u->mixer_handle, u->source->muted);
} else
return 0;
}