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