1 Allwinner A10 Display Pipeline
2 ==============================
4 The Allwinner A10 Display pipeline is composed of several components
5 that are going to be documented below:
7 For all connections between components up to the TCONs in the display
8 pipeline, when there are multiple components of the same type at the
9 same depth, the local endpoint ID must be the same as the remote
10 component's index. For example, if the remote endpoint is Frontend 1,
11 then the local endpoint ID must be 1.
13 Frontend 0 [0] ------- [0] Backend 0 [0] ------- [0] TCON 0
14 [1] -- -- [1] [1] -- -- [1]
18 [0] -- -- [0] [0] -- -- [0]
19 Frontend 1 [1] ------- [1] Backend 1 [1] ------- [1] TCON 1
21 For a two pipeline system such as the one depicted above, the lines
22 represent the connections between the components, while the numbers
23 within the square brackets corresponds to the ID of the local endpoint.
25 The same rule also applies to DE 2.0 mixer-TCON connections:
27 Mixer 0 [0] ----------- [0] TCON 0
33 Mixer 1 [1] ----------- [1] TCON 1
38 The HDMI Encoder supports the HDMI video and audio outputs, and does
39 CEC. It is one end of the pipeline.
42 - compatible: value must be one of:
43 * allwinner,sun4i-a10-hdmi
44 * allwinner,sun5i-a10s-hdmi
45 * allwinner,sun6i-a31-hdmi
46 - reg: base address and size of memory-mapped region
47 - interrupts: interrupt associated to this IP
48 - clocks: phandles to the clocks feeding the HDMI encoder
49 * ahb: the HDMI interface clock
50 * mod: the HDMI module clock
51 * ddc: the HDMI ddc clock (A31 only)
52 * pll-0: the first video PLL
53 * pll-1: the second video PLL
54 - clock-names: the clock names mentioned above
55 - resets: phandle to the reset control for the HDMI encoder (A31 only)
56 - dmas: phandles to the DMA channels used by the HDMI encoder
57 * ddc-tx: The channel for DDC transmission
58 * ddc-rx: The channel for DDC reception
59 * audio-tx: The channel used for audio transmission
60 - dma-names: the channel names mentioned above
62 - ports: A ports node with endpoint definitions as defined in
63 Documentation/devicetree/bindings/media/video-interfaces.txt. The
64 first port should be the input endpoint. The second should be the
65 output, usually to an HDMI connector.
70 The HDMI transmitter is a Synopsys DesignWare HDMI 1.4 TX controller IP
71 with Allwinner's own PHY IP. It supports audio and video outputs and CEC.
73 These DT bindings follow the Synopsys DWC HDMI TX bindings defined in
74 Documentation/devicetree/bindings/display/bridge/dw_hdmi.txt with the
75 following device-specific properties.
79 - compatible: value must be one of:
80 * "allwinner,sun8i-a83t-dw-hdmi"
81 * "allwinner,sun50i-a64-dw-hdmi", "allwinner,sun8i-a83t-dw-hdmi"
82 * "allwinner,sun50i-h6-dw-hdmi"
83 - reg: base address and size of memory-mapped region
84 - reg-io-width: See dw_hdmi.txt. Shall be 1.
85 - interrupts: HDMI interrupt number
86 - clocks: phandles to the clocks feeding the HDMI encoder
87 * iahb: the HDMI bus clock
88 * isfr: the HDMI register clock
90 * cec: HDMI CEC clock (H6 only)
91 * hdcp: HDCP clock (H6 only)
92 * hdcp-bus: HDCP bus clock (H6 only)
93 - clock-names: the clock names mentioned above
95 * ctrl: HDMI controller reset
96 * hdcp: HDCP reset (H6 only)
97 - reset-names: reset names mentioned above
98 - phys: phandle to the DWC HDMI PHY
99 - phy-names: must be "phy"
101 - ports: A ports node with endpoint definitions as defined in
102 Documentation/devicetree/bindings/media/video-interfaces.txt. The
103 first port should be the input endpoint. The second should be the
104 output, usually to an HDMI connector.
107 - hvcc-supply: the VCC power supply of the controller
113 - compatible: value must be one of:
114 * allwinner,sun8i-a83t-hdmi-phy
115 * allwinner,sun8i-h3-hdmi-phy
116 * allwinner,sun8i-r40-hdmi-phy
117 * allwinner,sun50i-a64-hdmi-phy
118 * allwinner,sun50i-h6-hdmi-phy
119 - reg: base address and size of memory-mapped region
120 - clocks: phandles to the clocks feeding the HDMI PHY
121 * bus: the HDMI PHY interface clock
122 * mod: the HDMI PHY module clock
123 - clock-names: the clock names mentioned above
124 - resets: phandle to the reset controller driving the PHY
125 - reset-names: must be "phy"
127 H3, A64 and R40 HDMI PHY require additional clocks:
128 - pll-0: parent of phy clock
129 - pll-1: second possible phy clock parent (A64/R40 only)
134 The TV Encoder supports the composite and VGA output. It is one end of
138 - compatible: value should be "allwinner,sun4i-a10-tv-encoder".
139 - reg: base address and size of memory-mapped region
140 - clocks: the clocks driving the TV encoder
141 - resets: phandle to the reset controller driving the encoder
143 - ports: A ports node with endpoint definitions as defined in
144 Documentation/devicetree/bindings/media/video-interfaces.txt. The
145 first port should be the input endpoint.
150 The TCON acts as a timing controller for RGB, LVDS and TV interfaces.
153 - compatible: value must be either:
154 * allwinner,sun4i-a10-tcon
155 * allwinner,sun5i-a13-tcon
156 * allwinner,sun6i-a31-tcon
157 * allwinner,sun6i-a31s-tcon
158 * allwinner,sun7i-a20-tcon
159 * allwinner,sun8i-a23-tcon
160 * allwinner,sun8i-a33-tcon
161 * allwinner,sun8i-a83t-tcon-lcd
162 * allwinner,sun8i-a83t-tcon-tv
163 * allwinner,sun8i-r40-tcon-tv
164 * allwinner,sun8i-v3s-tcon
165 * allwinner,sun9i-a80-tcon-lcd
166 * allwinner,sun9i-a80-tcon-tv
167 * "allwinner,sun50i-a64-tcon-lcd", "allwinner,sun8i-a83t-tcon-lcd"
168 * "allwinner,sun50i-a64-tcon-tv", "allwinner,sun8i-a83t-tcon-tv"
169 * allwinner,sun50i-h6-tcon-tv, allwinner,sun8i-r40-tcon-tv
170 - reg: base address and size of memory-mapped region
171 - interrupts: interrupt associated to this IP
172 - clocks: phandles to the clocks feeding the TCON.
173 - 'ahb': the interface clocks
174 - 'tcon-ch0': The clock driving the TCON channel 0, if supported
175 - resets: phandles to the reset controllers driving the encoder
176 - "lcd": the reset line for the TCON
177 - "edp": the reset line for the eDP block (A80 only)
179 - clock-names: the clock names mentioned above
180 - reset-names: the reset names mentioned above
181 - clock-output-names: Name of the pixel clock created, if TCON supports
184 - ports: A ports node with endpoint definitions as defined in
185 Documentation/devicetree/bindings/media/video-interfaces.txt. The
186 first port should be the input endpoint, the second one the output
188 The output may have multiple endpoints. TCON can have 1 or 2 channels,
189 usually with the first channel being used for the panels interfaces
190 (RGB, LVDS, etc.), and the second being used for the outputs that
191 require another controller (TV Encoder, HDMI, etc.). The endpoints
192 will take an extra property, allwinner,tcon-channel, to specify the
193 channel the endpoint is associated to. If that property is not
194 present, the endpoint number will be used as the channel number.
196 For TCONs with channel 0, there is one more clock required:
197 - 'tcon-ch0': The clock driving the TCON channel 0
198 For TCONs with channel 1, there is one more clock required:
199 - 'tcon-ch1': The clock driving the TCON channel 1
201 When TCON support LVDS (all TCONs except TV TCONs on A83T, R40 and those found
202 in A13, H3, H5 and V3s SoCs), you need one more reset line:
203 - 'lvds': The reset line driving the LVDS logic
205 And on the A23, A31, A31s and A33, you need one more clock line:
206 - 'lvds-alt': An alternative clock source, separate from the TCON channel 0
207 clock, that can be used to drive the LVDS clock
212 TCON TOPs main purpose is to configure whole display pipeline. It determines
213 relationships between mixers and TCONs, selects source TCON for HDMI, muxes
214 LCD and TV encoder GPIO output, selects TV encoder clock source and contains
215 additional TV TCON and DSI gates.
217 It allows display pipeline to be configured in very different ways:
223 \ / [1] TCON-LCD1 - LCD1/LVDS1
225 / \ [2] TCON-TV0 [0] - TVE0/RGB
229 \ [3] TCON-TV1 [1] - TVE1/RGB
231 Note that both TCON TOP references same physical unit. Both mixers can be
232 connected to any TCON. Not all TCON TOP variants support all features.
235 - compatible: value must be one of:
236 * allwinner,sun8i-r40-tcon-top
237 * allwinner,sun50i-h6-tcon-top
238 - reg: base address and size of the memory-mapped region.
239 - clocks: phandle to the clocks feeding the TCON TOP
240 * bus: TCON TOP interface clock
241 * tcon-tv0: TCON TV0 clock
242 * tve0: TVE0 clock (R40 only)
243 * tcon-tv1: TCON TV1 clock (R40 only)
244 * tve1: TVE0 clock (R40 only)
245 * dsi: MIPI DSI clock (R40 only)
246 - clock-names: clock name mentioned above
247 - resets: phandle to the reset line driving the TCON TOP
248 - #clock-cells : must contain 1
249 - clock-output-names: Names of clocks created for TCON TV0 channel clock,
250 TCON TV1 channel clock (R40 only) and DSI channel clock (R40 only), in
253 - ports: A ports node with endpoint definitions as defined in
254 Documentation/devicetree/bindings/media/video-interfaces.txt. 6 ports should
256 * port 0 is input for mixer0 mux
257 * port 1 is output for mixer0 mux
258 * port 2 is input for mixer1 mux
259 * port 3 is output for mixer1 mux
260 * port 4 is input for HDMI mux
261 * port 5 is output for HDMI mux
262 All output endpoints for mixer muxes and input endpoints for HDMI mux should
263 have reg property with the id of the target TCON, as shown in above graph
264 (0-3 for mixer muxes and 0-1 for HDMI mux). All ports should have only one
265 endpoint connected to remote endpoint.
270 The DRC (Dynamic Range Controller), found in the latest Allwinner SoCs
271 (A31, A23, A33, A80), allows to dynamically adjust pixel
272 brightness/contrast based on histogram measurements for LCD content
273 adaptive backlight control.
277 - compatible: value must be one of:
278 * allwinner,sun6i-a31-drc
279 * allwinner,sun6i-a31s-drc
280 * allwinner,sun8i-a23-drc
281 * allwinner,sun8i-a33-drc
282 * allwinner,sun9i-a80-drc
283 - reg: base address and size of the memory-mapped region.
284 - interrupts: interrupt associated to this IP
285 - clocks: phandles to the clocks feeding the DRC
286 * ahb: the DRC interface clock
287 * mod: the DRC module clock
288 * ram: the DRC DRAM clock
289 - clock-names: the clock names mentioned above
290 - resets: phandles to the reset line driving the DRC
292 - ports: A ports node with endpoint definitions as defined in
293 Documentation/devicetree/bindings/media/video-interfaces.txt. The
294 first port should be the input endpoints, the second one the outputs
296 Display Engine Backend
297 ----------------------
299 The display engine backend exposes layers and sprites to the
303 - compatible: value must be one of:
304 * allwinner,sun4i-a10-display-backend
305 * allwinner,sun5i-a13-display-backend
306 * allwinner,sun6i-a31-display-backend
307 * allwinner,sun7i-a20-display-backend
308 * allwinner,sun8i-a23-display-backend
309 * allwinner,sun8i-a33-display-backend
310 * allwinner,sun9i-a80-display-backend
311 - reg: base address and size of the memory-mapped region.
312 - interrupts: interrupt associated to this IP
313 - clocks: phandles to the clocks feeding the frontend and backend
314 * ahb: the backend interface clock
315 * mod: the backend module clock
316 * ram: the backend DRAM clock
317 - clock-names: the clock names mentioned above
318 - resets: phandles to the reset controllers driving the backend
320 - ports: A ports node with endpoint definitions as defined in
321 Documentation/devicetree/bindings/media/video-interfaces.txt. The
322 first port should be the input endpoints, the second one the output
324 On the A33, some additional properties are required:
325 - reg needs to have an additional region corresponding to the SAT
326 - reg-names need to be set, with "be" and "sat"
327 - clocks and clock-names need to have a phandle to the SAT bus
328 clocks, whose name will be "sat"
329 - resets and reset-names need to have a phandle to the SAT bus
330 resets, whose name will be "sat"
335 The DEU (Detail Enhancement Unit), found in the Allwinner A80 SoC,
336 can sharpen the display content in both luma and chroma channels.
339 - compatible: value must be one of:
340 * allwinner,sun9i-a80-deu
341 - reg: base address and size of the memory-mapped region.
342 - interrupts: interrupt associated to this IP
343 - clocks: phandles to the clocks feeding the DEU
344 * ahb: the DEU interface clock
345 * mod: the DEU module clock
346 * ram: the DEU DRAM clock
347 - clock-names: the clock names mentioned above
348 - resets: phandles to the reset line driving the DEU
350 - ports: A ports node with endpoint definitions as defined in
351 Documentation/devicetree/bindings/media/video-interfaces.txt. The
352 first port should be the input endpoints, the second one the outputs
354 Display Engine Frontend
355 -----------------------
357 The display engine frontend does formats conversion, scaling,
358 deinterlacing and color space conversion.
361 - compatible: value must be one of:
362 * allwinner,sun4i-a10-display-frontend
363 * allwinner,sun5i-a13-display-frontend
364 * allwinner,sun6i-a31-display-frontend
365 * allwinner,sun7i-a20-display-frontend
366 * allwinner,sun8i-a23-display-frontend
367 * allwinner,sun8i-a33-display-frontend
368 * allwinner,sun9i-a80-display-frontend
369 - reg: base address and size of the memory-mapped region.
370 - interrupts: interrupt associated to this IP
371 - clocks: phandles to the clocks feeding the frontend and backend
372 * ahb: the backend interface clock
373 * mod: the backend module clock
374 * ram: the backend DRAM clock
375 - clock-names: the clock names mentioned above
376 - resets: phandles to the reset controllers driving the backend
378 - ports: A ports node with endpoint definitions as defined in
379 Documentation/devicetree/bindings/media/video-interfaces.txt. The
380 first port should be the input endpoints, the second one the outputs
382 Display Engine 2.0 Mixer
383 ------------------------
385 The DE2 mixer have many functionalities, currently only layer blending is
389 - compatible: value must be one of:
390 * allwinner,sun8i-a83t-de2-mixer-0
391 * allwinner,sun8i-a83t-de2-mixer-1
392 * allwinner,sun8i-h3-de2-mixer-0
393 * allwinner,sun8i-r40-de2-mixer-0
394 * allwinner,sun8i-r40-de2-mixer-1
395 * allwinner,sun8i-v3s-de2-mixer
396 * allwinner,sun50i-a64-de2-mixer-0
397 * allwinner,sun50i-a64-de2-mixer-1
398 * allwinner,sun50i-h6-de3-mixer-0
399 - reg: base address and size of the memory-mapped region.
400 - clocks: phandles to the clocks feeding the mixer
401 * bus: the mixer interface clock
402 * mod: the mixer module clock
403 - clock-names: the clock names mentioned above
404 - resets: phandles to the reset controllers driving the mixer
406 - ports: A ports node with endpoint definitions as defined in
407 Documentation/devicetree/bindings/media/video-interfaces.txt. The
408 first port should be the input endpoints, the second one the output
411 Display Engine Pipeline
412 -----------------------
414 The display engine pipeline (and its entry point, since it can be
415 either directly the backend or the frontend) is represented as an
419 - compatible: value must be one of:
420 * allwinner,sun4i-a10-display-engine
421 * allwinner,sun5i-a10s-display-engine
422 * allwinner,sun5i-a13-display-engine
423 * allwinner,sun6i-a31-display-engine
424 * allwinner,sun6i-a31s-display-engine
425 * allwinner,sun7i-a20-display-engine
426 * allwinner,sun8i-a23-display-engine
427 * allwinner,sun8i-a33-display-engine
428 * allwinner,sun8i-a83t-display-engine
429 * allwinner,sun8i-h3-display-engine
430 * allwinner,sun8i-r40-display-engine
431 * allwinner,sun8i-v3s-display-engine
432 * allwinner,sun9i-a80-display-engine
433 * allwinner,sun50i-a64-display-engine
434 * allwinner,sun50i-h6-display-engine
436 - allwinner,pipelines: list of phandle to the display engine
437 frontends (DE 1.0) or mixers (DE 2.0/3.0) available.
442 compatible = "olimex,lcd-olinuxino-43-ts";
443 #address-cells = <1>;
447 #address-cells = <1>;
450 panel_input: endpoint {
451 remote-endpoint = <&tcon0_out_panel>;
457 compatible = "hdmi-connector";
461 hdmi_con_in: endpoint {
462 remote-endpoint = <&hdmi_out_con>;
468 compatible = "allwinner,sun5i-a10s-hdmi";
469 reg = <0x01c16000 0x1000>;
471 clocks = <&ccu CLK_AHB_HDMI>, <&ccu CLK_HDMI>,
472 <&ccu CLK_PLL_VIDEO0_2X>,
473 <&ccu CLK_PLL_VIDEO1_2X>;
474 clock-names = "ahb", "mod", "pll-0", "pll-1";
475 dmas = <&dma SUN4I_DMA_NORMAL 16>,
476 <&dma SUN4I_DMA_NORMAL 16>,
477 <&dma SUN4I_DMA_DEDICATED 24>;
478 dma-names = "ddc-tx", "ddc-rx", "audio-tx";
481 #address-cells = <1>;
485 #address-cells = <1>;
489 hdmi_in_tcon0: endpoint {
490 remote-endpoint = <&tcon0_out_hdmi>;
495 #address-cells = <1>;
499 hdmi_out_con: endpoint {
500 remote-endpoint = <&hdmi_con_in>;
506 tve0: tv-encoder@1c0a000 {
507 compatible = "allwinner,sun4i-a10-tv-encoder";
508 reg = <0x01c0a000 0x1000>;
509 clocks = <&ahb_gates 34>;
510 resets = <&tcon_ch0_clk 0>;
513 #address-cells = <1>;
516 tve0_in_tcon0: endpoint@0 {
518 remote-endpoint = <&tcon0_out_tve0>;
523 tcon0: lcd-controller@1c0c000 {
524 compatible = "allwinner,sun5i-a13-tcon";
525 reg = <0x01c0c000 0x1000>;
527 resets = <&tcon_ch0_clk 1>;
529 clocks = <&ahb_gates 36>,
535 clock-output-names = "tcon-pixel-clock";
538 #address-cells = <1>;
542 #address-cells = <1>;
546 tcon0_in_be0: endpoint@0 {
548 remote-endpoint = <&be0_out_tcon0>;
553 #address-cells = <1>;
557 tcon0_out_panel: endpoint@0 {
559 remote-endpoint = <&panel_input>;
562 tcon0_out_tve0: endpoint@1 {
564 remote-endpoint = <&tve0_in_tcon0>;
570 fe0: display-frontend@1e00000 {
571 compatible = "allwinner,sun5i-a13-display-frontend";
572 reg = <0x01e00000 0x20000>;
574 clocks = <&ahb_gates 46>, <&de_fe_clk>,
576 clock-names = "ahb", "mod",
578 resets = <&de_fe_clk>;
581 #address-cells = <1>;
585 #address-cells = <1>;
589 fe0_out_be0: endpoint {
590 remote-endpoint = <&be0_in_fe0>;
596 be0: display-backend@1e60000 {
597 compatible = "allwinner,sun5i-a13-display-backend";
598 reg = <0x01e60000 0x10000>;
600 clocks = <&ahb_gates 44>, <&de_be_clk>,
602 clock-names = "ahb", "mod",
604 resets = <&de_be_clk>;
607 #address-cells = <1>;
611 #address-cells = <1>;
615 be0_in_fe0: endpoint@0 {
617 remote-endpoint = <&fe0_out_be0>;
622 #address-cells = <1>;
626 be0_out_tcon0: endpoint@0 {
628 remote-endpoint = <&tcon0_in_be0>;
635 compatible = "allwinner,sun5i-a13-display-engine";
636 allwinner,pipelines = <&fe0>;