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