30 Aug
2020
30 Aug
'20
9:35 p.m.
Hello,
Looking at the code in dai.c, we have:
pipeline_trigger() (COMP_TRIGGER_START) -> dai_start() [1] -> dma_start() [2] -> pipeline_schedule_copy() [3] -> pipeline_copy()
In our implementation, dai_start() will generate a DMA request immediately and dma_start() will generate a transfer immediately.
The biggest problem is that the IRQ handler for DMA request is registered only at point (3) thus sometimes first DMA interrupt is lost resulting in copy not being started. (DMA IRQ is edge triggered).
Can one point how working with DMA should look like?