[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