On Wed, Nov 10, 2010 at 8:35 PM, Jaroslav Kysela perex@perex.cz wrote:
On Wed, 10 Nov 2010, Manu Abraham wrote:
/* enable stream */ /* initializing 8 buffer with "pages" pages each .. */ stream = saa7231_stream_init(saa7231, AUDIO_CAPTURE, ADAPTER_INT, 0, pages); if (!stream) { dprintk(SAA7231_ERROR, 1, "ERROR: Registering stream"); return -ENOMEM; } audio->stream = stream; buffer = stream->dmabuf; saa7231_add_irqevent(saa7231, 43, SAA7231_EDGE_RISING, saa7231_audio_evhandler, "AS2D_AVIS"); dprintk(SAA7231_DEBUG, 1, "Mapping %d buffers with %d pages each", XS2D_BUFFERS, pages);
Unfortunately, I don't understand the role of XS2D_BUFFERS. The ALSA bufsize is the whole DMA area (you should use params_buffer_bytes() to get this value instead of calculating this using periods * period_size).
It means: Just allocate number of pages required for buffer_bytes. Don't play with periods (except the interrupts).
There are 8 SG buffers for the hardware; the maximum size of each buffer can be 512 pages, the minimum can be a single page.
Since each of the 8 buffers, the minimum buffer size of each buffer is 4096 bytes, the total minimum ALSA buffer size would be 8 * 4096 bytes = 32768 bytes, and a maximum of 8 * 512 * 4096 = 16777216 bytes
So, I should calculate the periods and period bytes based on the buffer size involved ? ie: it could turn out to be hard to get exact values for each of the sampling rates involved ?
Regards, Manu