From 158e0f48491f4c0008294f0d6c7306c38fd66873 Mon Sep 17 00:00:00 2001
From: Karabek <github@karabek.net>
Date: Wed, 27 Nov 2019 22:50:46 +0100
Subject: [PATCH] Sunvell R69: cpu voltage regulator (re-)added - dram clock
 reduced. (#1643)

* Sunvell R69: cpu voltage regulator (re-)added - dram clock reduced.

CPU regulator (re-)added to u-boot and kernel dts - the box will not boot without it.
Dram clock reduced in defconfig to increase stability.

[AR-85]
---
 .../board-h2plus-sunvell-r69-add-device.patch | 168 ++++++++-------
 .../board-h2plus-sunvell-r69-add-device.patch | 168 ++++++++-------
 .../u-boot/u-boot-sunxi/add-sunvell-r69.patch | 195 +++++++++++-------
 3 files changed, 300 insertions(+), 231 deletions(-)

diff --git a/patch/kernel/sunxi-current/board-h2plus-sunvell-r69-add-device.patch b/patch/kernel/sunxi-current/board-h2plus-sunvell-r69-add-device.patch
index 11fab7ee8..e2a587d14 100644
--- a/patch/kernel/sunxi-current/board-h2plus-sunvell-r69-add-device.patch
+++ b/patch/kernel/sunxi-current/board-h2plus-sunvell-r69-add-device.patch
@@ -1,61 +1,24 @@
 diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index e3d5a6c..0d3eef6 100644
+index f47ce87..9f4bc9e 100644
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -995,6 +995,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
+@@ -1092,6 +1092,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
+ 	sun8i-h2-plus-nanopi-duo.dtb \
  	sun8i-h2-plus-orangepi-r1.dtb \
- 	sun8i-h2-plus-bananapi-m2-zero.dtb \
  	sun8i-h2-plus-orangepi-zero.dtb \
 +	sun8i-h2-plus-sunvell-r69.dtb \
  	sun8i-h3-bananapi-m2-plus.dtb \
+ 	sun8i-h3-bananapi-m2-plus-v1.2.dtb \
  	sun8i-h3-beelink-x2.dtb \
- 	sun8i-h3-libretech-all-h3-cc.dtb \
 diff --git a/arch/arm/boot/dts/sun8i-h2-plus-sunvell-r69.dts b/arch/arm/boot/dts/sun8i-h2-plus-sunvell-r69.dts
 new file mode 100644
-index 0000000..1adfb0c
+index 0000000..3cb766b
 --- /dev/null
 +++ b/arch/arm/boot/dts/sun8i-h2-plus-sunvell-r69.dts
-@@ -0,0 +1,215 @@
+@@ -0,0 +1,225 @@
++// SPDX-License-Identifier: (GPL-2.0+ or MIT)
 +/*
-+ * Based original Sunvell R69 FEX file (2018 <github.com/karabek>)
-+ *
-+ * This file is dual-licensed: you can use it either under the terms
-+ * of the GPL or the X11 license, at your option. Note that this dual
-+ * licensing only applies to this file, and not this project as a
-+ * whole.
-+ *
-+ *  a) This file is free software; you can redistribute it and/or
-+ *     modify it under the terms of the GNU General Public License as
-+ *     published by the Free Software Foundation; either version 2 of the
-+ *     License, or (at your option) any later version.
-+ *
-+ *     This file is distributed in the hope that it will be useful,
-+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *     GNU General Public License for more details.
-+ *
-+ * Or, alternatively,
-+ *
-+ *  b) Permission is hereby granted, free of charge, to any person
-+ *     obtaining a copy of this software and associated documentation
-+ *     files (the "Software"), to deal in the Software without
-+ *     restriction, including without limitation the rights to use,
-+ *     copy, modify, merge, publish, distribute, sublicense, and/or
-+ *     sell copies of the Software, and to permit persons to whom the
-+ *     Software is furnished to do so, subject to the following
-+ *     conditions:
-+ *
-+ *     The above copyright notice and this permission notice shall be
-+ *     included in all copies or substantial portions of the Software.
-+ *
-+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ *     OTHER DEALINGS IN THE SOFTWARE.
++ * Based original Sunvell R69 FEX file (2019 karabek)
 + */
 +
 +/dts-v1/;
@@ -71,41 +34,60 @@ index 0000000..1adfb0c
 +	compatible = "sunvell,sunvell-r69", "allwinner,sun8i-h2-plus";
 +
 +	aliases {
-+		serial0 = &uart0;
 +		ethernet0 = &emac;
 +		ethernet1 = &xr819;
++		serial0 = &uart0;
 +	};
 +
 +	chosen {
 +		stdout-path = "serial0:115200n8";
 +	};
 +
-+ 	connector {
-+ 		compatible = "hdmi-connector";
-+ 		type = "a";
-+ 
-+ 		port {
-+ 			hdmi_con_in: endpoint {
-+ 				remote-endpoint = <&hdmi_out_con>;
-+ 			};
-+ 		};
-+ 	};
++	connector {
++		compatible = "hdmi-connector";
++		type = "a";
++
++		port {
++			hdmi_con_in: endpoint {
++				remote-endpoint = <&hdmi_out_con>;
++			};
++		};
++	};
 +
 +	leds {
 +		compatible = "gpio-leds";
++		pinctrl-names = "default";
++		pinctrl-0 = <&leds_opc>, <&leds_r_opc>;
 +
 +		pwr_led {
-+			label = "sunvell-r69:blue:pwr";
-+			gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;
-+			linux,default-trigger = "heartbeat";
++			label = "sunvell-r69:red:pwr";
++			gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
 +		};
 +
 +		status_led {
-+			label = "sunvell-r69:red:status";
-+			gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
++			label = "sunvell-r69:blue:status";
++			gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;
++			linux,default-trigger = "heartbeat";
 +		};
 +	};
 +
++	reg_vdd_cpux: vdd-cpux-regulator {
++		compatible = "regulator-gpio";
++		regulator-name = "vdd-cpux";
++		regulator-type = "voltage";
++		regulator-boot-on;
++		regulator-always-on;
++		regulator-min-microvolt = <1100000>;
++		regulator-max-microvolt = <1300000>;
++		regulator-ramp-delay = <50>;		/* 4ms */
++
++		gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>;	/* PL6 */
++		enable-active-high;
++		gpios-states = <0x1>;
++		states = <1100000 0x0
++			  1300000 0x1>;
++	};
++
 +	reg_vcc_wifi: reg_vcc_wifi {
 +		compatible = "regulator-fixed";
 +		regulator-min-microvolt = <3300000>;
@@ -123,6 +105,10 @@ index 0000000..1adfb0c
 +	};
 +};
 +
