162306a36Sopenharmony_ci==================== 262306a36Sopenharmony_ciASoC Platform Driver 362306a36Sopenharmony_ci==================== 462306a36Sopenharmony_ci 562306a36Sopenharmony_ciAn ASoC platform driver class can be divided into audio DMA drivers, SoC DAI 662306a36Sopenharmony_cidrivers and DSP drivers. The platform drivers only target the SoC CPU and must 762306a36Sopenharmony_cihave no board specific code. 862306a36Sopenharmony_ci 962306a36Sopenharmony_ciAudio DMA 1062306a36Sopenharmony_ci========= 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciThe platform DMA driver optionally supports the following ALSA operations:- 1362306a36Sopenharmony_ci:: 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci /* SoC audio ops */ 1662306a36Sopenharmony_ci struct snd_soc_ops { 1762306a36Sopenharmony_ci int (*startup)(struct snd_pcm_substream *); 1862306a36Sopenharmony_ci void (*shutdown)(struct snd_pcm_substream *); 1962306a36Sopenharmony_ci int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *); 2062306a36Sopenharmony_ci int (*hw_free)(struct snd_pcm_substream *); 2162306a36Sopenharmony_ci int (*prepare)(struct snd_pcm_substream *); 2262306a36Sopenharmony_ci int (*trigger)(struct snd_pcm_substream *, int); 2362306a36Sopenharmony_ci }; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciThe platform driver exports its DMA functionality via struct 2662306a36Sopenharmony_cisnd_soc_component_driver:- 2762306a36Sopenharmony_ci:: 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci struct snd_soc_component_driver { 3062306a36Sopenharmony_ci const char *name; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci ... 3362306a36Sopenharmony_ci int (*probe)(struct snd_soc_component *); 3462306a36Sopenharmony_ci void (*remove)(struct snd_soc_component *); 3562306a36Sopenharmony_ci int (*suspend)(struct snd_soc_component *); 3662306a36Sopenharmony_ci int (*resume)(struct snd_soc_component *); 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci /* pcm creation and destruction */ 3962306a36Sopenharmony_ci int (*pcm_new)(struct snd_soc_pcm_runtime *); 4062306a36Sopenharmony_ci void (*pcm_free)(struct snd_pcm *); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci ... 4362306a36Sopenharmony_ci const struct snd_pcm_ops *ops; 4462306a36Sopenharmony_ci const struct snd_compr_ops *compr_ops; 4562306a36Sopenharmony_ci ... 4662306a36Sopenharmony_ci }; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ciPlease refer to the ALSA driver documentation for details of audio DMA. 4962306a36Sopenharmony_cihttps://www.kernel.org/doc/html/latest/sound/kernel-api/writing-an-alsa-driver.html 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciAn example DMA driver is soc/pxa/pxa2xx-pcm.c 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciSoC DAI Drivers 5562306a36Sopenharmony_ci=============== 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciEach SoC DAI driver must provide the following features:- 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci1. Digital audio interface (DAI) description 6062306a36Sopenharmony_ci2. Digital audio interface configuration 6162306a36Sopenharmony_ci3. PCM's description 6262306a36Sopenharmony_ci4. SYSCLK configuration 6362306a36Sopenharmony_ci5. Suspend and resume (optional) 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciPlease see codec.rst for a description of items 1 - 4. 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciSoC DSP Drivers 6962306a36Sopenharmony_ci=============== 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciEach SoC DSP driver usually supplies the following features :- 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci1. DAPM graph 7462306a36Sopenharmony_ci2. Mixer controls 7562306a36Sopenharmony_ci3. DMA IO to/from DSP buffers (if applicable) 7662306a36Sopenharmony_ci4. Definition of DSP front end (FE) PCM devices. 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ciPlease see DPCM.txt for a description of item 4. 79