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