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