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