xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/display/msm/mdp5.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunQualcomm adreno/snapdragon MDP5 display controller
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunDescription:
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunThis is the bindings documentation for the Mobile Display Subsytem(MDSS) that
6*4882a593Smuzhiyunencapsulates sub-blocks like MDP5, DSI, HDMI, eDP etc, and the MDP5 display
7*4882a593Smuzhiyuncontroller found in SoCs like MSM8974, APQ8084, MSM8916, MSM8994 and MSM8996.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunMDSS:
10*4882a593SmuzhiyunRequired properties:
11*4882a593Smuzhiyun- compatible:
12*4882a593Smuzhiyun  * "qcom,mdss" - MDSS
13*4882a593Smuzhiyun- reg: Physical base address and length of the controller's registers.
14*4882a593Smuzhiyun- reg-names: The names of register regions. The following regions are required:
15*4882a593Smuzhiyun  * "mdss_phys"
16*4882a593Smuzhiyun  * "vbif_phys"
17*4882a593Smuzhiyun- interrupts: The interrupt signal from MDSS.
18*4882a593Smuzhiyun- interrupt-controller: identifies the node as an interrupt controller.
19*4882a593Smuzhiyun- #interrupt-cells: specifies the number of cells needed to encode an interrupt
20*4882a593Smuzhiyun  source, should be 1.
21*4882a593Smuzhiyun- power-domains: a power domain consumer specifier according to
22*4882a593Smuzhiyun  Documentation/devicetree/bindings/power/power_domain.txt
23*4882a593Smuzhiyun- clocks: device clocks. See ../clocks/clock-bindings.txt for details.
24*4882a593Smuzhiyun- clock-names: the following clocks are required.
25*4882a593Smuzhiyun  * "iface"
26*4882a593Smuzhiyun  * "bus"
27*4882a593Smuzhiyun  * "vsync"
28*4882a593Smuzhiyun- #address-cells: number of address cells for the MDSS children. Should be 1.
29*4882a593Smuzhiyun- #size-cells: Should be 1.
30*4882a593Smuzhiyun- ranges: parent bus address space is the same as the child bus address space.
31*4882a593Smuzhiyun
32*4882a593SmuzhiyunOptional properties:
33*4882a593Smuzhiyun- clock-names: the following clocks are optional:
34*4882a593Smuzhiyun  * "lut"
35*4882a593Smuzhiyun
36*4882a593SmuzhiyunMDP5:
37*4882a593SmuzhiyunRequired properties:
38*4882a593Smuzhiyun- compatible:
39*4882a593Smuzhiyun  * "qcom,mdp5" - MDP5
40*4882a593Smuzhiyun- reg: Physical base address and length of the controller's registers.
41*4882a593Smuzhiyun- reg-names: The names of register regions. The following regions are required:
42*4882a593Smuzhiyun  * "mdp_phys"
43*4882a593Smuzhiyun- interrupts: Interrupt line from MDP5 to MDSS interrupt controller.
44*4882a593Smuzhiyun- clocks: device clocks. See ../clocks/clock-bindings.txt for details.
45*4882a593Smuzhiyun- clock-names: the following clocks are required.
46*4882a593Smuzhiyun-   * "bus"
47*4882a593Smuzhiyun-   * "iface"
48*4882a593Smuzhiyun-   * "core"
49*4882a593Smuzhiyun-   * "vsync"
50*4882a593Smuzhiyun- ports: contains the list of output ports from MDP. These connect to interfaces
51*4882a593Smuzhiyun  that are external to the MDP hardware, such as HDMI, DSI, EDP etc (LVDS is a
52*4882a593Smuzhiyun  special case since it is a part of the MDP block itself).
53*4882a593Smuzhiyun
54*4882a593Smuzhiyun  Each output port contains an endpoint that describes how it is connected to an
55*4882a593Smuzhiyun  external interface. These are described by the standard properties documented
56*4882a593Smuzhiyun  here:
57*4882a593Smuzhiyun	Documentation/devicetree/bindings/graph.txt
58*4882a593Smuzhiyun	Documentation/devicetree/bindings/media/video-interfaces.txt
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun  The availability of output ports can vary across SoC revisions:
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun  For MSM8974 and APQ8084:
63*4882a593Smuzhiyun	 Port 0 -> MDP_INTF0 (eDP)
64*4882a593Smuzhiyun	 Port 1 -> MDP_INTF1 (DSI1)
65*4882a593Smuzhiyun	 Port 2 -> MDP_INTF2 (DSI2)
66*4882a593Smuzhiyun	 Port 3 -> MDP_INTF3 (HDMI)
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun  For MSM8916:
69*4882a593Smuzhiyun	 Port 0 -> MDP_INTF1 (DSI1)
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun  For MSM8994 and MSM8996:
72*4882a593Smuzhiyun	 Port 0 -> MDP_INTF1 (DSI1)
73*4882a593Smuzhiyun	 Port 1 -> MDP_INTF2 (DSI2)
74*4882a593Smuzhiyun	 Port 2 -> MDP_INTF3 (HDMI)
75*4882a593Smuzhiyun
76*4882a593SmuzhiyunOptional properties:
77*4882a593Smuzhiyun- clock-names: the following clocks are optional:
78*4882a593Smuzhiyun  * "lut"
79*4882a593Smuzhiyun  * "tbu"
80*4882a593Smuzhiyun  * "tbu_rt"
81*4882a593Smuzhiyun
82*4882a593SmuzhiyunExample:
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun/ {
85*4882a593Smuzhiyun	...
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun	mdss: mdss@1a00000 {
88*4882a593Smuzhiyun		compatible = "qcom,mdss";
89*4882a593Smuzhiyun		reg = <0x1a00000 0x1000>,
90*4882a593Smuzhiyun		      <0x1ac8000 0x3000>;
91*4882a593Smuzhiyun		reg-names = "mdss_phys", "vbif_phys";
92*4882a593Smuzhiyun
93*4882a593Smuzhiyun		power-domains = <&gcc MDSS_GDSC>;
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun		clocks = <&gcc GCC_MDSS_AHB_CLK>,
96*4882a593Smuzhiyun			 <&gcc GCC_MDSS_AXI_CLK>,
97*4882a593Smuzhiyun			 <&gcc GCC_MDSS_VSYNC_CLK>;
98*4882a593Smuzhiyun		clock-names = "iface",
99*4882a593Smuzhiyun			      "bus",
100*4882a593Smuzhiyun			      "vsync"
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun		interrupts = <0 72 0>;
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun		interrupt-controller;
105*4882a593Smuzhiyun		#interrupt-cells = <1>;
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun		#address-cells = <1>;
108*4882a593Smuzhiyun		#size-cells = <1>;
109*4882a593Smuzhiyun		ranges;
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun		mdp: mdp@1a01000 {
112*4882a593Smuzhiyun			compatible = "qcom,mdp5";
113*4882a593Smuzhiyun			reg = <0x1a01000 0x90000>;
114*4882a593Smuzhiyun			reg-names = "mdp_phys";
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun			interrupt-parent = <&mdss>;
117*4882a593Smuzhiyun			interrupts = <0 0>;
118*4882a593Smuzhiyun
119*4882a593Smuzhiyun			clocks = <&gcc GCC_MDSS_AHB_CLK>,
120*4882a593Smuzhiyun				 <&gcc GCC_MDSS_AXI_CLK>,
121*4882a593Smuzhiyun				 <&gcc GCC_MDSS_MDP_CLK>,
122*4882a593Smuzhiyun				 <&gcc GCC_MDSS_VSYNC_CLK>;
123*4882a593Smuzhiyun			clock-names = "iface",
124*4882a593Smuzhiyun				      "bus",
125*4882a593Smuzhiyun				      "core",
126*4882a593Smuzhiyun				      "vsync";
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun			ports {
129*4882a593Smuzhiyun				#address-cells = <1>;
130*4882a593Smuzhiyun				#size-cells = <0>;
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun				port@0 {
133*4882a593Smuzhiyun					reg = <0>;
134*4882a593Smuzhiyun					mdp5_intf1_out: endpoint {
135*4882a593Smuzhiyun						remote-endpoint = <&dsi0_in>;
136*4882a593Smuzhiyun					};
137*4882a593Smuzhiyun				};
138*4882a593Smuzhiyun			};
139*4882a593Smuzhiyun		};
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun		dsi0: dsi@1a98000 {
142*4882a593Smuzhiyun			...
143*4882a593Smuzhiyun			ports {
144*4882a593Smuzhiyun				...
145*4882a593Smuzhiyun				port@0 {
146*4882a593Smuzhiyun					reg = <0>;
147*4882a593Smuzhiyun					dsi0_in: endpoint {
148*4882a593Smuzhiyun						remote-endpoint = <&mdp5_intf1_out>;
149*4882a593Smuzhiyun					};
150*4882a593Smuzhiyun				};
151*4882a593Smuzhiyun				...
152*4882a593Smuzhiyun			};
153*4882a593Smuzhiyun			...
154*4882a593Smuzhiyun		};
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun		dsi_phy0: dsi-phy@1a98300 {
157*4882a593Smuzhiyun			...
158*4882a593Smuzhiyun		};
159*4882a593Smuzhiyun	};
160*4882a593Smuzhiyun};
161