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