Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[cris-mirror.git] / Documentation / devicetree / bindings / display / sunxi / sun4i-drm.txt
blobcd626ee1147a2c92da8592dbd6a48728b54181e0
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]
15                       \ /                         \ /
16                        X                           X
17                       / \                         / \
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
28              [1] ----   ---- [1]
29                      \ /
30                       X
31                      / \
32              [0] ----   ---- [0]
33     Mixer 1  [1] ----------- [1]  TCON 1
35 HDMI Encoder
36 ------------
38 The HDMI Encoder supports the HDMI video and audio outputs, and does
39 CEC. It is one end of the pipeline.
41 Required properties:
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.
67 TV Encoder
68 ----------
70 The TV Encoder supports the composite and VGA output. It is one end of
71 the pipeline.
73 Required properties:
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.
83 TCON
84 ----
86 The TCON acts as a timing controller for RGB, LVDS and TV interfaces.
88 Required properties:
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.
142 Required properties:
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
164 system.
166 Required properties:
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.
200 Required properties:
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
224 supported.
226 Required properties:
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
247 extra node.
249 Required properties:
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.
264 Example:
266 panel: panel {
267         compatible = "olimex,lcd-olinuxino-43-ts";
268         #address-cells = <1>;
269         #size-cells = <0>;
271         port {
272                 #address-cells = <1>;
273                 #size-cells = <0>;
275                 panel_input: endpoint {
276                         remote-endpoint = <&tcon0_out_panel>;
277                 };
278         };
281 connector {
282         compatible = "hdmi-connector";
283         type = "a";
285         port {
286                 hdmi_con_in: endpoint {
287                         remote-endpoint = <&hdmi_out_con>;
288                 };
289         };
292 hdmi: hdmi@1c16000 {
293         compatible = "allwinner,sun5i-a10s-hdmi";
294         reg = <0x01c16000 0x1000>;
295         interrupts = <58>;
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";
305         ports {
306                 #address-cells = <1>;
307                 #size-cells = <0>;
309                 port@0 {
310                         #address-cells = <1>;
311                         #size-cells = <0>;
312                         reg = <0>;
314                         hdmi_in_tcon0: endpoint {
315                                 remote-endpoint = <&tcon0_out_hdmi>;
316                         };
317                 };
319                 port@1 {
320                         #address-cells = <1>;
321                         #size-cells = <0>;
322                         reg = <1>;
324                         hdmi_out_con: endpoint {
325                                 remote-endpoint = <&hdmi_con_in>;
326                         };
327                 };
328         };
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>;
337         port {
338                 #address-cells = <1>;
339                 #size-cells = <0>;
341                 tve0_in_tcon0: endpoint@0 {
342                         reg = <0>;
343                         remote-endpoint = <&tcon0_out_tve0>;
344                 };
345         };
348 tcon0: lcd-controller@1c0c000 {
349         compatible = "allwinner,sun5i-a13-tcon";
350         reg = <0x01c0c000 0x1000>;
351         interrupts = <44>;
352         resets = <&tcon_ch0_clk 1>;
353         reset-names = "lcd";
354         clocks = <&ahb_gates 36>,
355                  <&tcon_ch0_clk>,
356                  <&tcon_ch1_clk>;
357         clock-names = "ahb",
358                       "tcon-ch0",
359                       "tcon-ch1";
360         clock-output-names = "tcon-pixel-clock";
362         ports {
363                 #address-cells = <1>;
364                 #size-cells = <0>;
366                 tcon0_in: port@0 {
367                         #address-cells = <1>;
368                         #size-cells = <0>;
369                         reg = <0>;
371                         tcon0_in_be0: endpoint@0 {
372                                 reg = <0>;
373                                 remote-endpoint = <&be0_out_tcon0>;
374                         };
375                 };
377                 tcon0_out: port@1 {
378                         #address-cells = <1>;
379                         #size-cells = <0>;
380                         reg = <1>;
382                         tcon0_out_panel: endpoint@0 {
383                                 reg = <0>;
384                                 remote-endpoint = <&panel_input>;
385                         };
387                         tcon0_out_tve0: endpoint@1 {
388                                 reg = <1>;
389                                 remote-endpoint = <&tve0_in_tcon0>;
390                         };
391                 };
392         };
395 fe0: display-frontend@1e00000 {
396         compatible = "allwinner,sun5i-a13-display-frontend";
397         reg = <0x01e00000 0x20000>;
398         interrupts = <47>;
399         clocks = <&ahb_gates 46>, <&de_fe_clk>,
400                  <&dram_gates 25>;
401         clock-names = "ahb", "mod",
402                       "ram";
403         resets = <&de_fe_clk>;
405         ports {
406                 #address-cells = <1>;
407                 #size-cells = <0>;
409                 fe0_out: port@1 {
410                         #address-cells = <1>;
411                         #size-cells = <0>;
412                         reg = <1>;
414                         fe0_out_be0: endpoint {
415                                 remote-endpoint = <&be0_in_fe0>;
416                         };
417                 };
418         };
421 be0: display-backend@1e60000 {
422         compatible = "allwinner,sun5i-a13-display-backend";
423         reg = <0x01e60000 0x10000>;
424         interrupts = <47>;
425         clocks = <&ahb_gates 44>, <&de_be_clk>,
426                  <&dram_gates 26>;
427         clock-names = "ahb", "mod",
428                       "ram";
429         resets = <&de_be_clk>;
431         ports {
432                 #address-cells = <1>;
433                 #size-cells = <0>;
435                 be0_in: port@0 {
436                         #address-cells = <1>;
437                         #size-cells = <0>;
438                         reg = <0>;
440                         be0_in_fe0: endpoint@0 {
441                                 reg = <0>;
442                                 remote-endpoint = <&fe0_out_be0>;
443                         };
444                 };
446                 be0_out: port@1 {
447                         #address-cells = <1>;
448                         #size-cells = <0>;
449                         reg = <1>;
451                         be0_out_tcon0: endpoint@0 {
452                                 reg = <0>;
453                                 remote-endpoint = <&tcon0_in_be0>;
454                         };
455                 };
456         };
459 display-engine {
460         compatible = "allwinner,sun5i-a13-display-engine";
461         allwinner,pipelines = <&fe0>;