Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1Allwinner A10 Display Pipeline
2==============================
3
4The Allwinner A10 Display pipeline is composed of several components
5that are going to be documented below:
6
7For the input port of all components up to the TCON in the display
8pipeline, if there are multiple components, the local endpoint IDs
9must correspond to the index of the upstream block. For example, if
10the remote endpoint is Frontend 1, then the local endpoint ID must
11be 1.
12
13Conversely, for the output ports of the same group, the remote endpoint
14ID must be the index of the local hardware block. If the local backend
15is backend 1, then the remote endpoint ID must be 1.
16
17HDMI Encoder
18------------
19
20The HDMI Encoder supports the HDMI video and audio outputs, and does
21CEC. It is one end of the pipeline.
22
23Required properties:
24 - compatible: value must be one of:
25 * allwinner,sun5i-a10s-hdmi
26 - reg: base address and size of memory-mapped region
27 - interrupts: interrupt associated to this IP
28 - clocks: phandles to the clocks feeding the HDMI encoder
29 * ahb: the HDMI interface clock
30 * mod: the HDMI module clock
31 * pll-0: the first video PLL
32 * pll-1: the second video PLL
33 - clock-names: the clock names mentioned above
34 - dmas: phandles to the DMA channels used by the HDMI encoder
35 * ddc-tx: The channel for DDC transmission
36 * ddc-rx: The channel for DDC reception
37 * audio-tx: The channel used for audio transmission
38 - dma-names: the channel names mentioned above
39
40 - ports: A ports node with endpoint definitions as defined in
41 Documentation/devicetree/bindings/media/video-interfaces.txt. The
42 first port should be the input endpoint. The second should be the
43 output, usually to an HDMI connector.
44
45TV Encoder
46----------
47
48The TV Encoder supports the composite and VGA output. It is one end of
49the pipeline.
50
51Required properties:
52 - compatible: value should be "allwinner,sun4i-a10-tv-encoder".
53 - reg: base address and size of memory-mapped region
54 - clocks: the clocks driving the TV encoder
55 - resets: phandle to the reset controller driving the encoder
56
57- ports: A ports node with endpoint definitions as defined in
58 Documentation/devicetree/bindings/media/video-interfaces.txt. The
59 first port should be the input endpoint.
60
61TCON
62----
63
64The TCON acts as a timing controller for RGB, LVDS and TV interfaces.
65
66Required properties:
67 - compatible: value must be either:
68 * allwinner,sun5i-a13-tcon
69 * allwinner,sun6i-a31-tcon
70 * allwinner,sun6i-a31s-tcon
71 * allwinner,sun8i-a33-tcon
72 * allwinner,sun8i-v3s-tcon
73 - reg: base address and size of memory-mapped region
74 - interrupts: interrupt associated to this IP
75 - clocks: phandles to the clocks feeding the TCON. Three are needed:
76 - 'ahb': the interface clocks
77 - 'tcon-ch0': The clock driving the TCON channel 0
78 - resets: phandles to the reset controllers driving the encoder
79 - "lcd": the reset line for the TCON channel 0
80
81 - clock-names: the clock names mentioned above
82 - reset-names: the reset names mentioned above
83 - clock-output-names: Name of the pixel clock created
84
85- ports: A ports node with endpoint definitions as defined in
86 Documentation/devicetree/bindings/media/video-interfaces.txt. The
87 first port should be the input endpoint, the second one the output
88
89 The output may have multiple endpoints. The TCON has two channels,
90 usually with the first channel being used for the panels interfaces
91 (RGB, LVDS, etc.), and the second being used for the outputs that
92 require another controller (TV Encoder, HDMI, etc.). The endpoints
93 will take an extra property, allwinner,tcon-channel, to specify the
94 channel the endpoint is associated to. If that property is not
95 present, the endpoint number will be used as the channel number.
96
97On SoCs other than the A33 and V3s, there is one more clock required:
98 - 'tcon-ch1': The clock driving the TCON channel 1
99
100DRC
101---
102
103The DRC (Dynamic Range Controller), found in the latest Allwinner SoCs
104(A31, A23, A33), allows to dynamically adjust pixel
105brightness/contrast based on histogram measurements for LCD content
106adaptive backlight control.
107
108
109Required properties:
110 - compatible: value must be one of:
111 * allwinner,sun6i-a31-drc
112 * allwinner,sun6i-a31s-drc
113 * allwinner,sun8i-a33-drc
114 - reg: base address and size of the memory-mapped region.
115 - interrupts: interrupt associated to this IP
116 - clocks: phandles to the clocks feeding the DRC
117 * ahb: the DRC interface clock
118 * mod: the DRC module clock
119 * ram: the DRC DRAM clock
120 - clock-names: the clock names mentioned above
121 - resets: phandles to the reset line driving the DRC
122
123- ports: A ports node with endpoint definitions as defined in
124 Documentation/devicetree/bindings/media/video-interfaces.txt. The
125 first port should be the input endpoints, the second one the outputs
126
127Display Engine Backend
128----------------------
129
130The display engine backend exposes layers and sprites to the
131system.
132
133Required properties:
134 - compatible: value must be one of:
135 * allwinner,sun5i-a13-display-backend
136 * allwinner,sun6i-a31-display-backend
137 * allwinner,sun8i-a33-display-backend
138 - reg: base address and size of the memory-mapped region.
139 - interrupts: interrupt associated to this IP
140 - clocks: phandles to the clocks feeding the frontend and backend
141 * ahb: the backend interface clock
142 * mod: the backend module clock
143 * ram: the backend DRAM clock
144 - clock-names: the clock names mentioned above
145 - resets: phandles to the reset controllers driving the backend
146
147- ports: A ports node with endpoint definitions as defined in
148 Documentation/devicetree/bindings/media/video-interfaces.txt. The
149 first port should be the input endpoints, the second one the output
150
151On the A33, some additional properties are required:
152 - reg needs to have an additional region corresponding to the SAT
153 - reg-names need to be set, with "be" and "sat"
154 - clocks and clock-names need to have a phandle to the SAT bus
155 clocks, whose name will be "sat"
156 - resets and reset-names need to have a phandle to the SAT bus
157 resets, whose name will be "sat"
158
159Display Engine Frontend
160-----------------------
161
162The display engine frontend does formats conversion, scaling,
163deinterlacing and color space conversion.
164
165Required properties:
166 - compatible: value must be one of:
167 * allwinner,sun5i-a13-display-frontend
168 * allwinner,sun6i-a31-display-frontend
169 * allwinner,sun8i-a33-display-frontend
170 - reg: base address and size of the memory-mapped region.
171 - interrupts: interrupt associated to this IP
172 - clocks: phandles to the clocks feeding the frontend and backend
173 * ahb: the backend interface clock
174 * mod: the backend module clock
175 * ram: the backend DRAM clock
176 - clock-names: the clock names mentioned above
177 - resets: phandles to the reset controllers driving the backend
178
179- ports: A ports node with endpoint definitions as defined in
180 Documentation/devicetree/bindings/media/video-interfaces.txt. The
181 first port should be the input endpoints, the second one the outputs
182
183Display Engine 2.0 Mixer
184------------------------
185
186The DE2 mixer have many functionalities, currently only layer blending is
187supported.
188
189Required properties:
190 - compatible: value must be one of:
191 * allwinner,sun8i-v3s-de2-mixer
192 - reg: base address and size of the memory-mapped region.
193 - clocks: phandles to the clocks feeding the mixer
194 * bus: the mixer interface clock
195 * mod: the mixer module clock
196 - clock-names: the clock names mentioned above
197 - resets: phandles to the reset controllers driving the mixer
198
199- ports: A ports node with endpoint definitions as defined in
200 Documentation/devicetree/bindings/media/video-interfaces.txt. The
201 first port should be the input endpoints, the second one the output
202
203
204Display Engine Pipeline
205-----------------------
206
207The display engine pipeline (and its entry point, since it can be
208either directly the backend or the frontend) is represented as an
209extra node.
210
211Required properties:
212 - compatible: value must be one of:
213 * allwinner,sun5i-a10s-display-engine
214 * allwinner,sun5i-a13-display-engine
215 * allwinner,sun6i-a31-display-engine
216 * allwinner,sun6i-a31s-display-engine
217 * allwinner,sun8i-a33-display-engine
218 * allwinner,sun8i-v3s-display-engine
219
220 - allwinner,pipelines: list of phandle to the display engine
221 frontends (DE 1.0) or mixers (DE 2.0) available.
222
223Example:
224
225panel: panel {
226 compatible = "olimex,lcd-olinuxino-43-ts";
227 #address-cells = <1>;
228 #size-cells = <0>;
229
230 port {
231 #address-cells = <1>;
232 #size-cells = <0>;
233
234 panel_input: endpoint {
235 remote-endpoint = <&tcon0_out_panel>;
236 };
237 };
238};
239
240connector {
241 compatible = "hdmi-connector";
242 type = "a";
243
244 port {
245 hdmi_con_in: endpoint {
246 remote-endpoint = <&hdmi_out_con>;
247 };
248 };
249};
250
251hdmi: hdmi@01c16000 {
252 compatible = "allwinner,sun5i-a10s-hdmi";
253 reg = <0x01c16000 0x1000>;
254 interrupts = <58>;
255 clocks = <&ccu CLK_AHB_HDMI>, <&ccu CLK_HDMI>,
256 <&ccu CLK_PLL_VIDEO0_2X>,
257 <&ccu CLK_PLL_VIDEO1_2X>;
258 clock-names = "ahb", "mod", "pll-0", "pll-1";
259 dmas = <&dma SUN4I_DMA_NORMAL 16>,
260 <&dma SUN4I_DMA_NORMAL 16>,
261 <&dma SUN4I_DMA_DEDICATED 24>;
262 dma-names = "ddc-tx", "ddc-rx", "audio-tx";
263 status = "disabled";
264
265 ports {
266 #address-cells = <1>;
267 #size-cells = <0>;
268
269 port@0 {
270 #address-cells = <1>;
271 #size-cells = <0>;
272 reg = <0>;
273
274 hdmi_in_tcon0: endpoint {
275 remote-endpoint = <&tcon0_out_hdmi>;
276 };
277 };
278
279 port@1 {
280 #address-cells = <1>;
281 #size-cells = <0>;
282 reg = <1>;
283
284 hdmi_out_con: endpoint {
285 remote-endpoint = <&hdmi_con_in>;
286 };
287 };
288 };
289};
290
291tve0: tv-encoder@01c0a000 {
292 compatible = "allwinner,sun4i-a10-tv-encoder";
293 reg = <0x01c0a000 0x1000>;
294 clocks = <&ahb_gates 34>;
295 resets = <&tcon_ch0_clk 0>;
296
297 port {
298 #address-cells = <1>;
299 #size-cells = <0>;
300
301 tve0_in_tcon0: endpoint@0 {
302 reg = <0>;
303 remote-endpoint = <&tcon0_out_tve0>;
304 };
305 };
306};
307
308tcon0: lcd-controller@1c0c000 {
309 compatible = "allwinner,sun5i-a13-tcon";
310 reg = <0x01c0c000 0x1000>;
311 interrupts = <44>;
312 resets = <&tcon_ch0_clk 1>;
313 reset-names = "lcd";
314 clocks = <&ahb_gates 36>,
315 <&tcon_ch0_clk>,
316 <&tcon_ch1_clk>;
317 clock-names = "ahb",
318 "tcon-ch0",
319 "tcon-ch1";
320 clock-output-names = "tcon-pixel-clock";
321
322 ports {
323 #address-cells = <1>;
324 #size-cells = <0>;
325
326 tcon0_in: port@0 {
327 #address-cells = <1>;
328 #size-cells = <0>;
329 reg = <0>;
330
331 tcon0_in_be0: endpoint@0 {
332 reg = <0>;
333 remote-endpoint = <&be0_out_tcon0>;
334 };
335 };
336
337 tcon0_out: port@1 {
338 #address-cells = <1>;
339 #size-cells = <0>;
340 reg = <1>;
341
342 tcon0_out_panel: endpoint@0 {
343 reg = <0>;
344 remote-endpoint = <&panel_input>;
345 };
346
347 tcon0_out_tve0: endpoint@1 {
348 reg = <1>;
349 remote-endpoint = <&tve0_in_tcon0>;
350 };
351 };
352 };
353};
354
355fe0: display-frontend@1e00000 {
356 compatible = "allwinner,sun5i-a13-display-frontend";
357 reg = <0x01e00000 0x20000>;
358 interrupts = <47>;
359 clocks = <&ahb_gates 46>, <&de_fe_clk>,
360 <&dram_gates 25>;
361 clock-names = "ahb", "mod",
362 "ram";
363 resets = <&de_fe_clk>;
364
365 ports {
366 #address-cells = <1>;
367 #size-cells = <0>;
368
369 fe0_out: port@1 {
370 #address-cells = <1>;
371 #size-cells = <0>;
372 reg = <1>;
373
374 fe0_out_be0: endpoint {
375 remote-endpoint = <&be0_in_fe0>;
376 };
377 };
378 };
379};
380
381be0: display-backend@1e60000 {
382 compatible = "allwinner,sun5i-a13-display-backend";
383 reg = <0x01e60000 0x10000>;
384 interrupts = <47>;
385 clocks = <&ahb_gates 44>, <&de_be_clk>,
386 <&dram_gates 26>;
387 clock-names = "ahb", "mod",
388 "ram";
389 resets = <&de_be_clk>;
390
391 ports {
392 #address-cells = <1>;
393 #size-cells = <0>;
394
395 be0_in: port@0 {
396 #address-cells = <1>;
397 #size-cells = <0>;
398 reg = <0>;
399
400 be0_in_fe0: endpoint@0 {
401 reg = <0>;
402 remote-endpoint = <&fe0_out_be0>;
403 };
404 };
405
406 be0_out: port@1 {
407 #address-cells = <1>;
408 #size-cells = <0>;
409 reg = <1>;
410
411 be0_out_tcon0: endpoint@0 {
412 reg = <0>;
413 remote-endpoint = <&tcon0_in_be0>;
414 };
415 };
416 };
417};
418
419display-engine {
420 compatible = "allwinner,sun5i-a13-display-engine";
421 allwinner,pipelines = <&fe0>;
422};