At Wed, 05 Sep 2007 14:47:22 +0530, Markus Franke wrote:
Clemens Ladisch wrote:
Markus Franke wrote:
It seems like that after the 8th period is transferred pcm_trigger(TRIGGER_STOP) isn't getting called.
Indeed. The stop trigger is called when the entire stream is to be stopped.
Well, start and stop trigger get always called mutually. In pseudo code it would look like this:
---snip--- TRIGGER_START
transfer one period via DMA
TRIGGER_STOP
update DMAC settings in DMA transfer finished callback and call snd_pcm_period_elapsed()
TRIGGER_START
transfer one period via DMA
TRIGGER_STOP
update DMAC settings in DMA transfer finished callback and call snd_pcm_period_elapsed()
....and so on. ---snap---
At least this is the behaviour I experienced.
It's your mis-interpretation of START/STOP concenpt in the ALSA framework. The trigger START and STOP mean the start/stop of the whole streaming operation. It's basically called from the outside, i.e. the application starts/stops the stream. If you need to keep some DMA start/stop operations internally, do it in the driver lowlevel side internally.
Takashi