1 // SPDX-License-Identifier: (GPL-2.0+ OR MIT) !! 1 /* 2 // Copyright (c) 2016 ARM Ltd. !! 2 * Copyright (c) 2016 ARM Ltd. >> 3 * >> 4 * This file is dual-licensed: you can use it either under the terms >> 5 * of the GPL or the X11 license, at your option. Note that this dual >> 6 * licensing only applies to this file, and not this project as a >> 7 * whole. >> 8 * >> 9 * a) This library is free software; you can redistribute it and/or >> 10 * modify it under the terms of the GNU General Public License as >> 11 * published by the Free Software Foundation; either version 2 of the >> 12 * License, or (at your option) any later version. >> 13 * >> 14 * This library is distributed in the hope that it will be useful, >> 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of >> 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> 17 * GNU General Public License for more details. >> 18 * >> 19 * Or, alternatively, >> 20 * >> 21 * b) Permission is hereby granted, free of charge, to any person >> 22 * obtaining a copy of this software and associated documentation >> 23 * files (the "Software"), to deal in the Software without >> 24 * restriction, including without limitation the rights to use, >> 25 * copy, modify, merge, publish, distribute, sublicense, and/or >> 26 * sell copies of the Software, and to permit persons to whom the >> 27 * Software is furnished to do so, subject to the following >> 28 * conditions: >> 29 * >> 30 * The above copyright notice and this permission notice shall be >> 31 * included in all copies or substantial portions of the Software. >> 32 * >> 33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, >> 34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES >> 35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND >> 36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT >> 37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, >> 38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING >> 39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR >> 40 * OTHER DEALINGS IN THE SOFTWARE. >> 41 */ 3 42 4 /dts-v1/; 43 /dts-v1/; 5 44 6 #include "sun50i-a64.dtsi" 45 #include "sun50i-a64.dtsi" 7 #include "sun50i-a64-cpu-opp.dtsi" << 8 46 9 #include <dt-bindings/gpio/gpio.h> 47 #include <dt-bindings/gpio/gpio.h> 10 48 11 / { 49 / { 12 model = "BananaPi-M64"; 50 model = "BananaPi-M64"; 13 compatible = "sinovoip,bananapi-m64", 51 compatible = "sinovoip,bananapi-m64", "allwinner,sun50i-a64"; 14 52 15 aliases { 53 aliases { 16 ethernet0 = &emac; << 17 serial0 = &uart0; 54 serial0 = &uart0; 18 serial1 = &uart1; 55 serial1 = &uart1; 19 }; 56 }; 20 57 21 chosen { 58 chosen { 22 stdout-path = "serial0:115200n 59 stdout-path = "serial0:115200n8"; 23 }; 60 }; 24 61 25 hdmi-connector { !! 62 wifi_pwrseq: wifi_pwrseq { 26 compatible = "hdmi-connector"; << 27 type = "a"; << 28 << 29 port { << 30 hdmi_con_in: endpoint << 31 remote-endpoin << 32 }; << 33 }; << 34 }; << 35 << 36 leds { << 37 compatible = "gpio-leds"; << 38 << 39 led-0 { << 40 label = "bananapi-m64: << 41 gpios = <&pio 3 24 GPI << 42 default-state = "on"; << 43 }; << 44 << 45 led-1 { << 46 label = "bananapi-m64: << 47 gpios = <&pio 4 14 GPI << 48 }; << 49 << 50 led-2 { << 51 label = "bananapi-m64: << 52 gpios = <&pio 4 15 GPI << 53 }; << 54 }; << 55 << 56 wifi_pwrseq: pwrseq { << 57 compatible = "mmc-pwrseq-simpl 63 compatible = "mmc-pwrseq-simple"; 58 reset-gpios = <&r_pio 0 2 GPIO 64 reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */ 59 clocks = <&rtc CLK_OSC32K_FANO << 60 clock-names = "ext_clock"; << 61 }; 65 }; 62 }; 66 }; 63 67 64 &codec { << 65 status = "okay"; << 66 }; << 67 << 68 &codec_analog { << 69 cpvdd-supply = <®_eldo1>; << 70 status = "okay"; << 71 }; << 72 << 73 &cpu0 { << 74 cpu-supply = <®_dcdc2>; << 75 }; << 76 << 77 &cpu1 { << 78 cpu-supply = <®_dcdc2>; << 79 }; << 80 << 81 &cpu2 { << 82 cpu-supply = <®_dcdc2>; << 83 }; << 84 << 85 &cpu3 { << 86 cpu-supply = <®_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 { 68 &ehci1 { 102 status = "okay"; 69 status = "okay"; 103 }; 70 }; 104 71 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 = <®_dc1sw>; << 111 status = "okay"; << 112 }; << 113 << 114 &hdmi { << 115 hvcc-supply = <®_dldo1>; << 116 status = "okay"; << 117 }; << 118 << 119 &hdmi_out { << 120 hdmi_out_con: endpoint { << 121 remote-endpoint = <&hdmi_con_i << 122 }; << 123 }; << 124 << 125 &i2c1 { 72 &i2c1 { >> 73 pinctrl-names = "default"; >> 74 pinctrl-0 = <&i2c1_pins>; 126 status = "okay"; 75 status = "okay"; 127 }; 76 }; 128 77 129 &i2c1_pins { 78 &i2c1_pins { 130 bias-pull-up; 79 bias-pull-up; 131 }; 80 }; 132 81 133 &mdio { << 134 ext_rgmii_phy: ethernet-phy@1 { << 135 compatible = "ethernet-phy-iee << 136 reg = <1>; << 137 }; << 138 }; << 139 << 140 &mmc0 { 82 &mmc0 { 141 pinctrl-names = "default"; 83 pinctrl-names = "default"; 142 pinctrl-0 = <&mmc0_pins>; 84 pinctrl-0 = <&mmc0_pins>; 143 vmmc-supply = <®_dcdc1>; 85 vmmc-supply = <®_dcdc1>; 144 cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; !! 86 cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; >> 87 cd-inverted; 145 disable-wp; 88 disable-wp; 146 bus-width = <4>; 89 bus-width = <4>; 147 status = "okay"; 90 status = "okay"; 148 }; 91 }; 149 92 150 &mmc1 { 93 &mmc1 { 151 pinctrl-names = "default"; 94 pinctrl-names = "default"; 152 pinctrl-0 = <&mmc1_pins>; 95 pinctrl-0 = <&mmc1_pins>; 153 vmmc-supply = <®_dldo2>; 96 vmmc-supply = <®_dldo2>; 154 vqmmc-supply = <®_dldo4>; 97 vqmmc-supply = <®_dldo4>; 155 mmc-pwrseq = <&wifi_pwrseq>; 98 mmc-pwrseq = <&wifi_pwrseq>; 156 bus-width = <4>; 99 bus-width = <4>; 157 non-removable; 100 non-removable; 158 status = "okay"; 101 status = "okay"; 159 102 160 brcmf: wifi@1 { 103 brcmf: wifi@1 { 161 reg = <1>; 104 reg = <1>; 162 compatible = "brcm,bcm4329-fma 105 compatible = "brcm,bcm4329-fmac"; 163 interrupt-parent = <&r_pio>; 106 interrupt-parent = <&r_pio>; 164 interrupts = <0 3 IRQ_TYPE_LEV 107 interrupts = <0 3 IRQ_TYPE_LEVEL_LOW>; /* PL3 */ 165 interrupt-names = "host-wake"; 108 interrupt-names = "host-wake"; 166 }; 109 }; 167 }; 110 }; 168 111 169 &mmc2 { 112 &mmc2 { 170 pinctrl-names = "default"; 113 pinctrl-names = "default"; 171 pinctrl-0 = <&mmc2_pins>, <&mmc2_ds_pi !! 114 pinctrl-0 = <&mmc2_pins>; 172 vmmc-supply = <®_dcdc1>; 115 vmmc-supply = <®_dcdc1>; 173 bus-width = <8>; 116 bus-width = <8>; 174 non-removable; 117 non-removable; 175 cap-mmc-hw-reset; 118 cap-mmc-hw-reset; 176 status = "okay"; 119 status = "okay"; 177 }; 120 }; 178 121 179 &ohci0 { << 180 status = "okay"; << 181 }; << 182 << 183 &ohci1 { 122 &ohci1 { 184 status = "okay"; 123 status = "okay"; 185 }; 124 }; 186 125 187 &r_rsb { 126 &r_rsb { 188 status = "okay"; 127 status = "okay"; 189 128 190 axp803: pmic@3a3 { 129 axp803: pmic@3a3 { 191 compatible = "x-powers,axp803" 130 compatible = "x-powers,axp803"; 192 reg = <0x3a3>; 131 reg = <0x3a3>; 193 interrupt-parent = <&r_intc>; 132 interrupt-parent = <&r_intc>; 194 interrupts = <GIC_SPI 32 IRQ_T !! 133 interrupts = <0 IRQ_TYPE_LEVEL_LOW>; 195 x-powers,drive-vbus-en; /* set << 196 }; 134 }; 197 }; 135 }; 198 136 199 #include "axp803.dtsi" 137 #include "axp803.dtsi" 200 138 201 &ac_power_supply { << 202 status = "okay"; << 203 }; << 204 << 205 &battery_power_supply { << 206 status = "okay"; << 207 }; << 208 << 209 ®_aldo1 { << 210 /* << 211 * This regulator also drives the PE p << 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 ®_aldo2 { 139 ®_aldo2 { 221 regulator-always-on; 140 regulator-always-on; 222 regulator-min-microvolt = <1800000>; 141 regulator-min-microvolt = <1800000>; 223 regulator-max-microvolt = <3300000>; 142 regulator-max-microvolt = <3300000>; 224 regulator-name = "vcc-pl"; 143 regulator-name = "vcc-pl"; 225 }; 144 }; 226 145 227 ®_aldo3 { 146 ®_aldo3 { 228 regulator-always-on; 147 regulator-always-on; 229 regulator-min-microvolt = <3000000>; 148 regulator-min-microvolt = <3000000>; 230 regulator-max-microvolt = <3000000>; 149 regulator-max-microvolt = <3000000>; 231 regulator-name = "vcc-pll-avcc"; 150 regulator-name = "vcc-pll-avcc"; 232 }; 151 }; 233 152 234 ®_dc1sw { 153 ®_dc1sw { 235 /* << 236 * This regulator also indirectly driv << 237 * which also controls the power LED. << 238 */ << 239 regulator-always-on; << 240 regulator-name = "vcc-phy"; 154 regulator-name = "vcc-phy"; 241 }; 155 }; 242 156 243 ®_dcdc1 { 157 ®_dcdc1 { 244 regulator-always-on; 158 regulator-always-on; 245 regulator-min-microvolt = <3300000>; 159 regulator-min-microvolt = <3300000>; 246 regulator-max-microvolt = <3300000>; 160 regulator-max-microvolt = <3300000>; 247 regulator-name = "vcc-3v3"; 161 regulator-name = "vcc-3v3"; 248 }; 162 }; 249 163 250 ®_dcdc2 { 164 ®_dcdc2 { 251 regulator-always-on; 165 regulator-always-on; 252 regulator-min-microvolt = <1040000>; 166 regulator-min-microvolt = <1040000>; 253 regulator-max-microvolt = <1300000>; 167 regulator-max-microvolt = <1300000>; 254 regulator-name = "vdd-cpux"; 168 regulator-name = "vdd-cpux"; 255 }; 169 }; 256 170 257 /* DCDC3 is polyphased with DCDC2 */ 171 /* DCDC3 is polyphased with DCDC2 */ 258 172 259 ®_dcdc5 { 173 ®_dcdc5 { 260 regulator-always-on; 174 regulator-always-on; 261 regulator-min-microvolt = <1500000>; 175 regulator-min-microvolt = <1500000>; 262 regulator-max-microvolt = <1500000>; 176 regulator-max-microvolt = <1500000>; 263 regulator-name = "vcc-dram"; 177 regulator-name = "vcc-dram"; 264 }; 178 }; 265 179 266 ®_dcdc6 { 180 ®_dcdc6 { 267 regulator-always-on; 181 regulator-always-on; 268 regulator-min-microvolt = <1100000>; 182 regulator-min-microvolt = <1100000>; 269 regulator-max-microvolt = <1100000>; 183 regulator-max-microvolt = <1100000>; 270 regulator-name = "vdd-sys"; 184 regulator-name = "vdd-sys"; 271 }; 185 }; 272 186 273 ®_dldo1 { 187 ®_dldo1 { 274 regulator-min-microvolt = <3300000>; 188 regulator-min-microvolt = <3300000>; 275 regulator-max-microvolt = <3300000>; 189 regulator-max-microvolt = <3300000>; 276 regulator-name = "vcc-hdmi-dsi"; 190 regulator-name = "vcc-hdmi-dsi"; 277 }; 191 }; 278 192 279 ®_dldo2 { 193 ®_dldo2 { 280 regulator-min-microvolt = <3300000>; 194 regulator-min-microvolt = <3300000>; 281 regulator-max-microvolt = <3300000>; 195 regulator-max-microvolt = <3300000>; 282 regulator-name = "vcc-wifi"; 196 regulator-name = "vcc-wifi"; 283 }; 197 }; 284 198 285 ®_dldo4 { 199 ®_dldo4 { 286 regulator-min-microvolt = <1800000>; 200 regulator-min-microvolt = <1800000>; 287 regulator-max-microvolt = <3300000>; 201 regulator-max-microvolt = <3300000>; 288 regulator-name = "vcc-wifi-io"; 202 regulator-name = "vcc-wifi-io"; 289 }; 203 }; 290 204 291 ®_drivevbus { << 292 regulator-name = "usb0-vbus"; << 293 status = "okay"; << 294 }; << 295 << 296 ®_eldo1 { 205 ®_eldo1 { 297 regulator-min-microvolt = <1800000>; 206 regulator-min-microvolt = <1800000>; 298 regulator-max-microvolt = <1800000>; 207 regulator-max-microvolt = <1800000>; 299 regulator-name = "cpvdd"; 208 regulator-name = "cpvdd"; 300 }; 209 }; 301 210 302 ®_fldo1 { 211 ®_fldo1 { 303 regulator-min-microvolt = <1200000>; 212 regulator-min-microvolt = <1200000>; 304 regulator-max-microvolt = <1200000>; 213 regulator-max-microvolt = <1200000>; 305 regulator-name = "vcc-1v2-hsic"; 214 regulator-name = "vcc-1v2-hsic"; 306 }; 215 }; 307 216 308 /* 217 /* 309 * The A64 chip cannot work without this regul 218 * The A64 chip cannot work without this regulator off, although 310 * it seems to be only driving the AR100 core. 219 * it seems to be only driving the AR100 core. 311 * Maybe we don't still know well about CPUs d 220 * Maybe we don't still know well about CPUs domain. 312 */ 221 */ 313 ®_fldo2 { 222 ®_fldo2 { 314 regulator-always-on; 223 regulator-always-on; 315 regulator-min-microvolt = <1100000>; 224 regulator-min-microvolt = <1100000>; 316 regulator-max-microvolt = <1100000>; 225 regulator-max-microvolt = <1100000>; 317 regulator-name = "vdd-cpus"; 226 regulator-name = "vdd-cpus"; 318 }; 227 }; 319 228 320 ®_rtc_ldo { 229 ®_rtc_ldo { 321 regulator-name = "vcc-rtc"; 230 regulator-name = "vcc-rtc"; 322 }; 231 }; 323 232 324 &simplefb_hdmi { << 325 vcc-hdmi-supply = <®_dldo1>; << 326 }; << 327 << 328 &sound { << 329 status = "okay"; << 330 simple-audio-card,widgets = "Headphone << 331 "Microphon << 332 "Microphon << 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 Ja << 340 "Onboard Microphone", << 341 "MIC1", "Onboard Micro << 342 }; << 343 << 344 &uart0 { 233 &uart0 { 345 pinctrl-names = "default"; 234 pinctrl-names = "default"; 346 pinctrl-0 = <&uart0_pb_pins>; !! 235 pinctrl-0 = <&uart0_pins_a>; 347 status = "okay"; 236 status = "okay"; 348 }; 237 }; 349 238 350 &uart1 { 239 &uart1 { 351 pinctrl-names = "default"; 240 pinctrl-names = "default"; 352 pinctrl-0 = <&uart1_pins>, <&uart1_rts 241 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 CLK_OSC32K_FANO << 359 clock-names = "lpo"; << 360 vbat-supply = <®_dldo2>; << 361 vddio-supply = <®_dldo4>; << 362 device-wakeup-gpios = <&r_pio << 363 host-wakeup-gpios = <&r_pio 0 << 364 shutdown-gpios = <&r_pio 0 4 G << 365 }; << 366 }; << 367 << 368 &usb_otg { << 369 dr_mode = "otg"; << 370 status = "okay"; << 371 }; << 372 << 373 &usb_power_supply { << 374 status = "okay"; 242 status = "okay"; 375 }; 243 }; 376 244 377 &usbphy { 245 &usbphy { 378 usb0_id_det-gpios = <&pio 7 9 GPIO_ACT << 379 usb0_vbus_power-supply = <&usb_power_s << 380 usb0_vbus-supply = <®_drivevbus>; << 381 status = "okay"; 246 status = "okay"; 382 }; 247 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.