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-r8a77965 # R-Car M3-N
50              - renesas,vin-r8a77970 # R-Car V3M
51              - renesas,vin-r8a77980 # R-Car V3H
52              - renesas,vin-r8a77990 # R-Car E3
53              - renesas,vin-r8a77995 # R-Car D3
54
55  reg:
56    maxItems: 1
57
58  interrupts:
59    maxItems: 1
60
61  clocks:
62    maxItems: 1
63
64  power-domains:
65    maxItems: 1
66
67  resets:
68    maxItems: 1
69
70  #The per-board settings for Gen2 and RZ/G1 platforms:
71  port:
72    type: object
73    description:
74      A node containing a parallel input with a single endpoint definitions as
75      documented in
76      Documentation/devicetree/bindings/media/video-interfaces.txt
77
78    properties:
79      endpoint:
80        type: object
81
82        properties:
83          hsync-active:
84            description:
85              If both HSYNC and VSYNC polarities are not specified, embedded
86              synchronization is selected.
87            default: 1
88
89          vsync-active:
90            description:
91              If both HSYNC and VSYNC polarities are not specified, embedded
92              synchronization is selected.
93            default: 1
94
95          field-active-even: true
96
97          bus-width: true
98
99          data-shift: true
100
101          data-enable-active:
102            description: Polarity of CLKENB signal
103            default: 1
104
105          pclk-sample: true
106
107          data-active: true
108
109          remote-endpoint: true
110
111        required:
112          - remote-endpoint
113
114        additionalProperties: false
115
116    additionalProperties: false
117
118  #The per-board settings for Gen3 and RZ/G2 platforms:
119  renesas,id:
120    description: VIN channel number
121    $ref: /schemas/types.yaml#/definitions/uint32
122    minimum: 0
123    maximum: 15
124
125  ports:
126    type: object
127    description:
128      A node containing input nodes with endpoint definitions as documented in
129      Documentation/devicetree/bindings/media/video-interfaces.txt
130
131    properties:
132      port@0:
133        type: object
134        description:
135          Input port node, single endpoint describing a parallel input source.
136
137        properties:
138          reg:
139            const: 0
140
141          endpoint:
142            type: object
143
144            properties:
145              hsync-active:
146                description:
147                  If both HSYNC and VSYNC polarities are not specified, embedded
148                  synchronization is selected.
149                default: 1
150
151              vsync-active:
152                description:
153                  If both HSYNC and VSYNC polarities are not specified, embedded
154                  synchronization is selected.
155                default: 1
156
157              field-active-even: true
158
159              bus-width: true
160
161              data-shift: true
162
163              data-enable-active:
164                description: Polarity of CLKENB signal
165                default: 1
166
167              pclk-sample: true
168
169              data-active: true
170
171              remote-endpoint: true
172
173            required:
174              - remote-endpoint
175
176            additionalProperties: false
177
178        required:
179          - endpoint
180
181        additionalProperties: false
182
183      port@1:
184        type: object
185        description:
186          Input port node, multiple endpoints describing all the R-Car CSI-2
187          modules connected the VIN.
188
189        properties:
190          '#address-cells':
191            const: 1
192
193          '#size-cells':
194            const: 0
195
196          reg:
197            const: 1
198
199          endpoint@0:
200            type: object
201            description: Endpoint connected to CSI20.
202
203            properties:
204              reg:
205                const: 0
206
207              remote-endpoint: true
208
209            required:
210              - reg
211              - remote-endpoint
212
213            additionalProperties: false
214
215          endpoint@1:
216            type: object
217            description: Endpoint connected to CSI21.
218
219            properties:
220              reg:
221                const: 1
222
223              remote-endpoint: true
224
225            required:
226              - reg
227              - remote-endpoint
228
229            additionalProperties: false
230
231          endpoint@2:
232            type: object
233            description: Endpoint connected to CSI40.
234
235            properties:
236              reg:
237                const: 2
238
239              remote-endpoint: true
240
241            required:
242              - reg
243              - remote-endpoint
244
245            additionalProperties: false
246
247          endpoint@3:
248            type: object
249            description: Endpoint connected to CSI41.
250
251            properties:
252              reg:
253                const: 3
254
255              remote-endpoint: true
256
257            required:
258              - reg
259              - remote-endpoint
260
261            additionalProperties: false
262
263        anyOf:
264          - required:
265              - endpoint@0
266          - required:
267              - endpoint@1
268          - required:
269              - endpoint@2
270          - required:
271              - endpoint@3
272
273        additionalProperties: false
274
275required:
276  - compatible
277  - reg
278  - interrupts
279  - clocks
280  - power-domains
281  - resets
282
283if:
284  properties:
285    compatible:
286      contains:
287        enum:
288          - renesas,vin-r8a7778
289          - renesas,vin-r8a7779
290          - renesas,rcar-gen2-vin
291then:
292  required:
293    - port
294else:
295  required:
296    - renesas,id
297    - ports
298
299additionalProperties: false
300
301examples:
302  # Device node example for Gen2 platform
303  - |
304    #include <dt-bindings/clock/r8a7790-cpg-mssr.h>
305    #include <dt-bindings/interrupt-controller/arm-gic.h>
306    #include <dt-bindings/power/r8a7790-sysc.h>
307
308    vin1: vin@e6ef1000 {
309            compatible = "renesas,vin-r8a7790",
310                         "renesas,rcar-gen2-vin";
311            reg = <0xe6ef1000 0x1000>;
312            interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
313            clocks = <&cpg CPG_MOD 810>;
314            power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
315            resets = <&cpg 810>;
316
317            port {
318                    vin1ep0: endpoint {
319                            remote-endpoint = <&adv7180>;
320                            bus-width = <8>;
321                    };
322            };
323    };
324
325  # Device node example for Gen3 platform with only CSI-2
326  - |
327    #include <dt-bindings/clock/r8a7795-cpg-mssr.h>
328    #include <dt-bindings/interrupt-controller/arm-gic.h>
329    #include <dt-bindings/power/r8a7795-sysc.h>
330
331    vin0: video@e6ef0000 {
332            compatible = "renesas,vin-r8a7795";
333            reg = <0xe6ef0000 0x1000>;
334            interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>;
335            clocks = <&cpg CPG_MOD 811>;
336            power-domains = <&sysc R8A7795_PD_ALWAYS_ON>;
337            resets = <&cpg 811>;
338            renesas,id = <0>;
339
340            ports {
341                    #address-cells = <1>;
342                    #size-cells = <0>;
343
344                    port@1 {
345                            #address-cells = <1>;
346                            #size-cells = <0>;
347
348                            reg = <1>;
349
350                            vin0csi20: endpoint@0 {
351                                    reg = <0>;
352                                    remote-endpoint= <&csi20vin0>;
353                            };
354                            vin0csi40: endpoint@2 {
355                                    reg = <2>;
356                                    remote-endpoint= <&csi40vin0>;
357                            };
358                    };
359            };
360    };
361
362  # Device node example for Gen3 platform with CSI-2 and parallel
363  - |
364    #include <dt-bindings/clock/r8a77970-cpg-mssr.h>
365    #include <dt-bindings/interrupt-controller/arm-gic.h>
366    #include <dt-bindings/power/r8a77970-sysc.h>
367
368    vin2: video@e6ef2000 {
369            compatible = "renesas,vin-r8a77970";
370            reg = <0xe6ef2000 0x1000>;
371            interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>;
372            clocks = <&cpg CPG_MOD 809>;
373            power-domains = <&sysc R8A77970_PD_ALWAYS_ON>;
374            resets = <&cpg 809>;
375            renesas,id = <2>;
376
377            ports {
378                    #address-cells = <1>;
379                    #size-cells = <0>;
380
381                    port@0 {
382                            reg = <0>;
383
384                            vin2_in: endpoint {
385                                    remote-endpoint = <&adv7612_out>;
386                                    hsync-active = <0>;
387                                    vsync-active = <0>;
388                            };
389                    };
390
391                    port@1 {
392                            #address-cells = <1>;
393                            #size-cells = <0>;
394
395                            reg = <1>;
396
397                            vin2csi40: endpoint@2 {
398                                    reg = <2>;
399                                    remote-endpoint = <&csi40vin2>;
400                            };
401                    };
402            };
403    };
404