On 6/25/07, Clemens Ladisch cladisch@fastmail.net wrote:
Pharaoh . wrote:
The ALSA framework will stop the stream and return the error code EIO when there was no interrupt for ten seconds, i.e., when snd_pcm_period_elapsed() was not called.
I am getting the interrupts, but why there wont be any interrupt for 10 seconds?
I don't quite understand this sentence. You do get interrupts? And snd_pcm_period_elapsed() is not called?
I am setting the periods in prepare as periods = runtime->period, so interrupts should at period boundaries.
runtime->periods is the number of periods. I don't know how your hardware works, but I guess it wants to know the period size, i.e., runtime->period_size converted to bytes.
Regards, Clemens
Apologie for being ambiguous...
1. When I posted the question, I was not even getting the DMA interrupts. The input/output error was present.
2. After modifying the code a little I started getting the DMA interrupts, but the input/output error still persists. So I am doubting I might have messed up with the period size etc.
3. I am assigning s->periods = runtime->period i.e. without converting them in bytes, in prepare (I have seen some standard omap drivers doing the same, so I am not converting it to bytes, frames should be okay, but I will check this in h/w manual) and I take care in trigger too by updating the s->periods field.
4. Also, s->period is locked appropriately so dont think it is corrupted.
I am attaching the source file, I have attached only 1 file since I think it is relevant. Will send the log once I get chance to test it again.