Merge v5.6-rc5 into drm-next
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / display / allwinner,sun4i-a10-tcon.yaml
1 # SPDX-License-Identifier: GPL-2.0
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/display/allwinner,sun4i-a10-tcon.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: Allwinner A10 Timings Controller (TCON) Device Tree Bindings
8
9 maintainers:
10   - Chen-Yu Tsai <wens@csie.org>
11   - Maxime Ripard <mripard@kernel.org>
12
13 description: |
14   The TCON acts as a timing controller for RGB, LVDS and TV
15   interfaces.
16
17 properties:
18   "#clock-cells":
19     const: 0
20
21   compatible:
22     oneOf:
23       - const: allwinner,sun4i-a10-tcon
24       - const: allwinner,sun5i-a13-tcon
25       - const: allwinner,sun6i-a31-tcon
26       - const: allwinner,sun6i-a31s-tcon
27       - const: allwinner,sun7i-a20-tcon
28       - const: allwinner,sun8i-a23-tcon
29       - const: allwinner,sun8i-a33-tcon
30       - const: allwinner,sun8i-a83t-tcon-lcd
31       - const: allwinner,sun8i-a83t-tcon-tv
32       - const: allwinner,sun8i-r40-tcon-tv
33       - const: allwinner,sun8i-v3s-tcon
34       - const: allwinner,sun9i-a80-tcon-lcd
35       - const: allwinner,sun9i-a80-tcon-tv
36
37       - items:
38         - enum:
39           - allwinner,sun7i-a20-tcon0
40           - allwinner,sun7i-a20-tcon1
41         - const: allwinner,sun7i-a20-tcon
42
43       - items:
44         - enum:
45             - allwinner,sun50i-a64-tcon-lcd
46         - const: allwinner,sun8i-a83t-tcon-lcd
47
48       - items:
49         - enum:
50           - allwinner,sun8i-h3-tcon-tv
51           - allwinner,sun50i-a64-tcon-tv
52         - const: allwinner,sun8i-a83t-tcon-tv
53
54       - items:
55         - enum:
56           - allwinner,sun50i-h6-tcon-tv
57         - const: allwinner,sun8i-r40-tcon-tv
58
59   reg:
60     maxItems: 1
61
62   interrupts:
63     maxItems: 1
64
65   clocks:
66     minItems: 1
67     maxItems: 4
68
69   clock-names:
70     minItems: 1
71     maxItems: 4
72
73   clock-output-names:
74     allOf:
75       - $ref: /schemas/types.yaml#/definitions/string-array
76       - maxItems: 1
77     description:
78       Name of the LCD pixel clock created.
79
80   dmas:
81     maxItems: 1
82
83   resets:
84     anyOf:
85       - items:
86         - description: TCON Reset Line
87
88       - items:
89         - description: TCON Reset Line
90         - description: TCON LVDS Reset Line
91
92       - items:
93         - description: TCON Reset Line
94         - description: TCON eDP Reset Line
95
96       - items:
97         - description: TCON Reset Line
98         - description: TCON eDP Reset Line
99         - description: TCON LVDS Reset Line
100
101   reset-names:
102     oneOf:
103       - const: lcd
104
105       - items:
106         - const: lcd
107         - const: lvds
108
109       - items:
110         - const: lcd
111         - const: edp
112
113       - items:
114         - const: lcd
115         - const: edp
116         - const: lvds
117
118   ports:
119     type: object
120     description: |
121       A ports node with endpoint definitions as defined in
122       Documentation/devicetree/bindings/media/video-interfaces.txt.
123
124     properties:
125       "#address-cells":
126         const: 1
127
128       "#size-cells":
129         const: 0
130
131       port@0:
132         type: object
133         description: |
134           Input endpoints of the controller.
135
136       port@1:
137         type: object
138         description: |
139           Output endpoints of the controller.
140
141         patternProperties:
142           "^endpoint(@[0-9])$":
143             type: object
144
145             properties:
146               allwinner,tcon-channel:
147                 $ref: /schemas/types.yaml#/definitions/uint32
148                 description: |
149                   TCON can have 1 or 2 channels, usually with the
150                   first channel being used for the panels interfaces
151                   (RGB, LVDS, etc.), and the second being used for the
152                   outputs that require another controller (TV Encoder,
153                   HDMI, etc.).
154
155                   If that property is present, specifies the TCON
156                   channel the endpoint is associated to. If that
157                   property is not present, the endpoint number will be
158                   used as the channel number.
159
160             unevaluatedProperties: true
161
162     required:
163       - "#address-cells"
164       - "#size-cells"
165       - port@0
166       - port@1
167
168     additionalProperties: false
169
170 required:
171   - compatible
172   - reg
173   - interrupts
174   - clocks
175   - clock-names
176   - resets
177   - ports
178
179 additionalProperties: false
180
181 allOf:
182   - if:
183       properties:
184         compatible:
185           contains:
186             enum:
187               - allwinner,sun4i-a10-tcon
188               - allwinner,sun5i-a13-tcon
189               - allwinner,sun7i-a20-tcon
190
191     then:
192       properties:
193         clocks:
194           minItems: 3
195
196         clock-names:
197           items:
198             - const: ahb
199             - const: tcon-ch0
200             - const: tcon-ch1
201
202   - if:
203       properties:
204         compatible:
205           contains:
206             enum:
207               - allwinner,sun6i-a31-tcon
208               - allwinner,sun6i-a31s-tcon
209
210     then:
211       properties:
212         clocks:
213           minItems: 4
214
215         clock-names:
216           items:
217             - const: ahb
218             - const: tcon-ch0
219             - const: tcon-ch1
220             - const: lvds-alt
221
222   - if:
223       properties:
224         compatible:
225           contains:
226             enum:
227               - allwinner,sun8i-a23-tcon
228               - allwinner,sun8i-a33-tcon
229
230     then:
231       properties:
232         clocks:
233           minItems: 3
234
235         clock-names:
236           items:
237             - const: ahb
238             - const: tcon-ch0
239             - const: lvds-alt
240
241   - if:
242       properties:
243         compatible:
244           contains:
245             enum:
246               - allwinner,sun8i-a83t-tcon-lcd
247               - allwinner,sun8i-v3s-tcon
248               - allwinner,sun9i-a80-tcon-lcd
249
250     then:
251       properties:
252         clocks:
253           minItems: 2
254
255         clock-names:
256           items:
257             - const: ahb
258             - const: tcon-ch0
259
260   - if:
261       properties:
262         compatible:
263           contains:
264             enum:
265               - allwinner,sun8i-a83t-tcon-tv
266               - allwinner,sun8i-r40-tcon-tv
267               - allwinner,sun9i-a80-tcon-tv
268
269     then:
270       properties:
271         clocks:
272           minItems: 2
273
274         clock-names:
275           items:
276             - const: ahb
277             - const: tcon-ch1
278
279   - if:
280       properties:
281         compatible:
282           contains:
283             enum:
284               - allwinner,sun5i-a13-tcon
285               - allwinner,sun6i-a31-tcon
286               - allwinner,sun6i-a31s-tcon
287               - allwinner,sun7i-a20-tcon
288               - allwinner,sun8i-a23-tcon
289               - allwinner,sun8i-a33-tcon
290               - allwinner,sun8i-v3s-tcon
291               - allwinner,sun9i-a80-tcon-lcd
292               - allwinner,sun4i-a10-tcon
293               - allwinner,sun8i-a83t-tcon-lcd
294
295     then:
296       required:
297         - "#clock-cells"
298         - clock-output-names
299
300   - if:
301       properties:
302         compatible:
303           contains:
304             enum:
305               - allwinner,sun6i-a31-tcon
306               - allwinner,sun6i-a31s-tcon
307               - allwinner,sun8i-a23-tcon
308               - allwinner,sun8i-a33-tcon
309               - allwinner,sun8i-a83t-tcon-lcd
310
311     then:
312       properties:
313         resets:
314           minItems: 2
315
316         reset-names:
317           items:
318             - const: lcd
319             - const: lvds
320
321   - if:
322       properties:
323         compatible:
324           contains:
325             enum:
326               - allwinner,sun9i-a80-tcon-lcd
327
328     then:
329       properties:
330         resets:
331           minItems: 3
332
333         reset-names:
334           items:
335             - const: lcd
336             - const: edp
337             - const: lvds
338
339   - if:
340       properties:
341         compatible:
342           contains:
343             enum:
344               - allwinner,sun9i-a80-tcon-tv
345
346     then:
347       properties:
348         resets:
349           minItems: 2
350
351         reset-names:
352           items:
353             - const: lcd
354             - const: edp
355
356   - if:
357       properties:
358         compatible:
359           contains:
360             enum:
361               - allwinner,sun4i-a10-tcon
362               - allwinner,sun5i-a13-tcon
363               - allwinner,sun6i-a31-tcon
364               - allwinner,sun6i-a31s-tcon
365               - allwinner,sun7i-a20-tcon
366               - allwinner,sun8i-a23-tcon
367               - allwinner,sun8i-a33-tcon
368
369     then:
370       required:
371         - dmas
372
373 examples:
374   - |
375     #include <dt-bindings/dma/sun4i-a10.h>
376
377     /*
378      * This comes from the clock/sun4i-a10-ccu.h and
379      * reset/sun4i-a10-ccu.h headers, but we can't include them since
380      * it would trigger a bunch of warnings for redefinitions of
381      * symbols with the other example.
382      */
383
384     #define CLK_AHB_LCD0        56
385     #define CLK_TCON0_CH0       149
386     #define CLK_TCON0_CH1       155
387     #define RST_TCON0           11
388
389     lcd-controller@1c0c000 {
390         compatible = "allwinner,sun4i-a10-tcon";
391         reg = <0x01c0c000 0x1000>;
392         interrupts = <44>;
393         resets = <&ccu RST_TCON0>;
394         reset-names = "lcd";
395         clocks = <&ccu CLK_AHB_LCD0>,
396                  <&ccu CLK_TCON0_CH0>,
397                  <&ccu CLK_TCON0_CH1>;
398         clock-names = "ahb",
399                       "tcon-ch0",
400                       "tcon-ch1";
401         clock-output-names = "tcon0-pixel-clock";
402         #clock-cells = <0>;
403         dmas = <&dma SUN4I_DMA_DEDICATED 14>;
404
405         ports {
406             #address-cells = <1>;
407             #size-cells = <0>;
408
409             port@0 {
410                 #address-cells = <1>;
411                 #size-cells = <0>;
412                 reg = <0>;
413
414                 endpoint@0 {
415                     reg = <0>;
416                     remote-endpoint = <&be0_out_tcon0>;
417                 };
418
419                 endpoint@1 {
420                     reg = <1>;
421                     remote-endpoint = <&be1_out_tcon0>;
422                 };
423             };
424
425             port@1 {
426                 #address-cells = <1>;
427                 #size-cells = <0>;
428                 reg = <1>;
429
430                 endpoint@1 {
431                     reg = <1>;
432                     remote-endpoint = <&hdmi_in_tcon0>;
433                     allwinner,tcon-channel = <1>;
434                 };
435             };
436         };
437     };
438
439     #undef CLK_AHB_LCD0
440     #undef CLK_TCON0_CH0
441     #undef CLK_TCON0_CH1
442     #undef RST_TCON0
443
444   - |
445     #include <dt-bindings/interrupt-controller/arm-gic.h>
446
447     /*
448      * This comes from the clock/sun6i-a31-ccu.h and
449      * reset/sun6i-a31-ccu.h headers, but we can't include them since
450      * it would trigger a bunch of warnings for redefinitions of
451      * symbols with the other example.
452      */
453
454     #define CLK_PLL_MIPI        15
455     #define CLK_AHB1_LCD0       47
456     #define CLK_LCD0_CH0        127
457     #define CLK_LCD0_CH1        129
458     #define RST_AHB1_LCD0       27
459     #define RST_AHB1_LVDS       41
460
461     lcd-controller@1c0c000 {
462         compatible = "allwinner,sun6i-a31-tcon";
463         reg = <0x01c0c000 0x1000>;
464         interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
465         dmas = <&dma 11>;
466         resets = <&ccu RST_AHB1_LCD0>, <&ccu RST_AHB1_LVDS>;
467         reset-names = "lcd", "lvds";
468         clocks = <&ccu CLK_AHB1_LCD0>,
469                  <&ccu CLK_LCD0_CH0>,
470                  <&ccu CLK_LCD0_CH1>,
471                  <&ccu CLK_PLL_MIPI>;
472         clock-names = "ahb",
473                       "tcon-ch0",
474                       "tcon-ch1",
475                       "lvds-alt";
476         clock-output-names = "tcon0-pixel-clock";
477         #clock-cells = <0>;
478
479         ports {
480             #address-cells = <1>;
481             #size-cells = <0>;
482
483             port@0 {
484                 #address-cells = <1>;
485                 #size-cells = <0>;
486                 reg = <0>;
487
488                 endpoint@0 {
489                     reg = <0>;
490                     remote-endpoint = <&drc0_out_tcon0>;
491                 };
492
493                 endpoint@1 {
494                     reg = <1>;
495                     remote-endpoint = <&drc1_out_tcon0>;
496                 };
497             };
498
499             port@1 {
500                 #address-cells = <1>;
501                 #size-cells = <0>;
502                 reg = <1>;
503
504                 endpoint@1 {
505                     reg = <1>;
506                     remote-endpoint = <&hdmi_in_tcon0>;
507                     allwinner,tcon-channel = <1>;
508                 };
509             };
510         };
511     };
512
513     #undef CLK_PLL_MIPI
514     #undef CLK_AHB1_LCD0
515     #undef CLK_LCD0_CH0
516     #undef CLK_LCD0_CH1
517     #undef RST_AHB1_LCD0
518     #undef RST_AHB1_LVDS
519
520   - |
521     #include <dt-bindings/interrupt-controller/arm-gic.h>
522
523     /*
524      * This comes from the clock/sun9i-a80-ccu.h and
525      * reset/sun9i-a80-ccu.h headers, but we can't include them since
526      * it would trigger a bunch of warnings for redefinitions of
527      * symbols with the other example.
528      */
529
530     #define CLK_BUS_LCD0        102
531     #define CLK_LCD0            58
532     #define RST_BUS_LCD0        22
533     #define RST_BUS_EDP         24
534     #define RST_BUS_LVDS        25
535
536     lcd-controller@3c00000 {
537         compatible = "allwinner,sun9i-a80-tcon-lcd";
538         reg = <0x03c00000 0x10000>;
539         interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
540         clocks = <&ccu CLK_BUS_LCD0>, <&ccu CLK_LCD0>;
541         clock-names = "ahb", "tcon-ch0";
542         resets = <&ccu RST_BUS_LCD0>, <&ccu RST_BUS_EDP>, <&ccu RST_BUS_LVDS>;
543         reset-names = "lcd", "edp", "lvds";
544         clock-output-names = "tcon0-pixel-clock";
545         #clock-cells = <0>;
546
547         ports {
548             #address-cells = <1>;
549             #size-cells = <0>;
550
551             port@0 {
552                 reg = <0>;
553
554                 endpoint {
555                     remote-endpoint = <&drc0_out_tcon0>;
556                 };
557             };
558
559             port@1 {
560                 reg = <1>;
561             };
562         };
563     };
564
565     #undef CLK_BUS_TCON0
566     #undef CLK_TCON0
567     #undef RST_BUS_TCON0
568     #undef RST_BUS_EDP
569     #undef RST_BUS_LVDS
570
571   - |
572     #include <dt-bindings/interrupt-controller/arm-gic.h>
573
574     /*
575      * This comes from the clock/sun8i-a83t-ccu.h and
576      * reset/sun8i-a83t-ccu.h headers, but we can't include them since
577      * it would trigger a bunch of warnings for redefinitions of
578      * symbols with the other example.
579      */
580
581     #define CLK_BUS_TCON0       36
582     #define CLK_TCON0           85
583     #define RST_BUS_TCON0       22
584     #define RST_BUS_LVDS        31
585
586     lcd-controller@1c0c000 {
587         compatible = "allwinner,sun8i-a83t-tcon-lcd";
588         reg = <0x01c0c000 0x1000>;
589         interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
590         clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
591         clock-names = "ahb", "tcon-ch0";
592         clock-output-names = "tcon-pixel-clock";
593         #clock-cells = <0>;
594         resets = <&ccu RST_BUS_TCON0>, <&ccu RST_BUS_LVDS>;
595         reset-names = "lcd", "lvds";
596
597         ports {
598             #address-cells = <1>;
599             #size-cells = <0>;
600
601             port@0 {
602                 #address-cells = <1>;
603                 #size-cells = <0>;
604                 reg = <0>;
605
606                 endpoint@0 {
607                     reg = <0>;
608                     remote-endpoint = <&mixer0_out_tcon0>;
609                 };
610
611                 endpoint@1 {
612                     reg = <1>;
613                     remote-endpoint = <&mixer1_out_tcon0>;
614                 };
615             };
616
617             port@1 {
618                 reg = <1>;
619             };
620         };
621     };
622
623     #undef CLK_BUS_TCON0
624     #undef CLK_TCON0
625     #undef RST_BUS_TCON0
626     #undef RST_BUS_LVDS
627
628   - |
629     #include <dt-bindings/interrupt-controller/arm-gic.h>
630
631     /*
632      * This comes from the clock/sun8i-r40-ccu.h and
633      * reset/sun8i-r40-ccu.h headers, but we can't include them since
634      * it would trigger a bunch of warnings for redefinitions of
635      * symbols with the other example.
636      */
637
638     #define CLK_BUS_TCON_TV0    73
639     #define RST_BUS_TCON_TV0    49
640
641     tcon_tv0: lcd-controller@1c73000 {
642         compatible = "allwinner,sun8i-r40-tcon-tv";
643         reg = <0x01c73000 0x1000>;
644         interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
645         clocks = <&ccu CLK_BUS_TCON_TV0>, <&tcon_top 0>;
646         clock-names = "ahb", "tcon-ch1";
647         resets = <&ccu RST_BUS_TCON_TV0>;
648         reset-names = "lcd";
649
650         ports {
651             #address-cells = <1>;
652             #size-cells = <0>;
653
654             port@0 {
655                 #address-cells = <1>;
656                 #size-cells = <0>;
657                 reg = <0>;
658
659                 endpoint@0 {
660                     reg = <0>;
661                     remote-endpoint = <&tcon_top_mixer0_out_tcon_tv0>;
662                 };
663
664                 endpoint@1 {
665                     reg = <1>;
666                     remote-endpoint = <&tcon_top_mixer1_out_tcon_tv0>;
667                 };
668             };
669
670             tcon_tv0_out: port@1 {
671                 #address-cells = <1>;
672                 #size-cells = <0>;
673                 reg = <1>;
674
675                 endpoint@1 {
676                     reg = <1>;
677                     remote-endpoint = <&tcon_top_hdmi_in_tcon_tv0>;
678                 };
679             };
680         };
681     };
682
683     #undef CLK_BUS_TCON_TV0
684     #undef RST_BUS_TCON_TV0
685
686 ...