++&cpu0 {
++	cpu-supply = <&reg_vdd_cpux>;
++};
++
 +&de {
 +	status = "okay";
 +};
@@ -154,37 +140,24 @@ index 0000000..1adfb0c
 +
 +&ir {
 +	pinctrl-names = "default";
-+	pinctrl-0 = <&r_ir_rx_pin>;
++	pinctrl-0 = <&r_ir_rx_pin>;		/* <&r_ir_rx_pin> */
 +	status = "okay";
 +};
 +
 +&mmc0 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&mmc0_pins>;
 +	vmmc-supply = <&reg_vcc3v3>;
 +	bus-width = <4>;
-+	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
-+	cd-inverted;
++	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;	/* PF6 */
 +	status = "okay";
 +};
 +
-+&mmc1_pins {
-+	bias-pull-up;
-+};
-+
 +&mmc1 {
-+	pinctrl-names = "default";
-+	/* pinctrl-0 = <&mmc1_pins>;	*/
 +	vmmc-supply = <&reg_vcc_wifi>;
 +	mmc-pwrseq = <&wifi_pwrseq>;
 +	bus-width = <4>;
 +	non-removable;
 +	status = "okay";
 +
-+	/*
-+	 * Explicitly define the sdio device, so that we can add an ethernet
-+	 * alias for it (which e.g. makes u-boot set a mac-address).
-+	 */
 +	xr819: sdio_wifi@1 {
 +		reg = <1>;
 +		compatible = "xradio,xr819";
@@ -204,6 +177,11 @@ index 0000000..1adfb0c
 +	status = "okay";
 +};
 +
++&mmc2_8bit_pins {
++	/* Increase current from 30mA to 40mA for DDR eMMC */
++	allwinner,drive = <SUN4I_PINCTRL_40_MA>;
++};
++
 +&ohci0 {
 +	status = "okay";
 +};
@@ -212,7 +190,22 @@ index 0000000..1adfb0c
 +	status = "okay";
 +};
 +
