18c2ecf20Sopenharmony_ciQualcomm adreno/snapdragon MDP5 display controller
28c2ecf20Sopenharmony_ci
38c2ecf20Sopenharmony_ciDescription:
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ciThis is the bindings documentation for the Mobile Display Subsytem(MDSS) that
68c2ecf20Sopenharmony_ciencapsulates sub-blocks like MDP5, DSI, HDMI, eDP etc, and the MDP5 display
78c2ecf20Sopenharmony_cicontroller found in SoCs like MSM8974, APQ8084, MSM8916, MSM8994 and MSM8996.
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciMDSS:
108c2ecf20Sopenharmony_ciRequired properties:
118c2ecf20Sopenharmony_ci- compatible:
128c2ecf20Sopenharmony_ci  * "qcom,mdss" - MDSS
138c2ecf20Sopenharmony_ci- reg: Physical base address and length of the controller's registers.
148c2ecf20Sopenharmony_ci- reg-names: The names of register regions. The following regions are required:
158c2ecf20Sopenharmony_ci  * "mdss_phys"
168c2ecf20Sopenharmony_ci  * "vbif_phys"
178c2ecf20Sopenharmony_ci- interrupts: The interrupt signal from MDSS.
188c2ecf20Sopenharmony_ci- interrupt-controller: identifies the node as an interrupt controller.
198c2ecf20Sopenharmony_ci- #interrupt-cells: specifies the number of cells needed to encode an interrupt
208c2ecf20Sopenharmony_ci  source, should be 1.
218c2ecf20Sopenharmony_ci- power-domains: a power domain consumer specifier according to
228c2ecf20Sopenharmony_ci  Documentation/devicetree/bindings/power/power_domain.txt
238c2ecf20Sopenharmony_ci- clocks: device clocks. See ../clocks/clock-bindings.txt for details.
248c2ecf20Sopenharmony_ci- clock-names: the following clocks are required.
258c2ecf20Sopenharmony_ci  * "iface"
268c2ecf20Sopenharmony_ci  * "bus"
278c2ecf20Sopenharmony_ci  * "vsync"
288c2ecf20Sopenharmony_ci- #address-cells: number of address cells for the MDSS children. Should be 1.
298c2ecf20Sopenharmony_ci- #size-cells: Should be 1.
308c2ecf20Sopenharmony_ci- ranges: parent bus address space is the same as the child bus address space.
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ciOptional properties:
338c2ecf20Sopenharmony_ci- clock-names: the following clocks are optional:
348c2ecf20Sopenharmony_ci  * "lut"
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ciMDP5:
378c2ecf20Sopenharmony_ciRequired properties:
388c2ecf20Sopenharmony_ci- compatible:
398c2ecf20Sopenharmony_ci  * "qcom,mdp5" - MDP5
408c2ecf20Sopenharmony_ci- reg: Physical base address and length of the controller's registers.
418c2ecf20Sopenharmony_ci- reg-names: The names of register regions. The following regions are required:
428c2ecf20Sopenharmony_ci  * "mdp_phys"
438c2ecf20Sopenharmony_ci- interrupts: Interrupt line from MDP5 to MDSS interrupt controller.
448c2ecf20Sopenharmony_ci- clocks: device clocks. See ../clocks/clock-bindings.txt for details.
458c2ecf20Sopenharmony_ci- clock-names: the following clocks are required.
468c2ecf20Sopenharmony_ci-   * "bus"
478c2ecf20Sopenharmony_ci-   * "iface"
488c2ecf20Sopenharmony_ci-   * "core"
498c2ecf20Sopenharmony_ci-   * "vsync"
508c2ecf20Sopenharmony_ci- ports: contains the list of output ports from MDP. These connect to interfaces
518c2ecf20Sopenharmony_ci  that are external to the MDP hardware, such as HDMI, DSI, EDP etc (LVDS is a
528c2ecf20Sopenharmony_ci  special case since it is a part of the MDP block itself).
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci  Each output port contains an endpoint that describes how it is connected to an
558c2ecf20Sopenharmony_ci  external interface. These are described by the standard properties documented
568c2ecf20Sopenharmony_ci  here:
578c2ecf20Sopenharmony_ci	Documentation/devicetree/bindings/graph.txt
588c2ecf20Sopenharmony_ci	Documentation/devicetree/bindings/media/video-interfaces.txt
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci  The availability of output ports can vary across SoC revisions:
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci  For MSM8974 and APQ8084:
638c2ecf20Sopenharmony_ci	 Port 0 -> MDP_INTF0 (eDP)
648c2ecf20Sopenharmony_ci	 Port 1 -> MDP_INTF1 (DSI1)
658c2ecf20Sopenharmony_ci	 Port 2 -> MDP_INTF2 (DSI2)
668c2ecf20Sopenharmony_ci	 Port 3 -> MDP_INTF3 (HDMI)
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci  For MSM8916:
698c2ecf20Sopenharmony_ci	 Port 0 -> MDP_INTF1 (DSI1)
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ci  For MSM8994 and MSM8996:
728c2ecf20Sopenharmony_ci	 Port 0 -> MDP_INTF1 (DSI1)
738c2ecf20Sopenharmony_ci	 Port 1 -> MDP_INTF2 (DSI2)
748c2ecf20Sopenharmony_ci	 Port 2 -> MDP_INTF3 (HDMI)
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ciOptional properties:
778c2ecf20Sopenharmony_ci- clock-names: the following clocks are optional:
788c2ecf20Sopenharmony_ci  * "lut"
798c2ecf20Sopenharmony_ci  * "tbu"
808c2ecf20Sopenharmony_ci  * "tbu_rt"
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ciExample:
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci/ {
858c2ecf20Sopenharmony_ci	...
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci	mdss: mdss@1a00000 {
888c2ecf20Sopenharmony_ci		compatible = "qcom,mdss";
898c2ecf20Sopenharmony_ci		reg = <0x1a00000 0x1000>,
908c2ecf20Sopenharmony_ci		      <0x1ac8000 0x3000>;
918c2ecf20Sopenharmony_ci		reg-names = "mdss_phys", "vbif_phys";
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci		power-domains = <&gcc MDSS_GDSC>;
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci		clocks = <&gcc GCC_MDSS_AHB_CLK>,
968c2ecf20Sopenharmony_ci			 <&gcc GCC_MDSS_AXI_CLK>,
978c2ecf20Sopenharmony_ci			 <&gcc GCC_MDSS_VSYNC_CLK>;
988c2ecf20Sopenharmony_ci		clock-names = "iface",
998c2ecf20Sopenharmony_ci			      "bus",
1008c2ecf20Sopenharmony_ci			      "vsync"
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci		interrupts = <0 72 0>;
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_ci		interrupt-controller;
1058c2ecf20Sopenharmony_ci		#interrupt-cells = <1>;
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_ci		#address-cells = <1>;
1088c2ecf20Sopenharmony_ci		#size-cells = <1>;
1098c2ecf20Sopenharmony_ci		ranges;
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_ci		mdp: mdp@1a01000 {
1128c2ecf20Sopenharmony_ci			compatible = "qcom,mdp5";
1138c2ecf20Sopenharmony_ci			reg = <0x1a01000 0x90000>;
1148c2ecf20Sopenharmony_ci			reg-names = "mdp_phys";
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ci			interrupt-parent = <&mdss>;
1178c2ecf20Sopenharmony_ci			interrupts = <0 0>;
1188c2ecf20Sopenharmony_ci
1198c2ecf20Sopenharmony_ci			clocks = <&gcc GCC_MDSS_AHB_CLK>,
1208c2ecf20Sopenharmony_ci				 <&gcc GCC_MDSS_AXI_CLK>,
1218c2ecf20Sopenharmony_ci				 <&gcc GCC_MDSS_MDP_CLK>,
1228c2ecf20Sopenharmony_ci				 <&gcc GCC_MDSS_VSYNC_CLK>;
1238c2ecf20Sopenharmony_ci			clock-names = "iface",
1248c2ecf20Sopenharmony_ci				      "bus",
1258c2ecf20Sopenharmony_ci				      "core",
1268c2ecf20Sopenharmony_ci				      "vsync";
1278c2ecf20Sopenharmony_ci
1288c2ecf20Sopenharmony_ci			ports {
1298c2ecf20Sopenharmony_ci				#address-cells = <1>;
1308c2ecf20Sopenharmony_ci				#size-cells = <0>;
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci				port@0 {
1338c2ecf20Sopenharmony_ci					reg = <0>;
1348c2ecf20Sopenharmony_ci					mdp5_intf1_out: endpoint {
1358c2ecf20Sopenharmony_ci						remote-endpoint = <&dsi0_in>;
1368c2ecf20Sopenharmony_ci					};
1378c2ecf20Sopenharmony_ci				};
1388c2ecf20Sopenharmony_ci			};
1398c2ecf20Sopenharmony_ci		};
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_ci		dsi0: dsi@1a98000 {
1428c2ecf20Sopenharmony_ci			...
1438c2ecf20Sopenharmony_ci			ports {
1448c2ecf20Sopenharmony_ci				...
1458c2ecf20Sopenharmony_ci				port@0 {
1468c2ecf20Sopenharmony_ci					reg = <0>;
1478c2ecf20Sopenharmony_ci					dsi0_in: endpoint {
1488c2ecf20Sopenharmony_ci						remote-endpoint = <&mdp5_intf1_out>;
1498c2ecf20Sopenharmony_ci					};
1508c2ecf20Sopenharmony_ci				};
1518c2ecf20Sopenharmony_ci				...
1528c2ecf20Sopenharmony_ci			};
1538c2ecf20Sopenharmony_ci			...
1548c2ecf20Sopenharmony_ci		};
1558c2ecf20Sopenharmony_ci
1568c2ecf20Sopenharmony_ci		dsi_phy0: dsi-phy@1a98300 {
1578c2ecf20Sopenharmony_ci			...
1588c2ecf20Sopenharmony_ci		};
1598c2ecf20Sopenharmony_ci	};
1608c2ecf20Sopenharmony_ci};
161