On Tue, 2011-02-15 at 20:16 +0530, Bensaid, Selma wrote:
+static int sst_platform_pcm_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params)
+{
- snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(params));
- memset(substream->runtime->dma_area, 0,
params_buffer_bytes(params));
- return 0;
+}
static struct snd_pcm_ops sst_platform_ops = { .open = sst_platform_open, @@ -373,6 +381,7 @@ static struct snd_pcm_ops sst_platform_ops = { .prepare = sst_platform_pcm_prepare, .trigger = sst_platform_pcm_trigger, .pointer = sst_platform_pcm_pointer,
- .hw_params = sst_platform_pcm_hw_params,
};
Hi Vinod,
The sst_soc_platform_drv provides also .pcm_new callback which pre-allocates the DMA memory for the PCM Streams. Is the pcm_new callback required?
Selma, Quoting Takshi's Writing alsa driver [1] "snd_pcm_lib_malloc_pages() is available only when the DMA buffers have been pre-allocated". The .pcm_new in this case allocates the buffer using snd_pcm_lib_preallocate_pages_for_all and in .hw_params we use the snd_pcm_lic_malloc_pages. This seems to be required for aplay with mmap option to work (which pa seems to use as well), otherwise the mmap call fails