-+&tcon0 {
++&pio {
++	leds_opc: led_pins {
++		pins = "PA15";
++		function = "gpio_out";
++	};
++};
++
++&r_pio {
++	leds_r_opc: led_pins {
++		pins = "PL10";
++		function = "gpio_out";
++	};
++};
++
++&reg_usb0_vbus {
++	gpio = <&r_pio 0 2 GPIO_ACTIVE_HIGH>;	/* PL2 */
 +	status = "okay";
 +};
 +
@@ -222,12 +215,29 @@ index 0000000..1adfb0c
 +	status = "okay";
 +};
 +
++&uart1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart1_pins>;
++	status = "disabled";
++};
++
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart2_pins>;
++	status = "disabled";
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart3_pins>;
++	status = "disabled";
++};
++
 +&usb_otg {
-+	dr_mode = "host";		/* host -or- peripheral */
++	dr_mode = "otg";
 +	status = "okay";
 +};
 +
 +&usbphy {
-+	/* USB VBUS is always on */
 +	status = "okay";
 +};
diff --git a/patch/kernel/sunxi-dev/board-h2plus-sunvell-r69-add-device.patch b/patch/kernel/sunxi-dev/board-h2plus-sunvell-r69-add-device.patch
index 11fab7ee8..e2a587d14 100644
--- a/patch/kernel/sunxi-dev/board-h2plus-sunvell-r69-add-device.patch
+++ b/patch/kernel/sunxi-dev/board-h2plus-sunvell-r69-add-device.patch
@@ -1,61 +1,24 @@
 diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
-index e3d5a6c..0d3eef6 100644
+index f47ce87..9f4bc9e 100644
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -995,6 +995,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
+@@ -1092,6 +1092,7 @@ dtb-$(CONFIG_MACH_SUN8I) += \
+ 	sun8i-h2-plus-nanopi-duo.dtb \
  	sun8i-h2-plus-orangepi-r1.dtb \
- 	sun8i-h2-plus-bananapi-m2-zero.dtb \
  	sun8i-h2-plus-orangepi-zero.dtb \
 +	sun8i-h2-plus-sunvell-r69.dtb \
  	sun8i-h3-bananapi-m2-plus.dtb \
+ 	sun8i-h3-bananapi-m2-plus-v1.2.dtb \
  	sun8i-h3-beelink-x2.dtb \
- 	sun8i-h3-libretech-all-h3-cc.dtb \
 diff --git a/arch/arm/boot/dts/sun8i-h2-plus-sunvell-r69.dts b/arch/arm/boot/dts/sun8i-h2-plus-sunvell-r69.dts
 new file mode 100644
-index 0000000..1adfb0c
+index 0000000..3cb766b
 --- /dev/null
 +++ b/arch/arm/boot/dts/sun8i-h2-plus-sunvell-r69.dts
-@@ -0,0 +1,215 @@
+@@ -0,0 +1,225 @@
++// SPDX-License-Identifier: (GPL-2.0+ or MIT)
 +/*
-+ * Based original Sunvell R69 FEX file (2018 <github.com/karabek>)
-+ *
-+ * This file is dual-licensed: you can use it either under the terms
-+ * of the GPL or the X11 license, at your option. Note that this dual
-+ * licensing only applies to this file, and not this project as a
-+ * whole.
-+ *
-+ *  a) This file is free software; you can redistribute it and/or
-+ *     modify it under the terms of the GNU General Public License as
-+ *     published by the Free Software Foundation; either version 2 of the
-+ *     License, or (at your option) any later version.
-+ *
-+ *     This file is distributed in the hope that it will be useful,
-+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *     GNU General Public License for more details.
-+ *
-+ * Or, alternatively,
-+ *
-+ *  b) Permission is hereby granted, free of charge, to any person
-+ *     obtaining a copy of this software and associated documentation
-+ *     files (the "Software"), to deal in the Software without
-+ *     restriction, including without limitation the rights to use,
-+ *     copy, modify, merge, publish, distribute, sublicense, and/or
-+ *     sell copies of the Software, and to permit persons to whom the
-+ *     Software is furnished to do so, subject to the following
-+ *     conditions:
-+ *
-+ *     The above copyright notice and this permission notice shall be
-+ *     included in all copies or substantial portions of the Software.
-+ *
-+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ *     OTHER DEALINGS IN THE SOFTWARE.
++ * Based original Sunvell R69 FEX file (2019 karabek)
 + */
 +
 +/dts-v1/;
