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 TV Encoder supports the composite and VGA output. It is one end of
74 - compatible: value should be "allwinner,sun4i-a10-tv-encoder".
75 - reg: base address and size of memory-mapped region
76 - clocks: the clocks driving the TV encoder
77 - resets: phandle to the reset controller driving the encoder
79 - ports: A ports node with endpoint definitions as defined in
80 Documentation/devicetree/bindings/media/video-interfaces.txt. The
81 first port should be the input endpoint.
86 The TCON acts as a timing controller for RGB, LVDS and TV interfaces.
89 - compatible: value must be either:
90 * allwinner,sun4i-a10-tcon
91 * allwinner,sun5i-a13-tcon
92 * allwinner,sun6i-a31-tcon
93 * allwinner,sun6i-a31s-tcon
94 * allwinner,sun7i-a20-tcon
95 * allwinner,sun8i-a33-tcon
96 * allwinner,sun8i-a83t-tcon-lcd
97 * allwinner,sun8i-v3s-tcon
98 - reg: base address and size of memory-mapped region
99 - interrupts: interrupt associated to this IP
100 - clocks: phandles to the clocks feeding the TCON. Three are needed:
101 - 'ahb': the interface clocks
102 - 'tcon-ch0': The clock driving the TCON channel 0
103 - resets: phandles to the reset controllers driving the encoder
104 - "lcd": the reset line for the TCON channel 0
106 - clock-names: the clock names mentioned above
107 - reset-names: the reset names mentioned above
108 - clock-output-names: Name of the pixel clock created
110 - ports: A ports node with endpoint definitions as defined in
111 Documentation/devicetree/bindings/media/video-interfaces.txt. The
112 first port should be the input endpoint, the second one the output
114 The output may have multiple endpoints. The TCON has two channels,
115 usually with the first channel being used for the panels interfaces
116 (RGB, LVDS, etc.), and the second being used for the outputs that
117 require another controller (TV Encoder, HDMI, etc.). The endpoints
118 will take an extra property, allwinner,tcon-channel, to specify the
119 channel the endpoint is associated to. If that property is not
120 present, the endpoint number will be used as the channel number.
122 On SoCs other than the A33 and V3s, there is one more clock required:
123 - 'tcon-ch1': The clock driving the TCON channel 1
125 On SoCs that support LVDS (all SoCs but the A13, H3, H5 and V3s), you
126 need one more reset line:
127 - 'lvds': The reset line driving the LVDS logic
129 And on the A23, A31, A31s and A33, you need one more clock line:
130 - 'lvds-alt': An alternative clock source, separate from the TCON channel 0
131 clock, that can be used to drive the LVDS clock
136 The DRC (Dynamic Range Controller), found in the latest Allwinner SoCs
137 (A31, A23, A33), allows to dynamically adjust pixel
138 brightness/contrast based on histogram measurements for LCD content
139 adaptive backlight control.
143 - compatible: value must be one of:
144 * allwinner,sun6i-a31-drc
145 * allwinner,sun6i-a31s-drc
146 * allwinner,sun8i-a33-drc
147 - reg: base address and size of the memory-mapped region.
148 - interrupts: interrupt associated to this IP
149 - clocks: phandles to the clocks feeding the DRC
150 * ahb: the DRC interface clock
151 * mod: the DRC module clock
152 * ram: the DRC DRAM clock
153 - clock-names: the clock names mentioned above
154 - resets: phandles to the reset line driving the DRC
156 - ports: A ports node with endpoint definitions as defined in
157 Documentation/devicetree/bindings/media/video-interfaces.txt. The
158 first port should be the input endpoints, the second one the outputs
160 Display Engine Backend
161 ----------------------
163 The display engine backend exposes layers and sprites to the
167 - compatible: value must be one of:
168 * allwinner,sun4i-a10-display-backend
169 * allwinner,sun5i-a13-display-backend
170 * allwinner,sun6i-a31-display-backend
171 * allwinner,sun7i-a20-display-backend
172 * allwinner,sun8i-a33-display-backend
173 - reg: base address and size of the memory-mapped region.
174 - interrupts: interrupt associated to this IP
175 - clocks: phandles to the clocks feeding the frontend and backend
176 * ahb: the backend interface clock
177 * mod: the backend module clock
178 * ram: the backend DRAM clock
179 - clock-names: the clock names mentioned above
180 - resets: phandles to the reset controllers driving the backend
182 - ports: A ports node with endpoint definitions as defined in
183 Documentation/devicetree/bindings/media/video-interfaces.txt. The
184 first port should be the input endpoints, the second one the output
186 On the A33, some additional properties are required:
187 - reg needs to have an additional region corresponding to the SAT
188 - reg-names need to be set, with "be" and "sat"
189 - clocks and clock-names need to have a phandle to the SAT bus
190 clocks, whose name will be "sat"
191 - resets and reset-names need to have a phandle to the SAT bus
192 resets, whose name will be "sat"
194 Display Engine Frontend
195 -----------------------
197 The display engine frontend does formats conversion, scaling,
198 deinterlacing and color space conversion.
201 - compatible: value must be one of:
202 * allwinner,sun4i-a10-display-frontend
203 * allwinner,sun5i-a13-display-frontend
204 * allwinner,sun6i-a31-display-frontend
205 * allwinner,sun7i-a20-display-frontend
206 * allwinner,sun8i-a33-display-frontend
207 - reg: base address and size of the memory-mapped region.
208 - interrupts: interrupt associated to this IP
209 - clocks: phandles to the clocks feeding the frontend and backend
210 * ahb: the backend interface clock
211 * mod: the backend module clock
212 * ram: the backend DRAM clock
213 - clock-names: the clock names mentioned above
214 - resets: phandles to the reset controllers driving the backend
216 - ports: A ports node with endpoint definitions as defined in
217 Documentation/devicetree/bindings/media/video-interfaces.txt. The
218 first port should be the input endpoints, the second one the outputs
220 Display Engine 2.0 Mixer
221 ------------------------
223 The DE2 mixer have many functionalities, currently only layer blending is
227 - compatible: value must be one of:
228 * allwinner,sun8i-a83t-de2-mixer-0
229 * allwinner,sun8i-v3s-de2-mixer
230 - reg: base address and size of the memory-mapped region.
231 - clocks: phandles to the clocks feeding the mixer
232 * bus: the mixer interface clock
233 * mod: the mixer module clock
234 - clock-names: the clock names mentioned above
235 - resets: phandles to the reset controllers driving the mixer
237 - ports: A ports node with endpoint definitions as defined in
238 Documentation/devicetree/bindings/media/video-interfaces.txt. The
239 first port should be the input endpoints, the second one the output
242 Display Engine Pipeline
243 -----------------------
245 The display engine pipeline (and its entry point, since it can be
246 either directly the backend or the frontend) is represented as an
250 - compatible: value must be one of:
251 * allwinner,sun4i-a10-display-engine
252 * allwinner,sun5i-a10s-display-engine
253 * allwinner,sun5i-a13-display-engine
254 * allwinner,sun6i-a31-display-engine
255 * allwinner,sun6i-a31s-display-engine
256 * allwinner,sun7i-a20-display-engine
257 * allwinner,sun8i-a33-display-engine
258 * allwinner,sun8i-a83t-display-engine
259 * allwinner,sun8i-v3s-display-engine
261 - allwinner,pipelines: list of phandle to the display engine
262 frontends (DE 1.0) or mixers (DE 2.0) available.
267 compatible = "olimex,lcd-olinuxino-43-ts";
268 #address-cells = <1>;
272 #address-cells = <1>;
275 panel_input: endpoint {
276 remote-endpoint = <&tcon0_out_panel>;
282 compatible = "hdmi-connector";
286 hdmi_con_in: endpoint {
287 remote-endpoint = <&hdmi_out_con>;
293 compatible = "allwinner,sun5i-a10s-hdmi";
294 reg = <0x01c16000 0x1000>;
296 clocks = <&ccu CLK_AHB_HDMI>, <&ccu CLK_HDMI>,
297 <&ccu CLK_PLL_VIDEO0_2X>,
298 <&ccu CLK_PLL_VIDEO1_2X>;
299 clock-names = "ahb", "mod", "pll-0", "pll-1";
300 dmas = <&dma SUN4I_DMA_NORMAL 16>,
301 <&dma SUN4I_DMA_NORMAL 16>,
302 <&dma SUN4I_DMA_DEDICATED 24>;
303 dma-names = "ddc-tx", "ddc-rx", "audio-tx";
306 #address-cells = <1>;
310 #address-cells = <1>;
314 hdmi_in_tcon0: endpoint {
315 remote-endpoint = <&tcon0_out_hdmi>;
320 #address-cells = <1>;
324 hdmi_out_con: endpoint {
325 remote-endpoint = <&hdmi_con_in>;
331 tve0: tv-encoder@1c0a000 {
332 compatible = "allwinner,sun4i-a10-tv-encoder";
333 reg = <0x01c0a000 0x1000>;
334 clocks = <&ahb_gates 34>;
335 resets = <&tcon_ch0_clk 0>;
338 #address-cells = <1>;
341 tve0_in_tcon0: endpoint@0 {
343 remote-endpoint = <&tcon0_out_tve0>;
348 tcon0: lcd-controller@1c0c000 {
349 compatible = "allwinner,sun5i-a13-tcon";
350 reg = <0x01c0c000 0x1000>;
352 resets = <&tcon_ch0_clk 1>;
354 clocks = <&ahb_gates 36>,
360 clock-output-names = "tcon-pixel-clock";
363 #address-cells = <1>;
367 #address-cells = <1>;
371 tcon0_in_be0: endpoint@0 {
373 remote-endpoint = <&be0_out_tcon0>;
378 #address-cells = <1>;
382 tcon0_out_panel: endpoint@0 {
384 remote-endpoint = <&panel_input>;
387 tcon0_out_tve0: endpoint@1 {
389 remote-endpoint = <&tve0_in_tcon0>;
395 fe0: display-frontend@1e00000 {
396 compatible = "allwinner,sun5i-a13-display-frontend";
397 reg = <0x01e00000 0x20000>;
399 clocks = <&ahb_gates 46>, <&de_fe_clk>,
401 clock-names = "ahb", "mod",
403 resets = <&de_fe_clk>;
406 #address-cells = <1>;
410 #address-cells = <1>;
414 fe0_out_be0: endpoint {
415 remote-endpoint = <&be0_in_fe0>;
421 be0: display-backend@1e60000 {
422 compatible = "allwinner,sun5i-a13-display-backend";
423 reg = <0x01e60000 0x10000>;
425 clocks = <&ahb_gates 44>, <&de_be_clk>,
427 clock-names = "ahb", "mod",
429 resets = <&de_be_clk>;
432 #address-cells = <1>;
436 #address-cells = <1>;
440 be0_in_fe0: endpoint@0 {
442 remote-endpoint = <&fe0_out_be0>;
447 #address-cells = <1>;
451 be0_out_tcon0: endpoint@0 {
453 remote-endpoint = <&tcon0_in_be0>;
460 compatible = "allwinner,sun5i-a13-display-engine";
461 allwinner,pipelines = <&fe0>;