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-id";
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", "DACL",
335			"Right DAC", "DACR",
336			"ADCL", "Left ADC",
337			"ADCR", "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