xref: /OK3568_Linux_fs/kernel/Documentation/sound/soc/platform.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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