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