[alsa-devel] hw_params function and OSS emulation
Timur Tabi
timur at freescale.com
Wed Aug 22 16:28:31 CEST 2007
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
More information about the Alsa-devel
mailing list