1/*
2 * Copyright 2013 Maxime Ripard
3 *
4 * Maxime Ripard <maxime.ripard@free-electrons.com>
5 *
6 * This file is dual-licensed: you can use it either under the terms
7 * of the GPL or the X11 license, at your option. Note that this dual
8 * licensing only applies to this file, and not this project as a
9 * whole.
10 *
11 *  a) This file is free software; you can redistribute it and/or
12 *     modify it under the terms of the GNU General Public License as
13 *     published by the Free Software Foundation; either version 2 of the
14 *     License, or (at your option) any later version.
15 *
16 *     This file is distributed in the hope that it will be useful,
17 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
18 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 *     GNU General Public License for more details.
20 *
21 * Or, alternatively,
22 *
23 *  b) Permission is hereby granted, free of charge, to any person
24 *     obtaining a copy of this software and associated documentation
25 *     files (the "Software"), to deal in the Software without
26 *     restriction, including without limitation the rights to use,
27 *     copy, modify, merge, publish, distribute, sublicense, and/or
28 *     sell copies of the Software, and to permit persons to whom the
29 *     Software is furnished to do so, subject to the following
30 *     conditions:
31 *
32 *     The above copyright notice and this permission notice shall be
33 *     included in all copies or substantial portions of the Software.
34 *
35 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
36 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
37 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
38 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
39 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
40 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
41 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
42 *     OTHER DEALINGS IN THE SOFTWARE.
43 */
44
45/dts-v1/;
46#include "sun7i-a20.dtsi"
47#include "sunxi-common-regulators.dtsi"
48
49#include <dt-bindings/gpio/gpio.h>
50#include <dt-bindings/input/input.h>
51#include <dt-bindings/interrupt-controller/irq.h>
52
53/ {
54	model = "Olimex A20-Olinuxino Micro";
55	compatible = "olimex,a20-olinuxino-micro", "allwinner,sun7i-a20";
56
57	aliases {
58		serial0 = &uart0;
59		serial1 = &uart6;
60		serial2 = &uart7;
61		spi0 = &spi1;
62		spi1 = &spi2;
63	};
64
65	chosen {
66		stdout-path = "serial0:115200n8";
67	};
68
69	hdmi-connector {
70		compatible = "hdmi-connector";
71		type = "a";
72
73		port {
74			hdmi_con_in: endpoint {
75				remote-endpoint = <&hdmi_out_con>;
76			};
77		};
78	};
79
80	leds {
81		compatible = "gpio-leds";
82		pinctrl-names = "default";
83		pinctrl-0 = <&led_pins_olinuxino>;
84
85		green {
86			label = "a20-olinuxino-micro:green:usr";
87			gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>;
88			default-state = "on";
89		};
90	};
91};
92
93&ahci {
94	target-supply = <&reg_ahci_5v>;
95	status = "okay";
96};
97
98&codec {
99	status = "okay";
100};
101
102&cpu0 {
103	cpu-supply = <&reg_dcdc2>;
104};
105
106&de {
107	status = "okay";
108};
109
110&ehci0 {
111	status = "okay";
112};
113
114&ehci1 {
115	status = "okay";
116};
117
118&gmac {
119	pinctrl-names = "default";
120	pinctrl-0 = <&gmac_pins_mii_a>, <&gmac_txerr>;
121	phy = <&phy1>;
122	phy-mode = "mii";
123	status = "okay";
124
125	phy1: ethernet-phy@1 {
126		reg = <1>;
127	};
128};
129
130&hdmi {
131	status = "okay";
132};
133
134&hdmi_out {
135	hdmi_out_con: endpoint {
136		remote-endpoint = <&hdmi_con_in>;
137	};
138};
139
140&i2c0 {
141	pinctrl-names = "default";
142	pinctrl-0 = <&i2c0_pins_a>;
143	status = "okay";
144
145	axp209: pmic@34 {
146		reg = <0x34>;
147		interrupt-parent = <&nmi_intc>;
148		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
149	};
150};
151
152&i2c1 {
153	pinctrl-names = "default";
154	pinctrl-0 = <&i2c1_pins_a>;
155	status = "okay";
156
157	eeprom: eeprom@50 {
158		compatible = "atmel,24c16";
159		reg = <0x50>;
160		pagesize = <16>;
161	};
162};
163
164&i2c2 {
165	pinctrl-names = "default";
166	pinctrl-0 = <&i2c2_pins_a>;
167	status = "okay";
168};
169
170&lradc {
171	vref-supply = <&reg_vcc3v0>;
172	status = "okay";
173
174	button@191 {
175		label = "Volume Up";
176		linux,code = <KEY_VOLUMEUP>;
177		channel = <0>;
178		voltage = <191274>;
179	};
180
181	button@392 {
182		label = "Volume Down";
183		linux,code = <KEY_VOLUMEDOWN>;
184		channel = <0>;
185		voltage = <392644>;
186	};
187
188	button@601 {
189		label = "Menu";
190		linux,code = <KEY_MENU>;
191		channel = <0>;
192		voltage = <601151>;
193	};
194
195	button@795 {
196		label = "Search";
197		linux,code = <KEY_SEARCH>;
198		channel = <0>;
199		voltage = <795090>;
200	};
201
202	button@987 {
203		label = "Home";
204		linux,code = <KEY_HOMEPAGE>;
205		channel = <0>;
206		voltage = <987387>;
207	};
208
209	button@1184 {
210		label = "Esc";
211		linux,code = <KEY_ESC>;
212		channel = <0>;
213		voltage = <1184678>;
214	};
215
216	button@1398 {
217		label = "Enter";
218		linux,code = <KEY_ENTER>;
219		channel = <0>;
220		voltage = <1398804>;
221	};
222};
223
224&mmc0 {
225	pinctrl-names = "default";
226	pinctrl-0 = <&mmc0_pins_a>;
227	vmmc-supply = <&reg_vcc3v3>;
228	bus-width = <4>;
229	cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
230	status = "okay";
231};
232
233&mmc3 {
234	pinctrl-names = "default";
235	pinctrl-0 = <&mmc3_pins_a>, <&mmc3_cd_pin_olinuxinom>;
236	vmmc-supply = <&reg_vcc3v3>;
237	bus-width = <4>;
238	cd-gpios = <&pio 7 11 GPIO_ACTIVE_LOW>; /* PH11 */
239	status = "okay";
240};
241
242&ohci0 {
243	status = "okay";
244};
245
246&ohci1 {
247	status = "okay";
248};
249
250&otg_sram {
251	status = "okay";
252};
253
254&pio {
255	gmac_txerr: gmac_txerr@0 {
256		pins = "PA17";
257		function = "gmac";
258	};
259
260	mmc3_cd_pin_olinuxinom: mmc3_cd_pin@0 {
261		pins = "PH11";
262		function = "gpio_in";
263		bias-pull-up;
264	};
265
266	led_pins_olinuxino: led_pins@0 {
267		pins = "PH2";
268		function = "gpio_out";
269		drive-strength = <20>;
270	};
271
272	usb0_id_detect_pin: usb0_id_detect_pin@0 {
273		pins = "PH4";
274		function = "gpio_in";
275		bias-pull-up;
276	};
277
278	usb0_vbus_detect_pin: usb0_vbus_detect_pin@0 {
279		pins = "PH5";
280		function = "gpio_in";
281		bias-pull-down;
282	};
283};
284
285#include "axp209.dtsi"
286
287&ac_power_supply {
288	status = "okay";
289};
290
291&battery_power_supply {
292	status = "okay";
293};
294
295&reg_dcdc2 {
296	regulator-always-on;
297	regulator-min-microvolt = <1000000>;
298	regulator-max-microvolt = <1400000>;
299	regulator-name = "vdd-cpu";
300};
301
302&reg_dcdc3 {
303	regulator-always-on;
304	regulator-min-microvolt = <1000000>;
305	regulator-max-microvolt = <1400000>;
306	regulator-name = "vdd-int-dll";
307};
308
309&reg_ldo2 {
310	regulator-always-on;
311	regulator-min-microvolt = <3000000>;
312	regulator-max-microvolt = <3000000>;
313	regulator-name = "avcc";
314};
315
316&reg_ahci_5v {
317	status = "okay";
318};
319
320&reg_usb0_vbus {
321	status = "okay";
322};
323
324&reg_usb1_vbus {
325	status = "okay";
326};
327
328&reg_usb2_vbus {
329	status = "okay";
330};
331
332&spi1 {
333	pinctrl-names = "default";
334	pinctrl-0 = <&spi1_pins_a>,
335		    <&spi1_cs0_pins_a>;
336	status = "okay";
337};
338
339&spi2 {
340	pinctrl-names = "default";
341	pinctrl-0 = <&spi2_pins_a>,
342		    <&spi2_cs0_pins_a>;
343	status = "okay";
344};
345
346&uart0 {
347	pinctrl-names = "default";
348	pinctrl-0 = <&uart0_pins_a>;
349	status = "okay";
350};
351
352&uart6 {
353	pinctrl-names = "default";
354	pinctrl-0 = <&uart6_pins_a>;
355	status = "okay";
356};
357
358&uart7 {
359	pinctrl-names = "default";
360	pinctrl-0 = <&uart7_pins_a>;
361	status = "okay";
362};
363
364&usb_otg {
365	dr_mode = "otg";
366	status = "okay";
367};
368
369&usb_power_supply {
370	status = "okay";
371};
372
373&usbphy {
374	pinctrl-names = "default";
375	pinctrl-0 = <&usb0_id_detect_pin>, <&usb0_vbus_detect_pin>;
376	usb0_id_det-gpio = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
377	usb0_vbus_det-gpio = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */
378	usb0_vbus-supply = <&reg_usb0_vbus>;
379	usb1_vbus-supply = <&reg_usb1_vbus>;
380	usb2_vbus-supply = <&reg_usb2_vbus>;
381	status = "okay";
382};
383