1 Audio Graph Card:
2
3 Audio Graph Card specifies audio DAI connections of SoC <-> codec.
4 It is based on common bindings for device graphs.
5 see ${LINUX}/Documentation/devicetree/bindings/graph.txt
6
7 Basically, Audio Graph Card property is same as Simple Card.
8 see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.yaml
9
10 Below are same as Simple-Card.
11
12 - label
13 - widgets
14 - routing
15 - dai-format
16 - frame-master
17 - bitclock-master
18 - bitclock-inversion
19 - frame-inversion
20 - mclk-fs
21 - hp-det-gpio
22 - mic-det-gpio
23 - dai-tdm-slot-num
24 - dai-tdm-slot-width
25 - clocks / system-clock-frequency
26
27 Required properties:
28
29 - compatible : "audio-graph-card";
30 - dais : list of CPU DAI port{s}
31
32 Optional properties:
33 - pa-gpios: GPIO used to control external amplifier.
34
35 -----------------------
36 Example: Single DAI case
37 -----------------------
38
39 sound_card {
40 compatible = "audio-graph-card";
41
42 dais = <&cpu_port>;
43 };
44
45 dai-controller {
46 ...
47 cpu_port: port {
48 cpu_endpoint: endpoint {
49 remote-endpoint = <&codec_endpoint>;
50
51 dai-format = "left_j";
52 ...
53 };
54 };
55 };
56
57 audio-codec {
58 ...
59 port {
60 codec_endpoint: endpoint {
61 remote-endpoint = <&cpu_endpoint>;
62 };
63 };
64 };
65
66 -----------------------
67 Example: Multi DAI case
68 -----------------------
69
70 sound-card {
71 compatible = "audio-graph-card";
72
73 label = "sound-card";
74
75 dais = <&cpu_port0
76 &cpu_port1
77 &cpu_port2>;
78 };
79
80 audio-codec@0 {
81 ...
82 port {
83 codec0_endpoint: endpoint {
84 remote-endpoint = <&cpu_endpoint0>;
85 };
86 };
87 };
88
89 audio-codec@1 {
90 ...
91 port {
92 codec1_endpoint: endpoint {
93 remote-endpoint = <&cpu_endpoint1>;
94 };
95 };
96 };
97
98 audio-codec@2 {
99 ...
100 port {
101 codec2_endpoint: endpoint {
102 remote-endpoint = <&cpu_endpoint2>;
103 };
104 };
105 };
106
107 dai-controller {
108 ...
109 ports {
110 cpu_port0: port@0 {
111 cpu_endpoint0: endpoint {
112 remote-endpoint = <&codec0_endpoint>;
113
114 dai-format = "left_j";
115 ...
116 };
117 };
118 cpu_port1: port@1 {
119 cpu_endpoint1: endpoint {
120 remote-endpoint = <&codec1_endpoint>;
121
122 dai-format = "i2s";
123 ...
124 };
125 };
126 cpu_port2: port@2 {
127 cpu_endpoint2: endpoint {
128 remote-endpoint = <&codec2_endpoint>;
129
130 dai-format = "i2s";
131 ...
132 };
133 };
134 };
135 };
136
137
138 -----------------------
139 Example: Sampling Rate Conversion
140 -----------------------
141
142 sound_card {
143 compatible = "audio-graph-card";
144
145 label = "sound-card";
146 prefix = "codec";
147 routing = "codec Playback", "DAI0 Playback",
148 "DAI0 Capture", "codec Capture";
149 convert-rate = <48000>;
150
151 dais = <&cpu_port>;
152 };
153
154 audio-codec {
155 ...
156 port {
157 codec_endpoint: endpoint {
158 remote-endpoint = <&cpu_endpoint>;
159 };
160 };
161 };
162
163 dai-controller {
164 ...
165 cpu_port: port {
166 cpu_endpoint: endpoint {
167 remote-endpoint = <&codec_endpoint>;
168
169 dai-format = "left_j";
170 ...
171 };
172 };
173 };
174
175 -----------------------
176 Example: 2 CPU 1 Codec (Mixing)
177 -----------------------
178
179 sound_card {
180 compatible = "audio-graph-card";
181
182 label = "sound-card";
183 routing = "codec Playback", "DAI0 Playback",
184 "codec Playback", "DAI1 Playback",
185 "DAI0 Capture", "codec Capture";
186
187 dais = <&cpu_port>;
188 };
189
190 audio-codec {
191 ...
192
193 audio-graph-card,prefix = "codec";
194 audio-graph-card,convert-rate = <48000>;
195 port {
196 reg = <0>;
197 codec_endpoint0: endpoint@0 {
198 remote-endpoint = <&cpu_endpoint0>;
199 };
200 codec_endpoint1: endpoint@1 {
201 remote-endpoint = <&cpu_endpoint1>;
202 };
203 };
204 };
205
206 dai-controller {
207 ...
208 cpu_port: port {
209 cpu_endpoint0: endpoint@0 {
210 remote-endpoint = <&codec_endpoint0>;
211
212 dai-format = "left_j";
213 ...
214 };
215 cpu_endpoint1: endpoint@1 {
216 remote-endpoint = <&codec_endpoint1>;
217
218 dai-format = "left_j";
219 ...
220 };
221 };
222 };
223
224 -----------------------
225 Example: Multi DAI with DPCM
226 -----------------------
227
228 CPU0 ------ ak4613
229 CPU1 ------ HDMI
230 CPU2 ------ PCM3168A-p /* DPCM 1ch/2ch */
231 CPU3 --/ /* DPCM 3ch/4ch */
232 CPU4 --/ /* DPCM 5ch/6ch */
233 CPU5 --/ /* DPCM 7ch/8ch */
234 CPU6 ------ PCM3168A-c
235
236 sound_card: sound {
237 compatible = "audio-graph-card";
238
239 label = "sound-card";
240
241 routing = "pcm3168a Playback", "DAI2 Playback",
242 "pcm3168a Playback", "DAI3 Playback",
243 "pcm3168a Playback", "DAI4 Playback",
244 "pcm3168a Playback", "DAI5 Playback";
245
246 dais = <&snd_port0 /* ak4613 */
247 &snd_port1 /* HDMI0 */
248 &snd_port2 /* pcm3168a playback */
249 &snd_port3 /* pcm3168a capture */
250 >;
251 };
252
253 ak4613: codec@10 {
254 ...
255 port {
256 ak4613_endpoint: endpoint {
257 remote-endpoint = <&rsnd_endpoint0>;
258 };
259 };
260 };
261
262 pcm3168a: audio-codec@44 {
263 ...
264 audio-graph-card,prefix = "pcm3168a";
265 audio-graph-card,convert-channels = <8>; /* TDM Split */
266 ports {
267 port@0 {
268 reg = <0>;
269 pcm3168a_endpoint_p1: endpoint@1 {
270 remote-endpoint = <&rsnd_endpoint2>;
271 ...
272 };
273 pcm3168a_endpoint_p2: endpoint@2 {
274 remote-endpoint = <&rsnd_endpoint3>;
275 ...
276 };
277 pcm3168a_endpoint_p3: endpoint@3 {
278 remote-endpoint = <&rsnd_endpoint4>;
279 ...
280 };
281 pcm3168a_endpoint_p4: endpoint@4 {
282 remote-endpoint = <&rsnd_endpoint5>;
283 ...
284 };
285 };
286 port@1 {
287 reg = <1>;
288 pcm3168a_endpoint_c: endpoint {
289 remote-endpoint = <&rsnd_endpoint6>;
290 ...
291 };
292 };
293 };
294 };
295
296 &sound {
297 ports {
298 snd_port0: port@0 {
299 rsnd_endpoint0: endpoint {
300 remote-endpoint = <&ak4613_endpoint>;
301 ...
302 };
303 };
304 snd_port1: port@1 {
305 rsnd_endpoint1: endpoint {
306 remote-endpoint = <&dw_hdmi0_snd_in>;
307 ...
308 };
309 };
310 snd_port2: port@2 {
311 #address-cells = <1>;
312 #size-cells = <0>;
313 rsnd_endpoint2: endpoint@2 {
314 remote-endpoint = <&pcm3168a_endpoint_p1>;
315 ...
316 };
317 rsnd_endpoint3: endpoint@3 {
318 remote-endpoint = <&pcm3168a_endpoint_p2>;
319 ...
320 };
321 rsnd_endpoint4: endpoint@4 {
322 remote-endpoint = <&pcm3168a_endpoint_p3>;
323 ...
324 };
325 rsnd_endpoint5: endpoint@5 {
326 remote-endpoint = <&pcm3168a_endpoint_p4>;
327 ...
328 };
329 };
330 snd_port3: port@6 {
331 rsnd_endpoint6: endpoint {
332 remote-endpoint = <&pcm3168a_endpoint_c>;
333 ...
334 };
335 };
336 };
337 };
Cache object: b7405b9995e244f0c674582c86384318
|