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; 54 ethernet0 = &emac; 17 serial0 = &uart0; 55 serial0 = &uart0; 18 serial1 = &uart1; 56 serial1 = &uart1; 19 }; 57 }; 20 58 21 chosen { 59 chosen { 22 stdout-path = "serial0:115200n 60 stdout-path = "serial0:115200n8"; 23 }; 61 }; 24 62 25 hdmi-connector { 63 hdmi-connector { 26 compatible = "hdmi-connector"; 64 compatible = "hdmi-connector"; 27 type = "a"; 65 type = "a"; 28 66 29 port { 67 port { 30 hdmi_con_in: endpoint 68 hdmi_con_in: endpoint { 31 remote-endpoin 69 remote-endpoint = <&hdmi_out_con>; 32 }; 70 }; 33 }; 71 }; 34 }; 72 }; 35 73 36 leds { 74 leds { 37 compatible = "gpio-leds"; 75 compatible = "gpio-leds"; 38 76 39 led-0 { !! 77 pwr-led { 40 label = "bananapi-m64: 78 label = "bananapi-m64:red:pwr"; 41 gpios = <&pio 3 24 GPI 79 gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* PD24 */ 42 default-state = "on"; 80 default-state = "on"; 43 }; 81 }; 44 82 45 led-1 { !! 83 green { 46 label = "bananapi-m64: 84 label = "bananapi-m64:green:user"; 47 gpios = <&pio 4 14 GPI 85 gpios = <&pio 4 14 GPIO_ACTIVE_HIGH>; /* PE14 */ 48 }; 86 }; 49 87 50 led-2 { !! 88 blue { 51 label = "bananapi-m64: 89 label = "bananapi-m64:blue:user"; 52 gpios = <&pio 4 15 GPI 90 gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; /* PE15 */ 53 }; 91 }; 54 }; 92 }; 55 93 56 wifi_pwrseq: pwrseq { !! 94 wifi_pwrseq: wifi_pwrseq { 57 compatible = "mmc-pwrseq-simpl 95 compatible = "mmc-pwrseq-simple"; 58 reset-gpios = <&r_pio 0 2 GPIO 96 reset-gpios = <&r_pio 0 2 GPIO_ACTIVE_LOW>; /* PL2 */ 59 clocks = <&rtc CLK_OSC32K_FANO << 60 clock-names = "ext_clock"; << 61 }; 97 }; 62 }; 98 }; 63 99 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 { 100 &de { 94 status = "okay"; 101 status = "okay"; 95 }; 102 }; 96 103 97 &ehci0 { 104 &ehci0 { 98 status = "okay"; 105 status = "okay"; 99 }; 106 }; 100 107 101 &ehci1 { 108 &ehci1 { 102 status = "okay"; 109 status = "okay"; 103 }; 110 }; 104 111 105 &emac { 112 &emac { 106 pinctrl-names = "default"; 113 pinctrl-names = "default"; 107 pinctrl-0 = <&rgmii_pins>; 114 pinctrl-0 = <&rgmii_pins>; 108 phy-mode = "rgmii-id"; !! 115 phy-mode = "rgmii"; 109 phy-handle = <&ext_rgmii_phy>; 116 phy-handle = <&ext_rgmii_phy>; 110 phy-supply = <®_dc1sw>; 117 phy-supply = <®_dc1sw>; 111 status = "okay"; 118 status = "okay"; 112 }; 119 }; 113 120 114 &hdmi { 121 &hdmi { 115 hvcc-supply = <®_dldo1>; 122 hvcc-supply = <®_dldo1>; 116 status = "okay"; 123 status = "okay"; 117 }; 124 }; 118 125 119 &hdmi_out { 126 &hdmi_out { 120 hdmi_out_con: endpoint { 127 hdmi_out_con: endpoint { 121 remote-endpoint = <&hdmi_con_i 128 remote-endpoint = <&hdmi_con_in>; 122 }; 129 }; 123 }; 130 }; 124 131 125 &i2c1 { 132 &i2c1 { >> 133 pinctrl-names = "default"; >> 134 pinctrl-0 = <&i2c1_pins>; 126 status = "okay"; 135 status = "okay"; 127 }; 136 }; 128 137 129 &i2c1_pins { 138 &i2c1_pins { 130 bias-pull-up; 139 bias-pull-up; 131 }; 140 }; 132 141 133 &mdio { 142 &mdio { 134 ext_rgmii_phy: ethernet-phy@1 { 143 ext_rgmii_phy: ethernet-phy@1 { 135 compatible = "ethernet-phy-iee 144 compatible = "ethernet-phy-ieee802.3-c22"; 136 reg = <1>; 145 reg = <1>; 137 }; 146 }; 138 }; 147 }; 139 148 140 &mmc0 { 149 &mmc0 { 141 pinctrl-names = "default"; 150 pinctrl-names = "default"; 142 pinctrl-0 = <&mmc0_pins>; 151 pinctrl-0 = <&mmc0_pins>; 143 vmmc-supply = <®_dcdc1>; 152 vmmc-supply = <®_dcdc1>; 144 cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; 153 cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; 145 disable-wp; 154 disable-wp; 146 bus-width = <4>; 155 bus-width = <4>; 147 status = "okay"; 156 status = "okay"; 148 }; 157 }; 149 158 150 &mmc1 { 159 &mmc1 { 151 pinctrl-names = "default"; 160 pinctrl-names = "default"; 152 pinctrl-0 = <&mmc1_pins>; 161 pinctrl-0 = <&mmc1_pins>; 153 vmmc-supply = <®_dldo2>; 162 vmmc-supply = <®_dldo2>; 154 vqmmc-supply = <®_dldo4>; 163 vqmmc-supply = <®_dldo4>; 155 mmc-pwrseq = <&wifi_pwrseq>; 164 mmc-pwrseq = <&wifi_pwrseq>; 156 bus-width = <4>; 165 bus-width = <4>; 157 non-removable; 166 non-removable; 158 status = "okay"; 167 status = "okay"; 159 168 160 brcmf: wifi@1 { 169 brcmf: wifi@1 { 161 reg = <1>; 170 reg = <1>; 162 compatible = "brcm,bcm4329-fma 171 compatible = "brcm,bcm4329-fmac"; 163 interrupt-parent = <&r_pio>; 172 interrupt-parent = <&r_pio>; 164 interrupts = <0 3 IRQ_TYPE_LEV 173 interrupts = <0 3 IRQ_TYPE_LEVEL_LOW>; /* PL3 */ 165 interrupt-names = "host-wake"; 174 interrupt-names = "host-wake"; 166 }; 175 }; 167 }; 176 }; 168 177 169 &mmc2 { 178 &mmc2 { 170 pinctrl-names = "default"; 179 pinctrl-names = "default"; 171 pinctrl-0 = <&mmc2_pins>, <&mmc2_ds_pi 180 pinctrl-0 = <&mmc2_pins>, <&mmc2_ds_pin>; 172 vmmc-supply = <®_dcdc1>; 181 vmmc-supply = <®_dcdc1>; 173 bus-width = <8>; 182 bus-width = <8>; 174 non-removable; 183 non-removable; 175 cap-mmc-hw-reset; 184 cap-mmc-hw-reset; 176 status = "okay"; 185 status = "okay"; 177 }; 186 }; 178 187 179 &ohci0 { 188 &ohci0 { 180 status = "okay"; 189 status = "okay"; 181 }; 190 }; 182 191 183 &ohci1 { 192 &ohci1 { 184 status = "okay"; 193 status = "okay"; 185 }; 194 }; 186 195 187 &r_rsb { 196 &r_rsb { 188 status = "okay"; 197 status = "okay"; 189 198 190 axp803: pmic@3a3 { 199 axp803: pmic@3a3 { 191 compatible = "x-powers,axp803" 200 compatible = "x-powers,axp803"; 192 reg = <0x3a3>; 201 reg = <0x3a3>; 193 interrupt-parent = <&r_intc>; 202 interrupt-parent = <&r_intc>; 194 interrupts = <GIC_SPI 32 IRQ_T !! 203 interrupts = <0 IRQ_TYPE_LEVEL_LOW>; 195 x-powers,drive-vbus-en; /* set 204 x-powers,drive-vbus-en; /* set N_VBUSEN as output pin */ 196 }; 205 }; 197 }; 206 }; 198 207 199 #include "axp803.dtsi" 208 #include "axp803.dtsi" 200 209 201 &ac_power_supply { << 202 status = "okay"; << 203 }; << 204 << 205 &battery_power_supply { << 206 status = "okay"; << 207 }; << 208 << 209 ®_aldo1 { 210 ®_aldo1 { 210 /* 211 /* 211 * This regulator also drives the PE p 212 * This regulator also drives the PE pingroup GPIOs, 212 * which also controls two LEDs. 213 * which also controls two LEDs. 213 */ 214 */ 214 regulator-always-on; 215 regulator-always-on; 215 regulator-min-microvolt = <2800000>; 216 regulator-min-microvolt = <2800000>; 216 regulator-max-microvolt = <2800000>; 217 regulator-max-microvolt = <2800000>; 217 regulator-name = "afvcc-csi"; 218 regulator-name = "afvcc-csi"; 218 }; 219 }; 219 220 220 ®_aldo2 { 221 ®_aldo2 { 221 regulator-always-on; 222 regulator-always-on; 222 regulator-min-microvolt = <1800000>; 223 regulator-min-microvolt = <1800000>; 223 regulator-max-microvolt = <3300000>; 224 regulator-max-microvolt = <3300000>; 224 regulator-name = "vcc-pl"; 225 regulator-name = "vcc-pl"; 225 }; 226 }; 226 227 227 ®_aldo3 { 228 ®_aldo3 { 228 regulator-always-on; 229 regulator-always-on; 229 regulator-min-microvolt = <3000000>; 230 regulator-min-microvolt = <3000000>; 230 regulator-max-microvolt = <3000000>; 231 regulator-max-microvolt = <3000000>; 231 regulator-name = "vcc-pll-avcc"; 232 regulator-name = "vcc-pll-avcc"; 232 }; 233 }; 233 234 234 ®_dc1sw { 235 ®_dc1sw { 235 /* 236 /* 236 * This regulator also indirectly driv 237 * This regulator also indirectly drives the PD pingroup GPIOs, 237 * which also controls the power LED. 238 * which also controls the power LED. 238 */ 239 */ 239 regulator-always-on; 240 regulator-always-on; 240 regulator-name = "vcc-phy"; 241 regulator-name = "vcc-phy"; 241 }; 242 }; 242 243 243 ®_dcdc1 { 244 ®_dcdc1 { 244 regulator-always-on; 245 regulator-always-on; 245 regulator-min-microvolt = <3300000>; 246 regulator-min-microvolt = <3300000>; 246 regulator-max-microvolt = <3300000>; 247 regulator-max-microvolt = <3300000>; 247 regulator-name = "vcc-3v3"; 248 regulator-name = "vcc-3v3"; 248 }; 249 }; 249 250 250 ®_dcdc2 { 251 ®_dcdc2 { 251 regulator-always-on; 252 regulator-always-on; 252 regulator-min-microvolt = <1040000>; 253 regulator-min-microvolt = <1040000>; 253 regulator-max-microvolt = <1300000>; 254 regulator-max-microvolt = <1300000>; 254 regulator-name = "vdd-cpux"; 255 regulator-name = "vdd-cpux"; 255 }; 256 }; 256 257 257 /* DCDC3 is polyphased with DCDC2 */ 258 /* DCDC3 is polyphased with DCDC2 */ 258 259 259 ®_dcdc5 { 260 ®_dcdc5 { 260 regulator-always-on; 261 regulator-always-on; 261 regulator-min-microvolt = <1500000>; 262 regulator-min-microvolt = <1500000>; 262 regulator-max-microvolt = <1500000>; 263 regulator-max-microvolt = <1500000>; 263 regulator-name = "vcc-dram"; 264 regulator-name = "vcc-dram"; 264 }; 265 }; 265 266 266 ®_dcdc6 { 267 ®_dcdc6 { 267 regulator-always-on; 268 regulator-always-on; 268 regulator-min-microvolt = <1100000>; 269 regulator-min-microvolt = <1100000>; 269 regulator-max-microvolt = <1100000>; 270 regulator-max-microvolt = <1100000>; 270 regulator-name = "vdd-sys"; 271 regulator-name = "vdd-sys"; 271 }; 272 }; 272 273 273 ®_dldo1 { 274 ®_dldo1 { 274 regulator-min-microvolt = <3300000>; 275 regulator-min-microvolt = <3300000>; 275 regulator-max-microvolt = <3300000>; 276 regulator-max-microvolt = <3300000>; 276 regulator-name = "vcc-hdmi-dsi"; 277 regulator-name = "vcc-hdmi-dsi"; 277 }; 278 }; 278 279 279 ®_dldo2 { 280 ®_dldo2 { 280 regulator-min-microvolt = <3300000>; 281 regulator-min-microvolt = <3300000>; 281 regulator-max-microvolt = <3300000>; 282 regulator-max-microvolt = <3300000>; 282 regulator-name = "vcc-wifi"; 283 regulator-name = "vcc-wifi"; 283 }; 284 }; 284 285 285 ®_dldo4 { 286 ®_dldo4 { 286 regulator-min-microvolt = <1800000>; 287 regulator-min-microvolt = <1800000>; 287 regulator-max-microvolt = <3300000>; 288 regulator-max-microvolt = <3300000>; 288 regulator-name = "vcc-wifi-io"; 289 regulator-name = "vcc-wifi-io"; 289 }; 290 }; 290 291 291 ®_drivevbus { 292 ®_drivevbus { 292 regulator-name = "usb0-vbus"; 293 regulator-name = "usb0-vbus"; 293 status = "okay"; 294 status = "okay"; 294 }; 295 }; 295 296 296 ®_eldo1 { 297 ®_eldo1 { 297 regulator-min-microvolt = <1800000>; 298 regulator-min-microvolt = <1800000>; 298 regulator-max-microvolt = <1800000>; 299 regulator-max-microvolt = <1800000>; 299 regulator-name = "cpvdd"; 300 regulator-name = "cpvdd"; 300 }; 301 }; 301 302 302 ®_fldo1 { 303 ®_fldo1 { 303 regulator-min-microvolt = <1200000>; 304 regulator-min-microvolt = <1200000>; 304 regulator-max-microvolt = <1200000>; 305 regulator-max-microvolt = <1200000>; 305 regulator-name = "vcc-1v2-hsic"; 306 regulator-name = "vcc-1v2-hsic"; 306 }; 307 }; 307 308 308 /* 309 /* 309 * The A64 chip cannot work without this regul 310 * The A64 chip cannot work without this regulator off, although 310 * it seems to be only driving the AR100 core. 311 * it seems to be only driving the AR100 core. 311 * Maybe we don't still know well about CPUs d 312 * Maybe we don't still know well about CPUs domain. 312 */ 313 */ 313 ®_fldo2 { 314 ®_fldo2 { 314 regulator-always-on; 315 regulator-always-on; 315 regulator-min-microvolt = <1100000>; 316 regulator-min-microvolt = <1100000>; 316 regulator-max-microvolt = <1100000>; 317 regulator-max-microvolt = <1100000>; 317 regulator-name = "vdd-cpus"; 318 regulator-name = "vdd-cpus"; 318 }; 319 }; 319 320 320 ®_rtc_ldo { 321 ®_rtc_ldo { 321 regulator-name = "vcc-rtc"; 322 regulator-name = "vcc-rtc"; 322 }; 323 }; 323 324 324 &simplefb_hdmi { 325 &simplefb_hdmi { 325 vcc-hdmi-supply = <®_dldo1>; 326 vcc-hdmi-supply = <®_dldo1>; 326 }; 327 }; 327 328 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 { 329 &uart0 { 345 pinctrl-names = "default"; 330 pinctrl-names = "default"; 346 pinctrl-0 = <&uart0_pb_pins>; 331 pinctrl-0 = <&uart0_pb_pins>; 347 status = "okay"; 332 status = "okay"; 348 }; 333 }; 349 334 350 &uart1 { 335 &uart1 { 351 pinctrl-names = "default"; 336 pinctrl-names = "default"; 352 pinctrl-0 = <&uart1_pins>, <&uart1_rts 337 pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; 353 uart-has-rtscts; << 354 status = "okay"; 338 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 }; 339 }; 367 340 368 &usb_otg { 341 &usb_otg { 369 dr_mode = "otg"; 342 dr_mode = "otg"; 370 status = "okay"; 343 status = "okay"; 371 }; 344 }; 372 345 373 &usb_power_supply { << 374 status = "okay"; << 375 }; << 376 << 377 &usbphy { 346 &usbphy { 378 usb0_id_det-gpios = <&pio 7 9 GPIO_ACT 347 usb0_id_det-gpios = <&pio 7 9 GPIO_ACTIVE_HIGH>; /* PH9 */ 379 usb0_vbus_power-supply = <&usb_power_s << 380 usb0_vbus-supply = <®_drivevbus>; 348 usb0_vbus-supply = <®_drivevbus>; 381 status = "okay"; 349 status = "okay"; 382 }; 350 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.