xref: /linux/Documentation/devicetree/bindings/display/imx/ldb.txt (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
1Device-Tree bindings for LVDS Display Bridge (ldb)
2
3LVDS Display Bridge
4===================
5
6The LVDS Display Bridge device tree node contains up to two lvds-channel
7nodes describing each of the two LVDS encoder channels of the bridge.
8
9Required properties:
10 - #address-cells : should be <1>
11 - #size-cells : should be <0>
12 - compatible : should be "fsl,imx53-ldb" or "fsl,imx6q-ldb".
13                Both LDB versions are similar, but i.MX6 has an additional
14                multiplexer in the front to select any of the four IPU display
15                interfaces as input for each LVDS channel.
16 - gpr : should be <&gpr> on i.MX53 and i.MX6q.
17         The phandle points to the iomuxc-gpr region containing the LVDS
18         control register.
19- clocks, clock-names : phandles to the LDB divider and selector clocks and to
20                        the display interface selector clocks, as described in
21                        Documentation/devicetree/bindings/clock/clock-bindings.txt
22        The following clocks are expected on i.MX53:
23                "di0_pll" - LDB LVDS channel 0 mux
24                "di1_pll" - LDB LVDS channel 1 mux
25                "di0" - LDB LVDS channel 0 gate
26                "di1" - LDB LVDS channel 1 gate
27                "di0_sel" - IPU1 DI0 mux
28                "di1_sel" - IPU1 DI1 mux
29        On i.MX6q the following additional clocks are needed:
30                "di2_sel" - IPU2 DI0 mux
31                "di3_sel" - IPU2 DI1 mux
32        The needed clock numbers for each are documented in
33        Documentation/devicetree/bindings/clock/imx5-clock.yaml, and in
34        Documentation/devicetree/bindings/clock/imx6q-clock.yaml.
35
36Optional properties:
37 - pinctrl-names : should be "default" on i.MX53, not used on i.MX6q
38 - pinctrl-0 : a phandle pointing to LVDS pin settings on i.MX53,
39               not used on i.MX6q
40 - fsl,dual-channel : boolean. if it exists, only LVDS channel 0 should
41   be configured - one input will be distributed on both outputs in dual
42   channel mode
43
44LVDS Channel
45============
46
47Each LVDS Channel has to contain either an of graph link to a panel device node
48or a display-timings node that describes the video timings for the connected
49LVDS display as well as the fsl,data-mapping and fsl,data-width properties.
50
51Required properties:
52 - reg : should be <0> or <1>
53 - port: Input and output port nodes with endpoint definitions as defined in
54   Documentation/devicetree/bindings/graph.txt.
55   On i.MX5, the internal two-input-multiplexer is used. Due to hardware
56   limitations, only one input port (port@[0,1]) can be used for each channel
57   (lvds-channel@[0,1], respectively).
58   On i.MX6, there should be four input ports (port@[0-3]) that correspond
59   to the four LVDS multiplexer inputs.
60   A single output port (port@2 on i.MX5, port@4 on i.MX6) must be connected
61   to a panel input port. Optionally, the output port can be left out if
62   display-timings are used instead.
63
64Optional properties (required if display-timings are used):
65 - ddc-i2c-bus: phandle of an I2C controller used for DDC EDID probing
66 - display-timings : A node that describes the display timings as defined in
67   Documentation/devicetree/bindings/display/panel/display-timing.txt.
68 - fsl,data-mapping : should be "spwg" or "jeida"
69                      This describes how the color bits are laid out in the
70                      serialized LVDS signal.
71 - fsl,data-width : should be <18> or <24>
72
73example:
74
75gpr: iomuxc-gpr@53fa8000 {
76	/* ... */
77};
78
79ldb: ldb@53fa8008 {
80	#address-cells = <1>;
81	#size-cells = <0>;
82	compatible = "fsl,imx53-ldb";
83	gpr = <&gpr>;
84	clocks = <&clks IMX5_CLK_LDB_DI0_SEL>,
85		 <&clks IMX5_CLK_LDB_DI1_SEL>,
86		 <&clks IMX5_CLK_IPU_DI0_SEL>,
87		 <&clks IMX5_CLK_IPU_DI1_SEL>,
88		 <&clks IMX5_CLK_LDB_DI0_GATE>,
89		 <&clks IMX5_CLK_LDB_DI1_GATE>;
90	clock-names = "di0_pll", "di1_pll",
91		      "di0_sel", "di1_sel",
92		      "di0", "di1";
93
94	/* Using an of-graph endpoint link to connect the panel */
95	lvds-channel@0 {
96		#address-cells = <1>;
97		#size-cells = <0>;
98		reg = <0>;
99
100		port@0 {
101			reg = <0>;
102
103			lvds0_in: endpoint {
104				remote-endpoint = <&ipu_di0_lvds0>;
105			};
106		};
107
108		port@2 {
109			reg = <2>;
110
111			lvds0_out: endpoint {
112				remote-endpoint = <&panel_in>;
113			};
114		};
115	};
116
117	/* Using display-timings and fsl,data-mapping/width instead */
118	lvds-channel@1 {
119		#address-cells = <1>;
120		#size-cells = <0>;
121		reg = <1>;
122		fsl,data-mapping = "spwg";
123		fsl,data-width = <24>;
124
125		display-timings {
126			/* ... */
127		};
128
129		port@1 {
130			reg = <1>;
131
132			lvds1_in: endpoint {
133				remote-endpoint = <&ipu_di1_lvds1>;
134			};
135		};
136	};
137};
138
139panel: lvds-panel {
140	/* ... */
141
142	port {
143		panel_in: endpoint {
144			remote-endpoint = <&lvds0_out>;
145		};
146	};
147};
148