1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun%YAML 1.2
3*4882a593Smuzhiyun---
4*4882a593Smuzhiyun$id: http://devicetree.org/schemas/display/allwinner,sun8i-a83t-dw-hdmi.yaml#
5*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml#
6*4882a593Smuzhiyun
7*4882a593Smuzhiyuntitle: Allwinner A83t DWC HDMI TX Encoder Device Tree Bindings
8*4882a593Smuzhiyun
9*4882a593Smuzhiyundescription: |
10*4882a593Smuzhiyun  The HDMI transmitter is a Synopsys DesignWare HDMI 1.4 TX controller
11*4882a593Smuzhiyun  IP with Allwinner\'s own PHY IP. It supports audio and video outputs
12*4882a593Smuzhiyun  and CEC.
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun  These DT bindings follow the Synopsys DWC HDMI TX bindings defined
15*4882a593Smuzhiyun  in Documentation/devicetree/bindings/display/bridge/dw_hdmi.txt with
16*4882a593Smuzhiyun  the following device-specific properties.
17*4882a593Smuzhiyun
18*4882a593Smuzhiyunmaintainers:
19*4882a593Smuzhiyun  - Chen-Yu Tsai <wens@csie.org>
20*4882a593Smuzhiyun  - Maxime Ripard <mripard@kernel.org>
21*4882a593Smuzhiyun
22*4882a593Smuzhiyunproperties:
23*4882a593Smuzhiyun  "#phy-cells":
24*4882a593Smuzhiyun    const: 0
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun  compatible:
27*4882a593Smuzhiyun    oneOf:
28*4882a593Smuzhiyun      - const: allwinner,sun8i-a83t-dw-hdmi
29*4882a593Smuzhiyun      - const: allwinner,sun50i-h6-dw-hdmi
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun      - items:
32*4882a593Smuzhiyun          - enum:
33*4882a593Smuzhiyun              - allwinner,sun8i-h3-dw-hdmi
34*4882a593Smuzhiyun              - allwinner,sun8i-r40-dw-hdmi
35*4882a593Smuzhiyun              - allwinner,sun50i-a64-dw-hdmi
36*4882a593Smuzhiyun          - const: allwinner,sun8i-a83t-dw-hdmi
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun  reg:
39*4882a593Smuzhiyun    maxItems: 1
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun  reg-io-width:
42*4882a593Smuzhiyun    const: 1
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun  interrupts:
45*4882a593Smuzhiyun    maxItems: 1
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun  clocks:
48*4882a593Smuzhiyun    minItems: 3
49*4882a593Smuzhiyun    maxItems: 6
50*4882a593Smuzhiyun    items:
51*4882a593Smuzhiyun      - description: Bus Clock
52*4882a593Smuzhiyun      - description: Register Clock
53*4882a593Smuzhiyun      - description: TMDS Clock
54*4882a593Smuzhiyun      - description: HDMI CEC Clock
55*4882a593Smuzhiyun      - description: HDCP Clock
56*4882a593Smuzhiyun      - description: HDCP Bus Clock
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun  clock-names:
59*4882a593Smuzhiyun    minItems: 3
60*4882a593Smuzhiyun    maxItems: 6
61*4882a593Smuzhiyun    items:
62*4882a593Smuzhiyun      - const: iahb
63*4882a593Smuzhiyun      - const: isfr
64*4882a593Smuzhiyun      - const: tmds
65*4882a593Smuzhiyun      - const: cec
66*4882a593Smuzhiyun      - const: hdcp
67*4882a593Smuzhiyun      - const: hdcp-bus
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun  resets:
70*4882a593Smuzhiyun    minItems: 1
71*4882a593Smuzhiyun    maxItems: 2
72*4882a593Smuzhiyun    items:
73*4882a593Smuzhiyun      - description: HDMI Controller Reset
74*4882a593Smuzhiyun      - description: HDCP Reset
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun  reset-names:
77*4882a593Smuzhiyun    minItems: 1
78*4882a593Smuzhiyun    maxItems: 2
79*4882a593Smuzhiyun    items:
80*4882a593Smuzhiyun      - const: ctrl
81*4882a593Smuzhiyun      - const: hdcp
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun  phys:
84*4882a593Smuzhiyun    maxItems: 1
85*4882a593Smuzhiyun    description:
86*4882a593Smuzhiyun      Phandle to the DWC HDMI PHY.
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun  phy-names:
89*4882a593Smuzhiyun    const: phy
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun  hvcc-supply:
92*4882a593Smuzhiyun    description:
93*4882a593Smuzhiyun      The VCC power supply of the controller
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun  ports:
96*4882a593Smuzhiyun    type: object
97*4882a593Smuzhiyun    description: |
98*4882a593Smuzhiyun      A ports node with endpoint definitions as defined in
99*4882a593Smuzhiyun      Documentation/devicetree/bindings/media/video-interfaces.txt.
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun    properties:
102*4882a593Smuzhiyun      "#address-cells":
103*4882a593Smuzhiyun        const: 1
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun      "#size-cells":
106*4882a593Smuzhiyun        const: 0
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun      port@0:
109*4882a593Smuzhiyun        type: object
110*4882a593Smuzhiyun        description: |
111*4882a593Smuzhiyun          Input endpoints of the controller. Usually the associated
112*4882a593Smuzhiyun          TCON.
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun      port@1:
115*4882a593Smuzhiyun        type: object
116*4882a593Smuzhiyun        description: |
117*4882a593Smuzhiyun          Output endpoints of the controller. Usually an HDMI
118*4882a593Smuzhiyun          connector.
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun    required:
121*4882a593Smuzhiyun      - "#address-cells"
122*4882a593Smuzhiyun      - "#size-cells"
123*4882a593Smuzhiyun      - port@0
124*4882a593Smuzhiyun      - port@1
125*4882a593Smuzhiyun
126*4882a593Smuzhiyun    additionalProperties: false
127*4882a593Smuzhiyun
128*4882a593Smuzhiyunrequired:
129*4882a593Smuzhiyun  - compatible
130*4882a593Smuzhiyun  - reg
131*4882a593Smuzhiyun  - reg-io-width
132*4882a593Smuzhiyun  - interrupts
133*4882a593Smuzhiyun  - clocks
134*4882a593Smuzhiyun  - clock-names
135*4882a593Smuzhiyun  - resets
136*4882a593Smuzhiyun  - reset-names
137*4882a593Smuzhiyun  - phys
138*4882a593Smuzhiyun  - phy-names
139*4882a593Smuzhiyun  - ports
140*4882a593Smuzhiyun
141*4882a593Smuzhiyunif:
142*4882a593Smuzhiyun  properties:
143*4882a593Smuzhiyun    compatible:
144*4882a593Smuzhiyun      contains:
145*4882a593Smuzhiyun        enum:
146*4882a593Smuzhiyun          - allwinner,sun50i-h6-dw-hdmi
147*4882a593Smuzhiyun
148*4882a593Smuzhiyunthen:
149*4882a593Smuzhiyun  properties:
150*4882a593Smuzhiyun    clocks:
151*4882a593Smuzhiyun      minItems: 6
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun    clock-names:
154*4882a593Smuzhiyun      minItems: 6
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun    resets:
157*4882a593Smuzhiyun      minItems: 2
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun    reset-names:
160*4882a593Smuzhiyun      minItems: 2
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun
163*4882a593SmuzhiyunadditionalProperties: false
164*4882a593Smuzhiyun
165*4882a593Smuzhiyunexamples:
166*4882a593Smuzhiyun  - |
167*4882a593Smuzhiyun    #include <dt-bindings/interrupt-controller/arm-gic.h>
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun    /*
170*4882a593Smuzhiyun     * This comes from the clock/sun8i-a83t-ccu.h and
171*4882a593Smuzhiyun     * reset/sun8i-a83t-ccu.h headers, but we can't include them since
172*4882a593Smuzhiyun     * it would trigger a bunch of warnings for redefinitions of
173*4882a593Smuzhiyun     * symbols with the other example.
174*4882a593Smuzhiyun     */
175*4882a593Smuzhiyun    #define CLK_BUS_HDMI	39
176*4882a593Smuzhiyun    #define CLK_HDMI		93
177*4882a593Smuzhiyun    #define CLK_HDMI_SLOW	94
178*4882a593Smuzhiyun    #define RST_BUS_HDMI1	26
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun    hdmi@1ee0000 {
181*4882a593Smuzhiyun        compatible = "allwinner,sun8i-a83t-dw-hdmi";
182*4882a593Smuzhiyun        reg = <0x01ee0000 0x10000>;
183*4882a593Smuzhiyun        reg-io-width = <1>;
184*4882a593Smuzhiyun        interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
185*4882a593Smuzhiyun        clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>,
186*4882a593Smuzhiyun                 <&ccu CLK_HDMI>;
187*4882a593Smuzhiyun        clock-names = "iahb", "isfr", "tmds";
188*4882a593Smuzhiyun        resets = <&ccu RST_BUS_HDMI1>;
189*4882a593Smuzhiyun        reset-names = "ctrl";
190*4882a593Smuzhiyun        phys = <&hdmi_phy>;
191*4882a593Smuzhiyun        phy-names = "phy";
192*4882a593Smuzhiyun        pinctrl-names = "default";
193*4882a593Smuzhiyun        pinctrl-0 = <&hdmi_pins>;
194*4882a593Smuzhiyun        status = "disabled";
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun        ports {
197*4882a593Smuzhiyun            #address-cells = <1>;
198*4882a593Smuzhiyun            #size-cells = <0>;
199*4882a593Smuzhiyun
200*4882a593Smuzhiyun            port@0 {
201*4882a593Smuzhiyun                reg = <0>;
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun                endpoint {
204*4882a593Smuzhiyun                    remote-endpoint = <&tcon1_out_hdmi>;
205*4882a593Smuzhiyun                };
206*4882a593Smuzhiyun            };
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun            port@1 {
209*4882a593Smuzhiyun                reg = <1>;
210*4882a593Smuzhiyun            };
211*4882a593Smuzhiyun        };
212*4882a593Smuzhiyun    };
213*4882a593Smuzhiyun
214*4882a593Smuzhiyun    /* Cleanup after ourselves */
215*4882a593Smuzhiyun    #undef CLK_BUS_HDMI
216*4882a593Smuzhiyun    #undef CLK_HDMI
217*4882a593Smuzhiyun    #undef CLK_HDMI_SLOW
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun  - |
220*4882a593Smuzhiyun    #include <dt-bindings/interrupt-controller/arm-gic.h>
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun    /*
223*4882a593Smuzhiyun     * This comes from the clock/sun50i-h6-ccu.h and
224*4882a593Smuzhiyun     * reset/sun50i-h6-ccu.h headers, but we can't include them since
225*4882a593Smuzhiyun     * it would trigger a bunch of warnings for redefinitions of
226*4882a593Smuzhiyun     * symbols with the other example.
227*4882a593Smuzhiyun     */
228*4882a593Smuzhiyun    #define CLK_BUS_HDMI	126
229*4882a593Smuzhiyun    #define CLK_BUS_HDCP	137
230*4882a593Smuzhiyun    #define CLK_HDMI		123
231*4882a593Smuzhiyun    #define CLK_HDMI_SLOW	124
232*4882a593Smuzhiyun    #define CLK_HDMI_CEC	125
233*4882a593Smuzhiyun    #define CLK_HDCP		136
234*4882a593Smuzhiyun    #define RST_BUS_HDMI_SUB	57
235*4882a593Smuzhiyun    #define RST_BUS_HDCP	62
236*4882a593Smuzhiyun
237*4882a593Smuzhiyun    hdmi@6000000 {
238*4882a593Smuzhiyun        compatible = "allwinner,sun50i-h6-dw-hdmi";
239*4882a593Smuzhiyun        reg = <0x06000000 0x10000>;
240*4882a593Smuzhiyun        reg-io-width = <1>;
241*4882a593Smuzhiyun        interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
242*4882a593Smuzhiyun        clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_SLOW>,
243*4882a593Smuzhiyun                 <&ccu CLK_HDMI>, <&ccu CLK_HDMI_CEC>,
244*4882a593Smuzhiyun                 <&ccu CLK_HDCP>, <&ccu CLK_BUS_HDCP>;
245*4882a593Smuzhiyun        clock-names = "iahb", "isfr", "tmds", "cec", "hdcp",
246*4882a593Smuzhiyun                      "hdcp-bus";
247*4882a593Smuzhiyun        resets = <&ccu RST_BUS_HDMI_SUB>, <&ccu RST_BUS_HDCP>;
248*4882a593Smuzhiyun        reset-names = "ctrl", "hdcp";
249*4882a593Smuzhiyun        phys = <&hdmi_phy>;
250*4882a593Smuzhiyun        phy-names = "phy";
251*4882a593Smuzhiyun        pinctrl-names = "default";
252*4882a593Smuzhiyun        pinctrl-0 = <&hdmi_pins>;
253*4882a593Smuzhiyun        status = "disabled";
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun        ports {
256*4882a593Smuzhiyun            #address-cells = <1>;
257*4882a593Smuzhiyun            #size-cells = <0>;
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun            port@0 {
260*4882a593Smuzhiyun                reg = <0>;
261*4882a593Smuzhiyun
262*4882a593Smuzhiyun                endpoint {
263*4882a593Smuzhiyun                    remote-endpoint = <&tcon_top_hdmi_out_hdmi>;
264*4882a593Smuzhiyun                };
265*4882a593Smuzhiyun            };
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun            port@1 {
268*4882a593Smuzhiyun                reg = <1>;
269*4882a593Smuzhiyun            };
270*4882a593Smuzhiyun        };
271*4882a593Smuzhiyun    };
272*4882a593Smuzhiyun
273*4882a593Smuzhiyun...
274