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