[alsa-devel] [PATCH] ASoC: arizona: Add support for SNDRV_PCM_RATE_KNOT

Lars-Peter Clausen lars at metafoo.de
Thu Feb 4 13:55:58 CET 2016


On 02/04/2016 01:45 PM, Charles Keepax wrote:
> On Wed, Feb 03, 2016 at 09:24:25AM +0100, Lars-Peter Clausen wrote:
>> On 02/02/2016 08:30 PM, Mark Brown wrote:
>>> On Tue, Feb 02, 2016 at 04:38:04PM +0000, Charles Keepax wrote:
>>>
>>>> +#define ARIZONA_48K_RATES 12000, 24000, 48000, 96000, 192000, 4000, 8000, \
>>>> +			  16000, 32000
>>>
>>> This just looks wrong.  It's valid code but with the combination of the
>>> split line and the list without any sort of parenthesis it sets off
>>> alarm bells.  Duplicating might not be the worst thing ever...
>>
>> For list constraints it is possible to specify a mask for which of the
>> entries in the rates array should be considered. So you could use the same
>> rate array, but use different masks. The adau1977 drive for example does this.
>>
> 
> Ok so looking at this a little more I think you can only apply
> the mask thing to values that are part of the basic defines
> rather than masking off entries in a constraint list. The
> adau1977 is using the mask to limit the supported formats which
> is all done through the defines in that driver.

The list constraint struct looks like this:

struct snd_pcm_hw_constraint_list {
        unsigned int count;
        const unsigned int *list;
        unsigned int mask;
};

list is your rates array, count is the size of the rates array and mask
specifies which of the entries in the rates array are valid.

E.g.

unsigned int rates[] = {
	44100,
	48000,
};

struct snd_pcm_hw_constraint_list constr_44100 {
	.count = ARRAY_SIZE(rates),
	.list = rates,
	.mask = 0x1,
};

struct snd_pcm_hw_constraint_list constr_48000 {
	.count = ARRAY_SIZE(rates),
	.list = rates,
	.mask = 0x2,
};

struct snd_pcm_hw_constraint_list constr_all {
	.count = ARRAY_SIZE(rates),
	.list = rates,
	.mask = 0, /* 0 = All */
};




More information about the Alsa-devel mailing list