Takashi Iwai wrote: >> 3) Can I assume that .hw_params() is never called after .prepare() is called? > > The call is allowed. Ugh, so in other words, .hw_params() and .prepare() can be called any number of times in any order? That makes it impossible to optimize the creation of the DMA buffer. Currently, I have this code at the top of my .hwparams() function: if (substream->dma_buffer.addr) { dma_free_coherent(substream->pcm->dev, runtime_data->ld_buf_size, runtime_data->link, runtime_data->ld_buf_phys); snd_dma_free_pages(&substream->dma_buffer); } When I look at the AT91 ASOC driver as an example, I see it allocates a DMA buffer of the maximum allowed size (currently hard-coded to 32KB) in the .new function. To me, this is cheating, but it appears to be the only way to avoid doing what I'm currently doing. Is this the recommend approach? -- Timur Tabi Linux Kernel Developer @ Freescale _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel