1/*
2 * Copyright 2012 Stefan Roese
3 * Stefan Roese <sr@denx.de>
4 *
5 * This file is dual-licensed: you can use it either under the terms
6 * of the GPL or the X11 license, at your option. Note that this dual
7 * licensing only applies to this file, and not this project as a
8 * whole.
9 *
10 *  a) This library is free software; you can redistribute it and/or
11 *     modify it under the terms of the GNU General Public License as
12 *     published by the Free Software Foundation; either version 2 of the
13 *     License, or (at your option) any later version.
14 *
15 *     This library is distributed in the hope that it will be useful,
16 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
17 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 *     GNU General Public License for more details.
19 *
20 * Or, alternatively,
21 *
22 *  b) Permission is hereby granted, free of charge, to any person
23 *     obtaining a copy of this software and associated documentation
24 *     files (the "Software"), to deal in the Software without
25 *     restriction, including without limitation the rights to use,
26 *     copy, modify, merge, publish, distribute, sublicense, and/or
27 *     sell copies of the Software, and to permit persons to whom the
28 *     Software is furnished to do so, subject to the following
29 *     conditions:
30 *
31 *     The above copyright notice and this permission notice shall be
32 *     included in all copies or substantial portions of the Software.
33 *
34 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
35 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
36 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
37 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
38 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
39 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
40 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
41 *     OTHER DEALINGS IN THE SOFTWARE.
42 */
43
44#include <dt-bindings/thermal/thermal.h>
45#include <dt-bindings/dma/sun4i-a10.h>
46#include <dt-bindings/clock/sun4i-a10-ccu.h>
47#include <dt-bindings/reset/sun4i-a10-ccu.h>
48
49/ {
50	#address-cells = <1>;
51	#size-cells = <1>;
52	interrupt-parent = <&intc>;
53
54	aliases {
55		ethernet0 = &emac;
56	};
57
58	chosen {
59		#address-cells = <1>;
60		#size-cells = <1>;
61		ranges;
62
63		framebuffer-lcd0-hdmi {
64			compatible = "allwinner,simple-framebuffer",
65				     "simple-framebuffer";
66			allwinner,pipeline = "de_be0-lcd0-hdmi";
67			clocks = <&ccu CLK_AHB_LCD0>, <&ccu CLK_AHB_HDMI0>,
68				 <&ccu CLK_AHB_DE_BE0>, <&ccu CLK_DE_BE0>,
69				 <&ccu CLK_TCON0_CH1>, <&ccu CLK_DRAM_DE_BE0>;
70			status = "disabled";
71		};
72
73		framebuffer-fe0-lcd0-hdmi {
74			compatible = "allwinner,simple-framebuffer",
75				     "simple-framebuffer";
76			allwinner,pipeline = "de_fe0-de_be0-lcd0-hdmi";
77			clocks = <&ccu CLK_AHB_LCD0>, <&ccu CLK_AHB_HDMI0>,
78				 <&ccu CLK_AHB_DE_BE0>, <&ccu CLK_AHB_DE_FE0>,
79				 <&ccu CLK_DE_BE0>, <&ccu CLK_DE_FE0>,
80				 <&ccu CLK_TCON0_CH1>, <&ccu CLK_HDMI>,
81				 <&ccu CLK_DRAM_DE_FE0>, <&ccu CLK_DRAM_DE_BE0>;
82			status = "disabled";
83		};
84
85		framebuffer-fe0-lcd0 {
86			compatible = "allwinner,simple-framebuffer",
87				     "simple-framebuffer";
88			allwinner,pipeline = "de_fe0-de_be0-lcd0";
89			clocks = <&ccu CLK_AHB_LCD0>, <&ccu CLK_AHB_DE_BE0>,
90				 <&ccu CLK_AHB_DE_FE0>, <&ccu CLK_DE_BE0>,
91				 <&ccu CLK_DE_FE0>, <&ccu CLK_TCON0_CH0>,
92				 <&ccu CLK_DRAM_DE_FE0>, <&ccu CLK_DRAM_DE_BE0>;
93			status = "disabled";
94		};
95
96		framebuffer-fe0-lcd0-tve0 {
97			compatible = "allwinner,simple-framebuffer",
98				     "simple-framebuffer";
99			allwinner,pipeline = "de_fe0-de_be0-lcd0-tve0";
100			clocks = <&ccu CLK_AHB_TVE0>, <&ccu CLK_AHB_LCD0>,
101				 <&ccu CLK_AHB_DE_BE0>, <&ccu CLK_AHB_DE_FE0>,
102				 <&ccu CLK_DE_BE0>, <&ccu CLK_DE_FE0>,
103				 <&ccu CLK_TCON0_CH1>, <&ccu CLK_DRAM_TVE0>,
104				 <&ccu CLK_DRAM_DE_FE0>, <&ccu CLK_DRAM_DE_BE0>;
105			status = "disabled";
106		};
107	};
108
109	cpus {
110		#address-cells = <1>;
111		#size-cells = <0>;
112		cpu0: cpu@0 {
113			device_type = "cpu";
114			compatible = "arm,cortex-a8";
115			reg = <0x0>;
116			clocks = <&ccu CLK_CPU>;
117			clock-latency = <244144>; /* 8 32k periods */
118			operating-points = <
119				/* kHz	  uV */
120				1008000 1400000
121				912000	1350000
122				864000	1300000
123				624000	1250000
124				>;
125			#cooling-cells = <2>;
126		};
127	};
128
129	thermal-zones {
130		cpu-thermal {
131			/* milliseconds */
132			polling-delay-passive = <250>;
133			polling-delay = <1000>;
134			thermal-sensors = <&rtp>;
135
136			cooling-maps {
137				map0 {
138					trip = <&cpu_alert0>;
139					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
140				};
141			};
142
143			trips {
144				cpu_alert0: cpu-alert0 {
145					/* milliCelsius */
146					temperature = <850000>;
147					hysteresis = <2000>;
148					type = "passive";
149				};
150
151				cpu_crit: cpu-crit {
152					/* milliCelsius */
153					temperature = <100000>;
154					hysteresis = <2000>;
155					type = "critical";
156				};
157			};
158		};
159	};
160
161	clocks {
162		#address-cells = <1>;
163		#size-cells = <1>;
164		ranges;
165
166		osc24M: clk-24M {
167			#clock-cells = <0>;
168			compatible = "fixed-clock";
169			clock-frequency = <24000000>;
170			clock-output-names = "osc24M";
171		};
172
173		osc32k: clk-32k {
174			#clock-cells = <0>;
175			compatible = "fixed-clock";
176			clock-frequency = <32768>;
177			clock-output-names = "osc32k";
178		};
179	};
180
181	de: display-engine {
182		compatible = "allwinner,sun4i-a10-display-engine";
183		allwinner,pipelines = <&fe0>, <&fe1>;
184		status = "disabled";
185	};
186
187	pmu {
188		compatible = "arm,cortex-a8-pmu";
189		interrupts = <3>;
190	};
191
192	reserved-memory {
193		#address-cells = <1>;
194		#size-cells = <1>;
195		ranges;
196
197		/* Address must be kept in the lower 256 MiBs of DRAM for VE. */
198		default-pool {
199			compatible = "shared-dma-pool";
200			size = <0x6000000>;
201			alloc-ranges = <0x4a000000 0x6000000>;
202			reusable;
203			linux,cma-default;
204		};
205	};
206
207	soc {
208		compatible = "simple-bus";
209		#address-cells = <1>;
210		#size-cells = <1>;
211		ranges;
212
213		system-control@1c00000 {
214			compatible = "allwinner,sun4i-a10-system-control";
215			reg = <0x01c00000 0x30>;
216			#address-cells = <1>;
217			#size-cells = <1>;
218			ranges;
219
220			sram_a: sram@0 {
221				compatible = "mmio-sram";
222				reg = <0x00000000 0xc000>;
223				#address-cells = <1>;
224				#size-cells = <1>;
225				ranges = <0 0x00000000 0xc000>;
226
227				emac_sram: sram-section@8000 {
228					compatible = "allwinner,sun4i-a10-sram-a3-a4";
229					reg = <0x8000 0x4000>;
230					status = "disabled";
231				};
232			};
233
234			sram_d: sram@10000 {
235				compatible = "mmio-sram";
236				reg = <0x00010000 0x1000>;
237				#address-cells = <1>;
238				#size-cells = <1>;
239				ranges = <0 0x00010000 0x1000>;
240
241				otg_sram: sram-section@0 {
242					compatible = "allwinner,sun4i-a10-sram-d";
243					reg = <0x0000 0x1000>;
244					status = "disabled";
245				};
246			};
247
248			sram_c: sram@1d00000 {
249				compatible = "mmio-sram";
250				reg = <0x01d00000 0xd0000>;
251				#address-cells = <1>;
252				#size-cells = <1>;
253				ranges = <0 0x01d00000 0xd0000>;
254
255				ve_sram: sram-section@0 {
256					compatible = "allwinner,sun4i-a10-sram-c1";
257					reg = <0x000000 0x80000>;
258				};
259			};
260		};
261
262		dma: dma-controller@1c02000 {
263			compatible = "allwinner,sun4i-a10-dma";
264			reg = <0x01c02000 0x1000>;
265			interrupts = <27>;
266			clocks = <&ccu CLK_AHB_DMA>;
267			#dma-cells = <2>;
268		};
269
270		nfc: nand-controller@1c03000 {
271			compatible = "allwinner,sun4i-a10-nand";
272			reg = <0x01c03000 0x1000>;
273			interrupts = <37>;
274			clocks = <&ccu CLK_AHB_NAND>, <&ccu CLK_NAND>;
275			clock-names = "ahb", "mod";
276			dmas = <&dma SUN4I_DMA_DEDICATED 3>;
277			dma-names = "rxtx";
278			status = "disabled";
279			#address-cells = <1>;
280			#size-cells = <0>;
281		};
282
283		spi0: spi@1c05000 {
284			compatible = "allwinner,sun4i-a10-spi";
285			reg = <0x01c05000 0x1000>;
286			interrupts = <10>;
287			clocks = <&ccu CLK_AHB_SPI0>, <&ccu CLK_SPI0>;
288			clock-names = "ahb", "mod";
289			dmas = <&dma SUN4I_DMA_DEDICATED 27>,
290			       <&dma SUN4I_DMA_DEDICATED 26>;
291			dma-names = "rx", "tx";
292			status = "disabled";
293			#address-cells = <1>;
294			#size-cells = <0>;
295		};
296
297		spi1: spi@1c06000 {
298			compatible = "allwinner,sun4i-a10-spi";
299			reg = <0x01c06000 0x1000>;
300			interrupts = <11>;
301			clocks = <&ccu CLK_AHB_SPI1>, <&ccu CLK_SPI1>;
302			clock-names = "ahb", "mod";
303			dmas = <&dma SUN4I_DMA_DEDICATED 9>,
304			       <&dma SUN4I_DMA_DEDICATED 8>;
305			dma-names = "rx", "tx";
306			pinctrl-names = "default";
307			pinctrl-0 = <&spi1_pins>, <&spi1_cs0_pin>;
308			status = "disabled";
309			#address-cells = <1>;
310			#size-cells = <0>;
311		};
312
313		emac: ethernet@1c0b000 {
314			compatible = "allwinner,sun4i-a10-emac";
315			reg = <0x01c0b000 0x1000>;
316			interrupts = <55>;
317			clocks = <&ccu CLK_AHB_EMAC>;
318			allwinner,sram = <&emac_sram 1>;
319			pinctrl-names = "default";
320			pinctrl-0 = <&emac_pins>;
321			status = "disabled";
322		};
323
324		mdio: mdio@1c0b080 {
325			compatible = "allwinner,sun4i-a10-mdio";
326			reg = <0x01c0b080 0x14>;
327			status = "disabled";
328			#address-cells = <1>;
329			#size-cells = <0>;
330		};
331
332		tcon0: lcd-controller@1c0c000 {
333			compatible = "allwinner,sun4i-a10-tcon";
334			reg = <0x01c0c000 0x1000>;
335			interrupts = <44>;
336			resets = <&ccu RST_TCON0>;
337			reset-names = "lcd";
338			clocks = <&ccu CLK_AHB_LCD0>,
339				 <&ccu CLK_TCON0_CH0>,
340				 <&ccu CLK_TCON0_CH1>;
341			clock-names = "ahb",
342				      "tcon-ch0",
343				      "tcon-ch1";
344			clock-output-names = "tcon0-pixel-clock";
345			#clock-cells = <0>;
346			dmas = <&dma SUN4I_DMA_DEDICATED 14>;
347
348			ports {
349				#address-cells = <1>;
350				#size-cells = <0>;
351
352				tcon0_in: port@0 {
353					#address-cells = <1>;
354					#size-cells = <0>;
355					reg = <0>;
356
357					tcon0_in_be0: endpoint@0 {
358						reg = <0>;
359						remote-endpoint = <&be0_out_tcon0>;
360					};
361
362					tcon0_in_be1: endpoint@1 {
363						reg = <1>;
364						remote-endpoint = <&be1_out_tcon0>;
365					};
366				};
367
368				tcon0_out: port@1 {
369					#address-cells = <1>;
370					#size-cells = <0>;
371					reg = <1>;
372
373					tcon0_out_hdmi: endpoint@1 {
374						reg = <1>;
375						remote-endpoint = <&hdmi_in_tcon0>;
376						allwinner,tcon-channel = <1>;
377					};
378				};
379			};
380		};
381
382		tcon1: lcd-controller@1c0d000 {
383			compatible = "allwinner,sun4i-a10-tcon";
384			reg = <0x01c0d000 0x1000>;
385			interrupts = <45>;
386			resets = <&ccu RST_TCON1>;
387			reset-names = "lcd";
388			clocks = <&ccu CLK_AHB_LCD1>,
389				 <&ccu CLK_TCON1_CH0>,
390				 <&ccu CLK_TCON1_CH1>;
391			clock-names = "ahb",
392				      "tcon-ch0",
393				      "tcon-ch1";
394			clock-output-names = "tcon1-pixel-clock";
395			#clock-cells = <0>;
396			dmas = <&dma SUN4I_DMA_DEDICATED 15>;
397
398			ports {
399				#address-cells = <1>;
400				#size-cells = <0>;
401
402				tcon1_in: port@0 {
403					#address-cells = <1>;
404					#size-cells = <0>;
405					reg = <0>;
406
407					tcon1_in_be0: endpoint@0 {
408						reg = <0>;
409						remote-endpoint = <&be0_out_tcon1>;
410					};
411
412					tcon1_in_be1: endpoint@1 {
413						reg = <1>;
414						remote-endpoint = <&be1_out_tcon1>;
415					};
416				};
417
418				tcon1_out: port@1 {
419					#address-cells = <1>;
420					#size-cells = <0>;
421					reg = <1>;
422
423					tcon1_out_hdmi: endpoint@1 {
424						reg = <1>;
425						remote-endpoint = <&hdmi_in_tcon1>;
426						allwinner,tcon-channel = <1>;
427					};
428				};
429			};
430		};
431
432		video-codec@1c0e000 {
433			compatible = "allwinner,sun4i-a10-video-engine";
434			reg = <0x01c0e000 0x1000>;
435			clocks = <&ccu CLK_AHB_VE>, <&ccu CLK_VE>,
436				 <&ccu CLK_DRAM_VE>;
437			clock-names = "ahb", "mod", "ram";
438			resets = <&ccu RST_VE>;
439			interrupts = <53>;
440			allwinner,sram = <&ve_sram 1>;
441		};
442
443		mmc0: mmc@1c0f000 {
444			compatible = "allwinner,sun4i-a10-mmc";
445			reg = <0x01c0f000 0x1000>;
446			clocks = <&ccu CLK_AHB_MMC0>, <&ccu CLK_MMC0>;
447			clock-names = "ahb", "mmc";
448			interrupts = <32>;
449			pinctrl-names = "default";
450			pinctrl-0 = <&mmc0_pins>;
451			status = "disabled";
452			#address-cells = <1>;
453			#size-cells = <0>;
454		};
455
456		mmc1: mmc@1c10000 {
457			compatible = "allwinner,sun4i-a10-mmc";
458			reg = <0x01c10000 0x1000>;
459			clocks = <&ccu CLK_AHB_MMC1>, <&ccu CLK_MMC1>;
460			clock-names = "ahb", "mmc";
461			interrupts = <33>;
462			status = "disabled";
463			#address-cells = <1>;
464			#size-cells = <0>;
465		};
466
467		mmc2: mmc@1c11000 {
468			compatible = "allwinner,sun4i-a10-mmc";
469			reg = <0x01c11000 0x1000>;
470			clocks = <&ccu CLK_AHB_MMC2>, <&ccu CLK_MMC2>;
471			clock-names = "ahb", "mmc";
472			interrupts = <34>;
473			status = "disabled";
474			#address-cells = <1>;
475			#size-cells = <0>;
476		};
477
478		mmc3: mmc@1c12000 {
479			compatible = "allwinner,sun4i-a10-mmc";
480			reg = <0x01c12000 0x1000>;
481			clocks = <&ccu CLK_AHB_MMC3>, <&ccu CLK_MMC3>;
482			clock-names = "ahb", "mmc";
483			interrupts = <35>;
484			status = "disabled";
485			#address-cells = <1>;
486			#size-cells = <0>;
487		};
488
489		usb_otg: usb@1c13000 {
490			compatible = "allwinner,sun4i-a10-musb";
491			reg = <0x01c13000 0x0400>;
492			clocks = <&ccu CLK_AHB_OTG>;
493			interrupts = <38>;
494			interrupt-names = "mc";
495			phys = <&usbphy 0>;
496			phy-names = "usb";
497			extcon = <&usbphy 0>;
498			allwinner,sram = <&otg_sram 1>;
499			dr_mode = "otg";
500			status = "disabled";
501		};
502
503		usbphy: phy@1c13400 {
504			#phy-cells = <1>;
505			compatible = "allwinner,sun4i-a10-usb-phy";
506			reg = <0x01c13400 0x10>, <0x01c14800 0x4>, <0x01c1c800 0x4>;
507			reg-names = "phy_ctrl", "pmu1", "pmu2";
508			clocks = <&ccu CLK_USB_PHY>;
509			clock-names = "usb_phy";
510			resets = <&ccu RST_USB_PHY0>,
511				 <&ccu RST_USB_PHY1>,
512				 <&ccu RST_USB_PHY2>;
513			reset-names = "usb0_reset", "usb1_reset", "usb2_reset";
514			status = "disabled";
515		};
516
517		ehci0: usb@1c14000 {
518			compatible = "allwinner,sun4i-a10-ehci", "generic-ehci";
519			reg = <0x01c14000 0x100>;
520			interrupts = <39>;
521			clocks = <&ccu CLK_AHB_EHCI0>;
522			phys = <&usbphy 1>;
523			phy-names = "usb";
524			status = "disabled";
525		};
526
527		ohci0: usb@1c14400 {
528			compatible = "allwinner,sun4i-a10-ohci", "generic-ohci";
529			reg = <0x01c14400 0x100>;
530			interrupts = <64>;
531			clocks = <&ccu CLK_USB_OHCI0>, <&ccu CLK_AHB_OHCI0>;
532			phys = <&usbphy 1>;
533			phy-names = "usb";
534			status = "disabled";
535		};
536
537		crypto: crypto-engine@1c15000 {
538			compatible = "allwinner,sun4i-a10-crypto";
539			reg = <0x01c15000 0x1000>;
540			interrupts = <86>;
541			clocks = <&ccu CLK_AHB_SS>, <&ccu CLK_SS>;
542			clock-names = "ahb", "mod";
543		};
544
545		hdmi: hdmi@1c16000 {
546			compatible = "allwinner,sun4i-a10-hdmi";
547			reg = <0x01c16000 0x1000>;
548			interrupts = <58>;
549			clocks = <&ccu CLK_AHB_HDMI0>, <&ccu CLK_HDMI>,
550				 <&ccu CLK_PLL_VIDEO0_2X>,
551				 <&ccu CLK_PLL_VIDEO1_2X>;
552			clock-names = "ahb", "mod", "pll-0", "pll-1";
553			dmas = <&dma SUN4I_DMA_NORMAL 16>,
554			       <&dma SUN4I_DMA_NORMAL 16>,
555			       <&dma SUN4I_DMA_DEDICATED 24>;
556			dma-names = "ddc-tx", "ddc-rx", "audio-tx";
557			status = "disabled";
558
559			ports {
560				#address-cells = <1>;
561				#size-cells = <0>;
562
563				hdmi_in: port@0 {
564					#address-cells = <1>;
565					#size-cells = <0>;
566					reg = <0>;
567
568					hdmi_in_tcon0: endpoint@0 {
569						reg = <0>;
570						remote-endpoint = <&tcon0_out_hdmi>;
571					};
572
573					hdmi_in_tcon1: endpoint@1 {
574						reg = <1>;
575						remote-endpoint = <&tcon1_out_hdmi>;
576					};
577				};
578
579				hdmi_out: port@1 {
580					reg = <1>;
581				};
582			};
583		};
584
585		spi2: spi@1c17000 {
586			compatible = "allwinner,sun4i-a10-spi";
587			reg = <0x01c17000 0x1000>;
588			interrupts = <12>;
589			clocks = <&ccu CLK_AHB_SPI2>, <&ccu CLK_SPI2>;
590			clock-names = "ahb", "mod";
591			dmas = <&dma SUN4I_DMA_DEDICATED 29>,
592			       <&dma SUN4I_DMA_DEDICATED 28>;
593			dma-names = "rx", "tx";
594			status = "disabled";
595			#address-cells = <1>;
596			#size-cells = <0>;
597		};
598
599		ahci: sata@1c18000 {
600			compatible = "allwinner,sun4i-a10-ahci";
601			reg = <0x01c18000 0x1000>;
602			interrupts = <56>;
603			clocks = <&ccu CLK_AHB_SATA>, <&ccu CLK_SATA>;
604			status = "disabled";
605		};
606
607		ehci1: usb@1c1c000 {
608			compatible = "allwinner,sun4i-a10-ehci", "generic-ehci";
609			reg = <0x01c1c000 0x100>;
610			interrupts = <40>;
611			clocks = <&ccu CLK_AHB_EHCI1>;
612			phys = <&usbphy 2>;
613			phy-names = "usb";
614			status = "disabled";
615		};
616
617		ohci1: usb@1c1c400 {
618			compatible = "allwinner,sun4i-a10-ohci", "generic-ohci";
619			reg = <0x01c1c400 0x100>;
620			interrupts = <65>;
621			clocks = <&ccu CLK_USB_OHCI1>, <&ccu CLK_AHB_OHCI1>;
622			phys = <&usbphy 2>;
623			phy-names = "usb";
624			status = "disabled";
625		};
626
627		spi3: spi@1c1f000 {
628			compatible = "allwinner,sun4i-a10-spi";
629			reg = <0x01c1f000 0x1000>;
630			interrupts = <50>;
631			clocks = <&ccu CLK_AHB_SPI3>, <&ccu CLK_SPI3>;
632			clock-names = "ahb", "mod";
633			dmas = <&dma SUN4I_DMA_DEDICATED 31>,
634			       <&dma SUN4I_DMA_DEDICATED 30>;
635			dma-names = "rx", "tx";
636			status = "disabled";
637			#address-cells = <1>;
638			#size-cells = <0>;
639		};
640
641		ccu: clock@1c20000 {
642			compatible = "allwinner,sun4i-a10-ccu";
643			reg = <0x01c20000 0x400>;
644			clocks = <&osc24M>, <&osc32k>;
645			clock-names = "hosc", "losc";
646			#clock-cells = <1>;
647			#reset-cells = <1>;
648		};
649
650		intc: interrupt-controller@1c20400 {
651			compatible = "allwinner,sun4i-a10-ic";
652			reg = <0x01c20400 0x400>;
653			interrupt-controller;
654			#interrupt-cells = <1>;
655		};
656
657		pio: pinctrl@1c20800 {
658			compatible = "allwinner,sun4i-a10-pinctrl";
659			reg = <0x01c20800 0x400>;
660			interrupts = <28>;
661			clocks = <&ccu CLK_APB0_PIO>, <&osc24M>, <&osc32k>;
662			clock-names = "apb", "hosc", "losc";
663			gpio-controller;
664			interrupt-controller;
665			#interrupt-cells = <3>;
666			#gpio-cells = <3>;
667
668			can0_ph_pins: can0-ph-pins {
669				pins = "PH20", "PH21";
670				function = "can";
671			};
672
673			emac_pins: emac0-pins {
674				pins = "PA0", "PA1", "PA2",
675				       "PA3", "PA4", "PA5", "PA6",
676				       "PA7", "PA8", "PA9", "PA10",
677				       "PA11", "PA12", "PA13", "PA14",
678				       "PA15", "PA16";
679				function = "emac";
680			};
681
682			i2c0_pins: i2c0-pins {
683				pins = "PB0", "PB1";
684				function = "i2c0";
685			};
686
687			i2c1_pins: i2c1-pins {
688				pins = "PB18", "PB19";
689				function = "i2c1";
690			};
691
692			i2c2_pins: i2c2-pins {
693				pins = "PB20", "PB21";
694				function = "i2c2";
695			};
696
697			ir0_rx_pins: ir0-rx-pin {
698				pins = "PB4";
699				function = "ir0";
700			};
701
702			ir0_tx_pins: ir0-tx-pin {
703				pins = "PB3";
704				function = "ir0";
705			};
706
707			ir1_rx_pins: ir1-rx-pin {
708				pins = "PB23";
709				function = "ir1";
710			};
711
712			ir1_tx_pins: ir1-tx-pin {
713				pins = "PB22";
714				function = "ir1";
715			};
716
717			mmc0_pins: mmc0-pins {
718				pins = "PF0", "PF1", "PF2",
719				       "PF3", "PF4", "PF5";
720				function = "mmc0";
721				drive-strength = <30>;
722				bias-pull-up;
723			};
724
725			ps2_ch0_pins: ps2-ch0-pins {
726				pins = "PI20", "PI21";
727				function = "ps2";
728			};
729
730			ps2_ch1_ph_pins: ps2-ch1-ph-pins {
731				pins = "PH12", "PH13";
732				function = "ps2";
733			};
734
735			pwm0_pin: pwm0-pin {
736				pins = "PB2";
737				function = "pwm";
738			};
739
740			pwm1_pin: pwm1-pin {
741				pins = "PI3";
742				function = "pwm";
743			};
744
745			spdif_tx_pin: spdif-tx-pin {
746				pins = "PB13";
747				function = "spdif";
748				bias-pull-up;
749			};
750
751			spi0_pi_pins: spi0-pi-pins {
752				pins = "PI11", "PI12", "PI13";
753				function = "spi0";
754			};
755
756			spi0_cs0_pi_pin: spi0-cs0-pi-pin {
757				pins = "PI10";
758				function = "spi0";
759			};
760
761			spi1_pins: spi1-pins {
762				pins = "PI17", "PI18", "PI19";
763				function = "spi1";
764			};
765
766			spi1_cs0_pin: spi1-cs0-pin {
767				pins = "PI16";
768				function = "spi1";
769			};
770
771			spi2_pb_pins: spi2-pb-pins {
772				pins = "PB15", "PB16", "PB17";
773				function = "spi2";
774			};
775
776			spi2_pc_pins: spi2-pc-pins {
777				pins = "PC20", "PC21", "PC22";
778				function = "spi2";
779			};
780
781			spi2_cs0_pb_pin: spi2-cs0-pb-pin {
782				pins = "PB14";
783				function = "spi2";
784			};
785
786			spi2_cs0_pc_pins: spi2-cs0-pc-pin {
787				pins = "PC19";
788				function = "spi2";
789			};
790
791			uart0_pb_pins: uart0-pb-pins {
792				pins = "PB22", "PB23";
793				function = "uart0";
794			};
795
796			uart0_pf_pins: uart0-pf-pins {
797				pins = "PF2", "PF4";
798				function = "uart0";
799			};
800
801			uart1_pins: uart1-pins {
802				pins = "PA10", "PA11";
803				function = "uart1";
804			};
805		};
806
807		timer@1c20c00 {
808			compatible = "allwinner,sun4i-a10-timer";
809			reg = <0x01c20c00 0x90>;
810			interrupts = <22>,
811				     <23>,
812				     <24>,
813				     <25>,
814				     <67>,
815				     <68>;
816			clocks = <&osc24M>;
817		};
818
819		wdt: watchdog@1c20c90 {
820			compatible = "allwinner,sun4i-a10-wdt";
821			reg = <0x01c20c90 0x10>;
822			interrupts = <24>;
823			clocks = <&osc24M>;
824		};
825
826		rtc: rtc@1c20d00 {
827			compatible = "allwinner,sun4i-a10-rtc";
828			reg = <0x01c20d00 0x20>;
829			interrupts = <24>;
830		};
831
832		pwm: pwm@1c20e00 {
833			compatible = "allwinner,sun4i-a10-pwm";
834			reg = <0x01c20e00 0xc>;
835			clocks = <&osc24M>;
836			#pwm-cells = <3>;
837			status = "disabled";
838		};
839
840		spdif: spdif@1c21000 {
841			#sound-dai-cells = <0>;
842			compatible = "allwinner,sun4i-a10-spdif";
843			reg = <0x01c21000 0x400>;
844			interrupts = <13>;
845			clocks = <&ccu CLK_APB0_SPDIF>, <&ccu CLK_SPDIF>;
846			clock-names = "apb", "spdif";
847			dmas = <&dma SUN4I_DMA_NORMAL 2>,
848			       <&dma SUN4I_DMA_NORMAL 2>;
849			dma-names = "rx", "tx";
850			status = "disabled";
851		};
852
853		ir0: ir@1c21800 {
854			compatible = "allwinner,sun4i-a10-ir";
855			clocks = <&ccu CLK_APB0_IR0>, <&ccu CLK_IR0>;
856			clock-names = "apb", "ir";
857			interrupts = <5>;
858			reg = <0x01c21800 0x40>;
859			status = "disabled";
860		};
861
862		ir1: ir@1c21c00 {
863			compatible = "allwinner,sun4i-a10-ir";
864			clocks = <&ccu CLK_APB0_IR1>, <&ccu CLK_IR1>;
865			clock-names = "apb", "ir";
866			interrupts = <6>;
867			reg = <0x01c21c00 0x40>;
868			status = "disabled";
869		};
870
871		i2s0: i2s@1c22400 {
872			#sound-dai-cells = <0>;
873			compatible = "allwinner,sun4i-a10-i2s";
874			reg = <0x01c22400 0x400>;
875			interrupts = <16>;
876			clocks = <&ccu CLK_APB0_I2S0>, <&ccu CLK_I2S0>;
877			clock-names = "apb", "mod";
878			dmas = <&dma SUN4I_DMA_NORMAL 3>,
879			       <&dma SUN4I_DMA_NORMAL 3>;
880			dma-names = "rx", "tx";
881			status = "disabled";
882		};
883
884		lradc: lradc@1c22800 {
885			compatible = "allwinner,sun4i-a10-lradc-keys";
886			reg = <0x01c22800 0x100>;
887			interrupts = <31>;
888			status = "disabled";
889		};
890
891		codec: codec@1c22c00 {
892			#sound-dai-cells = <0>;
893			compatible = "allwinner,sun4i-a10-codec";
894			reg = <0x01c22c00 0x40>;
895			interrupts = <30>;
896			clocks = <&ccu CLK_APB0_CODEC>, <&ccu CLK_CODEC>;
897			clock-names = "apb", "codec";
898			dmas = <&dma SUN4I_DMA_NORMAL 19>,
899			       <&dma SUN4I_DMA_NORMAL 19>;
900			dma-names = "rx", "tx";
901			status = "disabled";
902		};
903
904		sid: eeprom@1c23800 {
905			compatible = "allwinner,sun4i-a10-sid";
906			reg = <0x01c23800 0x10>;
907		};
908
909		rtp: rtp@1c25000 {
910			compatible = "allwinner,sun4i-a10-ts";
911			reg = <0x01c25000 0x100>;
912			interrupts = <29>;
913			#thermal-sensor-cells = <0>;
914		};
915
916		uart0: serial@1c28000 {
917			compatible = "snps,dw-apb-uart";
918			reg = <0x01c28000 0x400>;
919			interrupts = <1>;
920			reg-shift = <2>;
921			reg-io-width = <4>;
922			clocks = <&ccu CLK_APB1_UART0>;
923			status = "disabled";
924		};
925
926		uart1: serial@1c28400 {
927			compatible = "snps,dw-apb-uart";
928			reg = <0x01c28400 0x400>;
929			interrupts = <2>;
930			reg-shift = <2>;
931			reg-io-width = <4>;
932			clocks = <&ccu CLK_APB1_UART1>;
933			status = "disabled";
934		};
935
936		uart2: serial@1c28800 {
937			compatible = "snps,dw-apb-uart";
938			reg = <0x01c28800 0x400>;
939			interrupts = <3>;
940			reg-shift = <2>;
941			reg-io-width = <4>;
942			clocks = <&ccu CLK_APB1_UART2>;
943			status = "disabled";
944		};
945
946		uart3: serial@1c28c00 {
947			compatible = "snps,dw-apb-uart";
948			reg = <0x01c28c00 0x400>;
949			interrupts = <4>;
950			reg-shift = <2>;
951			reg-io-width = <4>;
952			clocks = <&ccu CLK_APB1_UART3>;
953			status = "disabled";
954		};
955
956		uart4: serial@1c29000 {
957			compatible = "snps,dw-apb-uart";
958			reg = <0x01c29000 0x400>;
959			interrupts = <17>;
960			reg-shift = <2>;
961			reg-io-width = <4>;
962			clocks = <&ccu CLK_APB1_UART4>;
963			status = "disabled";
964		};
965
966		uart5: serial@1c29400 {
967			compatible = "snps,dw-apb-uart";
968			reg = <0x01c29400 0x400>;
969			interrupts = <18>;
970			reg-shift = <2>;
971			reg-io-width = <4>;
972			clocks = <&ccu CLK_APB1_UART5>;
973			status = "disabled";
974		};
975
976		uart6: serial@1c29800 {
977			compatible = "snps,dw-apb-uart";
978			reg = <0x01c29800 0x400>;
979			interrupts = <19>;
980			reg-shift = <2>;
981			reg-io-width = <4>;
982			clocks = <&ccu CLK_APB1_UART6>;
983			status = "disabled";
984		};
985
986		uart7: serial@1c29c00 {
987			compatible = "snps,dw-apb-uart";
988			reg = <0x01c29c00 0x400>;
989			interrupts = <20>;
990			reg-shift = <2>;
991			reg-io-width = <4>;
992			clocks = <&ccu CLK_APB1_UART7>;
993			status = "disabled";
994		};
995
996		ps20: ps2@1c2a000 {
997			compatible = "allwinner,sun4i-a10-ps2";
998			reg = <0x01c2a000 0x400>;
999			interrupts = <62>;
1000			clocks = <&ccu CLK_APB1_PS20>;
1001			status = "disabled";
1002		};
1003
1004		ps21: ps2@1c2a400 {
1005			compatible = "allwinner,sun4i-a10-ps2";
1006			reg = <0x01c2a400 0x400>;
1007			interrupts = <63>;
1008			clocks = <&ccu CLK_APB1_PS21>;
1009			status = "disabled";
1010		};
1011
1012		i2c0: i2c@1c2ac00 {
1013			compatible = "allwinner,sun4i-a10-i2c";
1014			reg = <0x01c2ac00 0x400>;
1015			interrupts = <7>;
1016			clocks = <&ccu CLK_APB1_I2C0>;
1017			pinctrl-names = "default";
1018			pinctrl-0 = <&i2c0_pins>;
1019			status = "disabled";
1020			#address-cells = <1>;
1021			#size-cells = <0>;
1022		};
1023
1024		i2c1: i2c@1c2b000 {
1025			compatible = "allwinner,sun4i-a10-i2c";
1026			reg = <0x01c2b000 0x400>;
1027			interrupts = <8>;
1028			clocks = <&ccu CLK_APB1_I2C1>;
1029			pinctrl-names = "default";
1030			pinctrl-0 = <&i2c1_pins>;
1031			status = "disabled";
1032			#address-cells = <1>;
1033			#size-cells = <0>;
1034		};
1035
1036		i2c2: i2c@1c2b400 {
1037			compatible = "allwinner,sun4i-a10-i2c";
1038			reg = <0x01c2b400 0x400>;
1039			interrupts = <9>;
1040			clocks = <&ccu CLK_APB1_I2C2>;
1041			pinctrl-names = "default";
1042			pinctrl-0 = <&i2c2_pins>;
1043			status = "disabled";
1044			#address-cells = <1>;
1045			#size-cells = <0>;
1046		};
1047
1048		can0: can@1c2bc00 {
1049			compatible = "allwinner,sun4i-a10-can";
1050			reg = <0x01c2bc00 0x400>;
1051			interrupts = <26>;
1052			clocks = <&ccu CLK_APB1_CAN>;
1053			status = "disabled";
1054		};
1055
1056		mali: gpu@1c40000 {
1057			compatible = "allwinner,sun4i-a10-mali", "arm,mali-400";
1058			reg = <0x01c40000 0x10000>;
1059			interrupts = <69>,
1060				     <70>,
1061				     <71>,
1062				     <72>,
1063				     <73>;
1064			interrupt-names = "gp",
1065					  "gpmmu",
1066					  "pp0",
1067					  "ppmmu0",
1068					  "pmu";
1069			clocks = <&ccu CLK_AHB_GPU>, <&ccu CLK_GPU>;
1070			clock-names = "bus", "core";
1071			resets = <&ccu RST_GPU>;
1072
1073			assigned-clocks = <&ccu CLK_GPU>;
1074			assigned-clock-rates = <384000000>;
1075		};
1076
1077		fe0: display-frontend@1e00000 {
1078			compatible = "allwinner,sun4i-a10-display-frontend";
1079			reg = <0x01e00000 0x20000>;
1080			interrupts = <47>;
1081			clocks = <&ccu CLK_AHB_DE_FE0>, <&ccu CLK_DE_FE0>,
1082				 <&ccu CLK_DRAM_DE_FE0>;
1083			clock-names = "ahb", "mod",
1084				      "ram";
1085			resets = <&ccu RST_DE_FE0>;
1086
1087			ports {
1088				#address-cells = <1>;
1089				#size-cells = <0>;
1090
1091				fe0_out: port@1 {
1092					#address-cells = <1>;
1093					#size-cells = <0>;
1094					reg = <1>;
1095
1096					fe0_out_be0: endpoint@0 {
1097						reg = <0>;
1098						remote-endpoint = <&be0_in_fe0>;
1099					};
1100
1101					fe0_out_be1: endpoint@1 {
1102						reg = <1>;
1103						remote-endpoint = <&be1_in_fe0>;
1104					};
1105				};
1106			};
1107		};
1108
1109		fe1: display-frontend@1e20000 {
1110			compatible = "allwinner,sun4i-a10-display-frontend";
1111			reg = <0x01e20000 0x20000>;
1112			interrupts = <48>;
1113			clocks = <&ccu CLK_AHB_DE_FE1>, <&ccu CLK_DE_FE1>,
1114				 <&ccu CLK_DRAM_DE_FE1>;
1115			clock-names = "ahb", "mod",
1116				      "ram";
1117			resets = <&ccu RST_DE_FE1>;
1118
1119			ports {
1120				#address-cells = <1>;
1121				#size-cells = <0>;
1122
1123				fe1_out: port@1 {
1124					#address-cells = <1>;
1125					#size-cells = <0>;
1126					reg = <1>;
1127
1128					fe1_out_be0: endpoint@0 {
1129						reg = <0>;
1130						remote-endpoint = <&be0_in_fe1>;
1131					};
1132
1133					fe1_out_be1: endpoint@1 {
1134						reg = <1>;
1135						remote-endpoint = <&be1_in_fe1>;
1136					};
1137				};
1138			};
1139		};
1140
1141		be1: display-backend@1e40000 {
1142			compatible = "allwinner,sun4i-a10-display-backend";
1143			reg = <0x01e40000 0x10000>;
1144			interrupts = <48>;
1145			clocks = <&ccu CLK_AHB_DE_BE1>, <&ccu CLK_DE_BE1>,
1146				 <&ccu CLK_DRAM_DE_BE1>;
1147			clock-names = "ahb", "mod",
1148				      "ram";
1149			resets = <&ccu RST_DE_BE1>;
1150
1151			ports {
1152				#address-cells = <1>;
1153				#size-cells = <0>;
1154
1155				be1_in: port@0 {
1156					#address-cells = <1>;
1157					#size-cells = <0>;
1158					reg = <0>;
1159
1160					be1_in_fe0: endpoint@0 {
1161						reg = <0>;
1162						remote-endpoint = <&fe0_out_be1>;
1163					};
1164
1165					be1_in_fe1: endpoint@1 {
1166						reg = <1>;
1167						remote-endpoint = <&fe1_out_be1>;
1168					};
1169				};
1170
1171				be1_out: port@1 {
1172					#address-cells = <1>;
1173					#size-cells = <0>;
1174					reg = <1>;
1175
1176					be1_out_tcon0: endpoint@0 {
1177						reg = <0>;
1178						remote-endpoint = <&tcon0_in_be1>;
1179					};
1180
1181					be1_out_tcon1: endpoint@1 {
1182						reg = <1>;
1183						remote-endpoint = <&tcon1_in_be1>;
1184					};
1185				};
1186			};
1187		};
1188
1189		be0: display-backend@1e60000 {
1190			compatible = "allwinner,sun4i-a10-display-backend";
1191			reg = <0x01e60000 0x10000>;
1192			interrupts = <47>;
1193			clocks = <&ccu CLK_AHB_DE_BE0>, <&ccu CLK_DE_BE0>,
1194				 <&ccu CLK_DRAM_DE_BE0>;
1195			clock-names = "ahb", "mod",
1196				      "ram";
1197			resets = <&ccu RST_DE_BE0>;
1198
1199			ports {
1200				#address-cells = <1>;
1201				#size-cells = <0>;
1202
1203				be0_in: port@0 {
1204					#address-cells = <1>;
1205					#size-cells = <0>;
1206					reg = <0>;
1207
1208					be0_in_fe0: endpoint@0 {
1209						reg = <0>;
1210						remote-endpoint = <&fe0_out_be0>;
1211					};
1212
1213					be0_in_fe1: endpoint@1 {
1214						reg = <1>;
1215						remote-endpoint = <&fe1_out_be0>;
1216					};
1217				};
1218
1219				be0_out: port@1 {
1220					#address-cells = <1>;
1221					#size-cells = <0>;
1222					reg = <1>;
1223
1224					be0_out_tcon0: endpoint@0 {
1225						reg = <0>;
1226						remote-endpoint = <&tcon0_in_be0>;
1227					};
1228
1229					be0_out_tcon1: endpoint@1 {
1230						reg = <1>;
1231						remote-endpoint = <&tcon1_in_be0>;
1232					};
1233				};
1234			};
1235		};
1236	};
1237};
1238