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