1// SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2/* 3 * Copyright (c) 2021 BayLibre SAS 4 * Author: Neil Armstrong <narmstrong@baylibre.com> 5 */ 6 7/dts-v1/; 8 9#include "meson-sm1.dtsi" 10#include <dt-bindings/leds/common.h> 11#include <dt-bindings/input/linux-event-codes.h> 12#include <dt-bindings/gpio/meson-g12a-gpio.h> 13#include <dt-bindings/sound/meson-g12a-toacodec.h> 14#include <dt-bindings/sound/meson-g12a-tohdmitx.h> 15 16/ { 17 compatible = "bananapi,bpi-m5", "amlogic,sm1"; 18 model = "Banana Pi BPI-M5"; 19 20 adc_keys { 21 compatible = "adc-keys"; 22 io-channels = <&saradc 2>; 23 io-channel-names = "buttons"; 24 keyup-threshold-microvolt = <1800000>; 25 26 key { 27 label = "SW3"; 28 linux,code = <BTN_3>; 29 press-threshold-microvolt = <1700000>; 30 }; 31 }; 32 33 aliases { 34 serial0 = &uart_AO; 35 ethernet0 = ðmac; 36 }; 37 38 chosen { 39 stdout-path = "serial0:115200n8"; 40 }; 41 42 /* TOFIX: handle CVBS_DET on SARADC channel 0 */ 43 cvbs-connector { 44 compatible = "composite-video-connector"; 45 46 port { 47 cvbs_connector_in: endpoint { 48 remote-endpoint = <&cvbs_vdac_out>; 49 }; 50 }; 51 }; 52 53 emmc_pwrseq: emmc-pwrseq { 54 compatible = "mmc-pwrseq-emmc"; 55 reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; 56 }; 57 58 gpio-keys { 59 compatible = "gpio-keys"; 60 61 key { 62 label = "SW1"; 63 linux,code = <BTN_1>; 64 gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>; 65 interrupt-parent = <&gpio_intc>; 66 interrupts = <3 IRQ_TYPE_EDGE_BOTH>; 67 }; 68 }; 69 70 hdmi-connector { 71 compatible = "hdmi-connector"; 72 type = "a"; 73 74 port { 75 hdmi_connector_in: endpoint { 76 remote-endpoint = <&hdmi_tx_tmds_out>; 77 }; 78 }; 79 }; 80 81 leds { 82 compatible = "gpio-leds"; 83 84 green { 85 color = <LED_COLOR_ID_GREEN>; 86 function = LED_FUNCTION_STATUS; 87 gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>; 88 }; 89 90 blue { 91 color = <LED_COLOR_ID_BLUE>; 92 function = LED_FUNCTION_STATUS; 93 gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_LOW>; 94 linux,default-trigger = "heartbeat"; 95 }; 96 }; 97 98 memory@0 { 99 device_type = "memory"; 100 reg = <0x0 0x0 0x0 0x40000000>; 101 }; 102 103 emmc_1v8: regulator-emmc_1v8 { 104 compatible = "regulator-fixed"; 105 regulator-name = "EMMC_1V8"; 106 regulator-min-microvolt = <1800000>; 107 regulator-max-microvolt = <1800000>; 108 vin-supply = <&vddao_3v3>; 109 regulator-always-on; 110 }; 111 112 dc_in: regulator-dc_in { 113 compatible = "regulator-fixed"; 114 regulator-name = "DC_IN"; 115 regulator-min-microvolt = <5000000>; 116 regulator-max-microvolt = <5000000>; 117 regulator-always-on; 118 }; 119 120 vddio_c: regulator-vddio_c { 121 compatible = "regulator-gpio"; 122 regulator-name = "VDDIO_C"; 123 regulator-min-microvolt = <1800000>; 124 regulator-max-microvolt = <3300000>; 125 126 enable-gpio = <&gpio_ao GPIOE_2 GPIO_ACTIVE_HIGH>; 127 enable-active-high; 128 regulator-always-on; 129 130 gpios = <&gpio_ao GPIOAO_6 GPIO_OPEN_DRAIN>; 131 gpios-states = <1>; 132 133 states = <1800000 0>, 134 <3300000 1>; 135 }; 136 137 tflash_vdd: regulator-tflash_vdd { 138 compatible = "regulator-fixed"; 139 regulator-name = "TFLASH_VDD"; 140 regulator-min-microvolt = <3300000>; 141 regulator-max-microvolt = <3300000>; 142 vin-supply = <&dc_in>; 143 gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>; 144 enable-active-high; 145 regulator-always-on; 146 }; 147 148 vddao_1v8: regulator-vddao_1v8 { 149 compatible = "regulator-fixed"; 150 regulator-name = "VDDAO_1V8"; 151 regulator-min-microvolt = <1800000>; 152 regulator-max-microvolt = <1800000>; 153 vin-supply = <&vddao_3v3>; 154 regulator-always-on; 155 }; 156 157 vddao_3v3: regulator-vddao_3v3 { 158 compatible = "regulator-fixed"; 159 regulator-name = "VDDAO_3V3"; 160 regulator-min-microvolt = <3300000>; 161 regulator-max-microvolt = <3300000>; 162 vin-supply = <&dc_in>; 163 regulator-always-on; 164 }; 165 166 vddcpu: regulator-vddcpu { 167 /* 168 * SY8120B1ABC DC/DC Regulator. 169 */ 170 compatible = "pwm-regulator"; 171 172 regulator-name = "VDDCPU"; 173 regulator-min-microvolt = <690000>; 174 regulator-max-microvolt = <1050000>; 175 176 pwm-supply = <&dc_in>; 177 178 pwms = <&pwm_AO_cd 1 1250 0>; 179 pwm-dutycycle-range = <100 0>; 180 181 regulator-boot-on; 182 regulator-always-on; 183 }; 184 185 /* USB Hub Power Enable */ 186 vl_pwr_en: regulator-vl_pwr_en { 187 compatible = "regulator-fixed"; 188 regulator-name = "VL_PWR_EN"; 189 regulator-min-microvolt = <5000000>; 190 regulator-max-microvolt = <5000000>; 191 vin-supply = <&dc_in>; 192 193 gpio = <&gpio GPIOH_6 GPIO_ACTIVE_HIGH>; 194 enable-active-high; 195 }; 196 197 sound { 198 compatible = "amlogic,axg-sound-card"; 199 model = "BPI-M5"; 200 audio-widgets = "Line", "Lineout"; 201 audio-aux-devs = <&tdmout_b>, <&tdmout_c>, 202 <&tdmin_a>, <&tdmin_b>, <&tdmin_c>; 203 audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1", 204 "TDMOUT_B IN 1", "FRDDR_B OUT 1", 205 "TDMOUT_B IN 2", "FRDDR_C OUT 1", 206 "TDM_B Playback", "TDMOUT_B OUT", 207 "TDMOUT_C IN 0", "FRDDR_A OUT 2", 208 "TDMOUT_C IN 1", "FRDDR_B OUT 2", 209 "TDMOUT_C IN 2", "FRDDR_C OUT 2", 210 "TDM_C Playback", "TDMOUT_C OUT", 211 "TDMIN_A IN 4", "TDM_B Loopback", 212 "TDMIN_B IN 4", "TDM_B Loopback", 213 "TDMIN_C IN 4", "TDM_B Loopback", 214 "TDMIN_A IN 5", "TDM_C Loopback", 215 "TDMIN_B IN 5", "TDM_C Loopback", 216 "TDMIN_C IN 5", "TDM_C Loopback", 217 "TODDR_A IN 0", "TDMIN_A OUT", 218 "TODDR_B IN 0", "TDMIN_A OUT", 219 "TODDR_C IN 0", "TDMIN_A OUT", 220 "TODDR_A IN 1", "TDMIN_B OUT", 221 "TODDR_B IN 1", "TDMIN_B OUT", 222 "TODDR_C IN 1", "TDMIN_B OUT", 223 "TODDR_A IN 2", "TDMIN_C OUT", 224 "TODDR_B IN 2", "TDMIN_C OUT", 225 "TODDR_C IN 2", "TDMIN_C OUT", 226 "Lineout", "ACODEC LOLP", 227 "Lineout", "ACODEC LORP"; 228 229 assigned-clocks = <&clkc CLKID_MPLL2>, 230 <&clkc CLKID_MPLL0>, 231 <&clkc CLKID_MPLL1>; 232 assigned-clock-parents = <0>, <0>, <0>; 233 assigned-clock-rates = <294912000>, 234 <270950400>, 235 <393216000>; 236 status = "okay"; 237 238 dai-link-0 { 239 sound-dai = <&frddr_a>; 240 }; 241 242 dai-link-1 { 243 sound-dai = <&frddr_b>; 244 }; 245 246 dai-link-2 { 247 sound-dai = <&frddr_c>; 248 }; 249 250 dai-link-3 { 251 sound-dai = <&toddr_a>; 252 }; 253 254 dai-link-4 { 255 sound-dai = <&toddr_b>; 256 }; 257 258 dai-link-5 { 259 sound-dai = <&toddr_c>; 260 }; 261 262 /* 8ch hdmi interface */ 263 dai-link-6 { 264 sound-dai = <&tdmif_b>; 265 dai-format = "i2s"; 266 dai-tdm-slot-tx-mask-0 = <1 1>; 267 dai-tdm-slot-tx-mask-1 = <1 1>; 268 dai-tdm-slot-tx-mask-2 = <1 1>; 269 dai-tdm-slot-tx-mask-3 = <1 1>; 270 mclk-fs = <256>; 271 272 codec-0 { 273 sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>; 274 }; 275 276 codec-1 { 277 sound-dai = <&toacodec TOACODEC_IN_B>; 278 }; 279 }; 280 281 /* i2s jack output interface */ 282 dai-link-7 { 283 sound-dai = <&tdmif_c>; 284 dai-format = "i2s"; 285 dai-tdm-slot-tx-mask-0 = <1 1>; 286 mclk-fs = <256>; 287 288 codec-0 { 289 sound-dai = <&tohdmitx TOHDMITX_I2S_IN_C>; 290 }; 291 292 codec-1 { 293 sound-dai = <&toacodec TOACODEC_IN_C>; 294 }; 295 }; 296 297 /* hdmi glue */ 298 dai-link-8 { 299 sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>; 300 301 codec { 302 sound-dai = <&hdmi_tx>; 303 }; 304 }; 305 306 /* acodec glue */ 307 dai-link-9 { 308 sound-dai = <&toacodec TOACODEC_OUT>; 309 310 codec { 311 sound-dai = <&acodec>; 312 }; 313 }; 314 }; 315}; 316 317&acodec { 318 AVDD-supply = <&vddao_1v8>; 319 status = "okay"; 320}; 321 322&arb { 323 status = "okay"; 324}; 325 326&clkc_audio { 327 status = "okay"; 328}; 329 330&cpu0 { 331 cpu-supply = <&vddcpu>; 332 operating-points-v2 = <&cpu_opp_table>; 333 clocks = <&clkc CLKID_CPU_CLK>; 334 clock-latency = <50000>; 335}; 336 337&cpu1 { 338 cpu-supply = <&vddcpu>; 339 operating-points-v2 = <&cpu_opp_table>; 340 clocks = <&clkc CLKID_CPU1_CLK>; 341 clock-latency = <50000>; 342}; 343 344&cpu2 { 345 cpu-supply = <&vddcpu>; 346 operating-points-v2 = <&cpu_opp_table>; 347 clocks = <&clkc CLKID_CPU2_CLK>; 348 clock-latency = <50000>; 349}; 350 351&cpu3 { 352 cpu-supply = <&vddcpu>; 353 operating-points-v2 = <&cpu_opp_table>; 354 clocks = <&clkc CLKID_CPU3_CLK>; 355 clock-latency = <50000>; 356}; 357 358&cvbs_vdac_port { 359 cvbs_vdac_out: endpoint { 360 remote-endpoint = <&cvbs_connector_in>; 361 }; 362}; 363 364&ext_mdio { 365 external_phy: ethernet-phy@0 { 366 /* Realtek RTL8211F (0x001cc916) */ 367 reg = <0>; 368 max-speed = <1000>; 369 370 interrupt-parent = <&gpio_intc>; 371 /* MAC_INTR on GPIOZ_14 */ 372 interrupts = <26 IRQ_TYPE_LEVEL_LOW>; 373 }; 374}; 375 376ðmac { 377 pinctrl-0 = <ð_pins>, <ð_rgmii_pins>; 378 pinctrl-names = "default"; 379 status = "okay"; 380 phy-mode = "rgmii-txid"; 381 phy-handle = <&external_phy>; 382}; 383 384&frddr_a { 385 status = "okay"; 386}; 387 388&frddr_b { 389 status = "okay"; 390}; 391 392&frddr_c { 393 status = "okay"; 394}; 395 396&gpio { 397 gpio-line-names = 398 /* GPIOZ */ 399 "ETH_MDIO", /* GPIOZ_0 */ 400 "ETH_MDC", /* GPIOZ_1 */ 401 "ETH_RXCLK", /* GPIOZ_2 */ 402 "ETH_RX_DV", /* GPIOZ_3 */ 403 "ETH_RXD0", /* GPIOZ_4 */ 404 "ETH_RXD1", /* GPIOZ_5 */ 405 "ETH_RXD2", /* GPIOZ_6 */ 406 "ETH_RXD3", /* GPIOZ_7 */ 407 "ETH_TXCLK", /* GPIOZ_8 */ 408 "ETH_TXEN", /* GPIOZ_9 */ 409 "ETH_TXD0", /* GPIOZ_10 */ 410 "ETH_TXD1", /* GPIOZ_11 */ 411 "ETH_TXD2", /* GPIOZ_12 */ 412 "ETH_TXD3", /* GPIOZ_13 */ 413 "ETH_INTR", /* GPIOZ_14 */ 414 "ETH_NRST", /* GPIOZ_15 */ 415 /* GPIOH */ 416 "HDMI_SDA", /* GPIOH_0 */ 417 "HDMI_SCL", /* GPIOH_1 */ 418 "HDMI_HPD", /* GPIOH_2 */ 419 "HDMI_CEC", /* GPIOH_3 */ 420 "VL-RST_N", /* GPIOH_4 */ 421 "CON1-P36", /* GPIOH_5 */ 422 "VL-PWREN", /* GPIOH_6 */ 423 "WiFi_3V3_1V8", /* GPIOH_7 */ 424 "TFLASH_VDD_EN", /* GPIOH_8 */ 425 /* BOOT */ 426 "eMMC_D0", /* BOOT_0 */ 427 "eMMC_D1", /* BOOT_1 */ 428 "eMMC_D2", /* BOOT_2 */ 429 "eMMC_D3", /* BOOT_3 */ 430 "eMMC_D4", /* BOOT_4 */ 431 "eMMC_D5", /* BOOT_5 */ 432 "eMMC_D6", /* BOOT_6 */ 433 "eMMC_D7", /* BOOT_7 */ 434 "eMMC_CLK", /* BOOT_8 */ 435 "", 436 "eMMC_CMD", /* BOOT_10 */ 437 "", 438 "eMMC_RST#", /* BOOT_12 */ 439 "eMMC_DS", /* BOOT_13 */ 440 /* GPIOC */ 441 "SD_D0_B", /* GPIOC_0 */ 442 "SD_D1_B", /* GPIOC_1 */ 443 "SD_D2_B", /* GPIOC_2 */ 444 "SD_D3_B", /* GPIOC_3 */ 445 "SD_CLK_B", /* GPIOC_4 */ 446 "SD_CMD_B", /* GPIOC_5 */ 447 "CARD_EN_DET", /* GPIOC_6 */ 448 "", 449 /* GPIOA */ 450 "", "", "", "", "", "", "", "", 451 "", "", "", "", "", "", 452 "CON1-P27", /* GPIOA_14 */ 453 "CON1-P28", /* GPIOA_15 */ 454 /* GPIOX */ 455 "CON1-P16", /* GPIOX_0 */ 456 "CON1-P18", /* GPIOX_1 */ 457 "CON1-P22", /* GPIOX_2 */ 458 "CON1-P11", /* GPIOX_3 */ 459 "CON1-P13", /* GPIOX_4 */ 460 "CON1-P07", /* GPIOX_5 */ 461 "CON1-P33", /* GPIOX_6 */ 462 "CON1-P15", /* GPIOX_7 */ 463 "CON1-P19", /* GPIOX_8 */ 464 "CON1-P21", /* GPIOX_9 */ 465 "CON1-P24", /* GPIOX_10 */ 466 "CON1-P23", /* GPIOX_11 */ 467 "CON1-P08", /* GPIOX_12 */ 468 "CON1-P10", /* GPIOX_13 */ 469 "CON1-P29", /* GPIOX_14 */ 470 "CON1-P31", /* GPIOX_15 */ 471 "CON1-P26", /* GPIOX_16 */ 472 "CON1-P03", /* GPIOX_17 */ 473 "CON1-P05", /* GPIOX_18 */ 474 "CON1-P32"; /* GPIOX_19 */ 475 476 /* 477 * WARNING: The USB Hub on the BPI-M5 needs a reset signal 478 * to be turned high in order to be detected by the USB Controller 479 * This signal should be handled by a USB specific power sequence 480 * in order to reset the Hub when USB bus is powered down. 481 */ 482 usb-hub { 483 gpio-hog; 484 gpios = <GPIOH_4 GPIO_ACTIVE_HIGH>; 485 output-high; 486 line-name = "usb-hub-reset"; 487 }; 488}; 489 490&gpio_ao { 491 gpio-line-names = 492 /* GPIOAO */ 493 "DEBUG TX", /* GPIOAO_0 */ 494 "DEBUG RX", /* GPIOAO_1 */ 495 "SYS_LED2", /* GPIOAO_2 */ 496 "UPDATE_KEY", /* GPIOAO_3 */ 497 "CON1-P40", /* GPIOAO_4 */ 498 "IR_IN", /* GPIOAO_5 */ 499 "TF_3V3N_1V8_EN", /* GPIOAO_6 */ 500 "CON1-P35", /* GPIOAO_7 */ 501 "CON1-P12", /* GPIOAO_8 */ 502 "CON1-P37", /* GPIOAO_9 */ 503 "CON1-P38", /* GPIOAO_10 */ 504 "SYS_LED", /* GPIOAO_11 */ 505 /* GPIOE */ 506 "VDDEE_PWM", /* GPIOE_0 */ 507 "VDDCPU_PWM", /* GPIOE_1 */ 508 "TF_PWR_EN"; /* GPIOE_2 */ 509}; 510 511&hdmi_tx { 512 status = "okay"; 513 pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>; 514 pinctrl-names = "default"; 515 hdmi-supply = <&dc_in>; 516}; 517 518&hdmi_tx_tmds_port { 519 hdmi_tx_tmds_out: endpoint { 520 remote-endpoint = <&hdmi_connector_in>; 521 }; 522}; 523 524&ir { 525 status = "okay"; 526 pinctrl-0 = <&remote_input_ao_pins>; 527 pinctrl-names = "default"; 528}; 529 530&pwm_AO_cd { 531 pinctrl-0 = <&pwm_ao_d_e_pins>; 532 pinctrl-names = "default"; 533 clocks = <&xtal>; 534 clock-names = "clkin1"; 535 status = "okay"; 536}; 537 538&saradc { 539 status = "okay"; 540 vref-supply = <&vddao_1v8>; 541}; 542 543/* SD card */ 544&sd_emmc_b { 545 status = "okay"; 546 pinctrl-0 = <&sdcard_c_pins>; 547 pinctrl-1 = <&sdcard_clk_gate_c_pins>; 548 pinctrl-names = "default", "clk-gate"; 549 550 bus-width = <4>; 551 cap-sd-highspeed; 552 max-frequency = <50000000>; 553 disable-wp; 554 555 /* TOFIX: SD card is barely usable in SDR modes */ 556 557 cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; 558 vmmc-supply = <&tflash_vdd>; 559 vqmmc-supply = <&vddio_c>; 560}; 561 562/* eMMC */ 563&sd_emmc_c { 564 status = "okay"; 565 pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>; 566 pinctrl-1 = <&emmc_clk_gate_pins>; 567 pinctrl-names = "default", "clk-gate"; 568 569 bus-width = <8>; 570 cap-mmc-highspeed; 571 mmc-ddr-1_8v; 572 mmc-hs200-1_8v; 573 max-frequency = <200000000>; 574 disable-wp; 575 576 mmc-pwrseq = <&emmc_pwrseq>; 577 vmmc-supply = <&vddao_3v3>; 578 vqmmc-supply = <&emmc_1v8>; 579}; 580 581&tdmif_b { 582 status = "okay"; 583}; 584 585&tdmif_c { 586 status = "okay"; 587}; 588 589&tdmin_a { 590 status = "okay"; 591}; 592 593&tdmin_b { 594 status = "okay"; 595}; 596 597&tdmin_c { 598 status = "okay"; 599}; 600 601&tdmout_b { 602 status = "okay"; 603}; 604 605&tdmout_c { 606 status = "okay"; 607}; 608 609&toacodec { 610 status = "okay"; 611}; 612 613&tohdmitx { 614 status = "okay"; 615}; 616 617&toddr_a { 618 status = "okay"; 619}; 620 621&toddr_b { 622 status = "okay"; 623}; 624 625&toddr_c { 626 status = "okay"; 627}; 628 629&uart_AO { 630 status = "okay"; 631 pinctrl-0 = <&uart_ao_a_pins>; 632 pinctrl-names = "default"; 633}; 634 635&usb { 636 status = "okay"; 637}; 638 639&usb2_phy0 { 640 phy-supply = <&dc_in>; 641}; 642 643&usb2_phy1 { 644 /* Enable the hub which is connected to this port */ 645 phy-supply = <&vl_pwr_en>; 646}; 647