Device-Tree bindings for LVDS Display Bridge (ldb) LVDS Display Bridge =================== The LVDS Display Bridge device tree node contains up to two lvds-channel nodes describing each of the two LVDS encoder channels of the bridge. Required properties: - #address-cells : should be <1> - #size-cells : should be <0> - compatible : should be "fsl,imx53-ldb" or "fsl,imx6q-ldb" or "fsl,imx8qm-ldb" or "fsl,imx8qxp-ldb". All LDB versions are similar. i.MX6q/dl has an additional multiplexer in the front to select any of the two or four IPU display interfaces as input for each LVDS channel. i.MX8qm LDB supports 10bit RGB input and needs an additional phy. i.MX8qxp LDB only supports one LVDS encoder channel(either channel0 or channel1). - gpr : should be <&gpr> on i.MX53 and i.MX6q. The phandle points to the iomuxc-gpr region containing the LVDS control register. - clocks, clock-names : phandles to the LDB divider and selector clocks and to the display interface selector clocks, as described in Documentation/devicetree/bindings/clock/clock-bindings.txt The following clocks are expected on i.MX53: "di0_pll" - LDB LVDS channel 0 mux "di1_pll" - LDB LVDS channel 1 mux "di0" - LDB LVDS channel 0 gate "di1" - LDB LVDS channel 1 gate "di0_sel" - IPU1 DI0 mux "di1_sel" - IPU1 DI1 mux On i.MX6q the following additional clocks are needed: "di2_sel" - IPU2 DI0 mux "di3_sel" - IPU2 DI1 mux The following clocks are expected on i.MX8qm: "pixel" - pixel clock "bypass" - bypass clock The following clocks are expected on i.MX8qxp: "pixel" - pixel clock "bypass" - bypass clock "aux_pixel" - pixel clock of the auxiliary LDB "aux_bypass" - bypass clock of the auxiliary LDB The needed clock numbers for each are documented in Documentation/devicetree/bindings/clock/imx5-clock.txt, and in Documentation/devicetree/bindings/clock/imx6q-clock.txt. - power-domains : phandle pointing to power domain, only required by i.MX8qm and i.MX8qxp. Optional properties: - pinctrl-names : should be "default" on i.MX53, not used on i.MX6q, i.MX8qm and i.MX8qxp - pinctrl-0 : a phandle pointing to LVDS pin settings on i.MX53, not used on i.MX6q, i.MX8qm and i.MX8qxp - fsl,dual-channel : boolean. if it exists, only LVDS channel 0 should be configured - one input will be distributed on both outputs in dual channel mode(i.MX8qxp uses two LDBs to support this). Note that when i.MX8qxp LDB works in dual channel mode, only the primary LDB node should be active and the auxiliary LDB node should be disabled. - aux-gpr : the phandle points to the auxiliary LVDS region containing the LVDS control register(only required by i.MX8qxp) LVDS Channel ============ Each LVDS Channel has to contain either an of graph link to a panel device node or a display-timings node that describes the video timings for the connected LVDS display as well as the fsl,data-mapping and fsl,data-width properties. Required properties: - reg : should be <0> or <1> - port: Input and output port nodes with endpoint definitions as defined in Documentation/devicetree/bindings/graph.txt. On i.MX5, the internal two-input-multiplexer is used. Due to hardware limitations, only one input port (port@[0,1]) can be used for each channel (lvds-channel@[0,1], respectively). On i.MX6, there should be four input ports (port@[0-3]) that correspond to the four LVDS multiplexer inputs. On i.MX8qm, the two channels of LDB connect to one display interface of DPU. A single output port (port@2 on i.MX5, port@4 on i.MX6, port@1 on i.MX8qm and i.MX8qxp) must be connected to a panel input port or a bridge input port. Optionally, the output port can be left out if display-timings are used instead. - phys: the phandle for the LVDS PHY devices. Valid only on i.MX8qm and i.MX8qxp. For i.MX8qxp, two PHYs should be provided for LVDS channel0, one for primary LDB and the other for auxiliary LDB. - phy-names: should be "ldb_phy" for i.MX8qm, and "ldb_phy", "aux_ldb_phy" for i.MX8qxp. Valid only on i.MX8qm and i.MX8qxp. Optional properties (required if display-timings are used): - ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing - display-timings : A node that describes the display timings as defined in Documentation/devicetree/bindings/display/panel/display-timing.txt. - fsl,data-mapping : should be "spwg" or "jeida" This describes how the color bits are laid out in the serialized LVDS signal. - fsl,data-width : should be <18> or <24> Additionally, <30> for i.MX8qm. example: gpr: iomuxc-gpr@53fa8000 { /* ... */ }; ldb: ldb@53fa8008 { #address-cells = <1>; #size-cells = <0>; compatible = "fsl,imx53-ldb"; gpr = <&gpr>; clocks = <&clks IMX5_CLK_LDB_DI0_SEL>, <&clks IMX5_CLK_LDB_DI1_SEL>, <&clks IMX5_CLK_IPU_DI0_SEL>, <&clks IMX5_CLK_IPU_DI1_SEL>, <&clks IMX5_CLK_LDB_DI0_GATE>, <&clks IMX5_CLK_LDB_DI1_GATE>; clock-names = "di0_pll", "di1_pll", "di0_sel", "di1_sel", "di0", "di1"; /* Using an of-graph endpoint link to connect the panel */ lvds-channel@0 { #address-cells = <1>; #size-cells = <0>; reg = <0>; port@0 { reg = <0>; lvds0_in: endpoint { remote-endpoint = <&ipu_di0_lvds0>; }; }; port@2 { reg = <2>; lvds0_out: endpoint { remote-endpoint = <&panel_in>; }; }; }; /* Using display-timings and fsl,data-mapping/width instead */ lvds-channel@1 { #address-cells = <1>; #size-cells = <0>; reg = <1>; fsl,data-mapping = "spwg"; fsl,data-width = <24>; display-timings { /* ... */ }; port@1 { reg = <1>; lvds1_in: endpoint { remote-endpoint = <&ipu_di1_lvds1>; }; }; }; }; panel: lvds-panel { /* ... */ port { panel_in: endpoint { remote-endpoint = <&lvds0_out>; }; }; };