I finally solved it, the issue has nothing to do with the above mentioned things, it was h/w specific issue.
On 7/16/07, Pharaoh . pharaoh137@gmail.com wrote:
Hi
The hardware I am working on expects 8K bytes to be DMAed before giving an interrupt. Only after a block of 8K bytes is DMAed, I get an end of the block interrupt and I enqueue next 8K bytes for processing. The params look like these:
static snd_pcm_hardware_t snd_omap_alsa_playback = { .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_PAUSE | SNDRV_PCM_INFO_RESUME | SNDRV_PCM_INFO_MMAP_VALID | SNDRV_PCM_INFO_MMAP), .formats = (SNDRV_PCM_FMTBIT_S16_LE), .rates = (SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 ), .rate_min = 44100, .rate_max = 48000, .channels_min = 2, .channels_max = 2, .buffer_bytes_max = 8192*8, .period_bytes_min = 32, .period_bytes_max = 8 * 1024, .periods_min = 2, //ping pong buffer .periods_max = 128, .fifo_size = 0, };
I just copied it from another driver ;-). But now I am getting an input/output error after first block of data i.e. 8K bytes are DMAed. Does it have anything to do with the above struct? I have discussed this earlier too, but now attacking it once again after long gap.
-pharaoh.