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