@@ -71,41 +34,60 @@ index 0000000..1adfb0c
 +	compatible = "sunvell,sunvell-r69", "allwinner,sun8i-h2-plus";
 +
 +	aliases {
-+		serial0 = &uart0;
 +		ethernet0 = &emac;
 +		ethernet1 = &xr819;
++		serial0 = &uart0;
 +	};
 +
 +	chosen {
 +		stdout-path = "serial0:115200n8";
 +	};
 +
-+ 	connector {
-+ 		compatible = "hdmi-connector";
-+ 		type = "a";
-+ 
-+ 		port {
-+ 			hdmi_con_in: endpoint {
-+ 				remote-endpoint = <&hdmi_out_con>;
-+ 			};
-+ 		};
-+ 	};
++	connector {
++		compatible = "hdmi-connector";
++		type = "a";
++
++		port {
++			hdmi_con_in: endpoint {
++				remote-endpoint = <&hdmi_out_con>;
++			};
++		};
++	};
 +
 +	leds {
 +		compatible = "gpio-leds";
++		pinctrl-names = "default";
++		pinctrl-0 = <&leds_opc>, <&leds_r_opc>;
 +
 +		pwr_led {
-+			label = "sunvell-r69:blue:pwr";
-+			gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;
-+			linux,default-trigger = "heartbeat";
++			label = "sunvell-r69:red:pwr";
++			gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
 +		};
 +
 +		status_led {
-+			label = "sunvell-r69:red:status";
-+			gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
++			label = "sunvell-r69:blue:status";
++			gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;
++			linux,default-trigger = "heartbeat";
 +		};
 +	};
 +
++	reg_vdd_cpux: vdd-cpux-regulator {
++		compatible = "regulator-gpio";
++		regulator-name = "vdd-cpux";
++		regulator-type = "voltage";
++		regulator-boot-on;
++		regulator-always-on;
++		regulator-min-microvolt = <1100000>;
++		regulator-max-microvolt = <1300000>;
++		regulator-ramp-delay = <50>;		/* 4ms */
++
++		gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>;	/* PL6 */
++		enable-active-high;
++		gpios-states = <0x1>;
++		states = <1100000 0x0
++			  1300000 0x1>;
++	};
++
 +	reg_vcc_wifi: reg_vcc_wifi {
 +		compatible = "regulator-fixed";
 +		regulator-min-microvolt = <3300000>;
@@ -123,6 +105,10 @@ index 0000000..1adfb0c
 +	};
 +};
 +
++&cpu0 {
++	cpu-supply = <&reg_vdd_cpux>;
++};
++
 +&de {
 +	status = "okay";
 +};
@@ -154,37 +140,24 @@ index 0000000..1adfb0c
 +
 +&ir {
 +	pinctrl-names = "default";
-+	pinctrl-0 = <&r_ir_rx_pin>;
++	pinctrl-0 = <&r_ir_rx_pin>;		/* <&r_ir_rx_pin> */
 +	status = "okay";
 +};
 +
 +&mmc0 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&mmc0_pins>;
 +	vmmc-supply = <&reg_vcc3v3>;
 +	bus-width = <4>;
-+	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>;
-+	cd-inverted;
++	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>;	/* PF6 */
 +	status = "okay";
 +};
 +
