1// SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2/* 3 * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io> 4 * 5 * Based on sun8i-h3-bananapi-m2-plus.dts, which is: 6 * Copyright (C) 2016 Chen-Yu Tsai <wens@csie.org> 7 */ 8 9/dts-v1/; 10#include "sun8i-h3.dtsi" 11#include "sunxi-common-regulators.dtsi" 12 13#include <dt-bindings/gpio/gpio.h> 14#include <dt-bindings/input/input.h> 15 16/ { 17 model = "Banana Pi BPI-M2-Zero"; 18 compatible = "sinovoip,bpi-m2-zero", "allwinner,sun8i-h2-plus"; 19 20 aliases { 21 serial0 = &uart0; 22 serial1 = &uart1; 23 }; 24 25 chosen { 26 stdout-path = "serial0:115200n8"; 27 }; 28 29 connector { 30 compatible = "hdmi-connector"; 31 type = "c"; 32 33 port { 34 hdmi_con_in: endpoint { 35 remote-endpoint = <&hdmi_out_con>; 36 }; 37 }; 38 }; 39 40 leds { 41 compatible = "gpio-leds"; 42 43 pwr_led { 44 label = "bananapi-m2-zero:red:pwr"; 45 gpios = <&r_pio 0 10 GPIO_ACTIVE_LOW>; /* PL10 */ 46 default-state = "on"; 47 }; 48 }; 49 50 gpio-keys { 51 compatible = "gpio-keys"; 52 53 switch-4 { 54 label = "power"; 55 linux,code = <KEY_POWER>; 56 gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>; 57 wakeup-source; 58 }; 59 }; 60 61 reg_vdd_cpux: vdd-cpux-regulator { 62 compatible = "regulator-gpio"; 63 regulator-name = "vdd-cpux"; 64 regulator-type = "voltage"; 65 regulator-boot-on; 66 regulator-always-on; 67 regulator-min-microvolt = <1100000>; 68 regulator-max-microvolt = <1300000>; 69 regulator-ramp-delay = <50>; /* 4ms */ 70 71 gpios = <&r_pio 0 1 GPIO_ACTIVE_HIGH>; /* PL1 */ 72 enable-active-high; 73 gpios-states = <0x1>; 74 states = <1100000 0>, <1300000 1>; 75 }; 76 77 reg_vcc_dram: vcc-dram { 78 compatible = "regulator-fixed"; 79 regulator-name = "vcc-dram"; 80 regulator-min-microvolt = <1500000>; 81 regulator-max-microvolt = <1500000>; 82 regulator-always-on; 83 regulator-boot-on; 84 enable-active-high; 85 gpio = <&r_pio 0 9 GPIO_ACTIVE_HIGH>; /* PL9 */ 86 vin-supply = <®_vcc5v0>; 87 }; 88 89 reg_vcc1v2: vcc1v2 { 90 compatible = "regulator-fixed"; 91 regulator-name = "vcc1v2"; 92 regulator-min-microvolt = <1200000>; 93 regulator-max-microvolt = <1200000>; 94 regulator-always-on; 95 regulator-boot-on; 96 enable-active-high; 97 gpio = <&r_pio 0 8 GPIO_ACTIVE_HIGH>; /* PL8 */ 98 vin-supply = <®_vcc5v0>; 99 }; 100 101 poweroff { 102 compatible = "regulator-poweroff"; 103 cpu-supply = <®_vcc1v2>; 104 }; 105 106 wifi_pwrseq: pwrseq { 107 compatible = "mmc-pwrseq-simple"; 108 reset-gpios = <&r_pio 0 7 GPIO_ACTIVE_LOW>; /* PL7 */ 109 clocks = <&rtc CLK_OSC32K_FANOUT>; 110 clock-names = "ext_clock"; 111 }; 112}; 113 114&cpu0 { 115 cpu-supply = <®_vdd_cpux>; 116}; 117 118&de { 119 status = "okay"; 120}; 121 122&ehci0 { 123 status = "okay"; 124}; 125 126&hdmi { 127 status = "okay"; 128}; 129 130&hdmi_out { 131 hdmi_out_con: endpoint { 132 remote-endpoint = <&hdmi_con_in>; 133 }; 134}; 135 136&mmc0 { 137 vmmc-supply = <®_vcc3v3>; 138 bus-width = <4>; 139 /* 140 * On the production batch of this board the card detect GPIO is 141 * high active (card inserted), although on the early samples it's 142 * low active. 143 */ 144 cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */ 145 status = "okay"; 146}; 147 148&mmc1 { 149 vmmc-supply = <®_vcc3v3>; 150 vqmmc-supply = <®_vcc3v3>; 151 mmc-pwrseq = <&wifi_pwrseq>; 152 bus-width = <4>; 153 non-removable; 154 status = "okay"; 155 156 brcmf: wifi@1 { 157 reg = <1>; 158 compatible = "brcm,bcm4329-fmac"; 159 interrupt-parent = <&pio>; 160 interrupts = <6 10 IRQ_TYPE_LEVEL_LOW>; /* PG10 / EINT10 */ 161 interrupt-names = "host-wake"; 162 }; 163}; 164 165&ohci0 { 166 status = "okay"; 167}; 168 169&uart0 { 170 pinctrl-names = "default"; 171 pinctrl-0 = <&uart0_pa_pins>; 172 status = "okay"; 173}; 174 175&uart1 { 176 pinctrl-names = "default"; 177 pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; 178 uart-has-rtscts; 179 status = "okay"; 180 181 bluetooth { 182 compatible = "brcm,bcm43438-bt"; 183 max-speed = <1500000>; 184 clocks = <&rtc CLK_OSC32K_FANOUT>; 185 clock-names = "lpo"; 186 vbat-supply = <®_vcc3v3>; 187 vddio-supply = <®_vcc3v3>; 188 device-wakeup-gpios = <&pio 6 13 GPIO_ACTIVE_HIGH>; /* PG13 */ 189 host-wakeup-gpios = <&pio 6 11 GPIO_ACTIVE_HIGH>; /* PG11 */ 190 shutdown-gpios = <&pio 6 12 GPIO_ACTIVE_HIGH>; /* PG12 */ 191 }; 192 193}; 194 195&pio { 196 gpio-line-names = 197 /* PA */ 198 "CON2-P13", "CON2-P11", "CON2-P22", "CON2-P15", 199 "CON3-P03", "CON3-P02", "CON2-P07", "CON2-P29", 200 "CON2-P31", "CON2-P33", "CON2-P35", "CON2-P05", 201 "CON2-P03", "CON2-P08", "CON2-P10", "CON2-P16", 202 "CON2-P12", "CON2-P37", "CON2-P28", "CON2-P27", 203 "CON2-P40", "CON2-P38", "", "", 204 "", "", "", "", "", "", "", "", 205 206 /* PB */ 207 "", "", "", "", "", "", "", "", 208 "", "", "", "", "", "", "", "", 209 "", "", "", "", "", "", "", "", 210 "", "", "", "", "", "", "", "", 211 212 /* PC */ 213 "CON2-P19", "CON2-P21", "CON2-P23", "CON2-P24", 214 "CON2-P18", "", "", "CON2-P26", 215 "", "", "", "", "", "", "", "", 216 "", "", "", "", "", "", "", "", 217 "", "", "", "", "", "", "", "", 218 219 /* PD */ 220 "", "", "", "", "", "", "", "", 221 "", "", "", "", "", "", "CSI-PWR-EN", "", 222 "", "", "", "", "", "", "", "", 223 "", "", "", "", "", "", "", "", 224 225 /* PE */ 226 "CN3-P17", "CN3-P13", "CN3-P09", "CN3-P07", 227 "CN3-P19", "CN3-P21", "CN3-P22", "CN3-P20", 228 "CN3-P18", "CN3-P16", "CN3-P14", "CN3-P12", 229 "CN3-P05", "CN3-P03", "CN3-P06", "CN3-P08", 230 "", "", "", "", "", "", "", "", 231 "", "", "", "", "", "", "", "", 232 233 /* PF */ 234 "SDC0-D1", "SDC0-D0", "SDC0-CLK", "SDC0-CMD", "SDC0-D3", 235 "SDC0-D2", "SDC0-DET", "", 236 "", "", "", "", "", "", "", "", 237 "", "", "", "", "", "", "", "", 238 "", "", "", "", "", "", "", "", 239 240 /* PG */ 241 "WL-SDIO-CLK", "WL-SDIO-CMD", "WL-SDIO-D0", "WL-SDIO-D1", 242 "WL-SDIO-D2", "WL-SDIO-D3", "BT-UART-TX", "BT-UART-RX", 243 "BT-UART-RTS", "BT-UART-CTS", "WL-WAKE-AP", "BT-WAKE-AP", 244 "BT-RST-N", "AP-WAKE-BT", "", "", 245 "", "", "", "", "", "", "", "", 246 "", "", "", "", "", "", "", ""; 247}; 248 249&r_pio { 250 gpio-line-names = 251 /* PL */ 252 "", "CPUX-SET", "CON2-P32", "POWER-KEY", "CON2-P36", 253 "VCC-IO-EN", "USB0-ID", "WL-PWR-EN", 254 "PWR-STB", "PWR-DRAM", "PWR-LED", "IR-RX", "", "", "", "", 255 "", "", "", "", "", "", "", "", 256 "", "", "", "", "", "", "", ""; 257}; 258 259&usb_otg { 260 dr_mode = "otg"; 261 status = "okay"; 262}; 263 264&usbphy { 265 usb0_id_det-gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */ 266 /* 267 * There're two micro-USB connectors, one is power-only and another is 268 * OTG. The Vbus of these two connectors are connected together, so 269 * the external USB device will be powered just by the power input 270 * from the power-only USB port. 271 */ 272 status = "okay"; 273}; 274