return 0;
}
- if (!u->mixer_path->has_volume)
+ if (!u->mixer_path->has_volume) {
pa_log_info("Driver does not support hardware volume control, falling back to software volume control.");
- else {
+ } else {
if (u->mixer_path->has_dB) {
pa_log_info("Hardware volume ranges from %0.2f dB to %0.2f dB.", u->mixer_path->min_dB, u->mixer_path->max_dB);
pa_source_set_get_volume_callback(u->source, source_get_volume_cb);
pa_source_set_set_volume_callback(u->source, source_set_volume_cb);
- pa_source_set_write_volume_callback(u->source, source_write_volume_cb);
- u->source->flags |= PA_SOURCE_HW_VOLUME_CTRL;
if (u->mixer_path->has_dB) {
u->source->flags |= PA_SOURCE_DECIBEL_VOLUME;
if (sync_volume) {
- u->source->flags |= PA_SOURCE_SYNC_VOLUME;
+ pa_source_set_write_volume_callback(u->source, source_write_volume_cb);
pa_log_info("Successfully enabled synchronous volume.");
}
}
} else {
pa_source_set_get_mute_callback(u->source, source_get_mute_cb);
pa_source_set_set_mute_callback(u->source, source_set_mute_cb);
- u->source->flags |= PA_SOURCE_HW_MUTE_CTRL;
pa_log_info("Using hardware mute control.");
}
- if (u->source->flags & (PA_SOURCE_HW_VOLUME_CTRL|PA_SOURCE_HW_MUTE_CTRL)) {
+ if (u->mixer_path->has_volume || u->mixer_path->has_mute) {
int (*mixer_callback)(snd_mixer_elem_t *, unsigned int);
if (u->source->flags & PA_SOURCE_SYNC_VOLUME) {
u->mixer_pd = pa_alsa_mixer_pdata_new();