1/*
2 * Copyright 2014 Hans de Goede <hdegoede@redhat.com>
3 *
4 * Hans de Goede <hdegoede@redhat.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/interrupt-controller/irq.h>
51
52/ {
53	model = "LeMaker Banana Pi";
54	compatible = "lemaker,bananapi", "allwinner,sun7i-a20";
55
56	aliases {
57		serial0 = &uart0;
58		serial1 = &uart3;
59		serial2 = &uart7;
60	};
61
62	chosen {
63		stdout-path = "serial0:115200n8";
64	};
65
66	hdmi-connector {
67		compatible = "hdmi-connector";
68		type = "a";
69
70		port {
71			hdmi_con_in: endpoint {
72				remote-endpoint = <&hdmi_out_con>;
73			};
74		};
75	};
76
77	leds {
78		compatible = "gpio-leds";
79
80		green {
81			label = "bananapi:green:usr";
82			gpios = <&pio 7 24 GPIO_ACTIVE_HIGH>;
83		};
84	};
85
86	reg_gmac_3v3: gmac-3v3 {
87		compatible = "regulator-fixed";
88		regulator-name = "gmac-3v3";
89		regulator-min-microvolt = <3300000>;
90		regulator-max-microvolt = <3300000>;
91		startup-delay-us = <100000>;
92		enable-active-high;
93		gpio = <&pio 7 23 GPIO_ACTIVE_HIGH>;
94	};
95};
96
97&ahci {
98	status = "okay";
99};
100
101&codec {
102	status = "okay";
103};
104
105&cpu0 {
106	cpu-supply = <&reg_dcdc2>;
107	operating-points = <
108		/* kHz	  uV */
109		960000	1400000
110		912000	1400000
111		864000	1350000
112		720000	1250000
113		528000	1150000
114		312000	1100000
115		144000	1050000
116		>;
117};
118
119&de {
120	status = "okay";
121};
122
123&ehci0 {
124	status = "okay";
125};
126
127&ehci1 {
128	status = "okay";
129};
130
131&gmac {
132	pinctrl-names = "default";
133	pinctrl-0 = <&gmac_rgmii_pins>;
134	phy = <&phy1>;
135	phy-mode = "rgmii";
136	phy-supply = <&reg_gmac_3v3>;
137	status = "okay";
138
139	phy1: ethernet-phy@1 {
140		reg = <1>;
141	};
142};
143
144&hdmi {
145	status = "okay";
146};
147
148&hdmi_out {
149	hdmi_out_con: endpoint {
150		remote-endpoint = <&hdmi_con_in>;
151	};
152};
153
154&i2c0 {
155	status = "okay";
156
157	axp209: pmic@34 {
158		reg = <0x34>;
159		interrupt-parent = <&nmi_intc>;
160		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
161	};
162};
163
164&i2c2 {
165	status = "okay";
166};
167
168&ir0 {
169	pinctrl-names = "default";
170	pinctrl-0 = <&ir0_rx_pin>;
171	status = "okay";
172};
173
174&mmc0 {
175	vmmc-supply = <&reg_vcc3v3>;
176	bus-width = <4>;
177	cd-gpios = <&pio 7 10 GPIO_ACTIVE_LOW>; /* PH10 */
178	status = "okay";
179};
180
181&ohci0 {
182	status = "okay";
183};
184
185&ohci1 {
186	status = "okay";
187};
188
189&otg_sram {
190	status = "okay";
191};
192
193&pio {
194	vcc-pa-supply = <&reg_vcc3v3>;
195	vcc-pc-supply = <&reg_vcc3v3>;
196	vcc-pe-supply = <&reg_vcc3v3>;
197	vcc-pf-supply = <&reg_vcc3v3>;
198	vcc-pg-supply = <&reg_vcc3v3>;
199	gpio-line-names =
200		/* PA */
201		"ERXD3", "ERXD2", "ERXD1", "ERXD0", "ETXD3",
202			"ETXD2", "ETXD1", "ETXD0",
203		"ERXCK", "ERXERR", "ERXDV", "EMDC", "EMDIO",
204			"ETXEN", "ETXCK", "ECRS",
205		"ECOL", "ETXERR", "", "", "", "", "", "",
206		"", "", "", "", "", "", "", "",
207		/* PB */
208		"PMU-SCK", "PMU-SDA", "", "", "", "", "", "",
209		"", "USB0-DRV", "", "", "", "", "", "",
210		"", "", "", "", "SCL", "SDA", "", "",
211		"", "", "", "", "", "", "", "",
212		/* PC */
213		"", "", "", "", "", "", "", "",
214		"", "", "", "", "", "", "", "",
215		"", "", "", "", "", "", "", "",
216		"", "", "", "", "", "", "", "",
217		/* PD */
218		"", "", "", "", "", "", "", "",
219		"", "", "", "", "", "", "", "",
220		"", "", "", "", "", "", "", "",
221		"", "", "", "", "", "", "", "",
222		/* PE */
223		"", "", "", "", "", "", "", "",
224		"", "", "", "", "", "", "", "",
225		"", "", "", "", "", "", "", "",
226		"", "", "", "", "", "", "", "",
227		/* PF */
228		"SD0-D1", "SD0-D0", "SD0-CLK", "SD0-CMD", "SD0-D3",
229			"SD0-D2", "", "",
230		"", "", "", "", "", "", "", "",
231		"", "", "", "", "", "", "", "",
232		"", "", "", "", "", "", "", "",
233		/* PG */
234		"", "", "", "", "", "", "", "",
235		"", "", "", "", "", "", "", "",
236		"", "", "", "", "", "", "", "",
237		"", "", "", "", "", "", "", "",
238		/* PH */
239		"TXD0", "RXD0", "IO-1", "PH3", "USB0-IDDET", "PH5", "", "",
240		"", "", "SD0-DET", "", "", "", "", "",
241		"", "", "", "", "IO-4", "IO-5", "", "EMAC-PWR-EN",
242		"LED1", "", "", "", "", "", "", "",
243		/* PI */
244		"", "", "", "IO-GCLK", "", "", "", "",
245		"", "", "SPI-CE0", "SPI-CLK", "SPI-MOSI",
246			"SPI-MISO", "SPI-CE1", "",
247		"IO-6", "IO-3", "IO-2", "IO-0", "", "", "", "",
248		"", "", "", "", "", "", "", "";
249
250	usb0_id_detect_pin: usb0-id-detect-pin {
251		pins = "PH4";
252		function = "gpio_in";
253		bias-pull-up;
254	};
255};
256
257#include "axp209.dtsi"
258
259&reg_dcdc2 {
260	regulator-always-on;
261	regulator-min-microvolt = <1000000>;
262	regulator-max-microvolt = <1400000>;
263	regulator-name = "vdd-cpu";
264};
265
266&reg_dcdc3 {
267	regulator-always-on;
268	regulator-min-microvolt = <1000000>;
269	regulator-max-microvolt = <1400000>;
270	regulator-name = "vdd-int-dll";
271};
272
273&reg_ldo1 {
274	regulator-name = "vdd-rtc";
275};
276
277&reg_ldo2 {
278	regulator-always-on;
279	regulator-min-microvolt = <3000000>;
280	regulator-max-microvolt = <3000000>;
281	regulator-name = "avcc";
282};
283
284&reg_usb0_vbus {
285	status = "okay";
286};
287
288&reg_usb1_vbus {
289	status = "okay";
290};
291
292&reg_usb2_vbus {
293	status = "okay";
294};
295
296&spi0 {
297	pinctrl-names = "default";
298	pinctrl-0 = <&spi0_pi_pins>,
299		    <&spi0_cs0_pi_pin>,
300		    <&spi0_cs1_pi_pin>;
301	status = "okay";
302};
303
304&uart0 {
305	pinctrl-names = "default";
306	pinctrl-0 = <&uart0_pb_pins>;
307	status = "okay";
308};
309
310&uart3 {
311	pinctrl-names = "default";
312	pinctrl-0 = <&uart3_ph_pins>;
313	status = "okay";
314};
315
316&uart7 {
317	pinctrl-names = "default";
318	pinctrl-0 = <&uart7_pi_pins>;
319	status = "okay";
320};
321
322&usb_otg {
323	dr_mode = "otg";
324	status = "okay";
325};
326
327&usb_power_supply {
328	status = "okay";
329};
330
331&usbphy {
332	pinctrl-names = "default";
333	pinctrl-0 = <&usb0_id_detect_pin>;
334	usb0_id_det-gpio = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
335	usb0_vbus_power-supply = <&usb_power_supply>;
336	usb0_vbus-supply = <&reg_usb0_vbus>;
337	usb1_vbus-supply = <&reg_usb1_vbus>;
338	usb2_vbus-supply = <&reg_usb2_vbus>;
339	status = "okay";
340};
341