Merge branch 'msm-fixes-v5.13-rc6' into msm-next-redo
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / sound / renesas,rsnd.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/sound/renesas,rsnd.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Renesas R-Car Sound Driver Device Tree Bindings
8
9 maintainers:
10   - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
11
12 properties:
13
14   compatible:
15     oneOf:
16       # for Gen1 SoC
17       - items:
18           - enum:
19               - renesas,rcar_sound-r8a7778   # R-Car M1A
20               - renesas,rcar_sound-r8a7779   # R-Car H1
21           - enum:
22               - renesas,rcar_sound-gen1
23       # for Gen2 SoC
24       - items:
25           - enum:
26               - renesas,rcar_sound-r8a7742   # RZ/G1H
27               - renesas,rcar_sound-r8a7743   # RZ/G1M
28               - renesas,rcar_sound-r8a7744   # RZ/G1N
29               - renesas,rcar_sound-r8a7745   # RZ/G1E
30               - renesas,rcar_sound-r8a77470  # RZ/G1C
31               - renesas,rcar_sound-r8a7790   # R-Car H2
32               - renesas,rcar_sound-r8a7791   # R-Car M2-W
33               - renesas,rcar_sound-r8a7793   # R-Car M2-N
34               - renesas,rcar_sound-r8a7794   # R-Car E2
35           - enum:
36               - renesas,rcar_sound-gen2
37       # for Gen3 SoC
38       - items:
39           - enum:
40               - renesas,rcar_sound-r8a774a1  # RZ/G2M
41               - renesas,rcar_sound-r8a774b1  # RZ/G2N
42               - renesas,rcar_sound-r8a774c0  # RZ/G2E
43               - renesas,rcar_sound-r8a774e1  # RZ/G2H
44               - renesas,rcar_sound-r8a7795   # R-Car H3
45               - renesas,rcar_sound-r8a7796   # R-Car M3-W
46               - renesas,rcar_sound-r8a77961  # R-Car M3-W+
47               - renesas,rcar_sound-r8a77965  # R-Car M3-N
48               - renesas,rcar_sound-r8a77990  # R-Car E3
49               - renesas,rcar_sound-r8a77995  # R-Car D3
50           - enum:
51               - renesas,rcar_sound-gen3
52       # for Generic
53       - items:
54           - enum:
55               - renesas,rcar_sound-gen1
56               - renesas,rcar_sound-gen2
57               - renesas,rcar_sound-gen3
58
59   reg:
60     minItems: 1
61     maxItems: 5
62
63   reg-names:
64     minItems: 1
65     maxItems: 5
66
67   "#sound-dai-cells":
68     description: |
69       it must be 0 if your system is using single DAI
70       it must be 1 if your system is using multi  DAIs
71     enum: [0, 1]
72
73   "#clock-cells":
74     description: |
75       it must be 0 if your system has audio_clkout
76       it must be 1 if your system has audio_clkout0/1/2/3
77     enum: [0, 1]
78
79   clock-frequency:
80     description: for audio_clkout0/1/2/3
81
82   clkout-lr-asynchronous:
83     description: audio_clkoutn is asynchronizes with lr-clock.
84     $ref: /schemas/types.yaml#/definitions/flag
85
86   power-domains: true
87
88   resets:
89     maxItems: 11
90
91   reset-names:
92     maxItems: 11
93
94   clocks:
95     description: References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks.
96     minItems: 1
97     maxItems: 31
98
99   clock-names:
100     description: List of necessary clock names.
101     minItems: 1
102     maxItems: 31
103     items:
104       oneOf:
105         - const: ssi-all
106         - pattern: '^ssi\.[0-9]$'
107         - pattern: '^src\.[0-9]$'
108         - pattern: '^mix\.[0-1]$'
109         - pattern: '^ctu\.[0-1]$'
110         - pattern: '^dvc\.[0-1]$'
111         - pattern: '^clk_(a|b|c|i)$'
112
113   port:
114     $ref: audio-graph-port.yaml#
115     unevaluatedProperties: false
116
117 # use patternProperties to avoid naming "xxx,yyy" issue
118 patternProperties:
119   "^rcar_sound,dvc$":
120     description: DVC subnode.
121     type: object
122     patternProperties:
123       "^dvc-[0-1]$":
124         type: object
125         properties:
126           dmas:
127             maxItems: 1
128           dma-names:
129             const: "tx"
130         required:
131           - dmas
132           - dma-names
133     additionalProperties: false
134
135   "^rcar_sound,mix$":
136     description: MIX subnode.
137     type: object
138     patternProperties:
139       "^mix-[0-1]$":
140         type: object
141         # no properties
142     additionalProperties: false
143
144   "^rcar_sound,ctu$":
145     description: CTU subnode.
146     type: object
147     patternProperties:
148       "^ctu-[0-7]$":
149         type: object
150         # no properties
151     additionalProperties: false
152
153   "^rcar_sound,src$":
154     description: SRC subnode.
155     type: object
156     patternProperties:
157       "^src-[0-9]$":
158         type: object
159         properties:
160           interrupts:
161             maxItems: 1
162           dmas:
163             maxItems: 2
164           dma-names:
165             allOf:
166               - items:
167                   enum:
168                     - tx
169                     - rx
170         required:
171           - interrupts
172           - dmas
173           - dma-names
174     additionalProperties: false
175
176   "^rcar_sound,ssiu$":
177     description: SSIU subnode.
178     type: object
179     patternProperties:
180       "^ssiu-[0-9]+$":
181         type: object
182         properties:
183           dmas:
184             maxItems: 2
185           dma-names:
186             allOf:
187               - items:
188                   enum:
189                     - tx
190                     - rx
191         required:
192           - dmas
193           - dma-names
194     additionalProperties: false
195
196   "^rcar_sound,ssi$":
197     description: SSI subnode.
198     type: object
199     patternProperties:
200       "^ssi-[0-9]$":
201         type: object
202         properties:
203           interrupts:
204             maxItems: 1
205           dmas:
206             minItems: 2
207             maxItems: 4
208           dma-names:
209             allOf:
210               - items:
211                   enum:
212                     - tx
213                     - rx
214                     - txu # if no ssiu node
215                     - rxu # if no ssiu node
216
217           shared-pin:
218             description: shared clock pin
219             $ref: /schemas/types.yaml#/definitions/flag
220           pio-transfer:
221             description: PIO transfer mode
222             $ref: /schemas/types.yaml#/definitions/flag
223           no-busif:
224             description: BUSIF is not used when [mem -> SSI] via DMA case
225             $ref: /schemas/types.yaml#/definitions/flag
226         required:
227           - interrupts
228           - dmas
229           - dma-names
230     additionalProperties: false
231
232   # For DAI base
233   "^rcar_sound,dai$":
234     description: DAI subnode.
235     type: object
236     patternProperties:
237       "^dai([0-9]+)?$":
238         type: object
239         properties:
240           playback:
241             $ref: /schemas/types.yaml#/definitions/phandle-array
242           capture:
243             $ref: /schemas/types.yaml#/definitions/phandle-array
244         anyOf:
245           - required:
246               - playback
247           - required:
248               - capture
249     additionalProperties: false
250
251 required:
252   - compatible
253   - reg
254   - reg-names
255   - clocks
256   - clock-names
257   - "#sound-dai-cells"
258
259 allOf:
260   - $ref: audio-graph.yaml#
261   - if:
262       properties:
263         compatible:
264           contains:
265             const: renesas,rcar_sound-gen1
266     then:
267       properties:
268         reg:
269           maxItems: 3
270         reg-names:
271           maxItems: 3
272           items:
273             enum:
274               - scu
275               - ssi
276               - adg
277     else:
278       properties:
279         reg:
280           maxItems: 5
281         reg-names:
282           maxItems: 5
283           items:
284             enum:
285               - scu
286               - adg
287               - ssiu
288               - ssi
289               - audmapp
290
291 additionalProperties: false
292
293 examples:
294   - |
295     rcar_sound: sound@ec500000 {
296         #sound-dai-cells = <1>;
297         compatible = "renesas,rcar_sound-r8a7790", "renesas,rcar_sound-gen2";
298         reg = <0xec500000 0x1000>, /* SCU  */
299               <0xec5a0000 0x100>,  /* ADG  */
300               <0xec540000 0x1000>, /* SSIU */
301               <0xec541000 0x1280>, /* SSI  */
302               <0xec740000 0x200>;  /* Audio DMAC peri peri*/
303         reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
304
305         clocks = <&mstp10_clks 1005>,                      /* SSI-ALL    */
306                  <&mstp10_clks 1006>, <&mstp10_clks 1007>, /* SSI9, SSI8 */
307                  <&mstp10_clks 1008>, <&mstp10_clks 1009>, /* SSI7, SSI6 */
308                  <&mstp10_clks 1010>, <&mstp10_clks 1011>, /* SSI5, SSI4 */
309                  <&mstp10_clks 1012>, <&mstp10_clks 1013>, /* SSI3, SSI2 */
310                  <&mstp10_clks 1014>, <&mstp10_clks 1015>, /* SSI1, SSI0 */
311                  <&mstp10_clks 1022>, <&mstp10_clks 1023>, /* SRC9, SRC8 */
312                  <&mstp10_clks 1024>, <&mstp10_clks 1025>, /* SRC7, SRC6 */
313                  <&mstp10_clks 1026>, <&mstp10_clks 1027>, /* SRC5, SRC4 */
314                  <&mstp10_clks 1028>, <&mstp10_clks 1029>, /* SRC3, SRC2 */
315                  <&mstp10_clks 1030>, <&mstp10_clks 1031>, /* SRC1, SRC0 */
316                  <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* MIX1, MIX0 */
317                  <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* CTU1, CTU0 */
318                  <&mstp10_clks 1019>, <&mstp10_clks 1018>, /* DVC0, DVC1 */
319                  <&audio_clk_a>, <&audio_clk_b>,           /* CLKA, CLKB */
320                  <&audio_clk_c>, <&audio_clk_i>;           /* CLKC, CLKI */
321
322         clock-names = "ssi-all",
323                       "ssi.9", "ssi.8",
324                       "ssi.7", "ssi.6",
325                       "ssi.5", "ssi.4",
326                       "ssi.3", "ssi.2",
327                       "ssi.1", "ssi.0",
328                       "src.9", "src.8",
329                       "src.7", "src.6",
330                       "src.5", "src.4",
331                       "src.3", "src.2",
332                       "src.1", "src.0",
333                       "mix.1", "mix.0",
334                       "ctu.1", "ctu.0",
335                       "dvc.0", "dvc.1",
336                       "clk_a", "clk_b",
337                       "clk_c", "clk_i";
338
339         rcar_sound,dvc {
340                dvc0: dvc-0 {
341                     dmas = <&audma0 0xbc>;
342                     dma-names = "tx";
343                };
344                dvc1: dvc-1 {
345                     dmas = <&audma0 0xbe>;
346                     dma-names = "tx";
347                };
348         };
349
350         rcar_sound,mix {
351             mix0: mix-0 { };
352             mix1: mix-1 { };
353         };
354
355         rcar_sound,ctu {
356             ctu00: ctu-0 { };
357             ctu01: ctu-1 { };
358             ctu02: ctu-2 { };
359             ctu03: ctu-3 { };
360             ctu10: ctu-4 { };
361             ctu11: ctu-5 { };
362             ctu12: ctu-6 { };
363             ctu13: ctu-7 { };
364         };
365
366         rcar_sound,src {
367             src0: src-0 {
368                 status = "disabled";
369             };
370             src1: src-1 {
371                 interrupts = <0 353 0>;
372                 dmas = <&audma0 0x87>, <&audma1 0x9c>;
373                 dma-names = "rx", "tx";
374             };
375             /* skip after src-2 */
376         };
377
378         rcar_sound,ssiu {
379             ssiu00: ssiu-0 {
380                 dmas = <&audma0 0x15>, <&audma1 0x16>;
381                 dma-names = "rx", "tx";
382             };
383             ssiu01: ssiu-1 {
384                 dmas = <&audma0 0x35>, <&audma1 0x36>;
385                 dma-names = "rx", "tx";
386             };
387             /* skip after ssiu-2 */
388         };
389
390         rcar_sound,ssi {
391             ssi0: ssi-0 {
392                 interrupts = <0 370 1>;
393                 dmas = <&audma0 0x01>, <&audma1 0x02>;
394                 dma-names = "rx", "tx";
395             };
396             ssi1: ssi-1 {
397                 interrupts = <0 371 1>;
398                 dmas = <&audma0 0x03>, <&audma1 0x04>;
399                 dma-names = "rx", "tx";
400             };
401             /* skip other ssi-2 */
402         };
403
404         /* DAI base */
405         rcar_sound,dai {
406             dai0 {
407                 playback = <&ssi5>, <&src5>;
408                 capture  = <&ssi6>;
409             };
410             dai1 {
411                 playback = <&ssi3>;
412             };
413             dai2 {
414                 capture  = <&ssi4>;
415             };
416             dai3 {
417                 playback = <&ssi7>;
418             };
419             dai4 {
420                 capture  = <&ssi8>;
421             };
422         };
423
424         /* assume audio-graph */
425         port {
426             rsnd_endpoint: endpoint {
427                 remote-endpoint = <&codec_endpoint>;
428
429                 dai-format = "left_j";
430                 bitclock-master = <&rsnd_endpoint0>;
431                 frame-master = <&rsnd_endpoint0>;
432
433                 playback = <&ssi0>, <&src0>, <&dvc0>;
434                 capture  = <&ssi1>, <&src1>, <&dvc1>;
435             };
436         };
437     };
438
439
440     /* assume audio-graph */
441     codec {
442         port {
443             codec_endpoint: endpoint {
444                 remote-endpoint = <&rsnd_endpoint>;
445             };
446         };
447     };