The first patch in this series fixes an SD card (re)boot issue on the
BPI-M5. The second removes a redundant status from the sound node so
we don't carry it forward when subsequent patches convert the (fixed)
dts into a common dtsi, then add support for BPI-M2-PRO which is based
on the BPI-M5 board design.
Changes from v1:
- Added patch to remove sound node status in meson-sm1-bananapi-m5.dts
- Added Krzysztof's ack to bindings patch
- Revised meson-sm1-bananapi-m2-pro.dts to remove sound node status
- Minor wording changes
Christian Hewitt (5):
arm64: dts: meson: bananapi-m5: switch VDDIO_C pin to OPEN_DRAIN
arm64: dts: meson: bananapi-m5: remove redundant status from sound
node
arm64: dts: meson: bananapi-m5: convert dts to dtsi
dt-bindings: arm: amlogic: add support for BananaPi M2-Pro
arm64: dts: meson: add support for BananaPi M2-Pro
.../devicetree/bindings/arm/amlogic.yaml | 1 +
arch/arm64/boot/dts/amlogic/Makefile | 1 +
.../dts/amlogic/meson-sm1-bananapi-m2-pro.dts | 97 ++++
.../dts/amlogic/meson-sm1-bananapi-m5.dts | 428 +----------------
.../boot/dts/amlogic/meson-sm1-bananapi.dtsi | 435 ++++++++++++++++++
5 files changed, 535 insertions(+), 427 deletions(-)
create mode 100644 arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts
create mode 100644 arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi
--
2.34.1
For proper warm (re)boot from SD card the BPI-M5 board requires TFLASH_VDD_EN
and VDDIO_C pins to be switched to high impedance mode. This can be achieved
using OPEN_DRAIN instead of ACTIVE_HIGH to leave the GPIO pins in input mode
and retain high state (pin has the pull-up).
This change is inspired by meson-sm1-odroid.dtsi where OPEN_DRAIN has been
used to resolve similar problems with the Odroid C4 board (TF_IO in the C4
dts is the equivalent regulator).
Fixes: 976e920183e4 ("arm64: dts: meson-sm1: add Banana PI BPI-M5 board dts")
Suggested-by: Neil Armstrong <[email protected]>
Signed-off-by: Christian Hewitt <[email protected]>
---
arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
index 028220ed45ad..3c1267a7ffef 100644
--- a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
@@ -123,7 +123,7 @@ vddio_c: regulator-vddio_c {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
- enable-gpio = <&gpio_ao GPIOE_2 GPIO_ACTIVE_HIGH>;
+ enable-gpio = <&gpio_ao GPIOE_2 GPIO_OPEN_DRAIN>;
enable-active-high;
regulator-always-on;
--
2.34.1
The sound device is enabled by default so remove the redundant status.
Signed-off-by: Christian Hewitt <[email protected]>
---
arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts | 1 -
1 file changed, 1 deletion(-)
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
index 3c1267a7ffef..86f0afe6491e 100644
--- a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
@@ -233,7 +233,6 @@ sound {
assigned-clock-rates = <294912000>,
<270950400>,
<393216000>;
- status = "okay";
dai-link-0 {
sound-dai = <&frddr_a>;
--
2.34.1
Convert the BPI-M5 dts into meson-sm1-bananapi.dtsi to support the
addition of new boards based on the same design.
Signed-off-by: Christian Hewitt <[email protected]>
---
.../dts/amlogic/meson-sm1-bananapi-m5.dts | 427 +----------------
.../boot/dts/amlogic/meson-sm1-bananapi.dtsi | 435 ++++++++++++++++++
2 files changed, 436 insertions(+), 426 deletions(-)
create mode 100644 arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
index 86f0afe6491e..f045bf851638 100644
--- a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
@@ -6,10 +6,7 @@
/dts-v1/;
-#include "meson-sm1.dtsi"
-#include <dt-bindings/leds/common.h>
-#include <dt-bindings/input/linux-event-codes.h>
-#include <dt-bindings/gpio/meson-g12a-gpio.h>
+#include "meson-sm1-bananapi.dtsi"
#include <dt-bindings/sound/meson-g12a-toacodec.h>
#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
@@ -17,28 +14,6 @@ / {
compatible = "bananapi,bpi-m5", "amlogic,sm1";
model = "Banana Pi BPI-M5";
- adc_keys {
- compatible = "adc-keys";
- io-channels = <&saradc 2>;
- io-channel-names = "buttons";
- keyup-threshold-microvolt = <1800000>;
-
- key {
- label = "SW3";
- linux,code = <BTN_3>;
- press-threshold-microvolt = <1700000>;
- };
- };
-
- aliases {
- serial0 = &uart_AO;
- ethernet0 = ðmac;
- };
-
- chosen {
- stdout-path = "serial0:115200n8";
- };
-
/* TOFIX: handle CVBS_DET on SARADC channel 0 */
cvbs-connector {
compatible = "composite-video-connector";
@@ -50,150 +25,6 @@ cvbs_connector_in: endpoint {
};
};
- emmc_pwrseq: emmc-pwrseq {
- compatible = "mmc-pwrseq-emmc";
- reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
- };
-
- gpio-keys {
- compatible = "gpio-keys";
-
- key {
- label = "SW1";
- linux,code = <BTN_1>;
- gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
- interrupt-parent = <&gpio_intc>;
- interrupts = <3 IRQ_TYPE_EDGE_BOTH>;
- };
- };
-
- hdmi-connector {
- compatible = "hdmi-connector";
- type = "a";
-
- port {
- hdmi_connector_in: endpoint {
- remote-endpoint = <&hdmi_tx_tmds_out>;
- };
- };
- };
-
- leds {
- compatible = "gpio-leds";
-
- led-green {
- color = <LED_COLOR_ID_GREEN>;
- function = LED_FUNCTION_STATUS;
- gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
- };
-
- led-blue {
- color = <LED_COLOR_ID_BLUE>;
- function = LED_FUNCTION_STATUS;
- gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_LOW>;
- linux,default-trigger = "heartbeat";
- };
- };
-
- memory@0 {
- device_type = "memory";
- reg = <0x0 0x0 0x0 0x40000000>;
- };
-
- emmc_1v8: regulator-emmc_1v8 {
- compatible = "regulator-fixed";
- regulator-name = "EMMC_1V8";
- regulator-min-microvolt = <1800000>;
- regulator-max-microvolt = <1800000>;
- vin-supply = <&vddao_3v3>;
- regulator-always-on;
- };
-
- dc_in: regulator-dc_in {
- compatible = "regulator-fixed";
- regulator-name = "DC_IN";
- regulator-min-microvolt = <5000000>;
- regulator-max-microvolt = <5000000>;
- regulator-always-on;
- };
-
- vddio_c: regulator-vddio_c {
- compatible = "regulator-gpio";
- regulator-name = "VDDIO_C";
- regulator-min-microvolt = <1800000>;
- regulator-max-microvolt = <3300000>;
-
- enable-gpio = <&gpio_ao GPIOE_2 GPIO_OPEN_DRAIN>;
- enable-active-high;
- regulator-always-on;
-
- gpios = <&gpio_ao GPIOAO_6 GPIO_OPEN_DRAIN>;
- gpios-states = <1>;
-
- states = <1800000 0>,
- <3300000 1>;
- };
-
- tflash_vdd: regulator-tflash_vdd {
- compatible = "regulator-fixed";
- regulator-name = "TFLASH_VDD";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- vin-supply = <&dc_in>;
- gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
- enable-active-high;
- regulator-always-on;
- };
-
- vddao_1v8: regulator-vddao_1v8 {
- compatible = "regulator-fixed";
- regulator-name = "VDDAO_1V8";
- regulator-min-microvolt = <1800000>;
- regulator-max-microvolt = <1800000>;
- vin-supply = <&vddao_3v3>;
- regulator-always-on;
- };
-
- vddao_3v3: regulator-vddao_3v3 {
- compatible = "regulator-fixed";
- regulator-name = "VDDAO_3V3";
- regulator-min-microvolt = <3300000>;
- regulator-max-microvolt = <3300000>;
- vin-supply = <&dc_in>;
- regulator-always-on;
- };
-
- vddcpu: regulator-vddcpu {
- /*
- * SY8120B1ABC DC/DC Regulator.
- */
- compatible = "pwm-regulator";
-
- regulator-name = "VDDCPU";
- regulator-min-microvolt = <690000>;
- regulator-max-microvolt = <1050000>;
-
- pwm-supply = <&dc_in>;
-
- pwms = <&pwm_AO_cd 1 1250 0>;
- pwm-dutycycle-range = <100 0>;
-
- regulator-boot-on;
- regulator-always-on;
- };
-
- /* USB Hub Power Enable */
- vl_pwr_en: regulator-vl_pwr_en {
- compatible = "regulator-fixed";
- regulator-name = "VL_PWR_EN";
- regulator-min-microvolt = <5000000>;
- regulator-max-microvolt = <5000000>;
- vin-supply = <&dc_in>;
-
- gpio = <&gpio GPIOH_6 GPIO_ACTIVE_HIGH>;
- enable-active-high;
- };
-
sound {
compatible = "amlogic,axg-sound-card";
model = "BPI-M5";
@@ -318,68 +149,17 @@ &acodec {
status = "okay";
};
-&arb {
- status = "okay";
-};
&clkc_audio {
status = "okay";
};
-&cpu0 {
- cpu-supply = <&vddcpu>;
- operating-points-v2 = <&cpu_opp_table>;
- clocks = <&clkc CLKID_CPU_CLK>;
- clock-latency = <50000>;
-};
-
-&cpu1 {
- cpu-supply = <&vddcpu>;
- operating-points-v2 = <&cpu_opp_table>;
- clocks = <&clkc CLKID_CPU1_CLK>;
- clock-latency = <50000>;
-};
-
-&cpu2 {
- cpu-supply = <&vddcpu>;
- operating-points-v2 = <&cpu_opp_table>;
- clocks = <&clkc CLKID_CPU2_CLK>;
- clock-latency = <50000>;
-};
-
-&cpu3 {
- cpu-supply = <&vddcpu>;
- operating-points-v2 = <&cpu_opp_table>;
- clocks = <&clkc CLKID_CPU3_CLK>;
- clock-latency = <50000>;
-};
-
&cvbs_vdac_port {
cvbs_vdac_out: endpoint {
remote-endpoint = <&cvbs_connector_in>;
};
};
-&ext_mdio {
- external_phy: ethernet-phy@0 {
- /* Realtek RTL8211F (0x001cc916) */
- reg = <0>;
- max-speed = <1000>;
-
- interrupt-parent = <&gpio_intc>;
- /* MAC_INTR on GPIOZ_14 */
- interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
- };
-};
-
-ðmac {
- pinctrl-0 = <ð_pins>, <ð_rgmii_pins>;
- pinctrl-names = "default";
- status = "okay";
- phy-mode = "rgmii-txid";
- phy-handle = <&external_phy>;
-};
-
&frddr_a {
status = "okay";
};
@@ -392,192 +172,6 @@ &frddr_c {
status = "okay";
};
-&gpio {
- gpio-line-names =
- /* GPIOZ */
- "ETH_MDIO", /* GPIOZ_0 */
- "ETH_MDC", /* GPIOZ_1 */
- "ETH_RXCLK", /* GPIOZ_2 */
- "ETH_RX_DV", /* GPIOZ_3 */
- "ETH_RXD0", /* GPIOZ_4 */
- "ETH_RXD1", /* GPIOZ_5 */
- "ETH_RXD2", /* GPIOZ_6 */
- "ETH_RXD3", /* GPIOZ_7 */
- "ETH_TXCLK", /* GPIOZ_8 */
- "ETH_TXEN", /* GPIOZ_9 */
- "ETH_TXD0", /* GPIOZ_10 */
- "ETH_TXD1", /* GPIOZ_11 */
- "ETH_TXD2", /* GPIOZ_12 */
- "ETH_TXD3", /* GPIOZ_13 */
- "ETH_INTR", /* GPIOZ_14 */
- "ETH_NRST", /* GPIOZ_15 */
- /* GPIOH */
- "HDMI_SDA", /* GPIOH_0 */
- "HDMI_SCL", /* GPIOH_1 */
- "HDMI_HPD", /* GPIOH_2 */
- "HDMI_CEC", /* GPIOH_3 */
- "VL-RST_N", /* GPIOH_4 */
- "CON1-P36", /* GPIOH_5 */
- "VL-PWREN", /* GPIOH_6 */
- "WiFi_3V3_1V8", /* GPIOH_7 */
- "TFLASH_VDD_EN", /* GPIOH_8 */
- /* BOOT */
- "eMMC_D0", /* BOOT_0 */
- "eMMC_D1", /* BOOT_1 */
- "eMMC_D2", /* BOOT_2 */
- "eMMC_D3", /* BOOT_3 */
- "eMMC_D4", /* BOOT_4 */
- "eMMC_D5", /* BOOT_5 */
- "eMMC_D6", /* BOOT_6 */
- "eMMC_D7", /* BOOT_7 */
- "eMMC_CLK", /* BOOT_8 */
- "",
- "eMMC_CMD", /* BOOT_10 */
- "",
- "eMMC_RST#", /* BOOT_12 */
- "eMMC_DS", /* BOOT_13 */
- "", "",
- /* GPIOC */
- "SD_D0_B", /* GPIOC_0 */
- "SD_D1_B", /* GPIOC_1 */
- "SD_D2_B", /* GPIOC_2 */
- "SD_D3_B", /* GPIOC_3 */
- "SD_CLK_B", /* GPIOC_4 */
- "SD_CMD_B", /* GPIOC_5 */
- "CARD_EN_DET", /* GPIOC_6 */
- "",
- /* GPIOA */
- "", "", "", "", "", "", "", "",
- "", "", "", "", "", "",
- "CON1-P27", /* GPIOA_14 */
- "CON1-P28", /* GPIOA_15 */
- /* GPIOX */
- "CON1-P16", /* GPIOX_0 */
- "CON1-P18", /* GPIOX_1 */
- "CON1-P22", /* GPIOX_2 */
- "CON1-P11", /* GPIOX_3 */
- "CON1-P13", /* GPIOX_4 */
- "CON1-P07", /* GPIOX_5 */
- "CON1-P33", /* GPIOX_6 */
- "CON1-P15", /* GPIOX_7 */
- "CON1-P19", /* GPIOX_8 */
- "CON1-P21", /* GPIOX_9 */
- "CON1-P24", /* GPIOX_10 */
- "CON1-P23", /* GPIOX_11 */
- "CON1-P08", /* GPIOX_12 */
- "CON1-P10", /* GPIOX_13 */
- "CON1-P29", /* GPIOX_14 */
- "CON1-P31", /* GPIOX_15 */
- "CON1-P26", /* GPIOX_16 */
- "CON1-P03", /* GPIOX_17 */
- "CON1-P05", /* GPIOX_18 */
- "CON1-P32"; /* GPIOX_19 */
-
- /*
- * WARNING: The USB Hub on the BPI-M5 needs a reset signal
- * to be turned high in order to be detected by the USB Controller
- * This signal should be handled by a USB specific power sequence
- * in order to reset the Hub when USB bus is powered down.
- */
- usb-hub {
- gpio-hog;
- gpios = <GPIOH_4 GPIO_ACTIVE_HIGH>;
- output-high;
- line-name = "usb-hub-reset";
- };
-};
-
-&gpio_ao {
- gpio-line-names =
- /* GPIOAO */
- "DEBUG TX", /* GPIOAO_0 */
- "DEBUG RX", /* GPIOAO_1 */
- "SYS_LED2", /* GPIOAO_2 */
- "UPDATE_KEY", /* GPIOAO_3 */
- "CON1-P40", /* GPIOAO_4 */
- "IR_IN", /* GPIOAO_5 */
- "TF_3V3N_1V8_EN", /* GPIOAO_6 */
- "CON1-P35", /* GPIOAO_7 */
- "CON1-P12", /* GPIOAO_8 */
- "CON1-P37", /* GPIOAO_9 */
- "CON1-P38", /* GPIOAO_10 */
- "SYS_LED", /* GPIOAO_11 */
- /* GPIOE */
- "VDDEE_PWM", /* GPIOE_0 */
- "VDDCPU_PWM", /* GPIOE_1 */
- "TF_PWR_EN"; /* GPIOE_2 */
-};
-
-&hdmi_tx {
- status = "okay";
- pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
- pinctrl-names = "default";
- hdmi-supply = <&dc_in>;
-};
-
-&hdmi_tx_tmds_port {
- hdmi_tx_tmds_out: endpoint {
- remote-endpoint = <&hdmi_connector_in>;
- };
-};
-
-&ir {
- status = "okay";
- pinctrl-0 = <&remote_input_ao_pins>;
- pinctrl-names = "default";
-};
-
-&pwm_AO_cd {
- pinctrl-0 = <&pwm_ao_d_e_pins>;
- pinctrl-names = "default";
- clocks = <&xtal>;
- clock-names = "clkin1";
- status = "okay";
-};
-
-&saradc {
- status = "okay";
- vref-supply = <&vddao_1v8>;
-};
-
-/* SD card */
-&sd_emmc_b {
- status = "okay";
- pinctrl-0 = <&sdcard_c_pins>;
- pinctrl-1 = <&sdcard_clk_gate_c_pins>;
- pinctrl-names = "default", "clk-gate";
-
- bus-width = <4>;
- cap-sd-highspeed;
- max-frequency = <50000000>;
- disable-wp;
-
- /* TOFIX: SD card is barely usable in SDR modes */
-
- cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
- vmmc-supply = <&tflash_vdd>;
- vqmmc-supply = <&vddio_c>;
-};
-
-/* eMMC */
-&sd_emmc_c {
- status = "okay";
- pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
- pinctrl-1 = <&emmc_clk_gate_pins>;
- pinctrl-names = "default", "clk-gate";
-
- bus-width = <8>;
- cap-mmc-highspeed;
- mmc-ddr-1_8v;
- mmc-hs200-1_8v;
- max-frequency = <200000000>;
- disable-wp;
-
- mmc-pwrseq = <&emmc_pwrseq>;
- vmmc-supply = <&vddao_3v3>;
- vqmmc-supply = <&emmc_1v8>;
-};
-
&tdmif_b {
status = "okay";
};
@@ -625,22 +219,3 @@ &toddr_b {
&toddr_c {
status = "okay";
};
-
-&uart_AO {
- status = "okay";
- pinctrl-0 = <&uart_ao_a_pins>;
- pinctrl-names = "default";
-};
-
-&usb {
- status = "okay";
-};
-
-&usb2_phy0 {
- phy-supply = <&dc_in>;
-};
-
-&usb2_phy1 {
- /* Enable the hub which is connected to this port */
- phy-supply = <&vl_pwr_en>;
-};
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi
new file mode 100644
index 000000000000..c914f1148185
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi
@@ -0,0 +1,435 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2021 BayLibre SAS
+ * Author: Neil Armstrong <[email protected]>
+ */
+
+#include "meson-sm1.dtsi"
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/input/linux-event-codes.h>
+#include <dt-bindings/gpio/meson-g12a-gpio.h>
+
+/ {
+ adc_keys {
+ compatible = "adc-keys";
+ io-channels = <&saradc 2>;
+ io-channel-names = "buttons";
+ keyup-threshold-microvolt = <1800000>;
+
+ key {
+ label = "SW3";
+ linux,code = <BTN_3>;
+ press-threshold-microvolt = <1700000>;
+ };
+ };
+
+ aliases {
+ serial0 = &uart_AO;
+ ethernet0 = ðmac;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ emmc_pwrseq: emmc-pwrseq {
+ compatible = "mmc-pwrseq-emmc";
+ reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
+ };
+
+ gpio-keys {
+ compatible = "gpio-keys";
+
+ key {
+ label = "SW1";
+ linux,code = <BTN_1>;
+ gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
+ interrupt-parent = <&gpio_intc>;
+ interrupts = <3 IRQ_TYPE_EDGE_BOTH>;
+ };
+ };
+
+ hdmi-connector {
+ compatible = "hdmi-connector";
+ type = "a";
+
+ port {
+ hdmi_connector_in: endpoint {
+ remote-endpoint = <&hdmi_tx_tmds_out>;
+ };
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led-green {
+ color = <LED_COLOR_ID_GREEN>;
+ function = LED_FUNCTION_STATUS;
+ gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
+ };
+
+ led-blue {
+ color = <LED_COLOR_ID_BLUE>;
+ function = LED_FUNCTION_STATUS;
+ gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "heartbeat";
+ };
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x0 0x0 0x40000000>;
+ };
+
+ emmc_1v8: regulator-emmc_1v8 {
+ compatible = "regulator-fixed";
+ regulator-name = "EMMC_1V8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ vin-supply = <&vddao_3v3>;
+ regulator-always-on;
+ };
+
+ dc_in: regulator-dc_in {
+ compatible = "regulator-fixed";
+ regulator-name = "DC_IN";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-always-on;
+ };
+
+ vddio_c: regulator-vddio_c {
+ compatible = "regulator-gpio";
+ regulator-name = "VDDIO_C";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+
+ enable-gpio = <&gpio_ao GPIOE_2 GPIO_OPEN_DRAIN>;
+ enable-active-high;
+ regulator-always-on;
+
+ gpios = <&gpio_ao GPIOAO_6 GPIO_OPEN_DRAIN>;
+ gpios-states = <1>;
+
+ states = <1800000 0>,
+ <3300000 1>;
+ };
+
+ tflash_vdd: regulator-tflash_vdd {
+ compatible = "regulator-fixed";
+ regulator-name = "TFLASH_VDD";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <&dc_in>;
+ gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
+ enable-active-high;
+ regulator-always-on;
+ };
+
+ vddao_1v8: regulator-vddao_1v8 {
+ compatible = "regulator-fixed";
+ regulator-name = "VDDAO_1V8";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ vin-supply = <&vddao_3v3>;
+ regulator-always-on;
+ };
+
+ vddao_3v3: regulator-vddao_3v3 {
+ compatible = "regulator-fixed";
+ regulator-name = "VDDAO_3V3";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <&dc_in>;
+ regulator-always-on;
+ };
+
+ vddcpu: regulator-vddcpu {
+ /*
+ * SY8120B1ABC DC/DC Regulator.
+ */
+ compatible = "pwm-regulator";
+
+ regulator-name = "VDDCPU";
+ regulator-min-microvolt = <690000>;
+ regulator-max-microvolt = <1050000>;
+
+ pwm-supply = <&dc_in>;
+
+ pwms = <&pwm_AO_cd 1 1250 0>;
+ pwm-dutycycle-range = <100 0>;
+
+ regulator-boot-on;
+ regulator-always-on;
+ };
+
+ /* USB Hub Power Enable */
+ vl_pwr_en: regulator-vl_pwr_en {
+ compatible = "regulator-fixed";
+ regulator-name = "VL_PWR_EN";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ vin-supply = <&dc_in>;
+
+ gpio = <&gpio GPIOH_6 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ };
+};
+
+&arb {
+ status = "okay";
+};
+
+&cpu0 {
+ cpu-supply = <&vddcpu>;
+ operating-points-v2 = <&cpu_opp_table>;
+ clocks = <&clkc CLKID_CPU_CLK>;
+ clock-latency = <50000>;
+};
+
+&cpu1 {
+ cpu-supply = <&vddcpu>;
+ operating-points-v2 = <&cpu_opp_table>;
+ clocks = <&clkc CLKID_CPU1_CLK>;
+ clock-latency = <50000>;
+};
+
+&cpu2 {
+ cpu-supply = <&vddcpu>;
+ operating-points-v2 = <&cpu_opp_table>;
+ clocks = <&clkc CLKID_CPU2_CLK>;
+ clock-latency = <50000>;
+};
+
+&cpu3 {
+ cpu-supply = <&vddcpu>;
+ operating-points-v2 = <&cpu_opp_table>;
+ clocks = <&clkc CLKID_CPU3_CLK>;
+ clock-latency = <50000>;
+};
+
+&ext_mdio {
+ external_phy: ethernet-phy@0 {
+ /* Realtek RTL8211F (0x001cc916) */
+ reg = <0>;
+ max-speed = <1000>;
+
+ interrupt-parent = <&gpio_intc>;
+ /* MAC_INTR on GPIOZ_14 */
+ interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
+ };
+};
+
+ðmac {
+ pinctrl-0 = <ð_pins>, <ð_rgmii_pins>;
+ pinctrl-names = "default";
+ status = "okay";
+ phy-mode = "rgmii-txid";
+ phy-handle = <&external_phy>;
+};
+
+&gpio {
+ gpio-line-names =
+ /* GPIOZ */
+ "ETH_MDIO", /* GPIOZ_0 */
+ "ETH_MDC", /* GPIOZ_1 */
+ "ETH_RXCLK", /* GPIOZ_2 */
+ "ETH_RX_DV", /* GPIOZ_3 */
+ "ETH_RXD0", /* GPIOZ_4 */
+ "ETH_RXD1", /* GPIOZ_5 */
+ "ETH_RXD2", /* GPIOZ_6 */
+ "ETH_RXD3", /* GPIOZ_7 */
+ "ETH_TXCLK", /* GPIOZ_8 */
+ "ETH_TXEN", /* GPIOZ_9 */
+ "ETH_TXD0", /* GPIOZ_10 */
+ "ETH_TXD1", /* GPIOZ_11 */
+ "ETH_TXD2", /* GPIOZ_12 */
+ "ETH_TXD3", /* GPIOZ_13 */
+ "ETH_INTR", /* GPIOZ_14 */
+ "ETH_NRST", /* GPIOZ_15 */
+ /* GPIOH */
+ "HDMI_SDA", /* GPIOH_0 */
+ "HDMI_SCL", /* GPIOH_1 */
+ "HDMI_HPD", /* GPIOH_2 */
+ "HDMI_CEC", /* GPIOH_3 */
+ "VL-RST_N", /* GPIOH_4 */
+ "CON1-P36", /* GPIOH_5 */
+ "VL-PWREN", /* GPIOH_6 */
+ "WiFi_3V3_1V8", /* GPIOH_7 */
+ "TFLASH_VDD_EN", /* GPIOH_8 */
+ /* BOOT */
+ "eMMC_D0", /* BOOT_0 */
+ "eMMC_D1", /* BOOT_1 */
+ "eMMC_D2", /* BOOT_2 */
+ "eMMC_D3", /* BOOT_3 */
+ "eMMC_D4", /* BOOT_4 */
+ "eMMC_D5", /* BOOT_5 */
+ "eMMC_D6", /* BOOT_6 */
+ "eMMC_D7", /* BOOT_7 */
+ "eMMC_CLK", /* BOOT_8 */
+ "",
+ "eMMC_CMD", /* BOOT_10 */
+ "",
+ "eMMC_RST#", /* BOOT_12 */
+ "eMMC_DS", /* BOOT_13 */
+ "", "",
+ /* GPIOC */
+ "SD_D0_B", /* GPIOC_0 */
+ "SD_D1_B", /* GPIOC_1 */
+ "SD_D2_B", /* GPIOC_2 */
+ "SD_D3_B", /* GPIOC_3 */
+ "SD_CLK_B", /* GPIOC_4 */
+ "SD_CMD_B", /* GPIOC_5 */
+ "CARD_EN_DET", /* GPIOC_6 */
+ "",
+ /* GPIOA */
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "",
+ "CON1-P27", /* GPIOA_14 */
+ "CON1-P28", /* GPIOA_15 */
+ /* GPIOX */
+ "CON1-P16", /* GPIOX_0 */
+ "CON1-P18", /* GPIOX_1 */
+ "CON1-P22", /* GPIOX_2 */
+ "CON1-P11", /* GPIOX_3 */
+ "CON1-P13", /* GPIOX_4 */
+ "CON1-P07", /* GPIOX_5 */
+ "CON1-P33", /* GPIOX_6 */
+ "CON1-P15", /* GPIOX_7 */
+ "CON1-P19", /* GPIOX_8 */
+ "CON1-P21", /* GPIOX_9 */
+ "CON1-P24", /* GPIOX_10 */
+ "CON1-P23", /* GPIOX_11 */
+ "CON1-P08", /* GPIOX_12 */
+ "CON1-P10", /* GPIOX_13 */
+ "CON1-P29", /* GPIOX_14 */
+ "CON1-P31", /* GPIOX_15 */
+ "CON1-P26", /* GPIOX_16 */
+ "CON1-P03", /* GPIOX_17 */
+ "CON1-P05", /* GPIOX_18 */
+ "CON1-P32"; /* GPIOX_19 */
+
+ /*
+ * WARNING: The USB Hub needs a reset signal to be turned high in
+ * order to be detected by the USB Controller. This signal should
+ * be handled by a USB specific power sequence to reset the Hub
+ * when the USB bus is powered down.
+ */
+ usb-hub {
+ gpio-hog;
+ gpios = <GPIOH_4 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "usb-hub-reset";
+ };
+};
+
+&gpio_ao {
+ gpio-line-names =
+ /* GPIOAO */
+ "DEBUG TX", /* GPIOAO_0 */
+ "DEBUG RX", /* GPIOAO_1 */
+ "SYS_LED2", /* GPIOAO_2 */
+ "UPDATE_KEY", /* GPIOAO_3 */
+ "CON1-P40", /* GPIOAO_4 */
+ "IR_IN", /* GPIOAO_5 */
+ "TF_3V3N_1V8_EN", /* GPIOAO_6 */
+ "CON1-P35", /* GPIOAO_7 */
+ "CON1-P12", /* GPIOAO_8 */
+ "CON1-P37", /* GPIOAO_9 */
+ "CON1-P38", /* GPIOAO_10 */
+ "SYS_LED", /* GPIOAO_11 */
+ /* GPIOE */
+ "VDDEE_PWM", /* GPIOE_0 */
+ "VDDCPU_PWM", /* GPIOE_1 */
+ "TF_PWR_EN"; /* GPIOE_2 */
+};
+
+&hdmi_tx {
+ status = "okay";
+ pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
+ pinctrl-names = "default";
+ hdmi-supply = <&dc_in>;
+};
+
+&hdmi_tx_tmds_port {
+ hdmi_tx_tmds_out: endpoint {
+ remote-endpoint = <&hdmi_connector_in>;
+ };
+};
+
+&ir {
+ status = "okay";
+ pinctrl-0 = <&remote_input_ao_pins>;
+ pinctrl-names = "default";
+};
+
+&pwm_AO_cd {
+ pinctrl-0 = <&pwm_ao_d_e_pins>;
+ pinctrl-names = "default";
+ clocks = <&xtal>;
+ clock-names = "clkin1";
+ status = "okay";
+};
+
+&saradc {
+ status = "okay";
+ vref-supply = <&vddao_1v8>;
+};
+
+/* SD card */
+&sd_emmc_b {
+ status = "okay";
+ pinctrl-0 = <&sdcard_c_pins>;
+ pinctrl-1 = <&sdcard_clk_gate_c_pins>;
+ pinctrl-names = "default", "clk-gate";
+
+ bus-width = <4>;
+ cap-sd-highspeed;
+ max-frequency = <50000000>;
+ disable-wp;
+
+ /* TOFIX: SD card is barely usable in SDR modes */
+
+ cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
+ vmmc-supply = <&tflash_vdd>;
+ vqmmc-supply = <&vddio_c>;
+};
+
+/* eMMC */
+&sd_emmc_c {
+ status = "okay";
+ pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
+ pinctrl-1 = <&emmc_clk_gate_pins>;
+ pinctrl-names = "default", "clk-gate";
+
+ bus-width = <8>;
+ cap-mmc-highspeed;
+ mmc-ddr-1_8v;
+ mmc-hs200-1_8v;
+ max-frequency = <200000000>;
+ disable-wp;
+
+ mmc-pwrseq = <&emmc_pwrseq>;
+ vmmc-supply = <&vddao_3v3>;
+ vqmmc-supply = <&emmc_1v8>;
+};
+
+&uart_AO {
+ status = "okay";
+ pinctrl-0 = <&uart_ao_a_pins>;
+ pinctrl-names = "default";
+};
+
+&usb {
+ status = "okay";
+};
+
+&usb2_phy0 {
+ phy-supply = <&dc_in>;
+};
+
+&usb2_phy1 {
+ /* Enable the hub which is connected to this port */
+ phy-supply = <&vl_pwr_en>;
+};
--
2.34.1
BPI-M2-PRO is based upon the BPI-M5 using the Amlogic SM1 (S905X3) chipset.
Signed-off-by: Christian Hewitt <[email protected]>
Acked-by: Krzysztof Kozlowski <[email protected]>
---
Documentation/devicetree/bindings/arm/amlogic.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/arm/amlogic.yaml b/Documentation/devicetree/bindings/arm/amlogic.yaml
index e16b5fa55847..e935c92ab346 100644
--- a/Documentation/devicetree/bindings/arm/amlogic.yaml
+++ b/Documentation/devicetree/bindings/arm/amlogic.yaml
@@ -176,6 +176,7 @@ properties:
- enum:
- amediatech,x96-air
- amediatech,x96-air-gbit
+ - bananapi,bpi-m2-pro
- bananapi,bpi-m5
- cyx,a95xf3-air
- cyx,a95xf3-air-gbit
--
2.34.1
BPI-M2-PRO is based upon the BPI-M5 design except for a different
physical board layout and the following changes:
- USB 3.0 ports reduced from 4x to 2x
- 3.5mm Combined CVBS/Audio Jack removed
- RTL8821BU WiFi/BT module (internal USB connected)
Signed-off-by: Christian Hewitt <[email protected]>
---
arch/arm64/boot/dts/amlogic/Makefile | 1 +
.../dts/amlogic/meson-sm1-bananapi-m2-pro.dts | 97 +++++++++++++++++++
2 files changed, 98 insertions(+)
create mode 100644 arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts
diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
index 97b42e2100e0..644451794aca 100644
--- a/arch/arm64/boot/dts/amlogic/Makefile
+++ b/arch/arm64/boot/dts/amlogic/Makefile
@@ -60,6 +60,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-gxm-wetek-core2.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-s4-s805x2-aq222.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-a95xf3-air-gbit.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-a95xf3-air.dtb
+dtb-$(CONFIG_ARCH_MESON) += meson-sm1-bananapi-m2-pro.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-bananapi-m5.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-h96-max.dtb
dtb-$(CONFIG_ARCH_MESON) += meson-sm1-khadas-vim3l.dtb
diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts
new file mode 100644
index 000000000000..586034316ec3
--- /dev/null
+++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts
@@ -0,0 +1,97 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2021 BayLibre SAS
+ * Author: Neil Armstrong <[email protected]>
+ */
+
+/dts-v1/;
+
+#include "meson-sm1-bananapi.dtsi"
+#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
+
+/ {
+ compatible = "bananapi,bpi-m2-pro", "amlogic,sm1";
+ model = "Banana Pi BPI-M2-PRO";
+
+ sound {
+ compatible = "amlogic,axg-sound-card";
+ model = "BPI-M2-PRO";
+ audio-aux-devs = <&tdmout_b>;
+ audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
+ "TDMOUT_B IN 1", "FRDDR_B OUT 1",
+ "TDMOUT_B IN 2", "FRDDR_C OUT 1",
+ "TDM_B Playback", "TDMOUT_B OUT";
+
+ assigned-clocks = <&clkc CLKID_MPLL2>,
+ <&clkc CLKID_MPLL0>,
+ <&clkc CLKID_MPLL1>;
+ assigned-clock-parents = <0>, <0>, <0>;
+ assigned-clock-rates = <294912000>,
+ <270950400>,
+ <393216000>;
+
+ dai-link-0 {
+ sound-dai = <&frddr_a>;
+ };
+
+ dai-link-1 {
+ sound-dai = <&frddr_b>;
+ };
+
+ dai-link-2 {
+ sound-dai = <&frddr_c>;
+ };
+
+ /* 8ch hdmi interface */
+ dai-link-3 {
+ sound-dai = <&tdmif_b>;
+ dai-format = "i2s";
+ dai-tdm-slot-tx-mask-0 = <1 1>;
+ dai-tdm-slot-tx-mask-1 = <1 1>;
+ dai-tdm-slot-tx-mask-2 = <1 1>;
+ dai-tdm-slot-tx-mask-3 = <1 1>;
+ mclk-fs = <256>;
+
+ codec {
+ sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
+ };
+ };
+
+ /* hdmi glue */
+ dai-link-4 {
+ sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
+
+ codec {
+ sound-dai = <&hdmi_tx>;
+ };
+ };
+ };
+};
+
+&clkc_audio {
+ status = "okay";
+};
+
+&frddr_a {
+ status = "okay";
+};
+
+&frddr_b {
+ status = "okay";
+};
+
+&frddr_c {
+ status = "okay";
+};
+
+&tdmif_b {
+ status = "okay";
+};
+
+&tdmout_b {
+ status = "okay";
+};
+
+&tohdmitx {
+ status = "okay";
+};
--
2.34.1
On 27/01/2023 15:22, Christian Hewitt wrote:
> For proper warm (re)boot from SD card the BPI-M5 board requires TFLASH_VDD_EN
> and VDDIO_C pins to be switched to high impedance mode. This can be achieved
> using OPEN_DRAIN instead of ACTIVE_HIGH to leave the GPIO pins in input mode
> and retain high state (pin has the pull-up).
>
> This change is inspired by meson-sm1-odroid.dtsi where OPEN_DRAIN has been
> used to resolve similar problems with the Odroid C4 board (TF_IO in the C4
> dts is the equivalent regulator).
>
> Fixes: 976e920183e4 ("arm64: dts: meson-sm1: add Banana PI BPI-M5 board dts")
> Suggested-by: Neil Armstrong <[email protected]>
> Signed-off-by: Christian Hewitt <[email protected]>
> ---
> arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> index 028220ed45ad..3c1267a7ffef 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> @@ -123,7 +123,7 @@ vddio_c: regulator-vddio_c {
> regulator-min-microvolt = <1800000>;
> regulator-max-microvolt = <3300000>;
>
> - enable-gpio = <&gpio_ao GPIOE_2 GPIO_ACTIVE_HIGH>;
> + enable-gpio = <&gpio_ao GPIOE_2 GPIO_OPEN_DRAIN>;
> enable-active-high;
> regulator-always-on;
>
Reviewed-by: Neil Armstrong <[email protected]>
On 27/01/2023 15:22, Christian Hewitt wrote:
> The sound device is enabled by default so remove the redundant status.
>
> Signed-off-by: Christian Hewitt <[email protected]>
> ---
> arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> index 3c1267a7ffef..86f0afe6491e 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> @@ -233,7 +233,6 @@ sound {
> assigned-clock-rates = <294912000>,
> <270950400>,
> <393216000>;
> - status = "okay";
>
> dai-link-0 {
> sound-dai = <&frddr_a>;
Reviewed-by: Neil Armstrong <[email protected]>
On 27/01/2023 15:22, Christian Hewitt wrote:
> Convert the BPI-M5 dts into meson-sm1-bananapi.dtsi to support the
> addition of new boards based on the same design.
>
> Signed-off-by: Christian Hewitt <[email protected]>
> ---
> .../dts/amlogic/meson-sm1-bananapi-m5.dts | 427 +----------------
> .../boot/dts/amlogic/meson-sm1-bananapi.dtsi | 435 ++++++++++++++++++
> 2 files changed, 436 insertions(+), 426 deletions(-)
> create mode 100644 arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi
>
> diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> index 86f0afe6491e..f045bf851638 100644
> --- a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m5.dts
> @@ -6,10 +6,7 @@
>
> /dts-v1/;
>
> -#include "meson-sm1.dtsi"
> -#include <dt-bindings/leds/common.h>
> -#include <dt-bindings/input/linux-event-codes.h>
> -#include <dt-bindings/gpio/meson-g12a-gpio.h>
> +#include "meson-sm1-bananapi.dtsi"
> #include <dt-bindings/sound/meson-g12a-toacodec.h>
> #include <dt-bindings/sound/meson-g12a-tohdmitx.h>
>
> @@ -17,28 +14,6 @@ / {
> compatible = "bananapi,bpi-m5", "amlogic,sm1";
> model = "Banana Pi BPI-M5";
>
> - adc_keys {
> - compatible = "adc-keys";
> - io-channels = <&saradc 2>;
> - io-channel-names = "buttons";
> - keyup-threshold-microvolt = <1800000>;
> -
> - key {
> - label = "SW3";
> - linux,code = <BTN_3>;
> - press-threshold-microvolt = <1700000>;
> - };
> - };
> -
> - aliases {
> - serial0 = &uart_AO;
> - ethernet0 = ðmac;
> - };
> -
> - chosen {
> - stdout-path = "serial0:115200n8";
> - };
> -
> /* TOFIX: handle CVBS_DET on SARADC channel 0 */
> cvbs-connector {
> compatible = "composite-video-connector";
> @@ -50,150 +25,6 @@ cvbs_connector_in: endpoint {
> };
> };
>
> - emmc_pwrseq: emmc-pwrseq {
> - compatible = "mmc-pwrseq-emmc";
> - reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
> - };
> -
> - gpio-keys {
> - compatible = "gpio-keys";
> -
> - key {
> - label = "SW1";
> - linux,code = <BTN_1>;
> - gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
> - interrupt-parent = <&gpio_intc>;
> - interrupts = <3 IRQ_TYPE_EDGE_BOTH>;
> - };
> - };
> -
> - hdmi-connector {
> - compatible = "hdmi-connector";
> - type = "a";
> -
> - port {
> - hdmi_connector_in: endpoint {
> - remote-endpoint = <&hdmi_tx_tmds_out>;
> - };
> - };
> - };
> -
> - leds {
> - compatible = "gpio-leds";
> -
> - led-green {
> - color = <LED_COLOR_ID_GREEN>;
> - function = LED_FUNCTION_STATUS;
> - gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
> - };
> -
> - led-blue {
> - color = <LED_COLOR_ID_BLUE>;
> - function = LED_FUNCTION_STATUS;
> - gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_LOW>;
> - linux,default-trigger = "heartbeat";
> - };
> - };
> -
> - memory@0 {
> - device_type = "memory";
> - reg = <0x0 0x0 0x0 0x40000000>;
> - };
> -
> - emmc_1v8: regulator-emmc_1v8 {
> - compatible = "regulator-fixed";
> - regulator-name = "EMMC_1V8";
> - regulator-min-microvolt = <1800000>;
> - regulator-max-microvolt = <1800000>;
> - vin-supply = <&vddao_3v3>;
> - regulator-always-on;
> - };
> -
> - dc_in: regulator-dc_in {
> - compatible = "regulator-fixed";
> - regulator-name = "DC_IN";
> - regulator-min-microvolt = <5000000>;
> - regulator-max-microvolt = <5000000>;
> - regulator-always-on;
> - };
> -
> - vddio_c: regulator-vddio_c {
> - compatible = "regulator-gpio";
> - regulator-name = "VDDIO_C";
> - regulator-min-microvolt = <1800000>;
> - regulator-max-microvolt = <3300000>;
> -
> - enable-gpio = <&gpio_ao GPIOE_2 GPIO_OPEN_DRAIN>;
> - enable-active-high;
> - regulator-always-on;
> -
> - gpios = <&gpio_ao GPIOAO_6 GPIO_OPEN_DRAIN>;
> - gpios-states = <1>;
> -
> - states = <1800000 0>,
> - <3300000 1>;
> - };
> -
> - tflash_vdd: regulator-tflash_vdd {
> - compatible = "regulator-fixed";
> - regulator-name = "TFLASH_VDD";
> - regulator-min-microvolt = <3300000>;
> - regulator-max-microvolt = <3300000>;
> - vin-supply = <&dc_in>;
> - gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
> - enable-active-high;
> - regulator-always-on;
> - };
> -
> - vddao_1v8: regulator-vddao_1v8 {
> - compatible = "regulator-fixed";
> - regulator-name = "VDDAO_1V8";
> - regulator-min-microvolt = <1800000>;
> - regulator-max-microvolt = <1800000>;
> - vin-supply = <&vddao_3v3>;
> - regulator-always-on;
> - };
> -
> - vddao_3v3: regulator-vddao_3v3 {
> - compatible = "regulator-fixed";
> - regulator-name = "VDDAO_3V3";
> - regulator-min-microvolt = <3300000>;
> - regulator-max-microvolt = <3300000>;
> - vin-supply = <&dc_in>;
> - regulator-always-on;
> - };
> -
> - vddcpu: regulator-vddcpu {
> - /*
> - * SY8120B1ABC DC/DC Regulator.
> - */
> - compatible = "pwm-regulator";
> -
> - regulator-name = "VDDCPU";
> - regulator-min-microvolt = <690000>;
> - regulator-max-microvolt = <1050000>;
> -
> - pwm-supply = <&dc_in>;
> -
> - pwms = <&pwm_AO_cd 1 1250 0>;
> - pwm-dutycycle-range = <100 0>;
> -
> - regulator-boot-on;
> - regulator-always-on;
> - };
> -
> - /* USB Hub Power Enable */
> - vl_pwr_en: regulator-vl_pwr_en {
> - compatible = "regulator-fixed";
> - regulator-name = "VL_PWR_EN";
> - regulator-min-microvolt = <5000000>;
> - regulator-max-microvolt = <5000000>;
> - vin-supply = <&dc_in>;
> -
> - gpio = <&gpio GPIOH_6 GPIO_ACTIVE_HIGH>;
> - enable-active-high;
> - };
> -
> sound {
> compatible = "amlogic,axg-sound-card";
> model = "BPI-M5";
> @@ -318,68 +149,17 @@ &acodec {
> status = "okay";
> };
>
> -&arb {
> - status = "okay";
> -};
>
> &clkc_audio {
> status = "okay";
> };
>
> -&cpu0 {
> - cpu-supply = <&vddcpu>;
> - operating-points-v2 = <&cpu_opp_table>;
> - clocks = <&clkc CLKID_CPU_CLK>;
> - clock-latency = <50000>;
> -};
> -
> -&cpu1 {
> - cpu-supply = <&vddcpu>;
> - operating-points-v2 = <&cpu_opp_table>;
> - clocks = <&clkc CLKID_CPU1_CLK>;
> - clock-latency = <50000>;
> -};
> -
> -&cpu2 {
> - cpu-supply = <&vddcpu>;
> - operating-points-v2 = <&cpu_opp_table>;
> - clocks = <&clkc CLKID_CPU2_CLK>;
> - clock-latency = <50000>;
> -};
> -
> -&cpu3 {
> - cpu-supply = <&vddcpu>;
> - operating-points-v2 = <&cpu_opp_table>;
> - clocks = <&clkc CLKID_CPU3_CLK>;
> - clock-latency = <50000>;
> -};
> -
> &cvbs_vdac_port {
> cvbs_vdac_out: endpoint {
> remote-endpoint = <&cvbs_connector_in>;
> };
> };
>
> -&ext_mdio {
> - external_phy: ethernet-phy@0 {
> - /* Realtek RTL8211F (0x001cc916) */
> - reg = <0>;
> - max-speed = <1000>;
> -
> - interrupt-parent = <&gpio_intc>;
> - /* MAC_INTR on GPIOZ_14 */
> - interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
> - };
> -};
> -
> -ðmac {
> - pinctrl-0 = <ð_pins>, <ð_rgmii_pins>;
> - pinctrl-names = "default";
> - status = "okay";
> - phy-mode = "rgmii-txid";
> - phy-handle = <&external_phy>;
> -};
> -
> &frddr_a {
> status = "okay";
> };
> @@ -392,192 +172,6 @@ &frddr_c {
> status = "okay";
> };
>
> -&gpio {
> - gpio-line-names =
> - /* GPIOZ */
> - "ETH_MDIO", /* GPIOZ_0 */
> - "ETH_MDC", /* GPIOZ_1 */
> - "ETH_RXCLK", /* GPIOZ_2 */
> - "ETH_RX_DV", /* GPIOZ_3 */
> - "ETH_RXD0", /* GPIOZ_4 */
> - "ETH_RXD1", /* GPIOZ_5 */
> - "ETH_RXD2", /* GPIOZ_6 */
> - "ETH_RXD3", /* GPIOZ_7 */
> - "ETH_TXCLK", /* GPIOZ_8 */
> - "ETH_TXEN", /* GPIOZ_9 */
> - "ETH_TXD0", /* GPIOZ_10 */
> - "ETH_TXD1", /* GPIOZ_11 */
> - "ETH_TXD2", /* GPIOZ_12 */
> - "ETH_TXD3", /* GPIOZ_13 */
> - "ETH_INTR", /* GPIOZ_14 */
> - "ETH_NRST", /* GPIOZ_15 */
> - /* GPIOH */
> - "HDMI_SDA", /* GPIOH_0 */
> - "HDMI_SCL", /* GPIOH_1 */
> - "HDMI_HPD", /* GPIOH_2 */
> - "HDMI_CEC", /* GPIOH_3 */
> - "VL-RST_N", /* GPIOH_4 */
> - "CON1-P36", /* GPIOH_5 */
> - "VL-PWREN", /* GPIOH_6 */
> - "WiFi_3V3_1V8", /* GPIOH_7 */
> - "TFLASH_VDD_EN", /* GPIOH_8 */
> - /* BOOT */
> - "eMMC_D0", /* BOOT_0 */
> - "eMMC_D1", /* BOOT_1 */
> - "eMMC_D2", /* BOOT_2 */
> - "eMMC_D3", /* BOOT_3 */
> - "eMMC_D4", /* BOOT_4 */
> - "eMMC_D5", /* BOOT_5 */
> - "eMMC_D6", /* BOOT_6 */
> - "eMMC_D7", /* BOOT_7 */
> - "eMMC_CLK", /* BOOT_8 */
> - "",
> - "eMMC_CMD", /* BOOT_10 */
> - "",
> - "eMMC_RST#", /* BOOT_12 */
> - "eMMC_DS", /* BOOT_13 */
> - "", "",
> - /* GPIOC */
> - "SD_D0_B", /* GPIOC_0 */
> - "SD_D1_B", /* GPIOC_1 */
> - "SD_D2_B", /* GPIOC_2 */
> - "SD_D3_B", /* GPIOC_3 */
> - "SD_CLK_B", /* GPIOC_4 */
> - "SD_CMD_B", /* GPIOC_5 */
> - "CARD_EN_DET", /* GPIOC_6 */
> - "",
> - /* GPIOA */
> - "", "", "", "", "", "", "", "",
> - "", "", "", "", "", "",
> - "CON1-P27", /* GPIOA_14 */
> - "CON1-P28", /* GPIOA_15 */
> - /* GPIOX */
> - "CON1-P16", /* GPIOX_0 */
> - "CON1-P18", /* GPIOX_1 */
> - "CON1-P22", /* GPIOX_2 */
> - "CON1-P11", /* GPIOX_3 */
> - "CON1-P13", /* GPIOX_4 */
> - "CON1-P07", /* GPIOX_5 */
> - "CON1-P33", /* GPIOX_6 */
> - "CON1-P15", /* GPIOX_7 */
> - "CON1-P19", /* GPIOX_8 */
> - "CON1-P21", /* GPIOX_9 */
> - "CON1-P24", /* GPIOX_10 */
> - "CON1-P23", /* GPIOX_11 */
> - "CON1-P08", /* GPIOX_12 */
> - "CON1-P10", /* GPIOX_13 */
> - "CON1-P29", /* GPIOX_14 */
> - "CON1-P31", /* GPIOX_15 */
> - "CON1-P26", /* GPIOX_16 */
> - "CON1-P03", /* GPIOX_17 */
> - "CON1-P05", /* GPIOX_18 */
> - "CON1-P32"; /* GPIOX_19 */
> -
> - /*
> - * WARNING: The USB Hub on the BPI-M5 needs a reset signal
> - * to be turned high in order to be detected by the USB Controller
> - * This signal should be handled by a USB specific power sequence
> - * in order to reset the Hub when USB bus is powered down.
> - */
> - usb-hub {
> - gpio-hog;
> - gpios = <GPIOH_4 GPIO_ACTIVE_HIGH>;
> - output-high;
> - line-name = "usb-hub-reset";
> - };
> -};
> -
> -&gpio_ao {
> - gpio-line-names =
> - /* GPIOAO */
> - "DEBUG TX", /* GPIOAO_0 */
> - "DEBUG RX", /* GPIOAO_1 */
> - "SYS_LED2", /* GPIOAO_2 */
> - "UPDATE_KEY", /* GPIOAO_3 */
> - "CON1-P40", /* GPIOAO_4 */
> - "IR_IN", /* GPIOAO_5 */
> - "TF_3V3N_1V8_EN", /* GPIOAO_6 */
> - "CON1-P35", /* GPIOAO_7 */
> - "CON1-P12", /* GPIOAO_8 */
> - "CON1-P37", /* GPIOAO_9 */
> - "CON1-P38", /* GPIOAO_10 */
> - "SYS_LED", /* GPIOAO_11 */
> - /* GPIOE */
> - "VDDEE_PWM", /* GPIOE_0 */
> - "VDDCPU_PWM", /* GPIOE_1 */
> - "TF_PWR_EN"; /* GPIOE_2 */
> -};
> -
> -&hdmi_tx {
> - status = "okay";
> - pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
> - pinctrl-names = "default";
> - hdmi-supply = <&dc_in>;
> -};
> -
> -&hdmi_tx_tmds_port {
> - hdmi_tx_tmds_out: endpoint {
> - remote-endpoint = <&hdmi_connector_in>;
> - };
> -};
> -
> -&ir {
> - status = "okay";
> - pinctrl-0 = <&remote_input_ao_pins>;
> - pinctrl-names = "default";
> -};
> -
> -&pwm_AO_cd {
> - pinctrl-0 = <&pwm_ao_d_e_pins>;
> - pinctrl-names = "default";
> - clocks = <&xtal>;
> - clock-names = "clkin1";
> - status = "okay";
> -};
> -
> -&saradc {
> - status = "okay";
> - vref-supply = <&vddao_1v8>;
> -};
> -
> -/* SD card */
> -&sd_emmc_b {
> - status = "okay";
> - pinctrl-0 = <&sdcard_c_pins>;
> - pinctrl-1 = <&sdcard_clk_gate_c_pins>;
> - pinctrl-names = "default", "clk-gate";
> -
> - bus-width = <4>;
> - cap-sd-highspeed;
> - max-frequency = <50000000>;
> - disable-wp;
> -
> - /* TOFIX: SD card is barely usable in SDR modes */
> -
> - cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
> - vmmc-supply = <&tflash_vdd>;
> - vqmmc-supply = <&vddio_c>;
> -};
> -
> -/* eMMC */
> -&sd_emmc_c {
> - status = "okay";
> - pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
> - pinctrl-1 = <&emmc_clk_gate_pins>;
> - pinctrl-names = "default", "clk-gate";
> -
> - bus-width = <8>;
> - cap-mmc-highspeed;
> - mmc-ddr-1_8v;
> - mmc-hs200-1_8v;
> - max-frequency = <200000000>;
> - disable-wp;
> -
> - mmc-pwrseq = <&emmc_pwrseq>;
> - vmmc-supply = <&vddao_3v3>;
> - vqmmc-supply = <&emmc_1v8>;
> -};
> -
> &tdmif_b {
> status = "okay";
> };
> @@ -625,22 +219,3 @@ &toddr_b {
> &toddr_c {
> status = "okay";
> };
> -
> -&uart_AO {
> - status = "okay";
> - pinctrl-0 = <&uart_ao_a_pins>;
> - pinctrl-names = "default";
> -};
> -
> -&usb {
> - status = "okay";
> -};
> -
> -&usb2_phy0 {
> - phy-supply = <&dc_in>;
> -};
> -
> -&usb2_phy1 {
> - /* Enable the hub which is connected to this port */
> - phy-supply = <&vl_pwr_en>;
> -};
> diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi
> new file mode 100644
> index 000000000000..c914f1148185
> --- /dev/null
> +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi.dtsi
> @@ -0,0 +1,435 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2021 BayLibre SAS
> + * Author: Neil Armstrong <[email protected]>
> + */
> +
> +#include "meson-sm1.dtsi"
> +#include <dt-bindings/leds/common.h>
> +#include <dt-bindings/input/linux-event-codes.h>
> +#include <dt-bindings/gpio/meson-g12a-gpio.h>
> +
> +/ {
> + adc_keys {
> + compatible = "adc-keys";
> + io-channels = <&saradc 2>;
> + io-channel-names = "buttons";
> + keyup-threshold-microvolt = <1800000>;
> +
> + key {
> + label = "SW3";
> + linux,code = <BTN_3>;
> + press-threshold-microvolt = <1700000>;
> + };
> + };
> +
> + aliases {
> + serial0 = &uart_AO;
> + ethernet0 = ðmac;
> + };
> +
> + chosen {
> + stdout-path = "serial0:115200n8";
> + };
> +
> + emmc_pwrseq: emmc-pwrseq {
> + compatible = "mmc-pwrseq-emmc";
> + reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
> + };
> +
> + gpio-keys {
> + compatible = "gpio-keys";
> +
> + key {
> + label = "SW1";
> + linux,code = <BTN_1>;
> + gpios = <&gpio_ao GPIOAO_3 GPIO_ACTIVE_LOW>;
> + interrupt-parent = <&gpio_intc>;
> + interrupts = <3 IRQ_TYPE_EDGE_BOTH>;
> + };
> + };
> +
> + hdmi-connector {
> + compatible = "hdmi-connector";
> + type = "a";
> +
> + port {
> + hdmi_connector_in: endpoint {
> + remote-endpoint = <&hdmi_tx_tmds_out>;
> + };
> + };
> + };
> +
> + leds {
> + compatible = "gpio-leds";
> +
> + led-green {
> + color = <LED_COLOR_ID_GREEN>;
> + function = LED_FUNCTION_STATUS;
> + gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>;
> + };
> +
> + led-blue {
> + color = <LED_COLOR_ID_BLUE>;
> + function = LED_FUNCTION_STATUS;
> + gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_LOW>;
> + linux,default-trigger = "heartbeat";
> + };
> + };
> +
> + memory@0 {
> + device_type = "memory";
> + reg = <0x0 0x0 0x0 0x40000000>;
> + };
> +
> + emmc_1v8: regulator-emmc_1v8 {
> + compatible = "regulator-fixed";
> + regulator-name = "EMMC_1V8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + vin-supply = <&vddao_3v3>;
> + regulator-always-on;
> + };
> +
> + dc_in: regulator-dc_in {
> + compatible = "regulator-fixed";
> + regulator-name = "DC_IN";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-always-on;
> + };
> +
> + vddio_c: regulator-vddio_c {
> + compatible = "regulator-gpio";
> + regulator-name = "VDDIO_C";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <3300000>;
> +
> + enable-gpio = <&gpio_ao GPIOE_2 GPIO_OPEN_DRAIN>;
> + enable-active-high;
> + regulator-always-on;
> +
> + gpios = <&gpio_ao GPIOAO_6 GPIO_OPEN_DRAIN>;
> + gpios-states = <1>;
> +
> + states = <1800000 0>,
> + <3300000 1>;
> + };
> +
> + tflash_vdd: regulator-tflash_vdd {
> + compatible = "regulator-fixed";
> + regulator-name = "TFLASH_VDD";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + vin-supply = <&dc_in>;
> + gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
> + enable-active-high;
> + regulator-always-on;
> + };
> +
> + vddao_1v8: regulator-vddao_1v8 {
> + compatible = "regulator-fixed";
> + regulator-name = "VDDAO_1V8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + vin-supply = <&vddao_3v3>;
> + regulator-always-on;
> + };
> +
> + vddao_3v3: regulator-vddao_3v3 {
> + compatible = "regulator-fixed";
> + regulator-name = "VDDAO_3V3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + vin-supply = <&dc_in>;
> + regulator-always-on;
> + };
> +
> + vddcpu: regulator-vddcpu {
> + /*
> + * SY8120B1ABC DC/DC Regulator.
> + */
> + compatible = "pwm-regulator";
> +
> + regulator-name = "VDDCPU";
> + regulator-min-microvolt = <690000>;
> + regulator-max-microvolt = <1050000>;
> +
> + pwm-supply = <&dc_in>;
> +
> + pwms = <&pwm_AO_cd 1 1250 0>;
> + pwm-dutycycle-range = <100 0>;
> +
> + regulator-boot-on;
> + regulator-always-on;
> + };
> +
> + /* USB Hub Power Enable */
> + vl_pwr_en: regulator-vl_pwr_en {
> + compatible = "regulator-fixed";
> + regulator-name = "VL_PWR_EN";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + vin-supply = <&dc_in>;
> +
> + gpio = <&gpio GPIOH_6 GPIO_ACTIVE_HIGH>;
> + enable-active-high;
> + };
> +};
> +
> +&arb {
> + status = "okay";
> +};
> +
> +&cpu0 {
> + cpu-supply = <&vddcpu>;
> + operating-points-v2 = <&cpu_opp_table>;
> + clocks = <&clkc CLKID_CPU_CLK>;
> + clock-latency = <50000>;
> +};
> +
> +&cpu1 {
> + cpu-supply = <&vddcpu>;
> + operating-points-v2 = <&cpu_opp_table>;
> + clocks = <&clkc CLKID_CPU1_CLK>;
> + clock-latency = <50000>;
> +};
> +
> +&cpu2 {
> + cpu-supply = <&vddcpu>;
> + operating-points-v2 = <&cpu_opp_table>;
> + clocks = <&clkc CLKID_CPU2_CLK>;
> + clock-latency = <50000>;
> +};
> +
> +&cpu3 {
> + cpu-supply = <&vddcpu>;
> + operating-points-v2 = <&cpu_opp_table>;
> + clocks = <&clkc CLKID_CPU3_CLK>;
> + clock-latency = <50000>;
> +};
> +
> +&ext_mdio {
> + external_phy: ethernet-phy@0 {
> + /* Realtek RTL8211F (0x001cc916) */
> + reg = <0>;
> + max-speed = <1000>;
> +
> + interrupt-parent = <&gpio_intc>;
> + /* MAC_INTR on GPIOZ_14 */
> + interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
> + };
> +};
> +
> +ðmac {
> + pinctrl-0 = <ð_pins>, <ð_rgmii_pins>;
> + pinctrl-names = "default";
> + status = "okay";
> + phy-mode = "rgmii-txid";
> + phy-handle = <&external_phy>;
> +};
> +
> +&gpio {
> + gpio-line-names =
> + /* GPIOZ */
> + "ETH_MDIO", /* GPIOZ_0 */
> + "ETH_MDC", /* GPIOZ_1 */
> + "ETH_RXCLK", /* GPIOZ_2 */
> + "ETH_RX_DV", /* GPIOZ_3 */
> + "ETH_RXD0", /* GPIOZ_4 */
> + "ETH_RXD1", /* GPIOZ_5 */
> + "ETH_RXD2", /* GPIOZ_6 */
> + "ETH_RXD3", /* GPIOZ_7 */
> + "ETH_TXCLK", /* GPIOZ_8 */
> + "ETH_TXEN", /* GPIOZ_9 */
> + "ETH_TXD0", /* GPIOZ_10 */
> + "ETH_TXD1", /* GPIOZ_11 */
> + "ETH_TXD2", /* GPIOZ_12 */
> + "ETH_TXD3", /* GPIOZ_13 */
> + "ETH_INTR", /* GPIOZ_14 */
> + "ETH_NRST", /* GPIOZ_15 */
> + /* GPIOH */
> + "HDMI_SDA", /* GPIOH_0 */
> + "HDMI_SCL", /* GPIOH_1 */
> + "HDMI_HPD", /* GPIOH_2 */
> + "HDMI_CEC", /* GPIOH_3 */
> + "VL-RST_N", /* GPIOH_4 */
> + "CON1-P36", /* GPIOH_5 */
> + "VL-PWREN", /* GPIOH_6 */
> + "WiFi_3V3_1V8", /* GPIOH_7 */
> + "TFLASH_VDD_EN", /* GPIOH_8 */
> + /* BOOT */
> + "eMMC_D0", /* BOOT_0 */
> + "eMMC_D1", /* BOOT_1 */
> + "eMMC_D2", /* BOOT_2 */
> + "eMMC_D3", /* BOOT_3 */
> + "eMMC_D4", /* BOOT_4 */
> + "eMMC_D5", /* BOOT_5 */
> + "eMMC_D6", /* BOOT_6 */
> + "eMMC_D7", /* BOOT_7 */
> + "eMMC_CLK", /* BOOT_8 */
> + "",
> + "eMMC_CMD", /* BOOT_10 */
> + "",
> + "eMMC_RST#", /* BOOT_12 */
> + "eMMC_DS", /* BOOT_13 */
> + "", "",
> + /* GPIOC */
> + "SD_D0_B", /* GPIOC_0 */
> + "SD_D1_B", /* GPIOC_1 */
> + "SD_D2_B", /* GPIOC_2 */
> + "SD_D3_B", /* GPIOC_3 */
> + "SD_CLK_B", /* GPIOC_4 */
> + "SD_CMD_B", /* GPIOC_5 */
> + "CARD_EN_DET", /* GPIOC_6 */
> + "",
> + /* GPIOA */
> + "", "", "", "", "", "", "", "",
> + "", "", "", "", "", "",
> + "CON1-P27", /* GPIOA_14 */
> + "CON1-P28", /* GPIOA_15 */
> + /* GPIOX */
> + "CON1-P16", /* GPIOX_0 */
> + "CON1-P18", /* GPIOX_1 */
> + "CON1-P22", /* GPIOX_2 */
> + "CON1-P11", /* GPIOX_3 */
> + "CON1-P13", /* GPIOX_4 */
> + "CON1-P07", /* GPIOX_5 */
> + "CON1-P33", /* GPIOX_6 */
> + "CON1-P15", /* GPIOX_7 */
> + "CON1-P19", /* GPIOX_8 */
> + "CON1-P21", /* GPIOX_9 */
> + "CON1-P24", /* GPIOX_10 */
> + "CON1-P23", /* GPIOX_11 */
> + "CON1-P08", /* GPIOX_12 */
> + "CON1-P10", /* GPIOX_13 */
> + "CON1-P29", /* GPIOX_14 */
> + "CON1-P31", /* GPIOX_15 */
> + "CON1-P26", /* GPIOX_16 */
> + "CON1-P03", /* GPIOX_17 */
> + "CON1-P05", /* GPIOX_18 */
> + "CON1-P32"; /* GPIOX_19 */
> +
> + /*
> + * WARNING: The USB Hub needs a reset signal to be turned high in
> + * order to be detected by the USB Controller. This signal should
> + * be handled by a USB specific power sequence to reset the Hub
> + * when the USB bus is powered down.
> + */
> + usb-hub {
> + gpio-hog;
> + gpios = <GPIOH_4 GPIO_ACTIVE_HIGH>;
> + output-high;
> + line-name = "usb-hub-reset";
> + };
> +};
> +
> +&gpio_ao {
> + gpio-line-names =
> + /* GPIOAO */
> + "DEBUG TX", /* GPIOAO_0 */
> + "DEBUG RX", /* GPIOAO_1 */
> + "SYS_LED2", /* GPIOAO_2 */
> + "UPDATE_KEY", /* GPIOAO_3 */
> + "CON1-P40", /* GPIOAO_4 */
> + "IR_IN", /* GPIOAO_5 */
> + "TF_3V3N_1V8_EN", /* GPIOAO_6 */
> + "CON1-P35", /* GPIOAO_7 */
> + "CON1-P12", /* GPIOAO_8 */
> + "CON1-P37", /* GPIOAO_9 */
> + "CON1-P38", /* GPIOAO_10 */
> + "SYS_LED", /* GPIOAO_11 */
> + /* GPIOE */
> + "VDDEE_PWM", /* GPIOE_0 */
> + "VDDCPU_PWM", /* GPIOE_1 */
> + "TF_PWR_EN"; /* GPIOE_2 */
> +};
> +
> +&hdmi_tx {
> + status = "okay";
> + pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
> + pinctrl-names = "default";
> + hdmi-supply = <&dc_in>;
> +};
> +
> +&hdmi_tx_tmds_port {
> + hdmi_tx_tmds_out: endpoint {
> + remote-endpoint = <&hdmi_connector_in>;
> + };
> +};
> +
> +&ir {
> + status = "okay";
> + pinctrl-0 = <&remote_input_ao_pins>;
> + pinctrl-names = "default";
> +};
> +
> +&pwm_AO_cd {
> + pinctrl-0 = <&pwm_ao_d_e_pins>;
> + pinctrl-names = "default";
> + clocks = <&xtal>;
> + clock-names = "clkin1";
> + status = "okay";
> +};
> +
> +&saradc {
> + status = "okay";
> + vref-supply = <&vddao_1v8>;
> +};
> +
> +/* SD card */
> +&sd_emmc_b {
> + status = "okay";
> + pinctrl-0 = <&sdcard_c_pins>;
> + pinctrl-1 = <&sdcard_clk_gate_c_pins>;
> + pinctrl-names = "default", "clk-gate";
> +
> + bus-width = <4>;
> + cap-sd-highspeed;
> + max-frequency = <50000000>;
> + disable-wp;
> +
> + /* TOFIX: SD card is barely usable in SDR modes */
> +
> + cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
> + vmmc-supply = <&tflash_vdd>;
> + vqmmc-supply = <&vddio_c>;
> +};
> +
> +/* eMMC */
> +&sd_emmc_c {
> + status = "okay";
> + pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
> + pinctrl-1 = <&emmc_clk_gate_pins>;
> + pinctrl-names = "default", "clk-gate";
> +
> + bus-width = <8>;
> + cap-mmc-highspeed;
> + mmc-ddr-1_8v;
> + mmc-hs200-1_8v;
> + max-frequency = <200000000>;
> + disable-wp;
> +
> + mmc-pwrseq = <&emmc_pwrseq>;
> + vmmc-supply = <&vddao_3v3>;
> + vqmmc-supply = <&emmc_1v8>;
> +};
> +
> +&uart_AO {
> + status = "okay";
> + pinctrl-0 = <&uart_ao_a_pins>;
> + pinctrl-names = "default";
> +};
> +
> +&usb {
> + status = "okay";
> +};
> +
> +&usb2_phy0 {
> + phy-supply = <&dc_in>;
> +};
> +
> +&usb2_phy1 {
> + /* Enable the hub which is connected to this port */
> + phy-supply = <&vl_pwr_en>;
> +};
Reviewed-by: Neil Armstrong <[email protected]>
On 27/01/2023 15:22, Christian Hewitt wrote:
> BPI-M2-PRO is based upon the BPI-M5 design except for a different
> physical board layout and the following changes:
>
> - USB 3.0 ports reduced from 4x to 2x
> - 3.5mm Combined CVBS/Audio Jack removed
> - RTL8821BU WiFi/BT module (internal USB connected)
>
> Signed-off-by: Christian Hewitt <[email protected]>
> ---
> arch/arm64/boot/dts/amlogic/Makefile | 1 +
> .../dts/amlogic/meson-sm1-bananapi-m2-pro.dts | 97 +++++++++++++++++++
> 2 files changed, 98 insertions(+)
> create mode 100644 arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts
>
> diff --git a/arch/arm64/boot/dts/amlogic/Makefile b/arch/arm64/boot/dts/amlogic/Makefile
> index 97b42e2100e0..644451794aca 100644
> --- a/arch/arm64/boot/dts/amlogic/Makefile
> +++ b/arch/arm64/boot/dts/amlogic/Makefile
> @@ -60,6 +60,7 @@ dtb-$(CONFIG_ARCH_MESON) += meson-gxm-wetek-core2.dtb
> dtb-$(CONFIG_ARCH_MESON) += meson-s4-s805x2-aq222.dtb
> dtb-$(CONFIG_ARCH_MESON) += meson-sm1-a95xf3-air-gbit.dtb
> dtb-$(CONFIG_ARCH_MESON) += meson-sm1-a95xf3-air.dtb
> +dtb-$(CONFIG_ARCH_MESON) += meson-sm1-bananapi-m2-pro.dtb
> dtb-$(CONFIG_ARCH_MESON) += meson-sm1-bananapi-m5.dtb
> dtb-$(CONFIG_ARCH_MESON) += meson-sm1-h96-max.dtb
> dtb-$(CONFIG_ARCH_MESON) += meson-sm1-khadas-vim3l.dtb
> diff --git a/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts
> new file mode 100644
> index 000000000000..586034316ec3
> --- /dev/null
> +++ b/arch/arm64/boot/dts/amlogic/meson-sm1-bananapi-m2-pro.dts
> @@ -0,0 +1,97 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2021 BayLibre SAS
> + * Author: Neil Armstrong <[email protected]>
> + */
> +
> +/dts-v1/;
> +
> +#include "meson-sm1-bananapi.dtsi"
> +#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
> +
> +/ {
> + compatible = "bananapi,bpi-m2-pro", "amlogic,sm1";
> + model = "Banana Pi BPI-M2-PRO";
> +
> + sound {
> + compatible = "amlogic,axg-sound-card";
> + model = "BPI-M2-PRO";
> + audio-aux-devs = <&tdmout_b>;
> + audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
> + "TDMOUT_B IN 1", "FRDDR_B OUT 1",
> + "TDMOUT_B IN 2", "FRDDR_C OUT 1",
> + "TDM_B Playback", "TDMOUT_B OUT";
> +
> + assigned-clocks = <&clkc CLKID_MPLL2>,
> + <&clkc CLKID_MPLL0>,
> + <&clkc CLKID_MPLL1>;
> + assigned-clock-parents = <0>, <0>, <0>;
> + assigned-clock-rates = <294912000>,
> + <270950400>,
> + <393216000>;
> +
> + dai-link-0 {
> + sound-dai = <&frddr_a>;
> + };
> +
> + dai-link-1 {
> + sound-dai = <&frddr_b>;
> + };
> +
> + dai-link-2 {
> + sound-dai = <&frddr_c>;
> + };
> +
> + /* 8ch hdmi interface */
> + dai-link-3 {
> + sound-dai = <&tdmif_b>;
> + dai-format = "i2s";
> + dai-tdm-slot-tx-mask-0 = <1 1>;
> + dai-tdm-slot-tx-mask-1 = <1 1>;
> + dai-tdm-slot-tx-mask-2 = <1 1>;
> + dai-tdm-slot-tx-mask-3 = <1 1>;
> + mclk-fs = <256>;
> +
> + codec {
> + sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
> + };
> + };
> +
> + /* hdmi glue */
> + dai-link-4 {
> + sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
> +
> + codec {
> + sound-dai = <&hdmi_tx>;
> + };
> + };
> + };
> +};
> +
> +&clkc_audio {
> + status = "okay";
> +};
> +
> +&frddr_a {
> + status = "okay";
> +};
> +
> +&frddr_b {
> + status = "okay";
> +};
> +
> +&frddr_c {
> + status = "okay";
> +};
> +
> +&tdmif_b {
> + status = "okay";
> +};
> +
> +&tdmout_b {
> + status = "okay";
> +};
> +
> +&tohdmitx {
> + status = "okay";
> +};
Reviewed-by: Neil Armstrong <[email protected]>
Hi,
On Fri, 27 Jan 2023 14:22:16 +0000, Christian Hewitt wrote:
> The first patch in this series fixes an SD card (re)boot issue on the
> BPI-M5. The second removes a redundant status from the sound node so
> we don't carry it forward when subsequent patches convert the (fixed)
> dts into a common dtsi, then add support for BPI-M2-PRO which is based
> on the BPI-M5 board design.
>
> Changes from v1:
>
> [...]
Thanks, Applied to https://git.kernel.org/pub/scm/linux/kernel/git/amlogic/linux.git (v6.3/arm64-dt)
[1/5] arm64: dts: meson: bananapi-m5: switch VDDIO_C pin to OPEN_DRAIN
https://git.kernel.org/amlogic/c/856968e066bd77b113965f1a355ec7401edff65f
[2/5] arm64: dts: meson: bananapi-m5: remove redundant status from sound node
https://git.kernel.org/amlogic/c/31752ffeece8b8dc2cf2be36614c8a4e8e8dcf57
[3/5] arm64: dts: meson: bananapi-m5: convert dts to dtsi
https://git.kernel.org/amlogic/c/ca8dac3a019ac190c39365c99a632c0748c72f58
[4/5] dt-bindings: arm: amlogic: add support for BananaPi M2-Pro
https://git.kernel.org/amlogic/c/bd2529aa41ccb93c2ffcb045ac97121711277fe0
[5/5] arm64: dts: meson: add support for BananaPi M2-Pro
https://git.kernel.org/amlogic/c/5bcfbee7d58d8512493b03b1d1622fe138d0aaee
These changes has been applied on the intermediate git tree [1].
The v6.3/arm64-dt branch will then be sent via a formal Pull Request to the Linux SoC maintainers
for inclusion in their intermediate git branches in order to be sent to Linus during
the next merge window, or sooner if it's a set of fixes.
In the cases of fixes, those will be merged in the current release candidate
kernel and as soon they appear on the Linux master branch they will be
backported to the previous Stable and Long-Stable kernels [2].
The intermediate git branches are merged daily in the linux-next tree [3],
people are encouraged testing these pre-release kernels and report issues on the
relevant mailing-lists.
If problems are discovered on those changes, please submit a signed-off-by revert
patch followed by a corrective changeset.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/amlogic/linux.git
[2] https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
[3] https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
--
Neil