GNU Linux-libre 6.1.90-gnu
[releases.git] / arch / arm / boot / dts / sun8i-h2-plus-bananapi-m2-zero.dts
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 = <&reg_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 = <&reg_vcc5v0>;
99         };
100
101         poweroff {
102                 compatible = "regulator-poweroff";
103                 cpu-supply = <&reg_vcc1v2>;
104         };
105
106         wifi_pwrseq: wifi_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 = <&reg_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 = <&reg_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 = <&reg_vcc3v3>;
150         vqmmc-supply = <&reg_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 = <&reg_vcc3v3>;
187                 vddio-supply = <&reg_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 };