summaryrefslogtreecommitdiff
path: root/Documentation/devicetree/bindings/display/imx/ldb.txt
blob: 4b0e768589296b67e723891ec58d8a2de8c9053a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
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" or "fsl,imx8mp-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 and i.MX8mp 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.
 - fsl,auxldb : phandle to auxiliary LDB which is used in dual channel mode.
                Only required by i.MX8qxp.
- clocks, clock-names : phandles to the LDB divider and selector clocks and to
                        the display interface selector clocks or pixel and
                        bypass 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 and i.MX8qxp:
                "pixel" - pixel clock
                "bypass" - bypass clock
        The following clocks are expected on i.MX8qxp:
                "aux_pixel" - auxiliary pixel clock in dual channel mode
                "aux_bypass" - auxiliary bypass clock in dual channel mode
        The following clocks are expected on i.MX8mp:
                "ldb" - ldb root clock
        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, and in
        Documentation/devicetree/bindings/clock/imx8qm-lpcg.txt, and in
        Documentation/devicetree/bindings/clock/imx8qxp-lpcg.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
                   i.MX8qxp and i.MX8mp
 - pinctrl-0 : a phandle pointing to LVDS pin settings on i.MX53,
               not used on i.MX6q, i.MX8qm, i.MX8qxp and i.MX8mp
 - 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

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.
   On i.MX8mp, the two channels of LDB connect to LCDIFv3.
   A single output port (port@2 on i.MX5, port@4 on i.MX6, port@1 on i.MX8qm,
   i.MX8qxp and i.MX8mp) 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 device. Valid only on i.MX8qm, i.MX8qxp
         and i.MX8mp.
 - phy-names: should be "ldb_phy". Valid only on i.MX8qm, i.MX8qxp and i.MX8mp.

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>;
		};
	};
};