1*4882a593Smuzhiyun==================== 2*4882a593SmuzhiyunASoC Platform Driver 3*4882a593Smuzhiyun==================== 4*4882a593Smuzhiyun 5*4882a593SmuzhiyunAn ASoC platform driver class can be divided into audio DMA drivers, SoC DAI 6*4882a593Smuzhiyundrivers and DSP drivers. The platform drivers only target the SoC CPU and must 7*4882a593Smuzhiyunhave no board specific code. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunAudio DMA 10*4882a593Smuzhiyun========= 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunThe platform DMA driver optionally supports the following ALSA operations:- 13*4882a593Smuzhiyun:: 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* SoC audio ops */ 16*4882a593Smuzhiyun struct snd_soc_ops { 17*4882a593Smuzhiyun int (*startup)(struct snd_pcm_substream *); 18*4882a593Smuzhiyun void (*shutdown)(struct snd_pcm_substream *); 19*4882a593Smuzhiyun int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *); 20*4882a593Smuzhiyun int (*hw_free)(struct snd_pcm_substream *); 21*4882a593Smuzhiyun int (*prepare)(struct snd_pcm_substream *); 22*4882a593Smuzhiyun int (*trigger)(struct snd_pcm_substream *, int); 23*4882a593Smuzhiyun }; 24*4882a593Smuzhiyun 25*4882a593SmuzhiyunThe platform driver exports its DMA functionality via struct 26*4882a593Smuzhiyunsnd_soc_component_driver:- 27*4882a593Smuzhiyun:: 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun struct snd_soc_component_driver { 30*4882a593Smuzhiyun const char *name; 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun ... 33*4882a593Smuzhiyun int (*probe)(struct snd_soc_component *); 34*4882a593Smuzhiyun void (*remove)(struct snd_soc_component *); 35*4882a593Smuzhiyun int (*suspend)(struct snd_soc_component *); 36*4882a593Smuzhiyun int (*resume)(struct snd_soc_component *); 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* pcm creation and destruction */ 39*4882a593Smuzhiyun int (*pcm_new)(struct snd_soc_pcm_runtime *); 40*4882a593Smuzhiyun void (*pcm_free)(struct snd_pcm *); 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun ... 43*4882a593Smuzhiyun const struct snd_pcm_ops *ops; 44*4882a593Smuzhiyun const struct snd_compr_ops *compr_ops; 45*4882a593Smuzhiyun ... 46*4882a593Smuzhiyun }; 47*4882a593Smuzhiyun 48*4882a593SmuzhiyunPlease refer to the ALSA driver documentation for details of audio DMA. 49*4882a593Smuzhiyunhttp://www.alsa-project.org/~iwai/writing-an-alsa-driver/ 50*4882a593Smuzhiyun 51*4882a593SmuzhiyunAn example DMA driver is soc/pxa/pxa2xx-pcm.c 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun 54*4882a593SmuzhiyunSoC DAI Drivers 55*4882a593Smuzhiyun=============== 56*4882a593Smuzhiyun 57*4882a593SmuzhiyunEach SoC DAI driver must provide the following features:- 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun1. Digital audio interface (DAI) description 60*4882a593Smuzhiyun2. Digital audio interface configuration 61*4882a593Smuzhiyun3. PCM's description 62*4882a593Smuzhiyun4. SYSCLK configuration 63*4882a593Smuzhiyun5. Suspend and resume (optional) 64*4882a593Smuzhiyun 65*4882a593SmuzhiyunPlease see codec.rst for a description of items 1 - 4. 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun 68*4882a593SmuzhiyunSoC DSP Drivers 69*4882a593Smuzhiyun=============== 70*4882a593Smuzhiyun 71*4882a593SmuzhiyunEach SoC DSP driver usually supplies the following features :- 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun1. DAPM graph 74*4882a593Smuzhiyun2. Mixer controls 75*4882a593Smuzhiyun3. DMA IO to/from DSP buffers (if applicable) 76*4882a593Smuzhiyun4. Definition of DSP front end (FE) PCM devices. 77*4882a593Smuzhiyun 78*4882a593SmuzhiyunPlease see DPCM.txt for a description of item 4. 79