Merge tag 'mips_5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux
[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     minItems: 1
90     maxItems: 11
91
92   reset-names:
93     minItems: 1
94     maxItems: 11
95
96   clocks:
97     description: References to SSI/SRC/MIX/CTU/DVC/AUDIO_CLK clocks.
98     minItems: 1
99     maxItems: 31
100
101   clock-names:
102     description: List of necessary clock names.
103     minItems: 1
104     maxItems: 31
105     items:
106       oneOf:
107         - const: ssi-all
108         - pattern: '^ssi\.[0-9]$'
109         - pattern: '^src\.[0-9]$'
110         - pattern: '^mix\.[0-1]$'
111         - pattern: '^ctu\.[0-1]$'
112         - pattern: '^dvc\.[0-1]$'
113         - pattern: '^clk_(a|b|c|i)$'
114
115   ports:
116     $ref: /schemas/graph.yaml#/properties/ports
117     patternProperties:
118       port(@[0-9a-f]+)?:
119         $ref: audio-graph-port.yaml#
120         unevaluatedProperties: false
121
122   port:
123     $ref: audio-graph-port.yaml#
124     unevaluatedProperties: false
125
126 # use patternProperties to avoid naming "xxx,yyy" issue
127 patternProperties:
128   "^rcar_sound,dvc$":
129     description: DVC subnode.
130     type: object
131     patternProperties:
132       "^dvc-[0-1]$":
133         type: object
134         properties:
135           dmas:
136             maxItems: 1
137           dma-names:
138             const: "tx"
139         required:
140           - dmas
141           - dma-names
142     additionalProperties: false
143
144   "^rcar_sound,mix$":
145     description: MIX subnode.
146     type: object
147     patternProperties:
148       "^mix-[0-1]$":
149         type: object
150         # no properties
151     additionalProperties: false
152
153   "^rcar_sound,ctu$":
154     description: CTU subnode.
155     type: object
156     patternProperties:
157       "^ctu-[0-7]$":
158         type: object
159         # no properties
160     additionalProperties: false
161
162   "^rcar_sound,src$":
163     description: SRC subnode.
164     type: object
165     patternProperties:
166       "^src-[0-9]$":
167         type: object
168         properties:
169           interrupts:
170             maxItems: 1
171           dmas:
172             maxItems: 2
173           dma-names:
174             allOf:
175               - items:
176                   enum:
177                     - tx
178                     - rx
179         required:
180           - interrupts
181           - dmas
182           - dma-names
183     additionalProperties: false
184
185   "^rcar_sound,ssiu$":
186     description: SSIU subnode.
187     type: object
188     patternProperties:
189       "^ssiu-[0-9]+$":
190         type: object
191         properties:
192           dmas:
193             maxItems: 2
194           dma-names:
195             allOf:
196               - items:
197                   enum:
198                     - tx
199                     - rx
200         required:
201           - dmas
202           - dma-names
203     additionalProperties: false
204
205   "^rcar_sound,ssi$":
206     description: SSI subnode.
207     type: object
208     patternProperties:
209       "^ssi-[0-9]$":
210         type: object
211         properties:
212           interrupts:
213             maxItems: 1
214           dmas:
215             minItems: 2
216             maxItems: 4
217           dma-names:
218             allOf:
219               - items:
220                   enum:
221                     - tx
222                     - rx
223                     - txu # if no ssiu node
224                     - rxu # if no ssiu node
225
226           shared-pin:
227             description: shared clock pin
228             $ref: /schemas/types.yaml#/definitions/flag
229           pio-transfer:
230             description: PIO transfer mode
231             $ref: /schemas/types.yaml#/definitions/flag
232           no-busif:
233             description: BUSIF is not used when [mem -> SSI] via DMA case
234             $ref: /schemas/types.yaml#/definitions/flag
235         required:
236           - interrupts
237           - dmas
238           - dma-names
239     additionalProperties: false
240
241   # For DAI base
242   "^rcar_sound,dai$":
243     description: DAI subnode.
244     type: object
245     patternProperties:
246       "^dai([0-9]+)?$":
247         type: object
248         properties:
249           playback:
250             $ref: /schemas/types.yaml#/definitions/phandle-array
251           capture:
252             $ref: /schemas/types.yaml#/definitions/phandle-array
253         anyOf:
254           - required:
255               - playback
256           - required:
257               - capture
258     additionalProperties: false
259
260 required:
261   - compatible
262   - reg
263   - reg-names
264   - clocks
265   - clock-names
266   - "#sound-dai-cells"
267
268 allOf:
269   - if:
270       properties:
271         compatible:
272           contains:
273             const: renesas,rcar_sound-gen1
274     then:
275       properties:
276         reg:
277           maxItems: 3
278         reg-names:
279           maxItems: 3
280           items:
281             enum:
282               - scu
283               - ssi
284               - adg
285     else:
286       properties:
287         reg:
288           maxItems: 5
289         reg-names:
290           maxItems: 5
291           items:
292             enum:
293               - scu
294               - adg
295               - ssiu
296               - ssi
297               - audmapp
298
299 additionalProperties: false
300
301 examples:
302   - |
303     rcar_sound: sound@ec500000 {
304         #sound-dai-cells = <1>;
305         compatible = "renesas,rcar_sound-r8a7790", "renesas,rcar_sound-gen2";
306         reg = <0xec500000 0x1000>, /* SCU  */
307               <0xec5a0000 0x100>,  /* ADG  */
308               <0xec540000 0x1000>, /* SSIU */
309               <0xec541000 0x1280>, /* SSI  */
310               <0xec740000 0x200>;  /* Audio DMAC peri peri*/
311         reg-names = "scu", "adg", "ssiu", "ssi", "audmapp";
312
313         clocks = <&mstp10_clks 1005>,                      /* SSI-ALL    */
314                  <&mstp10_clks 1006>, <&mstp10_clks 1007>, /* SSI9, SSI8 */
315                  <&mstp10_clks 1008>, <&mstp10_clks 1009>, /* SSI7, SSI6 */
316                  <&mstp10_clks 1010>, <&mstp10_clks 1011>, /* SSI5, SSI4 */
317                  <&mstp10_clks 1012>, <&mstp10_clks 1013>, /* SSI3, SSI2 */
318                  <&mstp10_clks 1014>, <&mstp10_clks 1015>, /* SSI1, SSI0 */
319                  <&mstp10_clks 1022>, <&mstp10_clks 1023>, /* SRC9, SRC8 */
320                  <&mstp10_clks 1024>, <&mstp10_clks 1025>, /* SRC7, SRC6 */
321                  <&mstp10_clks 1026>, <&mstp10_clks 1027>, /* SRC5, SRC4 */
322                  <&mstp10_clks 1028>, <&mstp10_clks 1029>, /* SRC3, SRC2 */
323                  <&mstp10_clks 1030>, <&mstp10_clks 1031>, /* SRC1, SRC0 */
324                  <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* MIX1, MIX0 */
325                  <&mstp10_clks 1020>, <&mstp10_clks 1021>, /* CTU1, CTU0 */
326                  <&mstp10_clks 1019>, <&mstp10_clks 1018>, /* DVC0, DVC1 */
327                  <&audio_clk_a>, <&audio_clk_b>,           /* CLKA, CLKB */
328                  <&audio_clk_c>, <&audio_clk_i>;           /* CLKC, CLKI */
329
330         clock-names = "ssi-all",
331                       "ssi.9", "ssi.8",
332                       "ssi.7", "ssi.6",
333                       "ssi.5", "ssi.4",
334                       "ssi.3", "ssi.2",
335                       "ssi.1", "ssi.0",
336                       "src.9", "src.8",
337                       "src.7", "src.6",
338                       "src.5", "src.4",
339                       "src.3", "src.2",
340                       "src.1", "src.0",
341                       "mix.1", "mix.0",
342                       "ctu.1", "ctu.0",
343                       "dvc.0", "dvc.1",
344                       "clk_a", "clk_b",
345                       "clk_c", "clk_i";
346
347         rcar_sound,dvc {
348                dvc0: dvc-0 {
349                     dmas = <&audma0 0xbc>;
350                     dma-names = "tx";
351                };
352                dvc1: dvc-1 {
353                     dmas = <&audma0 0xbe>;
354                     dma-names = "tx";
355                };
356         };
357
358         rcar_sound,mix {
359             mix0: mix-0 { };
360             mix1: mix-1 { };
361         };
362
363         rcar_sound,ctu {
364             ctu00: ctu-0 { };
365             ctu01: ctu-1 { };
366             ctu02: ctu-2 { };
367             ctu03: ctu-3 { };
368             ctu10: ctu-4 { };
369             ctu11: ctu-5 { };
370             ctu12: ctu-6 { };
371             ctu13: ctu-7 { };
372         };
373
374         rcar_sound,src {
375             src0: src-0 {
376                 status = "disabled";
377             };
378             src1: src-1 {
379                 interrupts = <0 353 0>;
380                 dmas = <&audma0 0x87>, <&audma1 0x9c>;
381                 dma-names = "rx", "tx";
382             };
383             /* skip after src-2 */
384         };
385
386         rcar_sound,ssiu {
387             ssiu00: ssiu-0 {
388                 dmas = <&audma0 0x15>, <&audma1 0x16>;
389                 dma-names = "rx", "tx";
390             };
391             ssiu01: ssiu-1 {
392                 dmas = <&audma0 0x35>, <&audma1 0x36>;
393                 dma-names = "rx", "tx";
394             };
395             /* skip after ssiu-2 */
396         };
397
398         rcar_sound,ssi {
399             ssi0: ssi-0 {
400                 interrupts = <0 370 1>;
401                 dmas = <&audma0 0x01>, <&audma1 0x02>;
402                 dma-names = "rx", "tx";
403             };
404             ssi1: ssi-1 {
405                 interrupts = <0 371 1>;
406                 dmas = <&audma0 0x03>, <&audma1 0x04>;
407                 dma-names = "rx", "tx";
408             };
409             /* skip other ssi-2 */
410         };
411
412         /* DAI base */
413         rcar_sound,dai {
414             dai0 {
415                 playback = <&ssi5>, <&src5>;
416                 capture  = <&ssi6>;
417             };
418             dai1 {
419                 playback = <&ssi3>;
420             };
421             dai2 {
422                 capture  = <&ssi4>;
423             };
424             dai3 {
425                 playback = <&ssi7>;
426             };
427             dai4 {
428                 capture  = <&ssi8>;
429             };
430         };
431
432         /* assume audio-graph */
433         port {
434             rsnd_endpoint: endpoint {
435                 remote-endpoint = <&codec_endpoint>;
436
437                 dai-format = "left_j";
438                 bitclock-master = <&rsnd_endpoint0>;
439                 frame-master = <&rsnd_endpoint0>;
440
441                 playback = <&ssi0>, <&src0>, <&dvc0>;
442                 capture  = <&ssi1>, <&src1>, <&dvc1>;
443             };
444         };
445     };
446
447
448     /* assume audio-graph */
449     codec {
450         port {
451             codec_endpoint: endpoint {
452                 remote-endpoint = <&rsnd_endpoint>;
453             };
454         };
455     };