1// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2// Copyright (c) 2016 ARM Ltd.
3
4/dts-v1/;
5
6#include "sun50i-a64.dtsi"
7#include "sun50i-a64-cpu-opp.dtsi"
8
9#include <dt-bindings/gpio/gpio.h>
10
11/ {
12	model = "BananaPi-M64";
13	compatible = "sinovoip,bananapi-m64", "allwinner,sun50i-a64";
14
15	aliases {
16		ethernet0 = &emac;
17		serial0 = &uart0;
18		serial1 = &uart1;
19	};
20
21	chosen {
22		stdout-path = "serial0:115200n8";
23	};
24
25	hdmi-connector {
26		compatible = "hdmi-connector";
27		type = "a";
28
29		port {
30			hdmi_con_in: endpoint {
31				remote-endpoint = <&hdmi_out_con>;
32			};
33		};
34	};
35
36	leds {
37		compatible = "gpio-leds";
38
39		pwr-led {
40			label = "bananapi-m64:red:pwr";
41			gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */
42			default-state = "on";
43		};
44
45		green {
46			label = "bananapi-m64:green:user";
47			gpios = <&pio 4 14 GPIO_ACTIVE_HIGH>; /* PE14 */
48		};
49
50		blue {
51			label = "bananapi-m64:blue:user";
52			gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; /* PE15 */
53		};
54	};
55
56	wifi_pwrseq: wifi_pwrseq {
57		compatible = "mmc-pwrseq-simple";
58		reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */
59		clocks = <&rtc 1>;
60		clock-names = "ext_clock";
61	};
62};
63
64&codec {
65	status = "okay";
66};
67
68&codec_analog {
69	cpvdd-supply = <&reg_eldo1>;
70	status = "okay";
71};
72
73&cpu0 {
74	cpu-supply = <&reg_dcdc2>;
75};
76
77&cpu1 {
78	cpu-supply = <&reg_dcdc2>;
79};
80
81&cpu2 {
82	cpu-supply = <&reg_dcdc2>;
83};
84
85&cpu3 {
86	cpu-supply = <&reg_dcdc2>;
87};
88
89&dai {
90	status = "okay";
91};
92
93&de {
94	status = "okay";
95};
96
97&ehci0 {
98	status = "okay";
99};
100
101&ehci1 {
102	status = "okay";
103};
104
105&emac {
106	pinctrl-names = "default";
107	pinctrl-0 = <&rgmii_pins>;
108	phy-mode = "rgmii";
109	phy-handle = <&ext_rgmii_phy>;
110	phy-supply = <&reg_dc1sw>;
111	status = "okay";
112};
113
114&hdmi {
115	hvcc-supply = <&reg_dldo1>;
116	status = "okay";
117};
118
119&hdmi_out {
120	hdmi_out_con: endpoint {
121		remote-endpoint = <&hdmi_con_in>;
122	};
123};
124
125&i2c1 {
126	status = "okay";
127};
128
129&i2c1_pins {
130	bias-pull-up;
131};
132
133&mdio {
134	ext_rgmii_phy: ethernet-phy@1 {
135		compatible = "ethernet-phy-ieee802.3-c22";
136		reg = <1>;
137	};
138};
139
140&mmc0 {
141	pinctrl-names = "default";
142	pinctrl-0 = <&mmc0_pins>;
143	vmmc-supply = <&reg_dcdc1>;
144	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
145	disable-wp;
146	bus-width = <4>;
147	status = "okay";
148};
149
150&mmc1 {
151	pinctrl-names = "default";
152	pinctrl-0 = <&mmc1_pins>;
153	vmmc-supply = <&reg_dldo2>;
154	vqmmc-supply = <&reg_dldo4>;
155	mmc-pwrseq = <&wifi_pwrseq>;
156	bus-width = <4>;
157	non-removable;
158	status = "okay";
159
160	brcmf: wifi@1 {
161		reg = <1>;
162		compatible = "brcm,bcm4329-fmac";
163		interrupt-parent = <&r_pio>;
164		interrupts = <0 3 IRQ_TYPE_LEVEL_LOW>; /* PL3 */
165		interrupt-names = "host-wake";
166	};
167};
168
169&mmc2 {
170	pinctrl-names = "default";
171	pinctrl-0 = <&mmc2_pins>, <&mmc2_ds_pin>;
172	vmmc-supply = <&reg_dcdc1>;
173	bus-width = <8>;
174	non-removable;
175	cap-mmc-hw-reset;
176	status = "okay";
177};
178
179&ohci0 {
180	status = "okay";
181};
182
183&ohci1 {
184	status = "okay";
185};
186
187&r_rsb {
188	status = "okay";
189
190	axp803: pmic@3a3 {
191		compatible = "x-powers,axp803";
192		reg = <0x3a3>;
193		interrupt-parent = <&r_intc>;
194		interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
195		x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */
196	};
197};
198
199#include "axp803.dtsi"
200
201&ac_power_supply {
202	status = "okay";
203};
204
205&battery_power_supply {
206	status = "okay";
207};
208
209&reg_aldo1 {
210	/*
211	 * This regulator also drives the PE pingroup GPIOs,
212	 * which also controls two LEDs.
213	 */
214	regulator-always-on;
215	regulator-min-microvolt = <2800000>;
216	regulator-max-microvolt = <2800000>;
217	regulator-name = "afvcc-csi";
218};
219
220&reg_aldo2 {
221	regulator-always-on;
222	regulator-min-microvolt = <1800000>;
223	regulator-max-microvolt = <3300000>;
224	regulator-name = "vcc-pl";
225};
226
227&reg_aldo3 {
228	regulator-always-on;
229	regulator-min-microvolt = <3000000>;
230	regulator-max-microvolt = <3000000>;
231	regulator-name = "vcc-pll-avcc";
232};
233
234&reg_dc1sw {
235	/*
236	 * This regulator also indirectly drives the PD pingroup GPIOs,
237	 * which also controls the power LED.
238	 */
239	regulator-always-on;
240	regulator-name = "vcc-phy";
241};
242
243&reg_dcdc1 {
244	regulator-always-on;
245	regulator-min-microvolt = <3300000>;
246	regulator-max-microvolt = <3300000>;
247	regulator-name = "vcc-3v3";
248};
249
250&reg_dcdc2 {
251	regulator-always-on;
252	regulator-min-microvolt = <1040000>;
253	regulator-max-microvolt = <1300000>;
254	regulator-name = "vdd-cpux";
255};
256
257/* DCDC3 is polyphased with DCDC2 */
258
259&reg_dcdc5 {
260	regulator-always-on;
261	regulator-min-microvolt = <1500000>;
262	regulator-max-microvolt = <1500000>;
263	regulator-name = "vcc-dram";
264};
265
266&reg_dcdc6 {
267	regulator-always-on;
268	regulator-min-microvolt = <1100000>;
269	regulator-max-microvolt = <1100000>;
270	regulator-name = "vdd-sys";
271};
272
273&reg_dldo1 {
274	regulator-min-microvolt = <3300000>;
275	regulator-max-microvolt = <3300000>;
276	regulator-name = "vcc-hdmi-dsi";
277};
278
279&reg_dldo2 {
280	regulator-min-microvolt = <3300000>;
281	regulator-max-microvolt = <3300000>;
282	regulator-name = "vcc-wifi";
283};
284
285&reg_dldo4 {
286	regulator-min-microvolt = <1800000>;
287	regulator-max-microvolt = <3300000>;
288	regulator-name = "vcc-wifi-io";
289};
290
291&reg_drivevbus {
292	regulator-name = "usb0-vbus";
293	status = "okay";
294};
295
296&reg_eldo1 {
297	regulator-min-microvolt = <1800000>;
298	regulator-max-microvolt = <1800000>;
299	regulator-name = "cpvdd";
300};
301
302&reg_fldo1 {
303	regulator-min-microvolt = <1200000>;
304	regulator-max-microvolt = <1200000>;
305	regulator-name = "vcc-1v2-hsic";
306};
307
308/*
309 * The A64 chip cannot work without this regulator off, although
310 * it seems to be only driving the AR100 core.
311 * Maybe we don't still know well about CPUs domain.
312 */
313&reg_fldo2 {
314	regulator-always-on;
315	regulator-min-microvolt = <1100000>;
316	regulator-max-microvolt = <1100000>;
317	regulator-name = "vdd-cpus";
318};
319
320&reg_rtc_ldo {
321	regulator-name = "vcc-rtc";
322};
323
324&simplefb_hdmi {
325	vcc-hdmi-supply = <&reg_dldo1>;
326};
327
328&sound {
329	status = "okay";
330	simple-audio-card,widgets = "Headphone", "Headphone Jack",
331				    "Microphone", "Microphone Jack",
332				    "Microphone", "Onboard Microphone";
333	simple-audio-card,routing =
334			"Left DAC", "AIF1 Slot 0 Left",
335			"Right DAC", "AIF1 Slot 0 Right",
336			"AIF1 Slot 0 Left ADC", "Left ADC",
337			"AIF1 Slot 0 Right ADC", "Right ADC",
338			"Headphone Jack", "HP",
339			"MIC2", "Microphone Jack",
340			"Onboard Microphone", "MBIAS",
341			"MIC1", "Onboard Microphone";
342};
343
344&uart0 {
345	pinctrl-names = "default";
346	pinctrl-0 = <&uart0_pb_pins>;
347	status = "okay";
348};
349
350&uart1 {
351	pinctrl-names = "default";
352	pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
353	uart-has-rtscts;
354	status = "okay";
355
356	bluetooth {
357		compatible = "brcm,bcm43438-bt";
358		clocks = <&rtc 1>;
359		clock-names = "lpo";
360		vbat-supply = <&reg_dldo2>;
361		vddio-supply = <&reg_dldo4>;
362		device-wakeup-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
363		host-wakeup-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* PL5 */
364		shutdown-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* PL4 */
365	};
366};
367
368&usb_otg {
369	dr_mode = "otg";
370	status = "okay";
371};
372
373&usb_power_supply {
374	status = "okay";
375};
376
377&usbphy {
378	usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */
379	usb0_vbus_power-supply = <&usb_power_supply>;
380	usb0_vbus-supply = <&reg_drivevbus>;
381	status = "okay";
382};
383