[alsa-devel] TLV question - ranges not in volume order
Takashi Iwai
tiwai at suse.de
Wed May 8 15:44:57 CEST 2013
At Wed, 08 May 2013 15:33:11 +0200,
David Henningsson wrote:
>
> [1 <text/plain; ISO-8859-1 (7bit)>]
> On 05/08/2013 02:14 PM, Takashi Iwai wrote:
> > At Wed, 08 May 2013 14:09:31 +0200,
> > Clemens Ladisch wrote:
> >>
> >> David Henningsson wrote:
> >>> I recently came across a strange ASoC volume control. In this case,
> >>> the values are not in volume order, i e, the control is declared
> >>> something like below.
> >>>
> >>> However alsamixer seems not to handle this "reordering" correctly. My
> >>> question is if this is something that should be fixed in alsamixer (or
> >>> possibly alsa-lib?), or does one need to write some kind of mapping
> >>> table in the kernel, just to make something come in volume order to
> >>> userspace?
> >>
> >> Items in a DB_RANGE container must be ordered by their values *and* by
> >> their dB values. This implies that larger values must correspond with
> >> larger dB values, whis is also required for all other mixer controls.
> >>
> >> If the register values are unordered, the driver must reorder them.
> >
> > Yep. Although there is no explicit definition, it's an implicit rule,
> > as we have never implemented the parser code to allow the disorder.
> >
> > We should add a text mentioning that somewhere. A patch is welcome ;)
>
> Like this? (Feel free to apply if you think it's good)
Thanks, I applied it with slight modification (align the comment
lines).
Takashi
>
>
>
> --
> David Henningsson, Canonical Ltd.
> https://launchpad.net/~diwic
> [2 0001-ALSA-Add-comment-for-control-TLV-API.patch <text/x-patch (7bit)>]
> >From 19778a06ef5bd995ba1e800dc14bbe7ff27dcb97 Mon Sep 17 00:00:00 2001
> From: David Henningsson <david.henningsson at canonical.com>
> Date: Wed, 8 May 2013 15:28:49 +0200
> Subject: [PATCH] ALSA: Add comment for control TLV API
>
> Userspace is not meant to have to handle all strange dB ranges,
> so add a specification comment.
>
> Signed-off-by: David Henningsson <david.henningsson at canonical.com>
> ---
> include/sound/tlv.h | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/include/sound/tlv.h b/include/sound/tlv.h
> index 28c65e1..84fc31a 100644
> --- a/include/sound/tlv.h
> +++ b/include/sound/tlv.h
> @@ -74,7 +74,10 @@
> #define DECLARE_TLV_DB_LINEAR(name, min_dB, max_dB) \
> unsigned int name[] = { TLV_DB_LINEAR_ITEM(min_dB, max_dB) }
>
> -/* dB range container */
> +/* dB range container. Items in dB range container must be ordered
> +by their values and by their dB values. This implies that larger values
> +must correspond with larger dB values (which is also required for all
> +other mixer controls). */
> /* Each item is: <min> <max> <TLV> */
> #define TLV_DB_RANGE_ITEM(...) \
> TLV_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__)
> --
> 1.7.9.5
>
More information about the Alsa-devel
mailing list