xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/display/msm/dsi.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunQualcomm Technologies Inc. adreno/snapdragon DSI output
2*4882a593Smuzhiyun
3*4882a593SmuzhiyunDSI Controller:
4*4882a593SmuzhiyunRequired properties:
5*4882a593Smuzhiyun- compatible:
6*4882a593Smuzhiyun  * "qcom,mdss-dsi-ctrl"
7*4882a593Smuzhiyun- reg: Physical base address and length of the registers of controller
8*4882a593Smuzhiyun- reg-names: The names of register regions. The following regions are required:
9*4882a593Smuzhiyun  * "dsi_ctrl"
10*4882a593Smuzhiyun- interrupts: The interrupt signal from the DSI block.
11*4882a593Smuzhiyun- power-domains: Should be <&mmcc MDSS_GDSC>.
12*4882a593Smuzhiyun- clocks: Phandles to device clocks.
13*4882a593Smuzhiyun- clock-names: the following clocks are required:
14*4882a593Smuzhiyun  * "mdp_core"
15*4882a593Smuzhiyun  * "iface"
16*4882a593Smuzhiyun  * "bus"
17*4882a593Smuzhiyun  * "core_mmss"
18*4882a593Smuzhiyun  * "byte"
19*4882a593Smuzhiyun  * "pixel"
20*4882a593Smuzhiyun  * "core"
21*4882a593Smuzhiyun  For DSIv2, we need an additional clock:
22*4882a593Smuzhiyun   * "src"
23*4882a593Smuzhiyun  For DSI6G v2.0 onwards, we need also need the clock:
24*4882a593Smuzhiyun   * "byte_intf"
25*4882a593Smuzhiyun- assigned-clocks: Parents of "byte" and "pixel" for the given platform.
26*4882a593Smuzhiyun- assigned-clock-parents: The Byte clock and Pixel clock PLL outputs provided
27*4882a593Smuzhiyun  by a DSI PHY block. See [1] for details on clock bindings.
28*4882a593Smuzhiyun- vdd-supply: phandle to vdd regulator device node
29*4882a593Smuzhiyun- vddio-supply: phandle to vdd-io regulator device node
30*4882a593Smuzhiyun- vdda-supply: phandle to vdda regulator device node
31*4882a593Smuzhiyun- phys: phandle to DSI PHY device node
32*4882a593Smuzhiyun- phy-names: the name of the corresponding PHY device
33*4882a593Smuzhiyun- syscon-sfpb: A phandle to mmss_sfpb syscon node (only for DSIv2)
34*4882a593Smuzhiyun- ports: Contains 2 DSI controller ports as child nodes. Each port contains
35*4882a593Smuzhiyun  an endpoint subnode as defined in [2] and [3].
36*4882a593Smuzhiyun
37*4882a593SmuzhiyunOptional properties:
38*4882a593Smuzhiyun- panel@0: Node of panel connected to this DSI controller.
39*4882a593Smuzhiyun  See files in [4] for each supported panel.
40*4882a593Smuzhiyun- qcom,dual-dsi-mode: Boolean value indicating if the DSI controller is
41*4882a593Smuzhiyun  driving a panel which needs 2 DSI links.
42*4882a593Smuzhiyun- qcom,master-dsi: Boolean value indicating if the DSI controller is driving
43*4882a593Smuzhiyun  the master link of the 2-DSI panel.
44*4882a593Smuzhiyun- qcom,sync-dual-dsi: Boolean value indicating if the DSI controller is
45*4882a593Smuzhiyun  driving a 2-DSI panel whose 2 links need receive command simultaneously.
46*4882a593Smuzhiyun- pinctrl-names: the pin control state names; should contain "default"
47*4882a593Smuzhiyun- pinctrl-0: the default pinctrl state (active)
48*4882a593Smuzhiyun- pinctrl-n: the "sleep" pinctrl state
49*4882a593Smuzhiyun- ports: contains DSI controller input and output ports as children, each
50*4882a593Smuzhiyun  containing one endpoint subnode.
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun  DSI Endpoint properties:
53*4882a593Smuzhiyun  - remote-endpoint: For port@0, set to phandle of the connected panel/bridge's
54*4882a593Smuzhiyun    input endpoint. For port@1, set to the MDP interface output. See [2] for
55*4882a593Smuzhiyun    device graph info.
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun  - data-lanes: this describes how the physical DSI data lanes are mapped
58*4882a593Smuzhiyun    to the logical lanes on the given platform. The value contained in
59*4882a593Smuzhiyun    index n describes what physical lane is mapped to the logical lane n
60*4882a593Smuzhiyun    (DATAn, where n lies between 0 and 3). The clock lane position is fixed
61*4882a593Smuzhiyun    and can't be changed. Hence, they aren't a part of the DT bindings. See
62*4882a593Smuzhiyun    [3] for more info on the data-lanes property.
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun    For example:
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun    data-lanes = <3 0 1 2>;
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun    The above mapping describes that the logical data lane DATA0 is mapped to
69*4882a593Smuzhiyun    the physical data lane DATA3, logical DATA1 to physical DATA0, logic DATA2
70*4882a593Smuzhiyun    to phys DATA1 and logic DATA3 to phys DATA2.
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun    There are only a limited number of physical to logical mappings possible:
73*4882a593Smuzhiyun    <0 1 2 3>
74*4882a593Smuzhiyun    <1 2 3 0>
75*4882a593Smuzhiyun    <2 3 0 1>
76*4882a593Smuzhiyun    <3 0 1 2>
77*4882a593Smuzhiyun    <0 3 2 1>
78*4882a593Smuzhiyun    <1 0 3 2>
79*4882a593Smuzhiyun    <2 1 0 3>
80*4882a593Smuzhiyun    <3 2 1 0>
81*4882a593Smuzhiyun
82*4882a593SmuzhiyunDSI PHY:
83*4882a593SmuzhiyunRequired properties:
84*4882a593Smuzhiyun- compatible: Could be the following
85*4882a593Smuzhiyun  * "qcom,dsi-phy-28nm-hpm"
86*4882a593Smuzhiyun  * "qcom,dsi-phy-28nm-lp"
87*4882a593Smuzhiyun  * "qcom,dsi-phy-20nm"
88*4882a593Smuzhiyun  * "qcom,dsi-phy-28nm-8960"
89*4882a593Smuzhiyun  * "qcom,dsi-phy-14nm"
90*4882a593Smuzhiyun  * "qcom,dsi-phy-14nm-660"
91*4882a593Smuzhiyun  * "qcom,dsi-phy-10nm"
92*4882a593Smuzhiyun  * "qcom,dsi-phy-10nm-8998"
93*4882a593Smuzhiyun  * "qcom,dsi-phy-7nm"
94*4882a593Smuzhiyun  * "qcom,dsi-phy-7nm-8150"
95*4882a593Smuzhiyun- reg: Physical base address and length of the registers of PLL, PHY. Some
96*4882a593Smuzhiyun  revisions require the PHY regulator base address, whereas others require the
97*4882a593Smuzhiyun  PHY lane base address. See below for each PHY revision.
98*4882a593Smuzhiyun- reg-names: The names of register regions. The following regions are required:
99*4882a593Smuzhiyun  For DSI 28nm HPM/LP/8960 PHYs and 20nm PHY:
100*4882a593Smuzhiyun  * "dsi_pll"
101*4882a593Smuzhiyun  * "dsi_phy"
102*4882a593Smuzhiyun  * "dsi_phy_regulator"
103*4882a593Smuzhiyun  For DSI 14nm, 10nm and 7nm PHYs:
104*4882a593Smuzhiyun  * "dsi_pll"
105*4882a593Smuzhiyun  * "dsi_phy"
106*4882a593Smuzhiyun  * "dsi_phy_lane"
107*4882a593Smuzhiyun- clock-cells: Must be 1. The DSI PHY block acts as a clock provider, creating
108*4882a593Smuzhiyun  2 clocks: A byte clock (index 0), and a pixel clock (index 1).
109*4882a593Smuzhiyun- power-domains: Should be <&mmcc MDSS_GDSC>.
110*4882a593Smuzhiyun- clocks: Phandles to device clocks. See [1] for details on clock bindings.
111*4882a593Smuzhiyun- clock-names: the following clocks are required:
112*4882a593Smuzhiyun  * "iface"
113*4882a593Smuzhiyun  * "ref" (only required for new DTS files/entries)
114*4882a593Smuzhiyun  For 28nm HPM/LP, 28nm 8960 PHYs:
115*4882a593Smuzhiyun- vddio-supply: phandle to vdd-io regulator device node
116*4882a593Smuzhiyun  For 20nm PHY:
117*4882a593Smuzhiyun- vddio-supply: phandle to vdd-io regulator device node
118*4882a593Smuzhiyun- vcca-supply: phandle to vcca regulator device node
119*4882a593Smuzhiyun  For 14nm PHY:
120*4882a593Smuzhiyun- vcca-supply: phandle to vcca regulator device node
121*4882a593Smuzhiyun  For 10nm and 7nm PHY:
122*4882a593Smuzhiyun- vdds-supply: phandle to vdds regulator device node
123*4882a593Smuzhiyun
124*4882a593SmuzhiyunOptional properties:
125*4882a593Smuzhiyun- qcom,dsi-phy-regulator-ldo-mode: Boolean value indicating if the LDO mode PHY
126*4882a593Smuzhiyun  regulator is wanted.
127*4882a593Smuzhiyun- qcom,mdss-mdp-transfer-time-us:	Specifies the dsi transfer time for command mode
128*4882a593Smuzhiyun					panels in microseconds. Driver uses this number to adjust
129*4882a593Smuzhiyun					the clock rate according to the expected transfer time.
130*4882a593Smuzhiyun					Increasing this value would slow down the mdp processing
131*4882a593Smuzhiyun					and can result in slower performance.
132*4882a593Smuzhiyun					Decreasing this value can speed up the mdp processing,
133*4882a593Smuzhiyun					but this can also impact power consumption.
134*4882a593Smuzhiyun					As a rule this time should not be higher than the time
135*4882a593Smuzhiyun					that would be expected with the processing at the
136*4882a593Smuzhiyun					dsi link rate since anyways this would be the maximum
137*4882a593Smuzhiyun					transfer time that could be achieved.
138*4882a593Smuzhiyun					If ping pong split is enabled, this time should not be higher
139*4882a593Smuzhiyun					than two times the dsi link rate time.
140*4882a593Smuzhiyun					If the property is not specified, then the default value is 14000 us.
141*4882a593Smuzhiyun
142*4882a593Smuzhiyun[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
143*4882a593Smuzhiyun[2] Documentation/devicetree/bindings/graph.txt
144*4882a593Smuzhiyun[3] Documentation/devicetree/bindings/media/video-interfaces.txt
145*4882a593Smuzhiyun[4] Documentation/devicetree/bindings/display/panel/
146*4882a593Smuzhiyun
147*4882a593SmuzhiyunExample:
148*4882a593Smuzhiyun	dsi0: dsi@fd922800 {
149*4882a593Smuzhiyun		compatible = "qcom,mdss-dsi-ctrl";
150*4882a593Smuzhiyun		qcom,dsi-host-index = <0>;
151*4882a593Smuzhiyun		interrupt-parent = <&mdp>;
152*4882a593Smuzhiyun		interrupts = <4 0>;
153*4882a593Smuzhiyun		reg-names = "dsi_ctrl";
154*4882a593Smuzhiyun		reg = <0xfd922800 0x200>;
155*4882a593Smuzhiyun		power-domains = <&mmcc MDSS_GDSC>;
156*4882a593Smuzhiyun		clock-names =
157*4882a593Smuzhiyun			"bus",
158*4882a593Smuzhiyun			"byte",
159*4882a593Smuzhiyun			"core",
160*4882a593Smuzhiyun			"core_mmss",
161*4882a593Smuzhiyun			"iface",
162*4882a593Smuzhiyun			"mdp_core",
163*4882a593Smuzhiyun			"pixel";
164*4882a593Smuzhiyun		clocks =
165*4882a593Smuzhiyun			<&mmcc MDSS_AXI_CLK>,
166*4882a593Smuzhiyun			<&mmcc MDSS_BYTE0_CLK>,
167*4882a593Smuzhiyun			<&mmcc MDSS_ESC0_CLK>,
168*4882a593Smuzhiyun			<&mmcc MMSS_MISC_AHB_CLK>,
169*4882a593Smuzhiyun			<&mmcc MDSS_AHB_CLK>,
170*4882a593Smuzhiyun			<&mmcc MDSS_MDP_CLK>,
171*4882a593Smuzhiyun			<&mmcc MDSS_PCLK0_CLK>;
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun		assigned-clocks =
174*4882a593Smuzhiyun				 <&mmcc BYTE0_CLK_SRC>,
175*4882a593Smuzhiyun				 <&mmcc PCLK0_CLK_SRC>;
176*4882a593Smuzhiyun		assigned-clock-parents =
177*4882a593Smuzhiyun				 <&dsi_phy0 0>,
178*4882a593Smuzhiyun				 <&dsi_phy0 1>;
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun		vdda-supply = <&pma8084_l2>;
181*4882a593Smuzhiyun		vdd-supply = <&pma8084_l22>;
182*4882a593Smuzhiyun		vddio-supply = <&pma8084_l12>;
183*4882a593Smuzhiyun
184*4882a593Smuzhiyun		phys = <&dsi_phy0>;
185*4882a593Smuzhiyun		phy-names ="dsi-phy";
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun		qcom,dual-dsi-mode;
188*4882a593Smuzhiyun		qcom,master-dsi;
189*4882a593Smuzhiyun		qcom,sync-dual-dsi;
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun		qcom,mdss-mdp-transfer-time-us = <12000>;
192*4882a593Smuzhiyun
193*4882a593Smuzhiyun		pinctrl-names = "default", "sleep";
194*4882a593Smuzhiyun		pinctrl-0 = <&dsi_active>;
195*4882a593Smuzhiyun		pinctrl-1 = <&dsi_suspend>;
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun		ports {
198*4882a593Smuzhiyun			#address-cells = <1>;
199*4882a593Smuzhiyun			#size-cells = <0>;
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun			port@0 {
202*4882a593Smuzhiyun				reg = <0>;
203*4882a593Smuzhiyun				dsi0_in: endpoint {
204*4882a593Smuzhiyun					remote-endpoint = <&mdp_intf1_out>;
205*4882a593Smuzhiyun				};
206*4882a593Smuzhiyun			};
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun			port@1 {
209*4882a593Smuzhiyun				reg = <1>;
210*4882a593Smuzhiyun				dsi0_out: endpoint {
211*4882a593Smuzhiyun					remote-endpoint = <&panel_in>;
212*4882a593Smuzhiyun					data-lanes = <0 1 2 3>;
213*4882a593Smuzhiyun				};
214*4882a593Smuzhiyun			};
215*4882a593Smuzhiyun		};
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun		panel: panel@0 {
218*4882a593Smuzhiyun			compatible = "sharp,lq101r1sx01";
219*4882a593Smuzhiyun			reg = <0>;
220*4882a593Smuzhiyun			link2 = <&secondary>;
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun			power-supply = <...>;
223*4882a593Smuzhiyun			backlight = <...>;
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun			port {
226*4882a593Smuzhiyun				panel_in: endpoint {
227*4882a593Smuzhiyun					remote-endpoint = <&dsi0_out>;
228*4882a593Smuzhiyun				};
229*4882a593Smuzhiyun			};
230*4882a593Smuzhiyun		};
231*4882a593Smuzhiyun	};
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun	dsi_phy0: dsi-phy@fd922a00 {
234*4882a593Smuzhiyun		compatible = "qcom,dsi-phy-28nm-hpm";
235*4882a593Smuzhiyun		qcom,dsi-phy-index = <0>;
236*4882a593Smuzhiyun		reg-names =
237*4882a593Smuzhiyun			"dsi_pll",
238*4882a593Smuzhiyun			"dsi_phy",
239*4882a593Smuzhiyun			"dsi_phy_regulator";
240*4882a593Smuzhiyun		reg =   <0xfd922a00 0xd4>,
241*4882a593Smuzhiyun			<0xfd922b00 0x2b0>,
242*4882a593Smuzhiyun			<0xfd922d80 0x7b>;
243*4882a593Smuzhiyun		clock-names = "iface";
244*4882a593Smuzhiyun		clocks = <&mmcc MDSS_AHB_CLK>;
245*4882a593Smuzhiyun		#clock-cells = <1>;
246*4882a593Smuzhiyun		vddio-supply = <&pma8084_l12>;
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun		qcom,dsi-phy-regulator-ldo-mode;
249*4882a593Smuzhiyun	};
250