18c2ecf20Sopenharmony_ci==================== 28c2ecf20Sopenharmony_ciASoC Platform Driver 38c2ecf20Sopenharmony_ci==================== 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ciAn ASoC platform driver class can be divided into audio DMA drivers, SoC DAI 68c2ecf20Sopenharmony_cidrivers and DSP drivers. The platform drivers only target the SoC CPU and must 78c2ecf20Sopenharmony_cihave no board specific code. 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ciAudio DMA 108c2ecf20Sopenharmony_ci========= 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ciThe platform DMA driver optionally supports the following ALSA operations:- 138c2ecf20Sopenharmony_ci:: 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci /* SoC audio ops */ 168c2ecf20Sopenharmony_ci struct snd_soc_ops { 178c2ecf20Sopenharmony_ci int (*startup)(struct snd_pcm_substream *); 188c2ecf20Sopenharmony_ci void (*shutdown)(struct snd_pcm_substream *); 198c2ecf20Sopenharmony_ci int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *); 208c2ecf20Sopenharmony_ci int (*hw_free)(struct snd_pcm_substream *); 218c2ecf20Sopenharmony_ci int (*prepare)(struct snd_pcm_substream *); 228c2ecf20Sopenharmony_ci int (*trigger)(struct snd_pcm_substream *, int); 238c2ecf20Sopenharmony_ci }; 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ciThe platform driver exports its DMA functionality via struct 268c2ecf20Sopenharmony_cisnd_soc_component_driver:- 278c2ecf20Sopenharmony_ci:: 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci struct snd_soc_component_driver { 308c2ecf20Sopenharmony_ci const char *name; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci ... 338c2ecf20Sopenharmony_ci int (*probe)(struct snd_soc_component *); 348c2ecf20Sopenharmony_ci void (*remove)(struct snd_soc_component *); 358c2ecf20Sopenharmony_ci int (*suspend)(struct snd_soc_component *); 368c2ecf20Sopenharmony_ci int (*resume)(struct snd_soc_component *); 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci /* pcm creation and destruction */ 398c2ecf20Sopenharmony_ci int (*pcm_new)(struct snd_soc_pcm_runtime *); 408c2ecf20Sopenharmony_ci void (*pcm_free)(struct snd_pcm *); 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci ... 438c2ecf20Sopenharmony_ci const struct snd_pcm_ops *ops; 448c2ecf20Sopenharmony_ci const struct snd_compr_ops *compr_ops; 458c2ecf20Sopenharmony_ci ... 468c2ecf20Sopenharmony_ci }; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ciPlease refer to the ALSA driver documentation for details of audio DMA. 498c2ecf20Sopenharmony_cihttp://www.alsa-project.org/~iwai/writing-an-alsa-driver/ 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ciAn example DMA driver is soc/pxa/pxa2xx-pcm.c 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ciSoC DAI Drivers 558c2ecf20Sopenharmony_ci=============== 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciEach SoC DAI driver must provide the following features:- 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci1. Digital audio interface (DAI) description 608c2ecf20Sopenharmony_ci2. Digital audio interface configuration 618c2ecf20Sopenharmony_ci3. PCM's description 628c2ecf20Sopenharmony_ci4. SYSCLK configuration 638c2ecf20Sopenharmony_ci5. Suspend and resume (optional) 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ciPlease see codec.rst for a description of items 1 - 4. 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ciSoC DSP Drivers 698c2ecf20Sopenharmony_ci=============== 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ciEach SoC DSP driver usually supplies the following features :- 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci1. DAPM graph 748c2ecf20Sopenharmony_ci2. Mixer controls 758c2ecf20Sopenharmony_ci3. DMA IO to/from DSP buffers (if applicable) 768c2ecf20Sopenharmony_ci4. Definition of DSP front end (FE) PCM devices. 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ciPlease see DPCM.txt for a description of item 4. 79