-+&mmc1_pins {
-+	bias-pull-up;
-+};
-+
 +&mmc1 {
-+	pinctrl-names = "default";
-+	/* pinctrl-0 = <&mmc1_pins>;	*/
 +	vmmc-supply = <&reg_vcc_wifi>;
 +	mmc-pwrseq = <&wifi_pwrseq>;
 +	bus-width = <4>;
 +	non-removable;
 +	status = "okay";
 +
-+	/*
-+	 * Explicitly define the sdio device, so that we can add an ethernet
-+	 * alias for it (which e.g. makes u-boot set a mac-address).
-+	 */
 +	xr819: sdio_wifi@1 {
 +		reg = <1>;
 +		compatible = "xradio,xr819";
@@ -204,6 +177,11 @@ index 0000000..1adfb0c
 +	status = "okay";
 +};
 +
++&mmc2_8bit_pins {
++	/* Increase current from 30mA to 40mA for DDR eMMC */
++	allwinner,drive = <SUN4I_PINCTRL_40_MA>;
++};
++
 +&ohci0 {
 +	status = "okay";
 +};
@@ -212,7 +190,22 @@ index 0000000..1adfb0c
 +	status = "okay";
 +};
 +
-+&tcon0 {
++&pio {
++	leds_opc: led_pins {
++		pins = "PA15";
++		function = "gpio_out";
++	};
++};
++
++&r_pio {
++	leds_r_opc: led_pins {
++		pins = "PL10";
++		function = "gpio_out";
++	};
++};
++
++&reg_usb0_vbus {
++	gpio = <&r_pio 0 2 GPIO_ACTIVE_HIGH>;	/* PL2 */
 +	status = "okay";
 +};
 +
@@ -222,12 +215,29 @@ index 0000000..1adfb0c
 +	status = "okay";
 +};
 +
++&uart1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart1_pins>;
++	status = "disabled";
++};
++
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart2_pins>;
++	status = "disabled";
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart3_pins>;
++	status = "disabled";
++};
++
 +&usb_otg {
-+	dr_mode = "host";		/* host -or- peripheral */
++	dr_mode = "otg";
 +	status = "okay";
 +};
 +
 +&usbphy {
-+	/* USB VBUS is always on */
 +	status = "okay";
 +};
diff --git a/patch/u-boot/u-boot-sunxi/add-sunvell-r69.patch b/patch/u-boot/u-boot-sunxi/add-sunvell-r69.patch
index 5ec650207..09269e50c 100644
--- a/patch/u-boot/u-boot-sunxi/add-sunvell-r69.patch
+++ b/patch/u-boot/u-boot-sunxi/add-sunvell-r69.patch
@@ -1,36 +1,31 @@
 diff --git a/configs/sunvell_r69_defconfig b/configs/sunvell_r69_defconfig
 new file mode 100644
-index 0000000..f4947ab
+index 0000000..afbeb08
 --- /dev/null
 +++ b/configs/sunvell_r69_defconfig
-@@ -0,0 +1,22 @@
+@@ -0,0 +1,17 @@
 +CONFIG_ARM=y
 +CONFIG_ARCH_SUNXI=y
-+CONFIG_SYS_TEXT_BASE=0x4a000000
++CONFIG_SPL=y
 +CONFIG_MACH_SUN8I_H3=y
 +CONFIG_DRAM_CLK=408
 +CONFIG_DRAM_ZQ=3881979
 +CONFIG_DRAM_ODT_EN=y
-+# CONFIG_VIDEO_DE2 is not set
-+# CONFIG_VIDEO_COMPOSITE is not set
-+CONFIG_DEFAULT_DEVICE_TREE="sun8i-h2-plus-sunvell-r69"
-+CONFIG_MMC_SUNXI_SLOT_EXTRA=2
++CONFIG_NR_DRAM_BANKS=1
 +# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set
-+# CONFIG_CONSOLE_MUX is not set
-+CONFIG_SPL=y
 +# CONFIG_CMD_FLASH is not set
-+# CONFIG_CMD_FPGA is not set
-+# CONFIG_SPL_SPI_SUNXI is not set
++# CONFIG_SPL_DOS_PARTITION is not set
++# CONFIG_SPL_EFI_PARTITION is not set
++CONFIG_DEFAULT_DEVICE_TREE="sun8i-h2-plus-sunvell-r69"
 +CONFIG_SUN8I_EMAC=y
 +CONFIG_USB_EHCI_HCD=y
