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