[alsa-devel] [PATCH 1/3] ASoC: omap-mcbsp: fix snd_pcm_hw_rule_add arguments

Grazvydas Ignotas notasas at gmail.com
Fri Mar 9 11:45:24 CET 2012


On Fri, Mar 9, 2012 at 12:08 PM, Peter Ujfalusi <peter.ujfalusi at ti.com> wrote:
> On 03/09/2012 01:19 AM, Grazvydas Ignotas wrote:
>> We are setting SNDRV_PCM_HW_PARAM_BUFFER_SIZE based on
>> SNDRV_PCM_HW_PARAM_CHANNELS, not vice versa.
>
> The intention is to set the buffer size based on the channels here.
> This is needed because of the McBSP internal FIFO operation.
> It is word based. As example on McBSP2 has 1280 word FIFO.
> In mono stream it is 1280 sample long.
> In stereo it is 640 (stereo) sample long.
> In four channel mode it is 320 (4 channel) sample long.

That's all fine, but the argument order is wrong, take a look at
snd_pcm_hw_rule_add definition:

/**
 * snd_pcm_hw_rule_add - add the hw-constraint rule
 * @var: the variable to evaluate
 * @dep: the dependent variables
int snd_pcm_hw_rule_add(struct snd_pcm_runtime *runtime, unsigned int cond,
                        int var,
                        snd_pcm_hw_rule_func_t func, void *private,
                        int dep, ...)

So var should be SNDRV_PCM_HW_PARAM_BUFFER_SIZE, dep
SNDRV_PCM_HW_PARAM_CHANNELS, but it is the opposite now.

>
>> This bug didn't
>> have much impact because the rules are evaluated multiple times
>> by the core, and intended value got set eventually.
>>
>> Signed-off-by: Grazvydas Ignotas <notasas at gmail.com>
>> ---
>>  sound/soc/omap/omap-mcbsp.c |    4 ++--
>>  1 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
>> index 10eb645..207365c 100644
>> --- a/sound/soc/omap/omap-mcbsp.c
>> +++ b/sound/soc/omap/omap-mcbsp.c
>> @@ -142,10 +142,10 @@ static int omap_mcbsp_dai_startup(struct snd_pcm_substream *substream,
>>               * smaller buffer than the FIFO size to avoid underruns
>>               */
>>               snd_pcm_hw_rule_add(substream->runtime, 0,
>> -                                 SNDRV_PCM_HW_PARAM_CHANNELS,
>> +                                 SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
>>                                   omap_mcbsp_hwrule_min_buffersize,
>>                                   mcbsp,
>> -                                 SNDRV_PCM_HW_PARAM_BUFFER_SIZE, -1);
>> +                                 SNDRV_PCM_HW_PARAM_CHANNELS, -1);
>>
>>               /* Make sure, that the period size is always even */
>>               snd_pcm_hw_constraint_step(substream->runtime, 0,
>

-- 
Gražvydas


More information about the Alsa-devel mailing list