gpio: rcar: Fix runtime PM imbalance on error
[linux/fpc-iii.git] / Documentation / devicetree / bindings / display / allwinner,sun4i-a10-tcon.yaml
blobe5344c4ae22656d7ffa773a3a3ce95b8f750986d
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#
7 title: Allwinner A10 Timings Controller (TCON) Device Tree Bindings
9 maintainers:
10   - Chen-Yu Tsai <wens@csie.org>
11   - Maxime Ripard <mripard@kernel.org>
13 description: |
14   The TCON acts as a timing controller for RGB, LVDS and TV
15   interfaces.
17 properties:
18   "#clock-cells":
19     const: 0
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
37       - items:
38         - enum:
39           - allwinner,sun7i-a20-tcon0
40           - allwinner,sun7i-a20-tcon1
41         - const: allwinner,sun7i-a20-tcon
43       - items:
44         - enum:
45             - allwinner,sun50i-a64-tcon-lcd
46         - const: allwinner,sun8i-a83t-tcon-lcd
48       - items:
49         - enum:
50           - allwinner,sun8i-h3-tcon-tv
51           - allwinner,sun50i-a64-tcon-tv
52         - const: allwinner,sun8i-a83t-tcon-tv
54       - items:
55         - enum:
56           - allwinner,sun50i-h6-tcon-tv
57         - const: allwinner,sun8i-r40-tcon-tv
59   reg:
60     maxItems: 1
62   interrupts:
63     maxItems: 1
65   clocks:
66     minItems: 1
67     maxItems: 4
69   clock-names:
70     minItems: 1
71     maxItems: 4
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.
80   dmas:
81     maxItems: 1
83   resets:
84     anyOf:
85       - items:
86         - description: TCON Reset Line
88       - items:
89         - description: TCON Reset Line
90         - description: TCON LVDS Reset Line
92       - items:
93         - description: TCON Reset Line
94         - description: TCON eDP Reset Line
96       - items:
97         - description: TCON Reset Line
98         - description: TCON eDP Reset Line
99         - description: TCON LVDS Reset Line
101   reset-names:
102     oneOf:
103       - const: lcd
105       - items:
106         - const: lcd
107         - const: lvds
109       - items:
110         - const: lcd
111         - const: edp
113       - items:
114         - const: lcd
115         - const: edp
116         - const: lvds
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.
124     properties:
125       "#address-cells":
126         const: 1
128       "#size-cells":
129         const: 0
131       port@0:
132         type: object
133         description: |
134           Input endpoints of the controller.
136       port@1:
137         type: object
138         description: |
139           Output endpoints of the controller.
141         patternProperties:
142           "^endpoint(@[0-9])$":
143             type: object
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.).
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.
160             unevaluatedProperties: true
162     required:
163       - "#address-cells"
164       - "#size-cells"
165       - port@0
166       - port@1
168     additionalProperties: false
170 required:
171   - compatible
172   - reg
173   - interrupts
174   - clocks
175   - clock-names
176   - resets
177   - ports
179 additionalProperties: false
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
191     then:
192       properties:
193         clocks:
194           minItems: 3
196         clock-names:
197           items:
198             - const: ahb
199             - const: tcon-ch0
200             - const: tcon-ch1
202   - if:
203       properties:
204         compatible:
205           contains:
206             enum:
207               - allwinner,sun6i-a31-tcon
208               - allwinner,sun6i-a31s-tcon
210     then:
211       properties:
212         clocks:
213           minItems: 4
215         clock-names:
216           items:
217             - const: ahb
218             - const: tcon-ch0
219             - const: tcon-ch1
220             - const: lvds-alt
222   - if:
223       properties:
224         compatible:
225           contains:
226             enum:
227               - allwinner,sun8i-a23-tcon
228               - allwinner,sun8i-a33-tcon
230     then:
231       properties:
232         clocks:
233           minItems: 3
235         clock-names:
236           items:
237             - const: ahb
238             - const: tcon-ch0
239             - const: lvds-alt
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
250     then:
251       properties:
252         clocks:
253           minItems: 2
255         clock-names:
256           items:
257             - const: ahb
258             - const: tcon-ch0
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
269     then:
270       properties:
271         clocks:
272           minItems: 2
274         clock-names:
275           items:
276             - const: ahb
277             - const: tcon-ch1
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
295     then:
296       required:
297         - "#clock-cells"
298         - clock-output-names
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
311     then:
312       properties:
313         resets:
314           minItems: 2
316         reset-names:
317           items:
318             - const: lcd
319             - const: lvds
321   - if:
322       properties:
323         compatible:
324           contains:
325             enum:
326               - allwinner,sun9i-a80-tcon-lcd
328     then:
329       properties:
330         resets:
331           minItems: 3
333         reset-names:
334           items:
335             - const: lcd
336             - const: edp
337             - const: lvds
339   - if:
340       properties:
341         compatible:
342           contains:
343             enum:
344               - allwinner,sun9i-a80-tcon-tv
346     then:
347       properties:
348         resets:
349           minItems: 2
351         reset-names:
352           items:
353             - const: lcd
354             - const: edp
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
369     then:
370       required:
371         - dmas
373 examples:
374   - |
375     #include <dt-bindings/dma/sun4i-a10.h>
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      */
384     #define CLK_AHB_LCD0        56
385     #define CLK_TCON0_CH0       149
386     #define CLK_TCON0_CH1       155
387     #define RST_TCON0           11
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>;
405         ports {
406             #address-cells = <1>;
407             #size-cells = <0>;
409             port@0 {
410                 #address-cells = <1>;
411                 #size-cells = <0>;
412                 reg = <0>;
414                 endpoint@0 {
415                     reg = <0>;
416                     remote-endpoint = <&be0_out_tcon0>;
417                 };
419                 endpoint@1 {
420                     reg = <1>;
421                     remote-endpoint = <&be1_out_tcon0>;
422                 };
423             };
425             port@1 {
426                 #address-cells = <1>;
427                 #size-cells = <0>;
428                 reg = <1>;
430                 endpoint@1 {
431                     reg = <1>;
432                     remote-endpoint = <&hdmi_in_tcon0>;
433                     allwinner,tcon-channel = <1>;
434                 };
435             };
436         };
437     };
439     #undef CLK_AHB_LCD0
440     #undef CLK_TCON0_CH0
441     #undef CLK_TCON0_CH1
442     #undef RST_TCON0
444   - |
445     #include <dt-bindings/interrupt-controller/arm-gic.h>
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      */
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
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>;
479         ports {
480             #address-cells = <1>;
481             #size-cells = <0>;
483             port@0 {
484                 #address-cells = <1>;
485                 #size-cells = <0>;
486                 reg = <0>;
488                 endpoint@0 {
489                     reg = <0>;
490                     remote-endpoint = <&drc0_out_tcon0>;
491                 };
493                 endpoint@1 {
494                     reg = <1>;
495                     remote-endpoint = <&drc1_out_tcon0>;
496                 };
497             };
499             port@1 {
500                 #address-cells = <1>;
501                 #size-cells = <0>;
502                 reg = <1>;
504                 endpoint@1 {
505                     reg = <1>;
506                     remote-endpoint = <&hdmi_in_tcon0>;
507                     allwinner,tcon-channel = <1>;
508                 };
509             };
510         };
511     };
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
520   - |
521     #include <dt-bindings/interrupt-controller/arm-gic.h>
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      */
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
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>;
547         ports {
548             #address-cells = <1>;
549             #size-cells = <0>;
551             port@0 {
552                 reg = <0>;
554                 endpoint {
555                     remote-endpoint = <&drc0_out_tcon0>;
556                 };
557             };
559             port@1 {
560                 reg = <1>;
561             };
562         };
563     };
565     #undef CLK_BUS_TCON0
566     #undef CLK_TCON0
567     #undef RST_BUS_TCON0
568     #undef RST_BUS_EDP
569     #undef RST_BUS_LVDS
571   - |
572     #include <dt-bindings/interrupt-controller/arm-gic.h>
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      */
581     #define CLK_BUS_TCON0       36
582     #define CLK_TCON0           85
583     #define RST_BUS_TCON0       22
584     #define RST_BUS_LVDS        31
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";
597         ports {
598             #address-cells = <1>;
599             #size-cells = <0>;
601             port@0 {
602                 #address-cells = <1>;
603                 #size-cells = <0>;
604                 reg = <0>;
606                 endpoint@0 {
607                     reg = <0>;
608                     remote-endpoint = <&mixer0_out_tcon0>;
609                 };
611                 endpoint@1 {
612                     reg = <1>;
613                     remote-endpoint = <&mixer1_out_tcon0>;
614                 };
615             };
617             port@1 {
618                 reg = <1>;
619             };
620         };
621     };
623     #undef CLK_BUS_TCON0
624     #undef CLK_TCON0
625     #undef RST_BUS_TCON0
626     #undef RST_BUS_LVDS
628   - |
629     #include <dt-bindings/interrupt-controller/arm-gic.h>
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      */
638     #define CLK_BUS_TCON_TV0    73
639     #define RST_BUS_TCON_TV0    49
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";
650         ports {
651             #address-cells = <1>;
652             #size-cells = <0>;
654             port@0 {
655                 #address-cells = <1>;
656                 #size-cells = <0>;
657                 reg = <0>;
659                 endpoint@0 {
660                     reg = <0>;
661                     remote-endpoint = <&tcon_top_mixer0_out_tcon_tv0>;
662                 };
664                 endpoint@1 {
665                     reg = <1>;
666                     remote-endpoint = <&tcon_top_mixer1_out_tcon_tv0>;
667                 };
668             };
670             tcon_tv0_out: port@1 {
671                 #address-cells = <1>;
672                 #size-cells = <0>;
673                 reg = <1>;
675                 endpoint@1 {
676                     reg = <1>;
677                     remote-endpoint = <&tcon_top_hdmi_in_tcon_tv0>;
678                 };
679             };
680         };
681     };
683     #undef CLK_BUS_TCON_TV0
684     #undef RST_BUS_TCON_TV0