Hi James,
On 2 June 2012 10:09, James Courtier-Dutton james.dutton@gmail.com wrote:
In the userspace to kernel interface. A mixer control must have min/max values. When writing the value, all values within the range of min to max must be valid values. There are just too many user land tools that rely on this fact. Think of the use case or "Next step louder please". If the currently written value is 0x40, the current user land mixer apps would try to write 0x41, without even bothering to look at the dB tables. If you instead change the driver to map: 0x21 to 0x40 -> 0x00 to 0x1f 0x61 to 0xff -> 0x20 to 0xBE and set min to 0, and max to 0xbe The user space tools will then work fine.
The dB conversion tables are just a friendly way of displaying a slightly more useful figure to the user than a percentage. If you have hardware with gaps like the above, the kernel driver will have to be fixed to remove the prohibited ranges in the kernel to userspace API. This sort of conversion is done in many other alsa kernel drivers.
Thanks for the details. I'll do that.
Regards, Benoît