blob: 883f217efb8121f49c05b4d63eb468edebf0aeda [file] [log] [blame]
Samuel Hollande210ec02020-10-24 10:21:55 -05001// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2// Copyright (c) 2016 ARM Ltd.
Jagan Teki2dbe9c12017-05-25 20:16:00 +00003
4/dts-v1/;
5
6#include "sun50i-a64.dtsi"
Samuel Hollande210ec02020-10-24 10:21:55 -05007#include "sun50i-a64-cpu-opp.dtsi"
Jagan Teki2dbe9c12017-05-25 20:16:00 +00008
9#include <dt-bindings/gpio/gpio.h>
10
11/ {
12 model = "BananaPi-M64";
13 compatible = "sinovoip,bananapi-m64", "allwinner,sun50i-a64";
14
15 aliases {
Andre Przywara68dd17c2018-07-04 14:16:35 +010016 ethernet0 = &emac;
Jagan Teki2dbe9c12017-05-25 20:16:00 +000017 serial0 = &uart0;
18 serial1 = &uart1;
19 };
20
21 chosen {
22 stdout-path = "serial0:115200n8";
23 };
24
Andre Przywara1b39a182018-10-29 00:56:47 +000025 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
Andre Przywara68dd17c2018-07-04 14:16:35 +010036 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 */
Samuel Hollande210ec02020-10-24 10:21:55 -050059 clocks = <&rtc 1>;
60 clock-names = "ext_clock";
Jagan Teki2dbe9c12017-05-25 20:16:00 +000061 };
62};
63
Samuel Hollande210ec02020-10-24 10:21:55 -050064&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
Andre Przywara1b39a182018-10-29 00:56:47 +000093&de {
94 status = "okay";
95};
96
Jagan Teki90dd2752018-05-07 13:03:44 +053097&ehci0 {
98 status = "okay";
99};
100
101&ehci1 {
102 status = "okay";
103};
104
Andre Przywara68dd17c2018-07-04 14:16:35 +0100105&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
Andre Przywara1b39a182018-10-29 00:56:47 +0000114&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
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000125&i2c1 {
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000126 status = "okay";
127};
128
129&i2c1_pins {
130 bias-pull-up;
131};
132
Andre Przywara68dd17c2018-07-04 14:16:35 +0100133&mdio {
134 ext_rgmii_phy: ethernet-phy@1 {
135 compatible = "ethernet-phy-ieee802.3-c22";
136 reg = <1>;
137 };
138};
139
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000140&mmc0 {
141 pinctrl-names = "default";
142 pinctrl-0 = <&mmc0_pins>;
Andre Przywara68dd17c2018-07-04 14:16:35 +0100143 vmmc-supply = <&reg_dcdc1>;
144 cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000145 disable-wp;
146 bus-width = <4>;
147 status = "okay";
148};
149
150&mmc1 {
151 pinctrl-names = "default";
152 pinctrl-0 = <&mmc1_pins>;
Andre Przywara68dd17c2018-07-04 14:16:35 +0100153 vmmc-supply = <&reg_dldo2>;
154 vqmmc-supply = <&reg_dldo4>;
155 mmc-pwrseq = <&wifi_pwrseq>;
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000156 bus-width = <4>;
157 non-removable;
158 status = "okay";
Andre Przywara68dd17c2018-07-04 14:16:35 +0100159
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 };
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000167};
168
169&mmc2 {
170 pinctrl-names = "default";
Andre Przywara1b39a182018-10-29 00:56:47 +0000171 pinctrl-0 = <&mmc2_pins>, <&mmc2_ds_pin>;
Andre Przywara68dd17c2018-07-04 14:16:35 +0100172 vmmc-supply = <&reg_dcdc1>;
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000173 bus-width = <8>;
174 non-removable;
175 cap-mmc-hw-reset;
176 status = "okay";
177};
178
Jagan Teki90dd2752018-05-07 13:03:44 +0530179&ohci0 {
180 status = "okay";
181};
182
183&ohci1 {
184 status = "okay";
185};
186
Andre Przywara68dd17c2018-07-04 14:16:35 +0100187&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
Samuel Hollande210ec02020-10-24 10:21:55 -0500201&ac_power_supply {
202 status = "okay";
203};
204
205&battery_power_supply {
206 status = "okay";
207};
208
Andre Przywara68dd17c2018-07-04 14:16:35 +0100209&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
Andre Przywara1b39a182018-10-29 00:56:47 +0000324&simplefb_hdmi {
325 vcc-hdmi-supply = <&reg_dldo1>;
326};
327
Samuel Hollande210ec02020-10-24 10:21:55 -0500328&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
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000344&uart0 {
345 pinctrl-names = "default";
Andre Przywara1b39a182018-10-29 00:56:47 +0000346 pinctrl-0 = <&uart0_pb_pins>;
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000347 status = "okay";
348};
349
350&uart1 {
351 pinctrl-names = "default";
352 pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>;
Samuel Hollande210ec02020-10-24 10:21:55 -0500353 uart-has-rtscts;
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000354 status = "okay";
Samuel Hollande210ec02020-10-24 10:21:55 -0500355
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 };
Jagan Teki2dbe9c12017-05-25 20:16:00 +0000366};
Jagan Teki737fd732018-05-07 13:03:41 +0530367
368&usb_otg {
369 dr_mode = "otg";
370 status = "okay";
371};
372
Samuel Hollande210ec02020-10-24 10:21:55 -0500373&usb_power_supply {
374 status = "okay";
375};
376
Jagan Teki737fd732018-05-07 13:03:41 +0530377&usbphy {
378 usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */
Samuel Hollande210ec02020-10-24 10:21:55 -0500379 usb0_vbus_power-supply = <&usb_power_supply>;
Andre Przywara68dd17c2018-07-04 14:16:35 +0100380 usb0_vbus-supply = <&reg_drivevbus>;
Jagan Teki737fd732018-05-07 13:03:41 +0530381 status = "okay";
382};