1# SPDX-License-Identifier: GPL-2.0-only
2# Copyright (C) 2020 Renesas Electronics Corp.
3%YAML 1.2
4---
5$id: http://devicetree.org/schemas/media/renesas,vin.yaml#
6$schema: http://devicetree.org/meta-schemas/core.yaml#
7
8title: Renesas R-Car Video Input (VIN)
9
10maintainers:
11  - Niklas Söderlund <niklas.soderlund@ragnatech.se>
12
13description:
14  The R-Car Video Input (VIN) device provides video input capabilities for the
15  Renesas R-Car family of devices.
16
17  Each VIN instance has a single parallel input that supports RGB and YUV video,
18  with both external synchronization and BT.656 synchronization for the latter.
19  Depending on the instance the VIN input is connected to external SoC pins, or
20  on Gen3 and RZ/G2 platforms to a CSI-2 receiver.
21
22properties:
23  compatible:
24    oneOf:
25      - items:
26          - enum:
27              - renesas,vin-r8a7742  # RZ/G1H
28              - renesas,vin-r8a7743  # RZ/G1M
29              - renesas,vin-r8a7744  # RZ/G1N
30              - renesas,vin-r8a7745  # RZ/G1E
31              - renesas,vin-r8a77470 # RZ/G1C
32              - renesas,vin-r8a7790  # R-Car H2
33              - renesas,vin-r8a7791  # R-Car M2-W
34              - renesas,vin-r8a7792  # R-Car V2H
35              - renesas,vin-r8a7793  # R-Car M2-N
36              - renesas,vin-r8a7794  # R-Car E2
37          - const: renesas,rcar-gen2-vin # Generic R-Car Gen2 or RZ/G1
38
39      - items:
40          - enum:
41              - renesas,vin-r8a774a1 # RZ/G2M
42              - renesas,vin-r8a774b1 # RZ/G2N
43              - renesas,vin-r8a774c0 # RZ/G2E
44              - renesas,vin-r8a774e1 # RZ/G2H
45              - renesas,vin-r8a7778  # R-Car M1
46              - renesas,vin-r8a7779  # R-Car H1
47              - renesas,vin-r8a7795  # R-Car H3
48              - renesas,vin-r8a7796  # R-Car M3-W
49              - renesas,vin-r8a77961 # R-Car M3-W+
50              - renesas,vin-r8a77965 # R-Car M3-N
51              - renesas,vin-r8a77970 # R-Car V3M
52              - renesas,vin-r8a77980 # R-Car V3H
53              - renesas,vin-r8a77990 # R-Car E3
54              - renesas,vin-r8a77995 # R-Car D3
55              - renesas,vin-r8a779a0 # R-Car V3U
56
57  reg:
58    maxItems: 1
59
60  interrupts:
61    maxItems: 1
62
63  clocks:
64    maxItems: 1
65
66  power-domains:
67    maxItems: 1
68
69  resets:
70    maxItems: 1
71
72  #The per-board settings for Gen2 and RZ/G1 platforms:
73  port:
74    $ref: /schemas/graph.yaml#/$defs/port-base
75    unevaluatedProperties: false
76    description:
77      A node containing a parallel input
78
79    properties:
80      endpoint:
81        $ref: video-interfaces.yaml#
82        unevaluatedProperties: false
83
84        properties:
85          hsync-active:
86            description:
87              If both HSYNC and VSYNC polarities are not specified, embedded
88              synchronization is selected.
89            default: 1
90
91          vsync-active:
92            description:
93              If both HSYNC and VSYNC polarities are not specified, embedded
94              synchronization is selected.
95            default: 1
96
97          field-active-even: true
98
99          bus-width: true
100
101          data-shift: true
102
103          data-enable-active:
104            description: Polarity of CLKENB signal
105            default: 1
106
107          pclk-sample: true
108
109          data-active: true
110
111  #The per-board settings for Gen3 and RZ/G2 platforms:
112  renesas,id:
113    description: VIN channel number
114    $ref: /schemas/types.yaml#/definitions/uint32
115    minimum: 0
116    maximum: 31
117
118  ports:
119    $ref: /schemas/graph.yaml#/properties/ports
120
121    properties:
122      port@0:
123        $ref: /schemas/graph.yaml#/$defs/port-base
124        unevaluatedProperties: false
125        description:
126          Input port node, single endpoint describing a parallel input source.
127
128        properties:
129          endpoint:
130            $ref: video-interfaces.yaml#
131            unevaluatedProperties: false
132
133            properties:
134              hsync-active:
135                description:
136                  If both HSYNC and VSYNC polarities are not specified, embedded
137                  synchronization is selected.
138                default: 1
139
140              vsync-active:
141                description:
142                  If both HSYNC and VSYNC polarities are not specified, embedded
143                  synchronization is selected.
144                default: 1
145
146              field-active-even: true
147
148              bus-width: true
149
150              data-shift: true
151
152              data-enable-active:
153                description: Polarity of CLKENB signal
154                default: 1
155
156              pclk-sample: true
157
158              data-active: true
159
160      port@1:
161        $ref: /schemas/graph.yaml#/properties/port
162        description:
163          Input port node, multiple endpoints describing all the R-Car CSI-2
164          modules connected the VIN.
165
166        properties:
167          endpoint@0:
168            $ref: /schemas/graph.yaml#/properties/endpoint
169            description: Endpoint connected to CSI20.
170
171          endpoint@1:
172            $ref: /schemas/graph.yaml#/properties/endpoint
173            description: Endpoint connected to CSI21.
174
175          endpoint@2:
176            $ref: /schemas/graph.yaml#/properties/endpoint
177            description: Endpoint connected to CSI40.
178
179          endpoint@3:
180            $ref: /schemas/graph.yaml#/properties/endpoint
181            description: Endpoint connected to CSI41.
182
183        anyOf:
184          - required:
185              - endpoint@0
186          - required:
187              - endpoint@1
188          - required:
189              - endpoint@2
190          - required:
191              - endpoint@3
192
193      port@2:
194        $ref: /schemas/graph.yaml#/properties/port
195        description:
196          Input port node, multiple endpoints describing all the R-Car ISP
197          modules connected the VIN.
198
199        properties:
200          endpoint@0:
201            $ref: /schemas/graph.yaml#/properties/endpoint
202            description: Endpoint connected to ISP0.
203
204          endpoint@1:
205            $ref: /schemas/graph.yaml#/properties/endpoint
206            description: Endpoint connected to ISP1.
207
208          endpoint@2:
209            $ref: /schemas/graph.yaml#/properties/endpoint
210            description: Endpoint connected to ISP2.
211
212          endpoint@3:
213            $ref: /schemas/graph.yaml#/properties/endpoint
214            description: Endpoint connected to ISP3.
215
216required:
217  - compatible
218  - reg
219  - interrupts
220  - clocks
221  - power-domains
222
223allOf:
224  - if:
225      not:
226        properties:
227          compatible:
228            contains:
229              enum:
230                - renesas,vin-r8a7778
231                - renesas,vin-r8a7779
232    then:
233      required:
234        - resets
235
236  - if:
237      properties:
238        compatible:
239          contains:
240            enum:
241              - renesas,vin-r8a7778
242              - renesas,vin-r8a7779
243              - renesas,rcar-gen2-vin
244    then:
245      required:
246        - port
247    else:
248      required:
249        - renesas,id
250        - ports
251
252additionalProperties: false
253
254examples:
255  # Device node example for Gen2 platform
256  - |
257    #include <dt-bindings/clock/r8a7790-cpg-mssr.h>
258    #include <dt-bindings/interrupt-controller/arm-gic.h>
259    #include <dt-bindings/power/r8a7790-sysc.h>
260
261    vin1: vin@e6ef1000 {
262            compatible = "renesas,vin-r8a7790",
263                         "renesas,rcar-gen2-vin";
264            reg = <0xe6ef1000 0x1000>;
265            interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
266            clocks = <&cpg CPG_MOD 810>;
267            power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
268            resets = <&cpg 810>;
269
270            port {
271                    vin1ep0: endpoint {
272                            remote-endpoint = <&adv7180>;
273                            bus-width = <8>;
274                    };
275            };
276    };
277
278  # Device node example for Gen3 platform with only CSI-2
279  - |
280    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
281    #include <dt-bindings/interrupt-controller/arm-gic.h>
282    #include <dt-bindings/power/r8a7795-sysc.h>
283
284    vin0: video@e6ef0000 {
285            compatible = "renesas,vin-r8a7795";
286            reg = <0xe6ef0000 0x1000>;
287            interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
288            clocks = <&cpg CPG_MOD 811>;
289            power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
290            resets = <&cpg 811>;
291            renesas,id = <0>;
292
293            ports {
294                    #address-cells = <1>;
295                    #size-cells = <0>;
296
297                    port@1 {
298                            #address-cells = <1>;
299                            #size-cells = <0>;
300
301                            reg = <1>;
302
303                            vin0csi20: endpoint@0 {
304                                    reg = <0>;
305                                    remote-endpoint= <&csi20vin0>;
306                            };
307                            vin0csi40: endpoint@2 {
308                                    reg = <2>;
309                                    remote-endpoint= <&csi40vin0>;
310                            };
311                    };
312            };
313    };
314
315  # Device node example for Gen3 platform with CSI-2 and parallel
316  - |
317    #include <dt-bindings/clock/r8a77970-cpg-mssr.h>
318    #include <dt-bindings/interrupt-controller/arm-gic.h>
319    #include <dt-bindings/power/r8a77970-sysc.h>
320
321    vin2: video@e6ef2000 {
322            compatible = "renesas,vin-r8a77970";
323            reg = <0xe6ef2000 0x1000>;
324            interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
325            clocks = <&cpg CPG_MOD 809>;
326            power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
327            resets = <&cpg 809>;
328            renesas,id = <2>;
329
330            ports {
331                    #address-cells = <1>;
332                    #size-cells = <0>;
333
334                    port@0 {
335                            reg = <0>;
336
337                            vin2_in: endpoint {
338                                    remote-endpoint = <&adv7612_out>;
339                                    hsync-active = <0>;
340                                    vsync-active = <0>;
341                            };
342                    };
343
344                    port@1 {
345                            #address-cells = <1>;
346                            #size-cells = <0>;
347
348                            reg = <1>;
349
350                            vin2csi40: endpoint@2 {
351                                    reg = <2>;
352                                    remote-endpoint = <&csi40vin2>;
353                            };
354                    };
355            };
356    };
357