1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/display/renesas,du.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Renesas R-Car Display Unit (DU)
8
9maintainers:
10  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
11
12description: |
13  These DT bindings describe the Display Unit embedded in the Renesas R-Car
14  Gen1, R-Car Gen2, R-Car Gen3, RZ/G1 and RZ/G2 SoCs.
15
16properties:
17  compatible:
18    enum:
19      - renesas,du-r8a7742 # for RZ/G1H compatible DU
20      - renesas,du-r8a7743 # for RZ/G1M compatible DU
21      - renesas,du-r8a7744 # for RZ/G1N compatible DU
22      - renesas,du-r8a7745 # for RZ/G1E compatible DU
23      - renesas,du-r8a77470 # for RZ/G1C compatible DU
24      - renesas,du-r8a774a1 # for RZ/G2M compatible DU
25      - renesas,du-r8a774b1 # for RZ/G2N compatible DU
26      - renesas,du-r8a774c0 # for RZ/G2E compatible DU
27      - renesas,du-r8a774e1 # for RZ/G2H compatible DU
28      - renesas,du-r8a7779 # for R-Car H1 compatible DU
29      - renesas,du-r8a7790 # for R-Car H2 compatible DU
30      - renesas,du-r8a7791 # for R-Car M2-W compatible DU
31      - renesas,du-r8a7792 # for R-Car V2H compatible DU
32      - renesas,du-r8a7793 # for R-Car M2-N compatible DU
33      - renesas,du-r8a7794 # for R-Car E2 compatible DU
34      - renesas,du-r8a7795 # for R-Car H3 compatible DU
35      - renesas,du-r8a7796 # for R-Car M3-W compatible DU
36      - renesas,du-r8a77961 # for R-Car M3-W+ compatible DU
37      - renesas,du-r8a77965 # for R-Car M3-N compatible DU
38      - renesas,du-r8a77970 # for R-Car V3M compatible DU
39      - renesas,du-r8a77980 # for R-Car V3H compatible DU
40      - renesas,du-r8a77990 # for R-Car E3 compatible DU
41      - renesas,du-r8a77995 # for R-Car D3 compatible DU
42      - renesas,du-r8a779a0 # for R-Car V3U compatible DU
43
44  reg:
45    maxItems: 1
46
47  # See compatible-specific constraints below.
48  clocks: true
49  clock-names: true
50  interrupts:
51    description: Interrupt specifiers, one per DU channel
52  resets: true
53  reset-names: true
54
55  power-domains:
56    maxItems: 1
57
58  ports:
59    $ref: /schemas/graph.yaml#/properties/ports
60    description: |
61      The connections to the DU output video ports are modeled using the OF
62      graph bindings specified in Documentation/devicetree/bindings/graph.txt.
63      The number of ports and their assignment are model-dependent. Each port
64      shall have a single endpoint.
65
66    patternProperties:
67      "^port@[0-3]$":
68        $ref: /schemas/graph.yaml#/properties/port
69        unevaluatedProperties: false
70
71    required:
72      - port@0
73      - port@1
74
75    unevaluatedProperties: false
76
77  renesas,cmms:
78    $ref: "/schemas/types.yaml#/definitions/phandle-array"
79    description:
80      A list of phandles to the CMM instances present in the SoC, one for each
81      available DU channel.
82
83  renesas,vsps:
84    $ref: "/schemas/types.yaml#/definitions/phandle-array"
85    description:
86      A list of phandle and channel index tuples to the VSPs that handle the
87      memory interfaces for the DU channels. The phandle identifies the VSP
88      instance that serves the DU channel, and the channel index identifies
89      the LIF instance in that VSP.
90
91required:
92  - compatible
93  - reg
94  - clocks
95  - interrupts
96  - ports
97
98allOf:
99  - if:
100      properties:
101        compatible:
102          contains:
103            const: renesas,du-r8a7779
104    then:
105      properties:
106        clocks:
107          minItems: 1
108          maxItems: 3
109          items:
110            - description: Functional clock
111            - description: DU_DOTCLKIN0 input clock
112            - description: DU_DOTCLKIN1 input clock
113
114        clock-names:
115          minItems: 1
116          maxItems: 3
117          items:
118            - const: du.0
119            - pattern: '^dclkin\.[01]$'
120            - pattern: '^dclkin\.[01]$'
121
122        interrupts:
123          maxItems: 1
124
125        resets:
126          maxItems: 1
127
128        ports:
129          properties:
130            port@0:
131              description: DPAD 0
132            port@1:
133              description: DPAD 1
134            # port@2 is TCON, not supported yet
135            port@2: false
136            port@3: false
137
138          required:
139            - port@0
140            - port@1
141
142      required:
143        - interrupts
144
145  - if:
146      properties:
147        compatible:
148          contains:
149            enum:
150              - renesas,du-r8a7743
151              - renesas,du-r8a7744
152              - renesas,du-r8a7791
153              - renesas,du-r8a7793
154    then:
155      properties:
156        clocks:
157          minItems: 2
158          maxItems: 4
159          items:
160            - description: Functional clock for DU0
161            - description: Functional clock for DU1
162            - description: DU_DOTCLKIN0 input clock
163            - description: DU_DOTCLKIN1 input clock
164
165        clock-names:
166          minItems: 2
167          maxItems: 4
168          items:
169            - const: du.0
170            - const: du.1
171            - pattern: '^dclkin\.[01]$'
172            - pattern: '^dclkin\.[01]$'
173
174        interrupts:
175          maxItems: 2
176
177        resets:
178          maxItems: 1
179
180        reset-names:
181          items:
182            - const: du.0
183
184        ports:
185          properties:
186            port@0:
187              description: DPAD 0
188            port@1:
189              description: LVDS 0
190            # port@2 is TCON, not supported yet
191            port@2: false
192            port@3: false
193
194          required:
195            - port@0
196            - port@1
197
198      required:
199        - clock-names
200        - interrupts
201        - resets
202        - reset-names
203
204  - if:
205      properties:
206        compatible:
207          contains:
208            enum:
209              - renesas,du-r8a7745
210              - renesas,du-r8a7792
211    then:
212      properties:
213        clocks:
214          minItems: 2
215          maxItems: 4
216          items:
217            - description: Functional clock for DU0
218            - description: Functional clock for DU1
219            - description: DU_DOTCLKIN0 input clock
220            - description: DU_DOTCLKIN1 input clock
221
222        clock-names:
223          minItems: 2
224          maxItems: 4
225          items:
226            - const: du.0
227            - const: du.1
228            - pattern: '^dclkin\.[01]$'
229            - pattern: '^dclkin\.[01]$'
230
231        interrupts:
232          maxItems: 2
233
234        resets:
235          maxItems: 1
236
237        reset-names:
238          items:
239            - const: du.0
240
241        ports:
242          properties:
243            port@0:
244              description: DPAD 0
245            port@1:
246              description: DPAD 1
247            port@2: false
248            port@3: false
249
250          required:
251            - port@0
252            - port@1
253
254      required:
255        - clock-names
256        - interrupts
257        - resets
258        - reset-names
259
260  - if:
261      properties:
262        compatible:
263          contains:
264            enum:
265              - renesas,du-r8a7794
266    then:
267      properties:
268        clocks:
269          minItems: 2
270          maxItems: 4
271          items:
272            - description: Functional clock for DU0
273            - description: Functional clock for DU1
274            - description: DU_DOTCLKIN0 input clock
275            - description: DU_DOTCLKIN1 input clock
276
277        clock-names:
278          minItems: 2
279          maxItems: 4
280          items:
281            - const: du.0
282            - const: du.1
283            - pattern: '^dclkin\.[01]$'
284            - pattern: '^dclkin\.[01]$'
285
286        interrupts:
287          maxItems: 2
288
289        resets:
290          maxItems: 1
291
292        reset-names:
293          items:
294            - const: du.0
295
296        ports:
297          properties:
298            port@0:
299              description: DPAD 0
300            port@1:
301              description: DPAD 1
302            # port@2 is TCON, not supported yet
303            port@2: false
304            port@3: false
305
306          required:
307            - port@0
308            - port@1
309
310      required:
311        - clock-names
312        - interrupts
313        - resets
314        - reset-names
315
316  - if:
317      properties:
318        compatible:
319          contains:
320            enum:
321              - renesas,du-r8a77470
322    then:
323      properties:
324        clocks:
325          minItems: 2
326          maxItems: 4
327          items:
328            - description: Functional clock for DU0
329            - description: Functional clock for DU1
330            - description: DU_DOTCLKIN0 input clock
331            - description: DU_DOTCLKIN1 input clock
332
333        clock-names:
334          minItems: 2
335          maxItems: 4
336          items:
337            - const: du.0
338            - const: du.1
339            - pattern: '^dclkin\.[01]$'
340            - pattern: '^dclkin\.[01]$'
341
342        interrupts:
343          maxItems: 2
344
345        resets:
346          maxItems: 1
347
348        reset-names:
349          items:
350            - const: du.0
351
352        ports:
353          properties:
354            port@0:
355              description: DPAD 0
356            port@1:
357              description: DPAD 1
358            port@2:
359              description: LVDS 0
360            # port@3 is DVENC, not supported yet
361            port@3: false
362
363          required:
364            - port@0
365            - port@1
366            - port@2
367
368      required:
369        - clock-names
370        - interrupts
371        - resets
372        - reset-names
373
374  - if:
375      properties:
376        compatible:
377          contains:
378            enum:
379              - renesas,du-r8a7742
380              - renesas,du-r8a7790
381    then:
382      properties:
383        clocks:
384          minItems: 3
385          maxItems: 6
386          items:
387            - description: Functional clock for DU0
388            - description: Functional clock for DU1
389            - description: Functional clock for DU2
390            - description: DU_DOTCLKIN0 input clock
391            - description: DU_DOTCLKIN1 input clock
392            - description: DU_DOTCLKIN2 input clock
393
394        clock-names:
395          minItems: 3
396          maxItems: 6
397          items:
398            - const: du.0
399            - const: du.1
400            - const: du.2
401            - pattern: '^dclkin\.[012]$'
402            - pattern: '^dclkin\.[012]$'
403            - pattern: '^dclkin\.[012]$'
404
405        interrupts:
406          maxItems: 3
407
408        resets:
409          maxItems: 1
410
411        reset-names:
412          items:
413            - const: du.0
414
415        ports:
416          properties:
417            port@0:
418              description: DPAD 0
419            port@1:
420              description: LVDS 0
421            port@2:
422              description: LVDS 1
423            # port@3 is TCON, not supported yet
424            port@3: false
425
426          required:
427            - port@0
428            - port@1
429            - port@2
430
431      required:
432        - clock-names
433        - interrupts
434        - resets
435        - reset-names
436
437  - if:
438      properties:
439        compatible:
440          contains:
441            enum:
442              - renesas,du-r8a7795
443    then:
444      properties:
445        clocks:
446          minItems: 4
447          maxItems: 8
448          items:
449            - description: Functional clock for DU0
450            - description: Functional clock for DU1
451            - description: Functional clock for DU2
452            - description: Functional clock for DU4
453            - description: DU_DOTCLKIN0 input clock
454            - description: DU_DOTCLKIN1 input clock
455            - description: DU_DOTCLKIN2 input clock
456            - description: DU_DOTCLKIN3 input clock
457
458        clock-names:
459          minItems: 4
460          maxItems: 8
461          items:
462            - const: du.0
463            - const: du.1
464            - const: du.2
465            - const: du.3
466            - pattern: '^dclkin\.[0123]$'
467            - pattern: '^dclkin\.[0123]$'
468            - pattern: '^dclkin\.[0123]$'
469            - pattern: '^dclkin\.[0123]$'
470
471        interrupts:
472          maxItems: 4
473
474        resets:
475          maxItems: 2
476
477        reset-names:
478          items:
479            - const: du.0
480            - const: du.2
481
482        ports:
483          properties:
484            port@0:
485              description: DPAD 0
486            port@1:
487              description: HDMI 0
488            port@2:
489              description: HDMI 1
490            port@3:
491              description: LVDS 0
492
493          required:
494            - port@0
495            - port@1
496            - port@2
497            - port@3
498
499        renesas,cmms:
500          minItems: 4
501
502        renesas,vsps:
503          minItems: 4
504
505      required:
506        - clock-names
507        - interrupts
508        - resets
509        - reset-names
510        - renesas,vsps
511
512  - if:
513      properties:
514        compatible:
515          contains:
516            enum:
517              - renesas,du-r8a774a1
518              - renesas,du-r8a7796
519              - renesas,du-r8a77961
520    then:
521      properties:
522        clocks:
523          minItems: 3
524          maxItems: 6
525          items:
526            - description: Functional clock for DU0
527            - description: Functional clock for DU1
528            - description: Functional clock for DU2
529            - description: DU_DOTCLKIN0 input clock
530            - description: DU_DOTCLKIN1 input clock
531            - description: DU_DOTCLKIN2 input clock
532
533        clock-names:
534          minItems: 3
535          maxItems: 6
536          items:
537            - const: du.0
538            - const: du.1
539            - const: du.2
540            - pattern: '^dclkin\.[012]$'
541            - pattern: '^dclkin\.[012]$'
542            - pattern: '^dclkin\.[012]$'
543
544        interrupts:
545          maxItems: 3
546
547        resets:
548          maxItems: 2
549
550        reset-names:
551          items:
552            - const: du.0
553            - const: du.2
554
555        ports:
556          properties:
557            port@0:
558              description: DPAD 0
559            port@1:
560              description: HDMI 0
561            port@2:
562              description: LVDS 0
563            port@3: false
564
565          required:
566            - port@0
567            - port@1
568            - port@2
569
570        renesas,cmms:
571          minItems: 3
572
573        renesas,vsps:
574          minItems: 3
575
576      required:
577        - clock-names
578        - interrupts
579        - resets
580        - reset-names
581        - renesas,vsps
582
583  - if:
584      properties:
585        compatible:
586          contains:
587            enum:
588              - renesas,du-r8a774b1
589              - renesas,du-r8a774e1
590              - renesas,du-r8a77965
591    then:
592      properties:
593        clocks:
594          minItems: 3
595          maxItems: 6
596          items:
597            - description: Functional clock for DU0
598            - description: Functional clock for DU1
599            - description: Functional clock for DU3
600            - description: DU_DOTCLKIN0 input clock
601            - description: DU_DOTCLKIN1 input clock
602            - description: DU_DOTCLKIN3 input clock
603
604        clock-names:
605          minItems: 3
606          maxItems: 6
607          items:
608            - const: du.0
609            - const: du.1
610            - const: du.3
611            - pattern: '^dclkin\.[013]$'
612            - pattern: '^dclkin\.[013]$'
613            - pattern: '^dclkin\.[013]$'
614
615        interrupts:
616          maxItems: 3
617
618        resets:
619          maxItems: 2
620
621        reset-names:
622          items:
623            - const: du.0
624            - const: du.3
625
626        ports:
627          properties:
628            port@0:
629              description: DPAD 0
630            port@1:
631              description: HDMI 0
632            port@2:
633              description: LVDS 0
634            port@3: false
635
636          required:
637            - port@0
638            - port@1
639            - port@2
640
641        renesas,cmms:
642          minItems: 3
643
644        renesas,vsps:
645          minItems: 3
646
647      required:
648        - clock-names
649        - interrupts
650        - resets
651        - reset-names
652        - renesas,vsps
653
654  - if:
655      properties:
656        compatible:
657          contains:
658            enum:
659              - renesas,du-r8a77970
660              - renesas,du-r8a77980
661    then:
662      properties:
663        clocks:
664          minItems: 1
665          maxItems: 2
666          items:
667            - description: Functional clock for DU0
668            - description: DU_DOTCLKIN0 input clock
669
670        clock-names:
671          minItems: 1
672          maxItems: 2
673          items:
674            - const: du.0
675            - const: dclkin.0
676
677        interrupts:
678          maxItems: 1
679
680        resets:
681          maxItems: 1
682
683        reset-names:
684          items:
685            - const: du.0
686
687        ports:
688          properties:
689            port@0:
690              description: DPAD 0
691            port@1:
692              description: LVDS 0
693            port@2: false
694            port@3: false
695
696          required:
697            - port@0
698            - port@1
699
700        renesas,vsps:
701          minItems: 1
702
703      required:
704        - clock-names
705        - interrupts
706        - resets
707        - reset-names
708        - renesas,vsps
709
710  - if:
711      properties:
712        compatible:
713          contains:
714            enum:
715              - renesas,du-r8a774c0
716              - renesas,du-r8a77990
717              - renesas,du-r8a77995
718    then:
719      properties:
720        clocks:
721          minItems: 2
722          maxItems: 4
723          items:
724            - description: Functional clock for DU0
725            - description: Functional clock for DU1
726            - description: DU_DOTCLKIN0 input clock
727            - description: DU_DOTCLKIN1 input clock
728
729        clock-names:
730          minItems: 2
731          maxItems: 4
732          items:
733            - const: du.0
734            - const: du.1
735            - pattern: '^dclkin\.[01]$'
736            - pattern: '^dclkin\.[01]$'
737
738        interrupts:
739          maxItems: 2
740
741        resets:
742          maxItems: 1
743
744        reset-names:
745          items:
746            - const: du.0
747
748        ports:
749          properties:
750            port@0:
751              description: DPAD 0
752            port@1:
753              description: LVDS 0
754            port@2:
755              description: LVDS 1
756            # port@3 is TCON, not supported yet
757            port@3: false
758
759          required:
760            - port@0
761            - port@1
762            - port@2
763
764        renesas,cmms:
765          minItems: 2
766
767        renesas,vsps:
768          minItems: 2
769
770      required:
771        - clock-names
772        - interrupts
773        - resets
774        - reset-names
775        - renesas,vsps
776
777  - if:
778      properties:
779        compatible:
780          contains:
781            enum:
782              - renesas,du-r8a779a0
783    then:
784      properties:
785        clocks:
786          items:
787            - description: Functional clock
788
789        clock-names:
790          maxItems: 1
791          items:
792            - const: du.0
793
794        interrupts:
795          maxItems: 2
796
797        resets:
798          maxItems: 1
799
800        reset-names:
801          items:
802            - const: du.0
803
804        ports:
805          properties:
806            port@0:
807              description: DSI 0
808            port@1:
809              description: DSI 1
810            port@2: false
811            port@3: false
812
813          required:
814            - port@0
815            - port@1
816
817        renesas,vsps:
818          minItems: 2
819
820      required:
821        - clock-names
822        - interrupts
823        - resets
824        - reset-names
825        - renesas,vsps
826
827additionalProperties: false
828
829examples:
830  # R-Car H3 ES2.0 DU
831  - |
832    #include <dt-bindings/clock/renesas-cpg-mssr.h>
833    #include <dt-bindings/interrupt-controller/arm-gic.h>
834
835    display@feb00000 {
836        compatible = "renesas,du-r8a7795";
837        reg = <0xfeb00000 0x80000>;
838        interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
839                     <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>,
840                     <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>,
841                     <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>;
842        clocks = <&cpg CPG_MOD 724>,
843                 <&cpg CPG_MOD 723>,
844                 <&cpg CPG_MOD 722>,
845                 <&cpg CPG_MOD 721>;
846        clock-names = "du.0", "du.1", "du.2", "du.3";
847        resets = <&cpg 724>, <&cpg 722>;
848        reset-names = "du.0", "du.2";
849
850        renesas,cmms = <&cmm0>, <&cmm1>, <&cmm2>, <&cmm3>;
851        renesas,vsps = <&vspd0 0>, <&vspd1 0>, <&vspd2 0>, <&vspd0 1>;
852
853        ports {
854            #address-cells = <1>;
855            #size-cells = <0>;
856
857            port@0 {
858                reg = <0>;
859                endpoint {
860                    remote-endpoint = <&adv7123_in>;
861                };
862            };
863            port@1 {
864                reg = <1>;
865                endpoint {
866                    remote-endpoint = <&dw_hdmi0_in>;
867                };
868            };
869            port@2 {
870                reg = <2>;
871                endpoint {
872                    remote-endpoint = <&dw_hdmi1_in>;
873                };
874            };
875            port@3 {
876                reg = <3>;
877                endpoint {
878                    remote-endpoint = <&lvds0_in>;
879                };
880            };
881        };
882    };
883
884...
885