[alsa-devel] About snd_dmaengine_pcm_trigger()

Kuninori Morimoto kuninori.morimoto.gx at gmail.com
Wed Mar 5 06:20:47 CET 2014

Hi Mark, Lars and all

I need your opinion

Now, I'm working for ${LINUX}/sound/soc/sh/fsi and ${LINUX}/sound/soc/sh/rcar drirvers.
These drivers are supporting DMAEngine transfer,
but it is using original DMAEngine method,
not using snd_dmaengine_pcm_trigger() or snd_dmaengine_pcm_register().
I was requested to use it from Mark.

The reason why I couldn't use it was our DMAEngine
didn't have "cyclic" tranfer support which is used on
But now, I created cyclic support on our DMA driver (on my local PC at this point)

Then, I noticed our drivers still can't use snd_dmaengine_pcm_xxx() method.

1st, our device needs PIO tranfer support too.
Current PIO/DMA transfer are sharing many methods/functions.
Code will become difficult to read if it is separated forcibly.
(to using snd_dmaengine_pcm_xxx())

2nd, our device DMA ON/OFF timing has relation ship to other register settings.
Unfortunately, our device is picky, it needs like this

               HW init setting -> DMA ON -> HW start setting

It can be solved if snd_dmaengine_pcm_xxx() has callbacks,
but many callbacks are needed...

3rd, our device needs special method on snd_pcm_ops
int the future.

From my point of view,
our driver can replace to use "cyclic" DMA transfer
instead of current original DMAEngine method.
I guess, it is not difficult.
But, using snd_dmaengine_pcm_xxx() is difficult.

But, what do you think ?

More information about the Alsa-devel mailing list