1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/display/tegra/nvidia,tegra20-vi.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: NVIDIA Tegra Video Input controller
8
9maintainers:
10  - Thierry Reding <thierry.reding@gmail.com>
11  - Jon Hunter <jonathanh@nvidia.com>
12
13properties:
14  $nodename:
15    pattern: "^vi@[0-9a-f]+$"
16
17  compatible:
18    oneOf:
19      - const: nvidia,tegra20-vi
20      - const: nvidia,tegra30-vi
21      - const: nvidia,tegra114-vi
22      - const: nvidia,tegra124-vi
23      - items:
24          - const: nvidia,tegra132-vi
25          - const: nvidia,tegra124-vi
26      - const: nvidia,tegra210-vi
27      - const: nvidia,tegra186-vi
28      - const: nvidia,tegra194-vi
29
30  reg:
31    maxItems: 1
32
33  interrupts:
34    maxItems: 1
35
36  clocks:
37    maxItems: 1
38
39  resets:
40    items:
41      - description: module reset
42
43  reset-names:
44    items:
45      - const: vi
46
47  iommus:
48    maxItems: 1
49
50  interconnects:
51    minItems: 4
52    maxItems: 5
53
54  interconnect-names:
55    minItems: 4
56    maxItems: 5
57
58  operating-points-v2: true
59
60  power-domains:
61    items:
62      - description: phandle to the VENC power domain
63
64  "#address-cells":
65    const: 1
66
67  "#size-cells":
68    const: 1
69
70  ranges:
71    maxItems: 1
72
73  avdd-dsi-csi-supply:
74    description: DSI/CSI power supply. Must supply 1.2 V.
75
76  vip:
77    $ref: /schemas/display/tegra/nvidia,tegra20-vip.yaml
78
79  ports:
80    $ref: /schemas/graph.yaml#/properties/ports
81
82    properties:
83      port@0:
84        $ref: /schemas/graph.yaml#/properties/port
85        description:
86          Input from the VIP (parallel input capture) module
87
88patternProperties:
89  "^csi@[0-9a-f]+$":
90    type: object
91
92additionalProperties: false
93
94required:
95  - compatible
96  - reg
97  - interrupts
98  - clocks
99
100allOf:
101  - if:
102      properties:
103        compatible:
104          contains:
105            enum:
106              - nvidia,tegra20-vi
107              - nvidia,tegra30-vi
108              - nvidia,tegra114-vi
109              - nvidia,tegra124-vi
110    then:
111      required:
112        - resets
113        - reset-names
114    else:
115      required:
116        - power-domains
117
118examples:
119  - |
120    #include <dt-bindings/clock/tegra20-car.h>
121    #include <dt-bindings/interrupt-controller/arm-gic.h>
122
123    i2c {
124        #address-cells = <1>;
125        #size-cells = <0>;
126        camera@48 {
127            compatible = "aptina,mt9v111";
128            reg = <0x48>;
129            clocks = <&camera_clk>;
130
131            port {
132                mt9v111_out: endpoint {
133                    remote-endpoint = <&vi_vip_in>;
134                };
135            };
136        };
137    };
138
139    vi@54080000 {
140        compatible = "nvidia,tegra20-vi";
141        reg = <0x54080000 0x00040000>;
142        interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
143        clocks = <&tegra_car TEGRA20_CLK_VI>;
144        resets = <&tegra_car 100>;
145        reset-names = "vi";
146
147        vip {
148            compatible = "nvidia,tegra20-vip";
149            ports {
150                #address-cells = <1>;
151                #size-cells = <0>;
152                port@0 {
153                    reg = <0>;
154                    vi_vip_in: endpoint {
155                        remote-endpoint = <&mt9v111_out>;
156                    };
157                };
158                port@1 {
159                    reg = <1>;
160                    vi_vip_out: endpoint {
161                        remote-endpoint = <&vi_in>;
162                    };
163                };
164            };
165        };
166
167        ports {
168            #address-cells = <1>;
169            #size-cells = <0>;
170            port@0 {
171                reg = <0>;
172                vi_in: endpoint {
173                    remote-endpoint = <&vi_vip_out>;
174                };
175            };
176        };
177    };
178
179  - |
180    #include <dt-bindings/clock/tegra210-car.h>
181    #include <dt-bindings/interrupt-controller/arm-gic.h>
182
183    vi@54080000 {
184        compatible = "nvidia,tegra210-vi";
185        reg = <0x54080000 0x00000700>;
186        interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
187        assigned-clocks = <&tegra_car TEGRA210_CLK_VI>;
188        assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_C4_OUT0>;
189
190        clocks = <&tegra_car TEGRA210_CLK_VI>;
191        power-domains = <&pd_venc>;
192
193        #address-cells = <1>;
194        #size-cells = <1>;
195
196        ranges = <0x0 0x54080000 0x2000>;
197
198        csi@838 {
199            compatible = "nvidia,tegra210-csi";
200            reg = <0x838 0x1300>;
201            assigned-clocks = <&tegra_car TEGRA210_CLK_CILAB>,
202                              <&tegra_car TEGRA210_CLK_CILCD>,
203                              <&tegra_car TEGRA210_CLK_CILE>,
204                              <&tegra_car TEGRA210_CLK_CSI_TPG>;
205            assigned-clock-parents = <&tegra_car TEGRA210_CLK_PLL_P>,
206                                     <&tegra_car TEGRA210_CLK_PLL_P>,
207                                     <&tegra_car TEGRA210_CLK_PLL_P>;
208            assigned-clock-rates = <102000000>,
209                                   <102000000>,
210                                   <102000000>,
211                                   <972000000>;
212
213            clocks = <&tegra_car TEGRA210_CLK_CSI>,
214                     <&tegra_car TEGRA210_CLK_CILAB>,
215                     <&tegra_car TEGRA210_CLK_CILCD>,
216                     <&tegra_car TEGRA210_CLK_CILE>,
217                     <&tegra_car TEGRA210_CLK_CSI_TPG>;
218            clock-names = "csi", "cilab", "cilcd", "cile", "csi_tpg";
219            power-domains = <&pd_sor>;
220        };
221    };
222