alsa-mixer: Accept negative max_dB when using decibel fixes
authorTanu Kaskinen <tanuk@iki.fi>
Mon, 18 Jan 2021 15:36:20 +0000 (17:36 +0200)
committerTanu Kaskinen <tanuk@iki.fi>
Mon, 18 Jan 2021 15:40:28 +0000 (17:40 +0200)
Sometimes decibel fixes are used as a trick to set a maximum hardware
volume, and in these cases max_dB may be negative yet still valid.
Here's an example:
https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/292#note_671300

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/447>

src/modules/alsa/alsa-mixer.c

index 1cfc426..0bbac26 100644 (file)
@@ -1712,7 +1712,7 @@ static bool element_probe_volume(pa_alsa_element *e, snd_mixer_elem_t *me) {
         e->has_dB = snd_mixer_selem_get_capture_dB_range(me, &min_dB, &max_dB) >= 0;
 
     /* Assume decibel data to be incorrect if max_dB is negative. */
-    if (e->has_dB && max_dB < 0) {
+    if (e->has_dB && max_dB < 0 && !e->db_fix) {
         pa_alsa_mixer_id_to_string(buf, sizeof(buf), &e->alsa_id);
         pa_log_warn("The decibel volume range for element %s (%li dB - %li dB) has negative maximum. "
                     "Disabling the decibel range.", buf, min_dB, max_dB);