-+CONFIG_SYS_CLK_FREQ=480000000
++CONFIG_USB_OHCI_HCD=y
 +CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y
-+
 diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
-index 7202541..1af2005 100644
+index 81fb8be..73de6f6 100755
 --- a/arch/arm/dts/Makefile
 +++ b/arch/arm/dts/Makefile
-@@ -320,6 +320,7 @@ dtb-$(CONFIG_MACH_SUN8I_A83T) += \
+@@ -436,6 +436,7 @@ dtb-$(CONFIG_MACH_SUN8I_A83T) += \
  dtb-$(CONFIG_MACH_SUN8I_H3) += \
  	sun8i-h2-plus-orangepi-zero.dtb \
  	sun8i-h2-plus-nanopi-duo.dtb \
@@ -40,50 +35,13 @@ index 7202541..1af2005 100644
  	sun8i-h3-orangepi-lite.dtb \
 diff --git a/arch/arm/dts/sun8i-h2-plus-sunvell-r69.dts b/arch/arm/dts/sun8i-h2-plus-sunvell-r69.dts
 new file mode 100644
-index 0000000..4b41116
+index 0000000..4c5ba85
 --- /dev/null
 +++ b/arch/arm/dts/sun8i-h2-plus-sunvell-r69.dts
-@@ -0,0 +1,166 @@
+@@ -0,0 +1,220 @@
++// SPDX-License-Identifier: (GPL-2.0+ or MIT)
 +/*
-+ * Based original Sunvell R69 FEX file (2017 <github.com/karabek>)
-+ *
-+ * This file is dual-licensed: you can use it either under the terms
-+ * of the GPL or the X11 license, at your option. Note that this dual
-+ * licensing only applies to this file, and not this project as a
-+ * whole.
-+ *
-+ *  a) This file is free software; you can redistribute it and/or
-+ *     modify it under the terms of the GNU General Public License as
-+ *     published by the Free Software Foundation; either version 2 of the
-+ *     License, or (at your option) any later version.
-+ *
-+ *     This file is distributed in the hope that it will be useful,
-+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *     GNU General Public License for more details.
-+ *
-+ * Or, alternatively,
-+ *
-+ *  b) Permission is hereby granted, free of charge, to any person
-+ *     obtaining a copy of this software and associated documentation
-+ *     files (the "Software"), to deal in the Software without
-+ *     restriction, including without limitation the rights to use,
-+ *     copy, modify, merge, publish, distribute, sublicense, and/or
-+ *     sell copies of the Software, and to permit persons to whom the
-+ *     Software is furnished to do so, subject to the following
-+ *     conditions:
-+ *
-+ *     The above copyright notice and this permission notice shall be
-+ *     included in all copies or substantial portions of the Software.
-+ *
-+ *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-+ *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-+ *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+ *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ *     OTHER DEALINGS IN THE SOFTWARE.
++ * Based original Sunvell R69 FEX file (2019 karabek)
 + */
 +
 +/dts-v1/;
