1/*
2 * Copyright 2014 Chen-Yu Tsai
3 *
4 * Chen-Yu Tsai <wens@csie.org>
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 "sun9i-a80.dtsi"
47
48#include <dt-bindings/gpio/gpio.h>
49#include <dt-bindings/pinctrl/sun4i-a10.h>
50
51/ {
52	model = "Merrii A80 Optimus Board";
53	compatible = "merrii,a80-optimus", "allwinner,sun9i-a80";
54
55	aliases {
56		serial0 = &uart0;
57		serial1 = &uart4;
58	};
59
60	chosen {
61		stdout-path = "serial0:115200n8";
62	};
63
64	leds {
65		compatible = "gpio-leds";
66		pinctrl-names = "default";
67		pinctrl-0 = <&led_pins_optimus>, <&led_r_pins_optimus>;
68
69		/* The LED names match those found on the board */
70
71		led2 {
72			label = "optimus:led2:usr";
73			gpios = <&pio 7 1 GPIO_ACTIVE_HIGH>;
74		};
75
76		led3 {
77			label = "optimus:led3:usr";
78			gpios = <&r_pio 1 15 GPIO_ACTIVE_HIGH>; /* PM15 */
79		};
80
81		led4 {
82			label = "optimus:led4:usr";
83			gpios = <&pio 7 0 GPIO_ACTIVE_HIGH>;
84		};
85	};
86
87	reg_usb1_vbus: usb1-vbus {
88		compatible = "regulator-fixed";
89		pinctrl-names = "default";
90		pinctrl-0 = <&usb1_vbus_pin_optimus>;
91		regulator-name = "usb1-vbus";
92		regulator-min-microvolt = <5000000>;
93		regulator-max-microvolt = <5000000>;
94		enable-active-high;
95		gpio = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
96	};
97
98	reg_usb3_vbus: usb3-vbus {
99		compatible = "regulator-fixed";
100		pinctrl-names = "default";
101		pinctrl-0 = <&usb3_vbus_pin_optimus>;
102		regulator-name = "usb3-vbus";
103		regulator-min-microvolt = <5000000>;
104		regulator-max-microvolt = <5000000>;
105		enable-active-high;
106		gpio = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */
107	};
108};
109
110&ehci0 {
111	status = "okay";
112};
113
114&ehci1 {
115	status = "okay";
116};
117
118&ehci2 {
119	status = "okay";
120};
121
122&mmc0 {
123	pinctrl-names = "default";
124	pinctrl-0 = <&mmc0_pins>, <&mmc0_cd_pin_optimus>;
125	vmmc-supply = <&reg_dcdc1>;
126	bus-width = <4>;
127	cd-gpios = <&pio 7 18 GPIO_ACTIVE_HIGH>; /* PH8 */
128	cd-inverted;
129	status = "okay";
130};
131
132&mmc2 {
133	pinctrl-names = "default";
134	pinctrl-0 = <&mmc2_8bit_pins>;
135	vmmc-supply = <&reg_dcdc1>;
136	bus-width = <8>;
137	non-removable;
138	cap-mmc-hw-reset;
139	status = "okay";
140};
141
142&mmc2_8bit_pins {
143	/* Increase drive strength for DDR modes */
144	allwinner,drive = <SUN4I_PINCTRL_40_MA>;
145};
146
147&ohci0 {
148	status = "okay";
149};
150
151&ohci2 {
152	status = "okay";
153};
154
155&pio {
156	led_pins_optimus: led-pins@0 {
157		allwinner,pins = "PH0", "PH1";
158		allwinner,function = "gpio_out";
159		allwinner,drive = <SUN4I_PINCTRL_10_MA>;
160		allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
161	};
162
163	mmc0_cd_pin_optimus: mmc0_cd_pin@0 {
164		allwinner,pins = "PH18";
165		allwinner,function = "gpio_in";
166		allwinner,drive = <SUN4I_PINCTRL_10_MA>;
167		allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
168	};
169
170	usb1_vbus_pin_optimus: usb1_vbus_pin@1 {
171		allwinner,pins = "PH4";
172		allwinner,function = "gpio_out";
173		allwinner,drive = <SUN4I_PINCTRL_10_MA>;
174		allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
175	};
176
177	usb3_vbus_pin_optimus: usb3_vbus_pin@1 {
178		allwinner,pins = "PH5";
179		allwinner,function = "gpio_out";
180		allwinner,drive = <SUN4I_PINCTRL_10_MA>;
181		allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
182	};
183};
184
185&r_ir {
186	status = "okay";
187};
188
189&r_pio {
190	led_r_pins_optimus: led-pins@1 {
191		allwinner,pins = "PM15";
192		allwinner,function = "gpio_out";
193		allwinner,drive = <SUN4I_PINCTRL_10_MA>;
194		allwinner,pull = <SUN4I_PINCTRL_NO_PULL>;
195	};
196};
197
198&r_rsb {
199	status = "okay";
200
201	axp809: pmic@3a3 {
202		reg = <0x3a3>;
203		interrupt-parent = <&nmi_intc>;
204		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
205
206		regulators {
207			reg_aldo1: aldo1 {
208				/*
209				 * TODO: This should be handled by the
210				 * USB PHY driver.
211				 */
212				regulator-always-on;
213				regulator-min-microvolt = <3000000>;
214				regulator-max-microvolt = <3000000>;
215				regulator-name = "vcc33-usbh";
216			};
217
218			reg_aldo2: aldo2 {
219				regulator-min-microvolt = <1800000>;
220				regulator-max-microvolt = <1800000>;
221				regulator-name = "vcc-pb-io-cam";
222			};
223
224			aldo3 {
225				/* unused */
226			};
227
228			reg_dc5ldo: dc5ldo {
229				regulator-always-on;
230				regulator-min-microvolt = <800000>;
231				regulator-max-microvolt = <1100000>;
232				regulator-name = "vdd-cpus-09-usbh";
233			};
234
235			reg_dcdc1: dcdc1 {
236				regulator-always-on;
237				regulator-min-microvolt = <3000000>;
238				regulator-max-microvolt = <3000000>;
239				regulator-name = "vcc-3v";
240			};
241
242			reg_dcdc2: dcdc2 {
243				regulator-min-microvolt = <800000>;
244				regulator-max-microvolt = <1100000>;
245				regulator-name = "vdd-gpu";
246			};
247
248			reg_dcdc3: dcdc3 {
249				regulator-always-on;
250				regulator-min-microvolt = <800000>;
251				regulator-max-microvolt = <1100000>;
252				regulator-name = "vdd-cpua";
253			};
254
255			reg_dcdc4: dcdc4 {
256				regulator-always-on;
257				regulator-min-microvolt = <800000>;
258				regulator-max-microvolt = <1100000>;
259				regulator-name = "vdd-sys-usb0-hdmi";
260			};
261
262			reg_dcdc5: dcdc5 {
263				regulator-always-on;
264				regulator-min-microvolt = <1425000>;
265				regulator-max-microvolt = <1575000>;
266				regulator-name = "vcc-dram";
267			};
268
269			reg_dldo1: dldo1 {
270				/*
271				 * The WiFi chip supports a wide range
272				 * (3.0 ~ 4.8V) of voltages, and so does
273				 * this regulator (3.0 ~ 4.2V), but
274				 * Allwinner SDK always sets it to 3.3V.
275				 */
276				regulator-min-microvolt = <3300000>;
277				regulator-max-microvolt = <3300000>;
278				regulator-name = "vcc-wifi";
279			};
280
281			reg_dldo2: dldo2 {
282				regulator-always-on;
283				regulator-min-microvolt = <3000000>;
284				regulator-max-microvolt = <3000000>;
285				regulator-name = "vcc-pl";
286			};
287
288			reg_eldo1: eldo1 {
289				regulator-min-microvolt = <1200000>;
290				regulator-max-microvolt = <1200000>;
291				regulator-name = "vcc-dvdd-cam";
292			};
293
294			reg_eldo2: eldo2 {
295				regulator-min-microvolt = <1800000>;
296				regulator-max-microvolt = <1800000>;
297				regulator-name = "vcc-pe";
298			};
299
300			reg_eldo3: eldo3 {
301				regulator-always-on;
302				regulator-min-microvolt = <3000000>;
303				regulator-max-microvolt = <3000000>;
304				regulator-name = "vcc-pm-codec-io1";
305			};
306
307			reg_ldo_io0: ldo_io0 {
308				regulator-always-on;
309				regulator-min-microvolt = <3000000>;
310				regulator-max-microvolt = <3000000>;
311				regulator-name = "vcc-pg";
312			};
313
314			reg_ldo_io1: ldo_io1 {
315				regulator-min-microvolt = <2500000>;
316				regulator-max-microvolt = <2500000>;
317				regulator-name = "vcc-pa-gmac-2v5";
318			};
319
320			reg_rtc_ldo: rtc_ldo {
321				regulator-name = "vcc-rtc-vdd1v8-io";
322			};
323		};
324	};
325};
326
327#include "axp809.dtsi"
328
329&uart0 {
330	pinctrl-names = "default";
331	pinctrl-0 = <&uart0_pins_a>;
332	status = "okay";
333};
334
335&usbphy1 {
336	phy-supply = <&reg_usb1_vbus>;
337	status = "okay";
338};
339
340&usbphy2 {
341	status = "okay";
342};
343
344&usbphy3 {
345	phy-supply = <&reg_usb3_vbus>;
346	status = "okay";
347};
348