On Thu, May 31, 2012 at 7:45 PM, Mark Brown broonie@opensource.wolfsonmicro.com wrote:
Please re-read what I wrote.
Let me clarify. Do you say native DMA driver API like dmaengine_prep_slave_sg(), dmaengine_submit() shouldn't be used from ASoC driver, right ?
Your driver should be written in terms of the ASoC DMA framework.
I understand your order. But isn't it only me ? You mean all ASoC driver uses dmaengine should be written in terms of the ASoC DMA framework. Right ?
No, all current mainline drivers using the library use cyclic DMA.
I can't see any driver uses cyclic DMA. (I saw linux-next's tree from kernel.org.) Where is your saying "current mainline" ?
Linus' tree, or mine.
Sorry, I couldn't find. Is your saying Linus's tree this ? git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git However, any ASoC driver doesn't use cyclic DMA's.
Have you even looked at the soc-dmaengine-pcm code? It uncondtionally requests a cyclic channel.
I already saw soc-dmaengine-pcm.c
However I think it seems difficult for supporting all devices. Because hardware dependency control code can't be added. For example, for ML7213, needs interrupt control both before/after DMA transfer. However, in case of using soc-dmaengine, the control can't be done. Because the processing is in soc-dmaengine.
Please be more specific. What are the concrete problems that you see? Why is it not possible to address them within the framework?
I show the code. +static void i2s_dma_tx_complete(void *arg) +{ ...
+ + ioh_i2s_irq_ctrl(ioh->number, SNDRV_PCM_STREAM_PLAYBACK, IOH_EN_IRQ); ##<<Interrupt control +}
Our device needs interrupt control both before/after DMA transfer like above. In your soc-dma-engine, DMA transfer complete code is in soc-dma-engine, right ? So, the vendor specific code like the above can't be written.
thanks.