@@ -99,67 +57,113 @@ index 0000000..4b41116
 +	compatible = "sunvell,sunvell-r69", "allwinner,sun8i-h2-plus";
 +
 +	aliases {
++		ethernet0 = &emac;
 +		serial0 = &uart0;
-+		/* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
-+		ethernet1 = &xr819;
 +	};
 +
 +	chosen {
 +		stdout-path = "serial0:115200n8";
 +	};
 +
++	connector {
++		compatible = "hdmi-connector";
++		type = "a";
++
++		port {
++			hdmi_con_in: endpoint {
++				remote-endpoint = <&hdmi_out_con>;
++			};
++		};
++	};
++
 +	leds {
 +		compatible = "gpio-leds";
++		pinctrl-names = "default";
++		pinctrl-0 = <&leds_opc>, <&leds_r_opc>;
 +
 +		pwr_led {
-+			label = "sunvell-r69:blue:pwr";
-+			gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;
++			label = "sunvell-r69:red:pwr";
++			gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
 +			default-state = "on";
 +		};
 +
 +		status_led {
-+			label = "sunvell-r69:red:status";
-+			gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
++			label = "sunvell-r69:blue:status";
++			gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;
 +		};
 +	};
 +
++	reg_vdd_cpux: vdd-cpux-regulator {
++		compatible = "regulator-gpio";
++		regulator-name = "vdd-cpux";
++		regulator-type = "voltage";
++		regulator-boot-on;
++		regulator-always-on;
++		regulator-min-microvolt = <1100000>;
++		regulator-max-microvolt = <1300000>;
++		regulator-ramp-delay = <50>; /* 4ms */
++
++		gpios = <&r_pio 0 6 GPIO_ACTIVE_HIGH>; /* PL6 */
++		enable-active-high;
++		gpios-states = <0x1>;
++		states = <1100000 0x0
++			  1300000 0x1>;
++	};
++
 +	reg_vcc_wifi: reg_vcc_wifi {
 +		compatible = "regulator-fixed";
 +		regulator-min-microvolt = <3300000>;
 +		regulator-max-microvolt = <3300000>;
 +		regulator-name = "vcc-wifi";
-+		enable-active-high;
 +		gpio = <&r_pio 0 7 GPIO_ACTIVE_HIGH>;
++	        startup-delay-us = <70000>;
++		enable-active-high;
 +	};
 +
 +	wifi_pwrseq: wifi_pwrseq {
 +		compatible = "mmc-pwrseq-simple";
 +		reset-gpios = <&r_pio 0 0 GPIO_ACTIVE_LOW>;
++		post-power-on-delay-ms = <200>;
 +	};
 +};
 +
++&cpu0 {
++	cpu-supply = <&reg_vdd_cpux>;
++};
++
++&de {
++	status = "okay";
++};
++
++&ehci0 {
++	status = "okay";
++};
++
 +&ehci1 {
 +	status = "okay";
 +};
 +
 +&emac {
-+	phy = <&phy1>;
++	phy-handle = <&int_mii_phy>;
 +	phy-mode = "mii";
-+	allwinner,use-internal-phy;
 +	allwinner,leds-active-low;
 +	status = "okay";
-+	phy1: ethernet-phy@1 {
-+		reg = <1>;
++};
++
++&hdmi {
++	status = "okay";
++};
++
++&hdmi_out {
++	hdmi_out_con: endpoint {
++		remote-endpoint = <&hdmi_con_in>;
 +	};
 +};
 +
 +&mmc0 {
-+	pinctrl-names = "default";
-+	pinctrl-0 = <&mmc0_pins>;
 +	vmmc-supply = <&reg_vcc3v3>;
 +	bus-width = <4>;
-+	cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */
-+	cd-inverted;
++	cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */
 +	status = "okay";
 +};
 +
@@ -196,17 +200,62 @@ index 0000000..4b41116
 +	allwinner,drive = <SUN4I_PINCTRL_40_MA>;
 +};
 +
++&ohci0 {
++	status = "okay";
++};
++
 +&ohci1 {
 +	status = "okay";
 +};
 +
++&pio {
++	leds_opc: led_pins {
++		pins = "PA15";
++		function = "gpio_out";
++	};
++};
++
++&r_pio {
++	leds_r_opc: led_pins {
++		pins = "PL10";
++		function = "gpio_out";
++	};
++};
++
++&reg_usb0_vbus {
++	gpio = <&r_pio 0 2 GPIO_ACTIVE_HIGH>; /* PL2 */
++	status = "okay";
++};
++
 +&uart0 {
 +	pinctrl-names = "default";
 +	pinctrl-0 = <&uart0_pins_a>;
 +	status = "okay";
 +};
 +
-+&usbphy {
-+	/* USB VBUS is always on */
++&uart1 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart1_pins>;
++	status = "disabled";
++};
++
++&uart2 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart2_pins>;
++	status = "disabled";
++};
++
++&uart3 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&uart3_pins>;
++	status = "disabled";
++};
++
++&usb_otg {
++	dr_mode = "otg";
++	status = "okay";
++};
++
++&usbphy {
 +	status = "okay";
 +};