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,tegra210-ahub.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Tegra210 AHUB Device Tree Bindings
8
9description: |
10  The Audio Hub (AHUB) comprises a collection of hardware accelerators
11  for audio pre-processing, post-processing and a programmable full
12  crossbar for routing audio data across these accelerators. It has
13  external interfaces such as I2S, DMIC, DSPK. It interfaces with ADMA
14  engine through ADMAIF.
15
16maintainers:
17  - Jon Hunter <jonathanh@nvidia.com>
18  - Sameer Pujar <spujar@nvidia.com>
19
20properties:
21  $nodename:
22    pattern: "^ahub@[0-9a-f]*$"
23
24  compatible:
25    oneOf:
26      - enum:
27          - nvidia,tegra210-ahub
28          - nvidia,tegra186-ahub
29          - nvidia,tegra234-ahub
30      - items:
31          - const: nvidia,tegra194-ahub
32          - const: nvidia,tegra186-ahub
33
34  reg:
35    maxItems: 1
36
37  clocks:
38    maxItems: 1
39
40  clock-names:
41    const: ahub
42
43  assigned-clocks:
44    maxItems: 1
45
46  assigned-clock-parents:
47    maxItems: 1
48
49  assigned-clock-rates:
50    maxItems: 1
51
52  "#address-cells":
53    const: 1
54
55  "#size-cells":
56    const: 1
57
58  ranges: true
59
60  ports:
61    $ref: /schemas/graph.yaml#/properties/ports
62    description: |
63      Contains list of ACIF (Audio CIF) port nodes for AHUB (Audio Hub).
64      These are connected to ACIF interfaces of AHUB clients. Thus the
65      number of port nodes depend on the number of clients that AHUB may
66      have depending on the SoC revision.
67
68    patternProperties:
69      '^port@[0-9]':
70        $ref: audio-graph-port.yaml#
71        unevaluatedProperties: false
72
73patternProperties:
74  '^i2s@[0-9a-f]+$':
75    type: object
76
77  '^dmic@[0-9a-f]+$':
78    type: object
79    $ref: nvidia,tegra210-dmic.yaml#
80
81  '^admaif@[0-9a-f]+$':
82    type: object
83    $ref: nvidia,tegra210-admaif.yaml#
84
85  '^dspk@[0-9a-f]+$':
86    type: object
87    $ref: nvidia,tegra186-dspk.yaml#
88
89  '^mvc@[0-9a-f]+$':
90    type: object
91    $ref: nvidia,tegra210-mvc.yaml#
92
93  '^sfc@[0-9a-f]+$':
94    type: object
95    $ref: nvidia,tegra210-sfc.yaml#
96
97  '^amx@[0-9a-f]+$':
98    type: object
99    $ref: nvidia,tegra210-amx.yaml#
100
101  '^adx@[0-9a-f]+$':
102    type: object
103    $ref: nvidia,tegra210-adx.yaml#
104
105  '^amixer@[0-9a-f]+$':
106    type: object
107    $ref: nvidia,tegra210-mixer.yaml#
108
109required:
110  - compatible
111  - reg
112  - clocks
113  - clock-names
114  - assigned-clocks
115  - assigned-clock-parents
116  - "#address-cells"
117  - "#size-cells"
118  - ranges
119
120additionalProperties: false
121
122examples:
123  - |
124    #include<dt-bindings/clock/tegra210-car.h>
125
126    ahub@702d0800 {
127        compatible = "nvidia,tegra210-ahub";
128        reg = <0x702d0800 0x800>;
129        clocks = <&tegra_car TEGRA210_CLK_D_AUDIO>;
130        clock-names = "ahub";
131        assigned-clocks = <&tegra_car TEGRA210_CLK_D_AUDIO>;
132        assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
133        #address-cells = <1>;
134        #size-cells = <1>;
135        ranges = <0x702d0000 0x702d0000 0x0000e400>;
136
137        // All AHUB child nodes below
138        admaif@702d0000 {
139            compatible = "nvidia,tegra210-admaif";
140            reg = <0x702d0000 0x800>;
141            dmas = <&adma 1>,  <&adma 1>,
142               <&adma 2>,  <&adma 2>,
143               <&adma 3>,  <&adma 3>,
144               <&adma 4>,  <&adma 4>,
145               <&adma 5>,  <&adma 5>,
146               <&adma 6>,  <&adma 6>,
147               <&adma 7>,  <&adma 7>,
148               <&adma 8>,  <&adma 8>,
149               <&adma 9>,  <&adma 9>,
150               <&adma 10>, <&adma 10>;
151            dma-names = "rx1",  "tx1",
152                    "rx2",  "tx2",
153                    "rx3",  "tx3",
154                    "rx4",  "tx4",
155                    "rx5",  "tx5",
156                    "rx6",  "tx6",
157                    "rx7",  "tx7",
158                    "rx8",  "tx8",
159                    "rx9",  "tx9",
160                    "rx10", "tx10";
161        };
162
163        i2s@702d1000 {
164            compatible = "nvidia,tegra210-i2s";
165            reg = <0x702d1000 0x100>;
166            clocks = <&tegra_car TEGRA210_CLK_I2S0>;
167            clock-names = "i2s";
168            assigned-clocks = <&tegra_car TEGRA210_CLK_I2S0>;
169            assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
170            assigned-clock-rates = <1536000>;
171            sound-name-prefix = "I2S1";
172        };
173
174        dmic@702d4000 {
175            compatible = "nvidia,tegra210-dmic";
176            reg = <0x702d4000 0x100>;
177            clocks = <&tegra_car TEGRA210_CLK_DMIC1>;
178            clock-names = "dmic";
179            assigned-clocks = <&tegra_car TEGRA210_CLK_DMIC1>;
180            assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_A_OUT0>;
181            assigned-clock-rates = <3072000>;
182            sound-name-prefix = "DMIC1";
183        };
184
185        // More child nodes to follow
186    };
187
188...
189