# SPDX-License-Identifier: GPL-2.0 %YAML 1.2 --- $id: http://devicetree.org/schemas/display/allwinner,sun8i-r40-tcon-top.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: Allwinner R40 TCON TOP maintainers: - Chen-Yu Tsai <wens@csie.org> - Maxime Ripard <mripard@kernel.org> description: | TCON TOPs main purpose is to configure whole display pipeline. It determines relationships between mixers and TCONs, selects source TCON for HDMI, muxes LCD and TV encoder GPIO output, selects TV encoder clock source and contains additional TV TCON and DSI gates. It allows display pipeline to be configured in very different ways: / LCD0/LVDS0 / [0] TCON-LCD0 | \ MIPI DSI mixer0 | \ / [1] TCON-LCD1 - LCD1/LVDS1 TCON-TOP / \ [2] TCON-TV0 [0] - TVE0/RGB mixer1 | \ | TCON-TOP - HDMI | / \ [3] TCON-TV1 [1] - TVE1/RGB Note that both TCON TOP references same physical unit. Both mixers can be connected to any TCON. Not all TCON TOP variants support all features. properties: "#clock-cells": const: 1 compatible: enum: - allwinner,sun8i-r40-tcon-top - allwinner,sun20i-d1-tcon-top - allwinner,sun50i-h6-tcon-top reg: maxItems: 1 clocks: minItems: 2 maxItems: 6 clock-names: minItems: 2 maxItems: 6 clock-output-names: minItems: 1 maxItems: 3 resets: maxItems: 1 ports: $ref: /schemas/graph.yaml#/properties/ports properties: port@0: $ref: /schemas/graph.yaml#/properties/port description: | Input endpoint for Mixer 0 mux. port@1: $ref: /schemas/graph.yaml#/properties/port description: | Output endpoint for Mixer 0 mux port@2: $ref: /schemas/graph.yaml#/properties/port description: | Input endpoint for Mixer 1 mux. port@3: $ref: /schemas/graph.yaml#/properties/port description: | Output endpoint for Mixer 1 mux port@4: $ref: /schemas/graph.yaml#/properties/port description: | Input endpoint for HDMI mux. port@5: $ref: /schemas/graph.yaml#/properties/port description: | Output endpoint for HDMI mux required: - port@0 - port@1 - port@4 - port@5 required: - "#clock-cells" - compatible - reg - clocks - clock-names - clock-output-names - resets - ports additionalProperties: false allOf: - if: properties: compatible: contains: const: allwinner,sun8i-r40-tcon-top then: properties: clocks: items: - description: The TCON TOP interface clock - description: The TCON TOP TV0 clock - description: The TCON TOP TVE0 clock - description: The TCON TOP TV1 clock - description: The TCON TOP TVE1 clock - description: The TCON TOP MIPI DSI clock clock-names: items: - const: bus - const: tcon-tv0 - const: tve0 - const: tcon-tv1 - const: tve1 - const: dsi clock-output-names: items: - description: TCON TV0 output clock name - description: TCON TV1 output clock name - description: DSI output clock name ports: required: - port@2 - port@3 - if: properties: compatible: contains: const: allwinner,sun20i-d1-tcon-top then: properties: clocks: items: - description: The TCON TOP interface clock - description: The TCON TOP TV0 clock - description: The TCON TOP TVE0 clock - description: The TCON TOP MIPI DSI clock clock-names: items: - const: bus - const: tcon-tv0 - const: tve0 - const: dsi clock-output-names: items: - description: TCON TV0 output clock name - description: DSI output clock name - if: properties: compatible: contains: const: allwinner,sun50i-h6-tcon-top then: properties: clocks: items: - description: The TCON TOP interface clock - description: The TCON TOP TV0 clock clock-names: items: - const: bus - const: tcon-tv0 clock-output-names: items: - description: TCON TV0 output clock name examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/clock/sun8i-r40-ccu.h> #include <dt-bindings/reset/sun8i-r40-ccu.h> tcon_top: tcon-top@1c70000 { compatible = "allwinner,sun8i-r40-tcon-top"; reg = <0x01c70000 0x1000>; clocks = <&ccu CLK_BUS_TCON_TOP>, <&ccu CLK_TCON_TV0>, <&ccu CLK_TVE0>, <&ccu CLK_TCON_TV1>, <&ccu CLK_TVE1>, <&ccu CLK_DSI_DPHY>; clock-names = "bus", "tcon-tv0", "tve0", "tcon-tv1", "tve1", "dsi"; clock-output-names = "tcon-top-tv0", "tcon-top-tv1", "tcon-top-dsi"; resets = <&ccu RST_BUS_TCON_TOP>; #clock-cells = <1>; ports { #address-cells = <1>; #size-cells = <0>; tcon_top_mixer0_in: port@0 { reg = <0>; tcon_top_mixer0_in_mixer0: endpoint { remote-endpoint = <&mixer0_out_tcon_top>; }; }; tcon_top_mixer0_out: port@1 { #address-cells = <1>; #size-cells = <0>; reg = <1>; tcon_top_mixer0_out_tcon_lcd0: endpoint@0 { reg = <0>; }; tcon_top_mixer0_out_tcon_lcd1: endpoint@1 { reg = <1>; }; tcon_top_mixer0_out_tcon_tv0: endpoint@2 { reg = <2>; remote-endpoint = <&tcon_tv0_in_tcon_top_mixer0>; }; tcon_top_mixer0_out_tcon_tv1: endpoint@3 { reg = <3>; remote-endpoint = <&tcon_tv1_in_tcon_top_mixer0>; }; }; tcon_top_mixer1_in: port@2 { #address-cells = <1>; #size-cells = <0>; reg = <2>; tcon_top_mixer1_in_mixer1: endpoint@1 { reg = <1>; remote-endpoint = <&mixer1_out_tcon_top>; }; }; tcon_top_mixer1_out: port@3 { #address-cells = <1>; #size-cells = <0>; reg = <3>; tcon_top_mixer1_out_tcon_lcd0: endpoint@0 { reg = <0>; }; tcon_top_mixer1_out_tcon_lcd1: endpoint@1 { reg = <1>; }; tcon_top_mixer1_out_tcon_tv0: endpoint@2 { reg = <2>; remote-endpoint = <&tcon_tv0_in_tcon_top_mixer1>; }; tcon_top_mixer1_out_tcon_tv1: endpoint@3 { reg = <3>; remote-endpoint = <&tcon_tv1_in_tcon_top_mixer1>; }; }; tcon_top_hdmi_in: port@4 { #address-cells = <1>; #size-cells = <0>; reg = <4>; tcon_top_hdmi_in_tcon_tv0: endpoint@0 { reg = <0>; remote-endpoint = <&tcon_tv0_out_tcon_top>; }; tcon_top_hdmi_in_tcon_tv1: endpoint@1 { reg = <1>; remote-endpoint = <&tcon_tv1_out_tcon_top>; }; }; tcon_top_hdmi_out: port@5 { reg = <5>; tcon_top_hdmi_out_hdmi: endpoint { remote-endpoint = <&hdmi_in_tcon_top>; }; }; }; }; ...