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 */ }; _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel