[alsa-devel] Non-DMA ASoC driver

Craig McQueen craig.mcqueen at beamcommunications.com
Wed Nov 28 05:46:37 CET 2012

I'm exploring hardware options for an audio interface for a Freescale i.MX28-based embedded Linux device. One option is to use a Synchronous Serial Port interface to connect in slave mode to an external CODEC. I have several doubts about the feasibility of this option, but for now, I have just one question:

If we use this SSP, then we can't use DMA, but we would have to use interrupts for audio transfer. But I can't find any example code for a non-DMA based ASoC driver. Is it feasible to make a non-DMA based ASoC driver? How would it be implemented?

All the ASoC drivers I see use a machine driver that declares a struct snd_soc_card with field .platform that points to a struct snd_soc_platform object, which implements the DMA stuff. If I don't use DMA, do I still need to somehow make a non-DMA platform driver that implements a struct snd_soc_platform object and handles the interrupts? Or, should I handle the interrupts and audio buffer manipulation directly in the CPU DAI driver?

(My current guess is that this is feasible, but charting new territory, so we'll probably end up using different hardware design that allows us to do a more conventional DMA-based driver.)

Craig McQueen

More information about the Alsa-devel mailing list