| ==================== | |
| ASoC Platform Driver | |
| ==================== | |
| An ASoC platform driver class can be divided into audio DMA drivers, SoC DAI | |
| drivers and DSP drivers. The platform drivers only target the SoC CPU and must | |
| have no board specific code. | |
| Audio DMA | |
| ========= | |
| The platform DMA driver optionally supports the following ALSA operations:- | |
| :: | |
| /* SoC audio ops */ | |
| struct snd_soc_ops { | |
| int (*startup)(struct snd_pcm_substream *); | |
| void (*shutdown)(struct snd_pcm_substream *); | |
| int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *); | |
| int (*hw_free)(struct snd_pcm_substream *); | |
| int (*prepare)(struct snd_pcm_substream *); | |
| int (*trigger)(struct snd_pcm_substream *, int); | |
| }; | |
| The platform driver exports its DMA functionality via struct | |
| snd_soc_component_driver:- | |
| :: | |
| struct snd_soc_component_driver { | |
| const char *name; | |
| ... | |
| int (*probe)(struct snd_soc_component *); | |
| void (*remove)(struct snd_soc_component *); | |
| int (*suspend)(struct snd_soc_component *); | |
| int (*resume)(struct snd_soc_component *); | |
| /* pcm creation and destruction */ | |
| int (*pcm_new)(struct snd_soc_pcm_runtime *); | |
| void (*pcm_free)(struct snd_pcm *); | |
| ... | |
| const struct snd_pcm_ops *ops; | |
| const struct snd_compr_ops *compr_ops; | |
| ... | |
| }; | |
| Please refer to the ALSA driver documentation for details of audio DMA. | |
| https://www.kernel.org/doc/html/latest/sound/kernel-api/writing-an-alsa-driver.html | |
| An example DMA driver is soc/pxa/pxa2xx-pcm.c | |
| SoC DAI Drivers | |
| =============== | |
| Each SoC DAI driver must provide the following features:- | |
| 1. Digital audio interface (DAI) description | |
| 2. Digital audio interface configuration | |
| 3. PCM's description | |
| 4. SYSCLK configuration | |
| 5. Suspend and resume (optional) | |
| Please see codec.rst for a description of items 1 - 4. | |
| SoC DSP Drivers | |
| =============== | |
| Each SoC DSP driver usually supplies the following features :- | |
| 1. DAPM graph | |
| 2. Mixer controls | |
| 3. DMA IO to/from DSP buffers (if applicable) | |
| 4. Definition of DSP front end (FE) PCM devices. | |
| Please see DPCM.txt for a description of item 4. |