1ASoC Platform Driver 2==================== 3 4An ASoC platform driver can be divided into audio DMA and SoC DAI configuration 5and control. The platform drivers only target the SoC CPU and must have no board 6specific code. 7 8Audio DMA 9========= 10 11The platform DMA driver optionally supports the following ALSA operations:- 12 13/* SoC audio ops */ 14struct snd_soc_ops { 15 int (*startup)(struct snd_pcm_substream *); 16 void (*shutdown)(struct snd_pcm_substream *); 17 int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *); 18 int (*hw_free)(struct snd_pcm_substream *); 19 int (*prepare)(struct snd_pcm_substream *); 20 int (*trigger)(struct snd_pcm_substream *, int); 21}; 22 23The platform driver exports its DMA functionality via struct 24snd_soc_platform_driver:- 25 26struct snd_soc_platform_driver { 27 char *name; 28 29 int (*probe)(struct platform_device *pdev); 30 int (*remove)(struct platform_device *pdev); 31 int (*suspend)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai); 32 int (*resume)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai); 33 34 /* pcm creation and destruction */ 35 int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *); 36 void (*pcm_free)(struct snd_pcm *); 37 38 /* 39 * For platform caused delay reporting. 40 * Optional. 41 */ 42 snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *, 43 struct snd_soc_dai *); 44 45 /* platform stream ops */ 46 struct snd_pcm_ops *pcm_ops; 47}; 48 49Please refer to the ALSA driver documentation for details of audio DMA. 50http://www.alsa-project.org/~iwai/writing-an-alsa-driver/ 51 52An example DMA driver is soc/pxa/pxa2xx-pcm.c 53 54 55SoC DAI Drivers 56=============== 57 58Each SoC DAI driver must provide the following features:- 59 60 1) Digital audio interface (DAI) description 61 2) Digital audio interface configuration 62 3) PCM's description 63 4) SYSCLK configuration 64 5) Suspend and resume (optional) 65 66Please see codec.txt for a description of items 1 - 4. 67