Colin Guthrie wrote: > Hmm, just thinking about this (as I don't know the volume control logic > particularly well in PA), the call snd_mixer_selem_set_playback_dB() is > used with a dir argument of +1. > > From what I understand, this would allow me to say "set the volume to > 50dB" and due to the +1 dir, it should select -46.499999 ( because -46.5 > mutes it). > > In this case however, the value of -99999.999dB is ultimately selected > (aka 0). > > I'm wondering if the TLV fix actually affects how > snd_mixer_selem_set_playback_dB() call works with the dir argument. Uh, oh. snd_tlv_convert_from_dB() ignores the minimum-is-mute flag. Please try this hack: --- alsa-lib/src/control/tlv.c +++ alsa-lib/src/control/tlv.c @@ -335,6 +335,9 @@ int snd_tlv_convert_from_dB(unsigned int *tlv, long rangemin, long rangemax, if (xdir > 0) v += (max - min) - 1; v = v / (max - min) + rangemin; + if (v == rangemin && xdir > 0 && (tlv[3] & 0x10000) && + db_gain > SND_CTL_TLV_DB_GAIN_MUTE) + v++; *value = v; } return 0; _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel