xref: /linux/Documentation/devicetree/bindings/sound/nvidia,tegra-audio-graph-card.yaml (revision fa79e55d467366a2c52c68a261a0d6ea5f8a6534)
1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/sound/nvidia,tegra-audio-graph-card.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Audio Graph based Tegra sound card driver
8
9description: |
10  This is based on generic audio graph card driver along with additional
11  customizations for Tegra platforms. It uses the same bindings with
12  additional standard clock DT bindings required for Tegra.
13
14maintainers:
15  - Jon Hunter <jonathanh@nvidia.com>
16  - Sameer Pujar <spujar@nvidia.com>
17
18allOf:
19  - $ref: audio-graph.yaml#
20
21properties:
22  compatible:
23    enum:
24      - nvidia,tegra210-audio-graph-card
25      - nvidia,tegra186-audio-graph-card
26      - nvidia,tegra264-audio-graph-card
27
28  clocks:
29    minItems: 2
30
31  clock-names:
32    items:
33      - const: pll_a
34      - const: plla_out0
35
36  assigned-clocks:
37    minItems: 1
38    maxItems: 3
39
40  assigned-clock-parents:
41    minItems: 1
42    maxItems: 3
43
44  assigned-clock-rates:
45    minItems: 1
46    maxItems: 3
47
48  interconnects:
49    items:
50      - description: APE read memory client
51      - description: APE write memory client
52
53  interconnect-names:
54    items:
55      - const: dma-mem # read
56      - const: write
57
58  iommus:
59    maxItems: 1
60
61required:
62  - clocks
63  - clock-names
64  - assigned-clocks
65  - assigned-clock-parents
66
67unevaluatedProperties: false
68
69examples:
70  - |
71    #include<dt-bindings/clock/tegra210-car.h>
72
73    tegra_sound {
74        compatible = "nvidia,tegra210-audio-graph-card";
75
76        clocks = <&tegra_car TEGRA210_CLK_PLL_A>,
77                 <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
78        clock-names = "pll_a", "plla_out0";
79
80        assigned-clocks = <&tegra_car TEGRA210_CLK_PLL_A>,
81                          <&tegra_car TEGRA210_CLK_PLL_A_OUT0>,
82                          <&tegra_car TEGRA210_CLK_EXTERN1>;
83        assigned-clock-parents = <0>, <0>, <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
84        assigned-clock-rates = <368640000>, <49152000>, <12288000>;
85
86        dais = /* FE */
87               <&admaif1_port>,
88               /* Router */
89               <&xbar_i2s1_port>,
90               /* I/O DAP Ports */
91               <&i2s1_port>;
92
93        label = "jetson-tx1-ape";
94    };
95
96    // The ports are defined for AHUB and its child devices.
97    ahub@702d0800 {
98        compatible = "nvidia,tegra210-ahub";
99        reg = <0x702d0800 0x800>;
100        clocks = <&tegra_car TEGRA210_CLK_D_AUDIO>;
101        clock-names = "ahub";
102        assigned-clocks = <&tegra_car TEGRA210_CLK_D_AUDIO>;
103        assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
104        #address-cells = <1>;
105        #size-cells = <1>;
106        ranges = <0x702d0000 0x702d0000 0x0000e400>;
107
108        ports {
109            #address-cells = <1>;
110            #size-cells = <0>;
111
112            port@0 {
113                reg = <0x0>;
114                xbar_admaif1_ep: endpoint {
115                    remote-endpoint = <&admaif1_ep>;
116                };
117            };
118
119            // ...
120
121            xbar_i2s1_port: port@a {
122                reg = <0xa>;
123                xbar_i2s1_ep: endpoint {
124                    remote-endpoint = <&i2s1_cif_ep>;
125                };
126            };
127        };
128
129        admaif@702d0000 {
130            compatible = "nvidia,tegra210-admaif";
131            reg = <0x702d0000 0x800>;
132            dmas = <&adma 1>,  <&adma 1>,
133                   <&adma 2>,  <&adma 2>,
134                   <&adma 3>,  <&adma 3>,
135                   <&adma 4>,  <&adma 4>,
136                   <&adma 5>,  <&adma 5>,
137                   <&adma 6>,  <&adma 6>,
138                   <&adma 7>,  <&adma 7>,
139                   <&adma 8>,  <&adma 8>,
140                   <&adma 9>,  <&adma 9>,
141                   <&adma 10>, <&adma 10>;
142            dma-names = "rx1",  "tx1",
143                        "rx2",  "tx2",
144                        "rx3",  "tx3",
145                        "rx4",  "tx4",
146                        "rx5",  "tx5",
147                        "rx6",  "tx6",
148                        "rx7",  "tx7",
149                        "rx8",  "tx8",
150                        "rx9",  "tx9",
151                        "rx10", "tx10";
152
153            ports {
154                #address-cells = <1>;
155                #size-cells = <0>;
156
157                admaif1_port: port@0 {
158                    reg = <0x0>;
159                    admaif1_ep: endpoint {
160                        remote-endpoint = <&xbar_admaif1_ep>;
161                    };
162                };
163
164                // More ADMAIF ports to follow
165            };
166        };
167
168        i2s@702d1000 {
169            compatible = "nvidia,tegra210-i2s";
170            clocks = <&tegra_car TEGRA210_CLK_I2S0>;
171            clock-names = "i2s";
172            assigned-clocks = <&tegra_car TEGRA210_CLK_I2S0>;
173            assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
174            assigned-clock-rates = <1536000>;
175            reg = <0x702d1000 0x100>;
176
177            ports {
178                #address-cells = <1>;
179                #size-cells = <0>;
180
181                port@0 {
182                    reg = <0x0>;
183
184                    i2s1_cif_ep: endpoint {
185                        remote-endpoint = <&xbar_i2s1_ep>;
186                    };
187                };
188
189                i2s1_port: port@1 {
190                    reg = <0x1>;
191
192                    i2s1_dap: endpoint {
193                        dai-format = "i2s";
194                    };
195                };
196            };
197        };
198    };
199
200...
201