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