[alsa-devel] ASoC: How to declare volume TLV dB scale?
Clemens Ladisch
clemens at ladisch.de
Fri Jun 12 21:47:46 CEST 2015
Sergej Sawazki wrote:
> On Fri, 12 Jun 2015 18:28:54 +0200, Clemens Ladisch wrote:
>> Sergej Sawazki wrote:
>>> could someone please help me to understand the mixer controls TLV scale?
>>> What would be the DECLARE_TLV_DB_SCALE values for the following example?
>>>
>>> reg. value: 0 .. 0x3ff
>>> phys. value: 0dB .. -128dB
>>> volume: 100% .. 0%(mute)
>>
>> 0% volume would be -∞ dB.
>>
>> And how are the register values mapped between the min/max values?
>> Does 0x200 correspond to -64 dB, or 50 % of the sample value, or
>> 50 % of the volume?
>
> The output of the DAC can be attenuated in 0.125dB steps, so 0x200
> would be -64dB.
>
> register value | attenuation level (dB) | volume (%)
> ---------------+------------------------+-----------
> 0x000 | 0.0 | 100
> 0x001 | -0.125 |
> ... | ... | ...
> 0x200 | -64.0 |
> ... | ... | ...
> 0x3fe | -127.75 |
> 0x3ff | -∞ (mute) | 0
0.125 dB is too small for the 0.01 dB resolution of DECLARE_TLV_DB_SCALE,
so you have to use DB_MINMAX instead: TLV_DB_MINMAX_MUTE_ITEM(-128, 0)
Regards,
Clemens
More information about the Alsa-devel
mailing list