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