[alsa-devel] [PATCH v5 4/4] ASoC: SAMSUNG: Add I2S0 internal dma driver

Takashi Iwai tiwai at suse.de
Wed Jul 13 09:57:50 CEST 2011


At Wed, 13 Jul 2011 11:44:03 +0530,
Jassi Brar wrote:
> 
> On Wed, Jul 13, 2011 at 11:24 AM, Takashi Iwai <tiwai at suse.de> wrote:
> >> >> +       .channels_min = 2,
> >> >> +       .channels_max = 2,
> >> >> +       .buffer_bytes_max = MAX_IDMA_BUFFER,
> >> >> +       .period_bytes_min = 128,
> >> >> +       .period_bytes_max = MAX_IDMA_PERIOD,
> >> >
> >> > In this case, MAX_IDMA_BUFFER is 160k and MAX_IDMA_PERIOD is 128k,
> >> > buffer is not twice of period. If you set like this, many of general
> >> > ALSA applications return error on initial buffers.
> >> I don't think so. Did you see any such problem ?
> >> In my opnion, ALSA will always use 2 periods of approx. MAX_IDMA_BUFFER/2 bytes
> >
> > It's not guaranteed unless you set explicitly a hw_constraint, such as
> >    snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
> >
> > The ALSA API itself allows a buffer size not aligned to a period size.
> Sure it does and we do set the constraint in Samsung's normal DMA
> driver where periods_max is quite large.

OK, I just want to be sure.

> An important part missing in Claude's quote is
> +       .periods_min = 1,
> +       .periods_max = 2,
> 
> When the periods_max is only 2, the calculations in ALSA mid-layer
> seem to always
> decide on using two equal size periods.
> 
> I didn't dig in the logic but wasn't able to get any application to
> configure something
> like {Period_size = 90% of Buffer_size}  which is actually beneficial for
> Low-Power-Audio-Mode.

Even you don't set the integer constraint, right?
Does it happen with aplay with -Dhw?

In the driver side, there is a define RULES_DEBUG in
sound/core/pcm_native.c, which will enable debug prints of hw-refines.
A similar flag is found in alsa-lib/src/pcm/pcm_params.c, too.


Takashi


More information about the Alsa-devel mailing list