On 2010-12-03 12:59, Takashi Iwai wrote: > At Fri, 03 Dec 2010 12:30:02 +0100, > David Henningsson wrote: >> >> I'm trying to nail down a strange behaviour. I have one "Master" and one >> "Speaker" (or "Headphone") volume control, each ranging from -48 dB to 0 >> dB. Whenever the sum of "Master" and "Speaker" is below -48 dB, the >> output mutes. Codec is attached. >> >> "Master" is a "Virtual master" control, and both "Master" and "Speaker" >> control amp-out on nid 0x13. Nid 0x13 does not have amp-out caps, but >> the AFG specifies a range of -96 dB to 0 dB in 0.75 dB steps. >> >> There is some strange things here. First, in >> patch_sigmatel:create_controls_idx, there is this comment: >> >> /* if dB scale is over -64dB, and finer enough, >> * let's reduce it to half >> */ >> Hmm? Removing half of the volume slider? >> >> Second, assuming we actually buy this decision, wouldn't it make sense >> for people to be able to combine Master and Speaker to get the full -96 >> to 0 dB range? Instead, "Master" is just working over the range defined >> by "Speaker". > > Well, the problem was fairly old. You must think of the world before > anything dB evaluation was introduced in the mixer apps. They just > took a percentage value, so we got to cut it off to give some "usable" > interface for them. > > The biggest problem right now is that you can't take it back so easily > "just for PA". The PCM softvol is also the same. There is no perfect > solution, and PA isn't by 100% people here. However, we must not give > a regression in 100% manner. Ok. I'm not certain I agree, but I see your point. > > OK, let's back to the bug point... > >> Third, there is an interesting condition in hda_codec.c:update_amp_value: >> >> if (val> 0) >> val += ofs; >> >> Now this is in practice turning all volume controls which have ofs (e g >> those being "reduced to half") to a minimum-is-mute error: I can set the >> amp value to either 0 (-96 dB) or the 65 - 127 range (~ -48 dB - 0 dB). >> So it isn't really mute, it's -96 dB signal, but I can't hear that anyway. > > OK, this looks really like a bug that the driver gives min-mute flag. > The min-mute flag should be given only for the STAC codecs with lower > resolution, such as STAC9200. It seems that STAC925x (and STAC9202) > are also in this category, while STAC9205 and other IDT codecs have > higher resolutions. > > Since both STAC9200 and STAC925x have own Master definition, the > simplest solution is to remove TLV_DB_SCALE_MUTE for vmaster like > below... I've tried it, but it doesn't help. Test case is simple: run the codec attached to the previous mail in hda-emu [1]. Then turn "Master" down from 64 to 60, or anything that makes the combination of "Master" and "Speaker" less than -48 dB, and notice that the amp value sent to the codec is 0x0 (i e -96 dB). [1] If I never thanked you for that program, I do so now, it is a really great tool! -- David Henningsson, Canonical Ltd. http://launchpad.net/~diwic _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel