From a6dc97b1b93c6485e28f9d5e2fbc103cb3470c82 Mon Sep 17 00:00:00 2001 From: Vitaliy Ognev Date: Sun, 31 May 2026 21:13:48 +0300 Subject: [PATCH] u-boot-powkiddy-x55: upgrade to 2026.04 Part-of: --- device/testing/u-boot-powkiddy-x55/APKBUILD | 19 +- .../u-boot-powkiddy-x55/powkiddy-x55.patch | 1982 ----------------- 2 files changed, 6 insertions(+), 1995 deletions(-) delete mode 100644 device/testing/u-boot-powkiddy-x55/powkiddy-x55.patch diff --git a/device/testing/u-boot-powkiddy-x55/APKBUILD b/device/testing/u-boot-powkiddy-x55/APKBUILD index bc0b92222..ec3ec763d 100644 --- a/device/testing/u-boot-powkiddy-x55/APKBUILD +++ b/device/testing/u-boot-powkiddy-x55/APKBUILD @@ -1,6 +1,6 @@ maintainer="Vitaliy Ognev " pkgname=u-boot-powkiddy-x55 -pkgver=v2024.01_rc4 +pkgver=2026.04 pkgrel=0 pkgdesc="U-Boot bootloader for the Powkiddy X55 (rk3566)" url="https://source.denx.de/u-boot/u-boot.git" @@ -11,9 +11,11 @@ license="GPL-2.0-or-later OFL-1.1 BSD-2-Clause BSD-3-Clause eCos-2.0 IBM-pibs options="!check" makedepends=" + bash bc bison flex + gnutls-dev libfdt make openssl-dev @@ -23,7 +25,7 @@ makedepends=" swig " -_uboot="27089f1e4d11fd7e0619097b59258d0428cde2ac" +_uboot="88dc2788777babfd6322fa655df549a019aa1e69" _rkbin="a2a0b89b6c8c612dca5ed9ed8a68db8a07f68bc0" builddir=$srcdir/u-boot-$_uboot @@ -31,15 +33,9 @@ builddir=$srcdir/u-boot-$_uboot source=" uboot-$_uboot.tar.gz::https://github.com/u-boot/u-boot/archive/$_uboot.tar.gz rkbin-$_rkbin.tar.gz::https://github.com/rockchip-linux/rkbin/archive/$_rkbin.tar.gz - powkiddy-x55.patch " build() { - cd $srcdir/rkbin-$_rkbin - ./tools/boot_merger RKBOOT/RK3568MINIALL.ini - - cd $builddir - make powkiddy-x55-rk3566_defconfig export ROCKCHIP_TPL=$srcdir/rkbin-$_rkbin/bin/rk35/rk3566_ddr_1056MHz_v1.21.bin @@ -48,9 +44,7 @@ build() { make spl/u-boot-spl.bin u-boot.dtb u-boot.img tools make CONFIG_MKIMAGE_DTC_PATH="scripts/dtc/dtc" - tools/mkimage -n rk3568 -T rksd -d \ - $ROCKCHIP_TPL:$srcdir/rkbin-$_rkbin/rk356x_spl_loader_v1.21.113.bin \ - -C bzip2 idbloader.img + tools/mkimage -n rk3568 -T rksd -d $ROCKCHIP_TPL:spl/u-boot-spl.bin -C bzip2 idbloader.img } package() { @@ -61,7 +55,6 @@ package() { } sha512sums=" -2727d6bd70b17a9235dd7296dddfc458a9632a62119a61a7ddaf91059844e8fe213dfeafe8126b0c9c1966e6614ead8c9b4710ab3dc636744533fbc7138e3ff5 uboot-27089f1e4d11fd7e0619097b59258d0428cde2ac.tar.gz +d4470668561ce084b04cdae7930085a3ea2ea4adfcf9b14080db9a6288355507603c95326da7a0afeaa0e93fb29d961cdf7a2adb7f6b7eec17960317b40ee7fd uboot-88dc2788777babfd6322fa655df549a019aa1e69.tar.gz 715253b5ef5c7fbcbce8478d4dea5ad3d1b4b738da437b5f0e9b31eed20f9bcb86cab082e4c04c69b42b6ffcc2cbb1a31079b33b968bb76826ff0dd4f83043e1 rkbin-a2a0b89b6c8c612dca5ed9ed8a68db8a07f68bc0.tar.gz -f9c6850267fc47ee14358df4cd10c46687c6f6223bba6de3aa6c6401c973ced7753ba7e81c7bf8315428a9cef50472aa257a1737ba9271482a2c13f69bcf29c1 powkiddy-x55.patch " diff --git a/device/testing/u-boot-powkiddy-x55/powkiddy-x55.patch b/device/testing/u-boot-powkiddy-x55/powkiddy-x55.patch deleted file mode 100644 index ba9283394..000000000 --- a/device/testing/u-boot-powkiddy-x55/powkiddy-x55.patch +++ /dev/null @@ -1,1982 +0,0 @@ -commit 09171fb74ce617c17776c23599d74194009d04d6 -Author: Vitaliy Ognev -Date: Wed Jan 31 10:29:25 2024 +0200 - - powkiddy x55 patch - -diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile -index 5fc888680b..6e5cb7c3e9 100644 ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -172,6 +172,7 @@ dtb-$(CONFIG_ROCKCHIP_RK3399) += \ - - dtb-$(CONFIG_ROCKCHIP_RK3568) += \ - rk3566-anbernic-rgxx3.dtb \ -+ rk3566-powkiddy-x55.dtb \ - rk3566-quartz64-a.dtb \ - rk3566-quartz64-b.dtb \ - rk3566-radxa-cm3-io.dtb \ -diff --git a/arch/arm/dts/rk3566-anbernic-rgxx3-u-boot.dtsi b/arch/arm/dts/rk3566-anbernic-rgxx3-u-boot.dtsi -index f986e1941e..e3ab196d22 100644 ---- a/arch/arm/dts/rk3566-anbernic-rgxx3-u-boot.dtsi -+++ b/arch/arm/dts/rk3566-anbernic-rgxx3-u-boot.dtsi -@@ -76,6 +76,12 @@ - /delete-property/ clock-names; - }; - -+&saradc { -+ bootph-all; -+ vref-supply = <&vcc_sys>; -+ status = "okay"; -+}; -+ - &sdhci { - pinctrl-0 = <&emmc_bus8>, <&emmc_clk>, <&emmc_cmd>, - <&emmc_datastrobe>, <&emmc_rstnout>; -@@ -94,3 +100,8 @@ - bootph-all; - status = "okay"; - }; -+ -+&vcc_sys { -+ bootph-all; -+ status = "okay"; -+}; -diff --git a/arch/arm/dts/rk3566-powkiddy-x55-u-boot.dtsi b/arch/arm/dts/rk3566-powkiddy-x55-u-boot.dtsi -new file mode 100644 -index 0000000000..1a3089b598 ---- /dev/null -+++ b/arch/arm/dts/rk3566-powkiddy-x55-u-boot.dtsi -@@ -0,0 +1,67 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -+ -+#include "rk356x-u-boot.dtsi" -+ -+/ { -+ chosen { -+ stdout-path = &uart2; -+ }; -+ -+ rng: rng@fe388000 { -+ compatible = "rockchip,cryptov2-rng"; -+ reg = <0x0 0xfe388000 0x0 0x2000>; -+ status = "okay"; -+ }; -+}; -+ -+&cru { -+ assigned-clocks = -+ <&pmucru CLK_RTC_32K>, <&pmucru PLL_PPLL>, -+ <&pmucru PCLK_PMU>, <&cru PLL_CPLL>, -+ <&cru PLL_GPLL>, <&cru PLL_VPLL>, -+ <&cru ACLK_BUS>, <&cru PCLK_BUS>, -+ <&cru ACLK_TOP_HIGH>, <&cru ACLK_TOP_LOW>, -+ <&cru HCLK_TOP>, <&cru PCLK_TOP>, -+ <&cru ACLK_PERIMID>, <&cru HCLK_PERIMID>, -+ <&cru CPLL_500M>, <&cru CPLL_333M>, -+ <&cru CPLL_250M>, <&cru CPLL_125M>, -+ <&cru CPLL_100M>, <&cru CPLL_62P5M>, -+ <&cru CPLL_50M>, <&cru CPLL_25M>; -+ assigned-clock-rates = -+ <32768>, <200000000>, -+ <100000000>, <1000000000>, -+ <1200000000>, <126400000>, -+ <150000000>, <100000000>, -+ <500000000>, <400000000>, -+ <150000000>, <100000000>, -+ <300000000>, <150000000>, -+ <500000000>, <333333333>, -+ <250000000>, <125000000>, -+ <100000000>, <62500000>, -+ <50000000>, <25000000>; -+ assigned-clock-parents = -+ <&pmucru CLK_RTC32K_FRAC>; -+}; -+ -+&pmucru { -+ assigned-clocks = <&pmucru SCLK_32K_IOE>; -+ assigned-clock-parents = <&pmucru CLK_RTC_32K>; -+}; -+ -+/* Move the saradc to a fixed regulator so that it works in SPL. */ -+&saradc { -+ bootph-all; -+ vref-supply = <&vcc_sys>; -+ status = "okay"; -+}; -+ -+&uart2 { -+ clock-frequency = <24000000>; -+ bootph-all; -+ status = "okay"; -+}; -+ -+&vcc_sys { -+ bootph-all; -+ status = "okay"; -+}; -diff --git a/arch/arm/dts/rk3566-powkiddy-x55.dts b/arch/arm/dts/rk3566-powkiddy-x55.dts -new file mode 100644 -index 0000000000..4786b19fd0 ---- /dev/null -+++ b/arch/arm/dts/rk3566-powkiddy-x55.dts -@@ -0,0 +1,926 @@ -+// SPDX-License-Identifier: (GPL-2.0+ OR MIT) -+ -+/dts-v1/; -+ -+#include -+#include -+#include -+#include -+#include -+#include "rk3566.dtsi" -+ -+/ { -+ model = "Powkiddy x55"; -+ compatible = "powkiddy,x55", "rockchip,rk3566"; -+ -+ aliases { -+ mmc0 = &sdhci; -+ mmc1 = &sdmmc0; -+ mmc2 = &sdmmc2; -+ mmc3 = &sdmmc1; -+ }; -+ -+ chosen: chosen { -+ stdout-path = "serial2:1500000n8"; -+ }; -+ -+ adc_joystick: adc-joystick { -+ compatible = "adc-joystick"; -+ io-channels = <&saradc 0>, <&saradc 1>, -+ <&saradc 2>, <&saradc 3>; -+ poll-interval = <60>; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ axis@0 { -+ reg = <0>; -+ abs-flat = <30>; -+ abs-fuzz = <20>; -+ abs-range = <15 1023>; -+ linux,code = ; -+ }; -+ -+ axis@1 { -+ reg = <1>; -+ abs-flat = <30>; -+ abs-fuzz = <20>; -+ abs-range = <1023 15>; -+ linux,code = ; -+ }; -+ -+ axis@2 { -+ reg = <2>; -+ abs-flat = <30>; -+ abs-fuzz = <20>; -+ abs-range = <15 1023>; -+ linux,code = ; -+ }; -+ -+ axis@3 { -+ reg = <3>; -+ abs-flat = <30>; -+ abs-fuzz = <20>; -+ abs-range = <1023 15>; -+ linux,code = ; -+ }; -+ }; -+ -+ backlight: backlight { -+ compatible = "pwm-backlight"; -+ power-supply = <&vcc_sys>; -+ pwms = <&pwm4 0 25000 0>; -+ }; -+ -+ battery: battery { -+ compatible = "simple-battery"; -+ charge-full-design-microamp-hours = <4000000>; -+ charge-term-current-microamp = <300000>; -+ constant-charge-current-max-microamp = <2000000>; -+ constant-charge-voltage-max-microvolt = <4300000>; -+ factory-internal-resistance-micro-ohms = <91000>; -+ voltage-max-design-microvolt = <4138000>; -+ voltage-min-design-microvolt = <3400000>; -+ -+ ocv-capacity-celsius = <20>; -+ ocv-capacity-table-0 = <4138000 100>, <4083000 95>, <4059000 90>, <4044000 85>, -+ <4030000 80>, <4020000 75>, <4006000 70>, <3972000 65>, -+ <3934000 60>, <3904000 55>, <3878000 50>, <3857000 45>, -+ <3843000 40>, <3826000 35>, <3801000 30>, <3768000 25>, -+ <3735000 20>, <3688000 15>, <3621000 10>, <3553000 5>, -+ <3400000 0>; -+ }; -+ -+ gpio_keys_control: gpio-keys-control { -+ compatible = "gpio-keys"; -+ pinctrl-0 = <&btn_pins_ctrl>; -+ pinctrl-names = "default"; -+ -+ button-a { -+ gpios = <&gpio3 RK_PD3 GPIO_ACTIVE_LOW>; -+ label = "EAST"; -+ linux,code = ; -+ }; -+ -+ button-b { -+ gpios = <&gpio3 RK_PD2 GPIO_ACTIVE_LOW>; -+ label = "SOUTH"; -+ linux,code = ; -+ }; -+ -+ button-down { -+ gpios = <&gpio4 RK_PA1 GPIO_ACTIVE_LOW>; -+ label = "DPAD-DOWN"; -+ linux,code = ; -+ }; -+ -+ button-l1 { -+ gpios = <&gpio3 RK_PD0 GPIO_ACTIVE_LOW>; -+ label = "TL"; -+ linux,code = ; -+ }; -+ -+ button-l2 { -+ gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_LOW>; -+ label = "TL2"; -+ linux,code = ; -+ }; -+ -+ button-left { -+ gpios = <&gpio3 RK_PD6 GPIO_ACTIVE_LOW>; -+ label = "DPAD-LEFT"; -+ linux,code = ; -+ }; -+ -+ button-right { -+ gpios = <&gpio3 RK_PD7 GPIO_ACTIVE_LOW>; -+ label = "DPAD-RIGHT"; -+ linux,code = ; -+ }; -+ -+ button-select { -+ gpios = <&gpio4 RK_PA4 GPIO_ACTIVE_LOW>; -+ label = "SELECT"; -+ linux,code = ; -+ }; -+ -+ button-start { -+ gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_LOW>; -+ label = "START"; -+ linux,code = ; -+ }; -+ -+ button-thumbl { -+ gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_LOW>; -+ label = "THUMBL"; -+ linux,code = ; -+ }; -+ -+ button-thumbr { -+ gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>; -+ label = "THUMBR"; -+ linux,code = ; -+ }; -+ -+ button-r1 { -+ gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_LOW>; -+ label = "TR"; -+ linux,code = ; -+ }; -+ -+ button-r2 { -+ gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>; -+ label = "TR2"; -+ linux,code = ; -+ }; -+ -+ button-up { -+ gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>; -+ label = "DPAD-UP"; -+ linux,code = ; -+ }; -+ -+ button-x { -+ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_LOW>; -+ label = "NORTH"; -+ linux,code = ; -+ }; -+ -+ button-y { -+ gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>; -+ label = "WEST"; -+ linux,code = ; -+ }; -+ }; -+ -+ gpio_keys_vol: gpio-keys-vol { -+ compatible = "gpio-keys"; -+ autorepeat; -+ pinctrl-0 = <&btn_pins_vol>; -+ pinctrl-names = "default"; -+ -+ button-voldown { -+ gpios = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>; -+ label = "VOLUMEDOWN"; -+ linux,code = ; -+ }; -+ -+ button-volup { -+ gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_LOW>; -+ label = "VOLUMEUP"; -+ linux,code = ; -+ }; -+ }; -+ -+ gpio_leds: gpio-leds { -+ compatible = "gpio-leds"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&led_pins>; -+ -+ red_led: led-0 { -+ color = ; -+ default-state = "off"; -+ gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>; -+ function = LED_FUNCTION_STATUS; -+ }; -+ -+ green_led: led-1 { -+ color = ; -+ default-state = "on"; -+ gpios = <&gpio4 RK_PB5 GPIO_ACTIVE_HIGH>; -+ function = LED_FUNCTION_POWER; -+ }; -+ -+ amber_led: led-2 { -+ color = ; -+ gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>; -+ function = LED_FUNCTION_CHARGING; -+ }; -+ -+ }; -+ -+ hdmi-con { -+ compatible = "hdmi-connector"; -+ ddc-i2c-bus = <&i2c5>; -+ type = "c"; -+ -+ port { -+ hdmi_con_in: endpoint { -+ remote-endpoint = <&hdmi_out_con>; -+ }; -+ }; -+ }; -+ -+ sdio_pwrseq: sdio-pwrseq { -+ compatible = "mmc-pwrseq-simple"; -+ clocks = <&rk817 1>; -+ clock-names = "ext_clock"; -+ pinctrl-0 = <&wifi_enable_h>; -+ pinctrl-names = "default"; -+ post-power-on-delay-ms = <200>; -+ reset-gpios = <&gpio0 RK_PC0 GPIO_ACTIVE_LOW>; -+ }; -+ -+ /* Channels reversed for both headphones and speakers. */ -+ sound { -+ compatible = "simple-audio-card"; -+ pinctrl-0 = <&hp_det>; -+ pinctrl-names = "default"; -+ simple-audio-card,name = "rk817_ext"; -+ simple-audio-card,aux-devs = <&spk_amp>; -+ simple-audio-card,format = "i2s"; -+ simple-audio-card,hp-det-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; -+ simple-audio-card,mclk-fs = <256>; -+ simple-audio-card,widgets = -+ "Microphone", "Mic Jack", -+ "Headphone", "Headphones", -+ "Speaker", "Internal Speakers"; -+ simple-audio-card,routing = -+ "MICL", "Mic Jack", -+ "Headphones", "HPOL", -+ "Headphones", "HPOR", -+ "Internal Speakers", "Speaker Amp OUTL", -+ "Internal Speakers", "Speaker Amp OUTR", -+ "Speaker Amp INL", "HPOL", -+ "Speaker Amp INR", "HPOR"; -+ simple-audio-card,pin-switches = "Internal Speakers"; -+ -+ simple-audio-card,codec { -+ sound-dai = <&rk817>; -+ }; -+ -+ simple-audio-card,cpu { -+ sound-dai = <&i2s1_8ch>; -+ }; -+ }; -+ -+ spk_amp: audio-amplifier { -+ compatible = "simple-audio-amplifier"; -+ enable-gpios = <&gpio4 RK_PC2 GPIO_ACTIVE_HIGH>; -+ pinctrl-0 = <&spk_amp_enable_h>; -+ pinctrl-names = "default"; -+ sound-name-prefix = "Speaker Amp"; -+ }; -+ -+ vcc5v0_host: regulator-vcc5v0-host { -+ compatible = "regulator-fixed"; -+ enable-active-high; -+ gpio = <&gpio4 RK_PC4 GPIO_ACTIVE_HIGH>; -+ pinctrl-0 = <&vcc5v0_host_en>; -+ pinctrl-names = "default"; -+ regulator-name = "vcc5v0_host"; -+ vin-supply = <&dcdc_boost>; -+ }; -+ -+ vcc_lcd: regulator-vcc-lcd { -+ compatible = "regulator-fixed"; -+ enable-active-high; -+ gpio = <&gpio0 RK_PC7 GPIO_ACTIVE_HIGH>; -+ pinctrl-0 = <&vcc_lcd_en>; -+ pinctrl-names = "default"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc_lcd"; -+ }; -+ -+ vcc_sys: regulator-vcc-sys { -+ compatible = "regulator-fixed"; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3800000>; -+ regulator-max-microvolt = <3800000>; -+ regulator-name = "vcc_sys"; -+ }; -+ -+ vcc_wifi: regulator-vcc-wifi { -+ compatible = "regulator-fixed"; -+ gpio = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>; -+ pinctrl-0 = <&vcc_wifi_h>; -+ pinctrl-names = "default"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc_wifi"; -+ }; -+}; -+ -+&combphy1 { -+ status = "okay"; -+}; -+ -+&cru { -+ assigned-clocks = <&pmucru CLK_RTC_32K>, <&cru PLL_GPLL>, -+ <&pmucru PLL_PPLL>, <&cru PLL_VPLL>; -+ assigned-clock-rates = <32768>, <1200000000>, -+ <200000000>, <126400000>; -+}; -+ -+&cpu0 { -+ cpu-supply = <&vdd_cpu>; -+}; -+ -+&cpu1 { -+ cpu-supply = <&vdd_cpu>; -+}; -+ -+&cpu2 { -+ cpu-supply = <&vdd_cpu>; -+}; -+ -+&cpu3 { -+ cpu-supply = <&vdd_cpu>; -+}; -+ -+&dsi_dphy0 { -+ status = "okay"; -+}; -+ -+&dsi0 { -+ status = "okay"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ ports { -+ dsi0_in: port@0 { -+ reg = <0>; -+ dsi0_in_vp1: endpoint { -+ remote-endpoint = <&vp1_out_dsi0>; -+ }; -+ }; -+ -+ dsi0_out: port@1 { -+ reg = <1>; -+ mipi_out_panel: endpoint { -+ remote-endpoint = <&mipi_in_panel>; -+ }; -+ }; -+ }; -+ -+ panel: panel@0 { -+ compatible = "powkiddy,x55-panel", "himax,hx8394"; -+ reg = <0>; -+ backlight = <&backlight>; -+ iovcc-supply = <&vcc_lcd>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&lcd_rst>; -+ reset-gpios = <&gpio0 RK_PD5 GPIO_ACTIVE_LOW>; -+ rotation = <270>; -+ vcc-supply = <&vcc_lcd>; -+ -+ port { -+ mipi_in_panel: endpoint { -+ remote-endpoint = <&mipi_out_panel>; -+ }; -+ }; -+ }; -+}; -+ -+&gpu { -+ mali-supply = <&vdd_gpu>; -+ status = "okay"; -+}; -+ -+&hdmi { -+ ddc-i2c-bus = <&i2c5>; -+ pinctrl-0 = <&hdmitxm0_cec>; -+ pinctrl-names = "default"; -+ status = "okay"; -+}; -+ -+&hdmi_in { -+ hdmi_in_vp0: endpoint { -+ remote-endpoint = <&vp0_out_hdmi>; -+ }; -+}; -+ -+&hdmi_out { -+ hdmi_out_con: endpoint { -+ remote-endpoint = <&hdmi_con_in>; -+ }; -+}; -+ -+&hdmi_sound { -+ status = "okay"; -+}; -+ -+&i2c0 { -+ status = "okay"; -+ -+ rk817: pmic@20 { -+ compatible = "rockchip,rk817"; -+ reg = <0x20>; -+ assigned-clocks = <&cru I2S1_MCLKOUT_TX>; -+ assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>; -+ clock-names = "mclk"; -+ clock-output-names = "rk808-clkout1", "rk808-clkout2"; -+ clocks = <&cru I2S1_MCLKOUT_TX>; -+ interrupt-parent = <&gpio0>; -+ interrupts = ; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2s1m0_mclk>, <&pmic_int_l>; -+ wakeup-source; -+ #clock-cells = <1>; -+ #sound-dai-cells = <0>; -+ -+ vcc1-supply = <&vcc_sys>; -+ vcc2-supply = <&vcc_sys>; -+ vcc3-supply = <&vcc_sys>; -+ vcc4-supply = <&vcc_sys>; -+ vcc5-supply = <&vcc_sys>; -+ vcc6-supply = <&vcc_sys>; -+ vcc7-supply = <&vcc_sys>; -+ vcc8-supply = <&vcc_sys>; -+ vcc9-supply = <&dcdc_boost>; -+ -+ regulators { -+ vdd_logic: DCDC_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <500000>; -+ regulator-max-microvolt = <1350000>; -+ regulator-ramp-delay = <6001>; -+ regulator-initial-mode = <0x2>; -+ regulator-name = "vdd_logic"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ regulator-suspend-microvolt = <900000>; -+ }; -+ }; -+ -+ vdd_gpu: DCDC_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <500000>; -+ regulator-max-microvolt = <1350000>; -+ regulator-ramp-delay = <6001>; -+ regulator-initial-mode = <0x2>; -+ regulator-name = "vdd_gpu"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc_ddr: DCDC_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-initial-mode = <0x2>; -+ regulator-name = "vcc_ddr"; -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ }; -+ }; -+ -+ vcc_3v3: DCDC_REG4 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-initial-mode = <0x2>; -+ regulator-name = "vcc_3v3"; -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <3300000>; -+ }; -+ }; -+ -+ vcca1v8_pmu: LDO_REG1 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcca1v8_pmu"; -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <1800000>; -+ }; -+ }; -+ -+ vdda_0v9: LDO_REG2 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <900000>; -+ regulator-max-microvolt = <900000>; -+ regulator-name = "vdda_0v9"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vdda0v9_pmu: LDO_REG3 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <900000>; -+ regulator-max-microvolt = <900000>; -+ regulator-name = "vdda0v9_pmu"; -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <900000>; -+ }; -+ }; -+ -+ vccio_acodec: LDO_REG4 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vccio_acodec"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vccio_sd: LDO_REG5 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vccio_sd"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc3v3_pmu: LDO_REG6 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc3v3_pmu"; -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ regulator-suspend-microvolt = <3300000>; -+ }; -+ }; -+ -+ vcc_1v8: LDO_REG7 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc_1v8"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ vcc1v8_dvp: LDO_REG8 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-name = "vcc1v8_dvp"; -+ regulator-state-mem { -+ regulator-on-in-suspend; -+ }; -+ }; -+ -+ vcc2v8_dvp: LDO_REG9 { -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-name = "vcc2v8_dvp"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ dcdc_boost: BOOST { -+ regulator-min-microvolt = <4700000>; -+ regulator-max-microvolt = <5400000>; -+ regulator-name = "boost"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ -+ otg_switch: OTG_SWITCH { -+ regulator-name = "otg_switch"; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+ }; -+ -+ rk817_charger: charger { -+ monitored-battery = <&battery>; -+ rockchip,resistor-sense-micro-ohms = <10000>; -+ rockchip,sleep-enter-current-microamp = <150000>; -+ rockchip,sleep-filter-current-microamp = <100000>; -+ }; -+ -+ }; -+ -+ vdd_cpu: regulator@1c { -+ compatible = "tcs,tcs4525"; -+ reg = <0x1c>; -+ fcs,suspend-voltage-selector = <1>; -+ regulator-always-on; -+ regulator-boot-on; -+ regulator-min-microvolt = <712500>; -+ regulator-max-microvolt = <1390000>; -+ regulator-name = "vdd_cpu"; -+ regulator-ramp-delay = <2300>; -+ vin-supply = <&vcc_sys>; -+ regulator-state-mem { -+ regulator-off-in-suspend; -+ }; -+ }; -+}; -+ -+&i2c5 { -+ pinctrl-0 = <&i2c5m1_xfer>; -+ pinctrl-names = "default"; -+ status = "okay"; -+}; -+ -+&i2s0_8ch { -+ status = "okay"; -+}; -+ -+&i2s1_8ch { -+ pinctrl-0 = <&i2s1m0_sclktx>, <&i2s1m0_lrcktx>, <&i2s1m0_sdi0>, -+ <&i2s1m0_sdo0>; -+ pinctrl-names = "default"; -+ rockchip,trcm-sync-tx-only; -+ status = "okay"; -+}; -+ -+&pinctrl { -+ audio-amplifier { -+ spk_amp_enable_h: spk-amp-enable-h { -+ rockchip,pins = -+ <4 RK_PC2 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ gpio-control { -+ btn_pins_ctrl: btn-pins-ctrl { -+ rockchip,pins = -+ <3 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PC7 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD0 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD1 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD2 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD6 RK_FUNC_GPIO &pcfg_pull_up>, -+ <3 RK_PD7 RK_FUNC_GPIO &pcfg_pull_up>, -+ <4 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>, -+ <4 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>, -+ <4 RK_PA2 RK_FUNC_GPIO &pcfg_pull_up>, -+ <4 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>, -+ <4 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>, -+ <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ -+ btn_pins_vol: btn-pins-vol { -+ rockchip,pins = -+ <4 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>, -+ <4 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ gpio-lcd { -+ lcd_rst: lcd-rst { -+ rockchip,pins = -+ <0 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ gpio-leds { -+ led_pins: led-pins { -+ rockchip,pins = -+ <4 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>, -+ <4 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>, -+ <4 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ hp-detect { -+ hp_det: hp-det { -+ rockchip,pins = -+ <4 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ pmic { -+ pmic_int_l: pmic-int-l { -+ rockchip,pins = -+ <0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ sdio-pwrseq { -+ wifi_enable_h: wifi-enable-h { -+ rockchip,pins = -+ <0 RK_PC0 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ usb { -+ vcc5v0_host_en: vcc5v0-host-en { -+ rockchip,pins = -+ <4 RK_PC4 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ -+ vcc5v0_otg_en: vcc5v0-otg-en { -+ rockchip,pins = -+ <4 RK_PC5 RK_FUNC_GPIO &pcfg_pull_up>; -+ }; -+ }; -+ -+ vcc-lcd { -+ vcc_lcd_en: vcc-lcd-en { -+ rockchip,pins = -+ <0 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+ -+ vcc-wifi { -+ vcc_wifi_h: vcc-wifi-h { -+ rockchip,pins = -+ <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>; -+ }; -+ }; -+}; -+ -+&pmu_io_domains { -+ status = "okay"; -+ pmuio1-supply = <&vcc3v3_pmu>; -+ pmuio2-supply = <&vcca1v8_pmu>; -+ vccio1-supply = <&vccio_acodec>; -+ vccio3-supply = <&vccio_sd>; -+ vccio4-supply = <&vcca1v8_pmu>; -+ vccio5-supply = <&vcc2v8_dvp>; -+ vccio6-supply = <&vcc1v8_dvp>; -+ vccio7-supply = <&vcc_3v3>; -+}; -+ -+&pwm4 { -+ status = "okay"; -+}; -+ -+&saradc { -+ vref-supply = <&vcc_1v8>; -+ status = "okay"; -+}; -+ -+&sdhci { -+ bus-width = <8>; -+ mmc-hs200-1_8v; -+ non-removable; -+ pinctrl-0 = <&emmc_bus8>, <&emmc_clk>, <&emmc_cmd>, -+ <&emmc_datastrobe>, <&emmc_rstnout>; -+ pinctrl-names = "default"; -+ status = "okay"; -+}; -+ -+&sdmmc0 { -+ bus-width = <4>; -+ cap-mmc-highspeed; -+ cap-sd-highspeed; -+ disable-wp; -+ pinctrl-0 = <&sdmmc0_bus4>, <&sdmmc0_clk>, <&sdmmc0_cmd>, -+ <&sdmmc0_det>; -+ pinctrl-names = "default"; -+ sd-uhs-sdr104; -+ vqmmc-supply = <&vccio_sd>; -+ status = "okay"; -+}; -+ -+&sdmmc1 { -+ bus-width = <4>; -+ cap-sd-highspeed; -+ cap-sdio-irq; -+ keep-power-in-suspend; -+ mmc-pwrseq = <&sdio_pwrseq>; -+ non-removable; -+ pinctrl-0 = <&sdmmc1_bus4>, <&sdmmc1_cmd>, <&sdmmc1_clk>; -+ pinctrl-names = "default"; -+ vmmc-supply = <&vcc_wifi>; -+ status = "okay"; -+}; -+ -+&sdmmc2 { -+ bus-width = <4>; -+ cap-mmc-highspeed; -+ cap-sd-highspeed; -+ disable-wp; -+ pinctrl-0 = <&sdmmc2m1_bus4>, <&sdmmc2m1_cmd>, <&sdmmc2m1_clk>, -+ <&sdmmc2m1_det>; -+ pinctrl-names = "default"; -+ sd-uhs-sdr104; -+ vqmmc-supply = <&vcc2v8_dvp>; -+ status = "okay"; -+}; -+ -+&tsadc { -+ rockchip,hw-tshut-mode = <1>; -+ rockchip,hw-tshut-polarity = <0>; -+ status = "okay"; -+}; -+ -+&uart1 { -+ pinctrl-0 = <&uart1m0_xfer>, <&uart1m0_ctsn>, <&uart1m0_rtsn>; -+ pinctrl-names = "default"; -+ uart-has-rtscts; -+ status = "okay"; -+ -+ bluetooth { -+ compatible = "realtek,rtl8821cs-bt", "realtek,rtl8723bs-bt"; -+ device-wake-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>; -+ enable-gpios = <&gpio0 RK_PC1 GPIO_ACTIVE_HIGH>; -+ host-wake-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_HIGH>; -+ }; -+}; -+ -+&uart2 { -+ status = "okay"; -+}; -+ -+&usb_host0_xhci { -+ phys = <&usb2phy0_otg>; -+ phy-names = "usb2-phy"; -+ status = "okay"; -+}; -+ -+&usb_host1_xhci { -+ status = "okay"; -+}; -+ -+&usb2phy0 { -+ status = "okay"; -+}; -+ -+&usb2phy0_otg { -+ status = "okay"; -+}; -+ -+&usb2phy0_host { -+ phy-supply = <&vcc5v0_host>; -+ status = "okay"; -+}; -+ -+&vop { -+ assigned-clocks = <&cru DCLK_VOP0>, <&cru DCLK_VOP1>; -+ assigned-clock-parents = <&pmucru PLL_HPLL>, <&cru PLL_VPLL>; -+ status = "okay"; -+}; -+ -+&vop_mmu { -+ status = "okay"; -+}; -+ -+&vp0 { -+ vp0_out_hdmi: endpoint@ROCKCHIP_VOP2_EP_HDMI0 { -+ reg = ; -+ remote-endpoint = <&hdmi_in_vp0>; -+ }; -+}; -+ -+&vp1 { -+ vp1_out_dsi0: endpoint@ROCKCHIP_VOP2_EP_MIPI0 { -+ reg = ; -+ remote-endpoint = <&dsi0_in_vp1>; -+ }; -+}; -diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile -index 1dc92066bb..ff089ae949 100644 ---- a/arch/arm/mach-rockchip/Makefile -+++ b/arch/arm/mach-rockchip/Makefile -@@ -15,13 +15,13 @@ obj-tpl-$(CONFIG_ROCKCHIP_PX30) += px30-board-tpl.o - - obj-spl-$(CONFIG_ROCKCHIP_RK3036) += rk3036-board-spl.o - --ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),) -- - # Always include boot_mode.o, as we bypass it (i.e. turn it off) - # inside of boot_mode.c when CONFIG_ROCKCHIP_BOOT_MODE_REG is 0. This way, - # we can have the preprocessor correctly recognise both 0x0 and 0 - # meaning "turn it off". - obj-y += boot_mode.o -+ -+ifeq ($(CONFIG_SPL_BUILD)$(CONFIG_TPL_BUILD),) - obj-$(CONFIG_ROCKCHIP_COMMON_BOARD) += board.o - obj-$(CONFIG_MISC_INIT_R) += misc.o - endif -diff --git a/arch/arm/mach-rockchip/board.c b/arch/arm/mach-rockchip/board.c -index 57f08e0be0..77145524ea 100644 ---- a/arch/arm/mach-rockchip/board.c -+++ b/arch/arm/mach-rockchip/board.c -@@ -348,3 +348,35 @@ __weak int misc_init_r(void) - return ret; - } - #endif -+ -+#if IS_ENABLED(CONFIG_BOARD_RNG_SEED) && IS_ENABLED(CONFIG_RNG_ROCKCHIP) -+#include -+ -+/* Use hardware rng to seed Linux random. */ -+__weak int board_rng_seed(struct abuf *buf) -+{ -+ struct udevice *dev; -+ size_t len = 0x8; -+ u64 *data; -+ -+ data = malloc(len); -+ if (!data) { -+ printf("Out of memory\n"); -+ return -ENOMEM; -+ } -+ -+ if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) { -+ printf("No RNG device\n"); -+ return -ENODEV; -+ } -+ -+ if (dm_rng_read(dev, data, len)) { -+ printf("Reading RNG failed\n"); -+ return -EIO; -+ } -+ -+ abuf_init_set(buf, data, len); -+ -+ return 0; -+} -+#endif -diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c -index eb8f65ae4e..d2308768be 100644 ---- a/arch/arm/mach-rockchip/boot_mode.c -+++ b/arch/arm/mach-rockchip/boot_mode.c -@@ -38,6 +38,10 @@ void set_back_to_bootrom_dnl_flag(void) - #define KEY_DOWN_MIN_VAL 0 - #define KEY_DOWN_MAX_VAL 30 - -+#ifndef RK_DNL_ADC_CHAN -+#define RK_DNL_ADC_CHAN 1 -+#endif -+ - __weak int rockchip_dnl_key_pressed(void) - { - unsigned int val; -@@ -52,7 +56,8 @@ __weak int rockchip_dnl_key_pressed(void) - ret = -ENODEV; - uclass_foreach_dev(dev, uc) { - if (!strncmp(dev->name, "saradc", 6)) { -- ret = adc_channel_single_shot(dev->name, 1, &val); -+ ret = adc_channel_single_shot(dev->name, -+ RK_DNL_ADC_CHAN, &val); - break; - } - } -@@ -73,11 +78,13 @@ __weak int rockchip_dnl_key_pressed(void) - - void rockchip_dnl_mode_check(void) - { -+#if CONFIG_IS_ENABLED(ADC) - if (rockchip_dnl_key_pressed()) { - printf("download key pressed, entering download mode..."); - set_back_to_bootrom_dnl_flag(); - do_reset(NULL, 0, 0, NULL); - } -+#endif - } - - int setup_boot_mode(void) -@@ -90,6 +97,7 @@ int setup_boot_mode(void) - boot_mode = readl(reg); - debug("%s: boot mode 0x%08x\n", __func__, boot_mode); - -+#if !defined(CONFIG_SPL_BUILD) && !defined(CONFIG_TPL_BUILD) - /* Clear boot mode */ - writel(BOOT_NORMAL, reg); - -@@ -103,6 +111,7 @@ int setup_boot_mode(void) - env_set("preboot", "setenv preboot; ums mmc 0"); - break; - } -+#endif - - return 0; - } -diff --git a/arch/arm/mach-rockchip/rk3568/Kconfig b/arch/arm/mach-rockchip/rk3568/Kconfig -index baa51349f4..a97da8ae55 100644 ---- a/arch/arm/mach-rockchip/rk3568/Kconfig -+++ b/arch/arm/mach-rockchip/rk3568/Kconfig -@@ -22,6 +22,11 @@ config TARGET_ODROID_M1_RK3568 - help - Hardkernel ODROID-M1 single board computer with a RK3568B2 SoC. - -+config TARGET_POWKIDDY_X55_RK3566 -+ bool "Powkiddy X55" -+ help -+ Powkiddy X55 handheld gaming console with an RK3566 SoC. -+ - config TARGET_QUARTZ64_RK3566 - bool "Pine64 Quartz64" - help -@@ -45,5 +50,6 @@ source "board/rockchip/evb_rk3568/Kconfig" - source "board/anbernic/rgxx3_rk3566/Kconfig" - source "board/hardkernel/odroid_m1/Kconfig" - source "board/pine64/quartz64_rk3566/Kconfig" -+source "board/powkiddy/x55/Kconfig" - - endif -diff --git a/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c b/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c -index 3f1a42d184..194605ff06 100644 ---- a/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c -+++ b/board/anbernic/rgxx3_rk3566/rgxx3-rk3566.c -@@ -5,6 +5,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -16,7 +17,6 @@ - #include - #include - #include --#include - #include - #include - -@@ -33,13 +33,14 @@ - - #define GPIO_WRITEMASK(bits) ((bits) << 16) - --#define DTB_DIR "rockchip/" -+#define DTB_DIR "" - - struct rg3xx_model { - const u16 adc_value; - const char *board; - const char *board_name; - const char *fdtfile; -+ const bool detect_panel; - }; - - enum rgxx3_device_id { -@@ -47,67 +48,117 @@ enum rgxx3_device_id { - RG353P, - RG353V, - RG503, -+ RGB30, -+ RK2023, -+ RGARCD, - /* Devices with duplicate ADC value */ - RG353PS, - RG353VS, -+ RGARCS, - }; - - static const struct rg3xx_model rg3xx_model_details[] = { - [RG353M] = { -- 517, /* Observed average from device */ -- "rk3566-anbernic-rg353m", -- "RG353M", -- DTB_DIR "rk3566-anbernic-rg353p.dtb", /* Identical devices */ -+ .adc_value = 517, /* Observed average from device */ -+ .board = "rk3566-anbernic-rg353m", -+ .board_name = "RG353M", -+ /* Device is identical to RG353P. */ -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg353p.dtb", -+ .detect_panel = 1, - }, - [RG353P] = { -- 860, /* Documented value of 860 */ -- "rk3566-anbernic-rg353p", -- "RG353P", -- DTB_DIR "rk3566-anbernic-rg353p.dtb", -+ .adc_value = 860, /* Documented value of 860 */ -+ .board = "rk3566-anbernic-rg353p", -+ .board_name = "RG353P", -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg353p.dtb", -+ .detect_panel = 1, - }, - [RG353V] = { -- 695, /* Observed average from device */ -- "rk3566-anbernic-rg353v", -- "RG353V", -- DTB_DIR "rk3566-anbernic-rg353v.dtb", -+ .adc_value = 695, /* Observed average from device */ -+ .board = "rk3566-anbernic-rg353v", -+ .board_name = "RG353V", -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg353v.dtb", -+ .detect_panel = 1, - }, - [RG503] = { -- 1023, /* Observed average from device */ -- "rk3566-anbernic-rg503", -- "RG503", -- DTB_DIR "rk3566-anbernic-rg503.dtb", -+ .adc_value = 1023, /* Observed average from device */ -+ .board = "rk3566-anbernic-rg503", -+ .board_name = "RG503", -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg503.dtb", -+ .detect_panel = 0, -+ }, -+ [RGB30] = { -+ .adc_value = 383, /* Gathered from second hand information */ -+ .board = "rk3566-powkiddy-rgb30", -+ .board_name = "RGB30", -+ .fdtfile = DTB_DIR "rk3566-powkiddy-rgb30.dtb", -+ .detect_panel = 0, -+ }, -+ [RK2023] = { -+ .adc_value = 635, /* Observed average from device */ -+ .board = "rk3566-powkiddy-rk2023", -+ .board_name = "RK2023", -+ .fdtfile = DTB_DIR "rk3566-powkiddy-rk2023.dtb", -+ .detect_panel = 0, -+ }, -+ [RGARCD] = { -+ .adc_value = 183, /* Observed average from device */ -+ .board = "rk3566-anbernic-rg-arc-d", -+ .board_name = "Anbernic RG ARC-D", -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg-arc-d.dtb", -+ .detect_panel = 0, - }, - /* Devices with duplicate ADC value */ - [RG353PS] = { -- 860, /* Observed average from device */ -- "rk3566-anbernic-rg353ps", -- "RG353PS", -- DTB_DIR "rk3566-anbernic-rg353ps.dtb", -+ .adc_value = 860, /* Observed average from device */ -+ .board = "rk3566-anbernic-rg353ps", -+ .board_name = "RG353PS", -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg353ps.dtb", -+ .detect_panel = 1, - }, - [RG353VS] = { -- 695, /* Gathered from second hand information */ -- "rk3566-anbernic-rg353vs", -- "RG353VS", -- DTB_DIR "rk3566-anbernic-rg353vs.dtb", -+ .adc_value = 695, /* Gathered from second hand information */ -+ .board = "rk3566-anbernic-rg353vs", -+ .board_name = "RG353VS", -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg353vs.dtb", -+ .detect_panel = 1, -+ }, -+ [RGARCS] = { -+ .adc_value = 183, /* Observed average from device */ -+ .board = "rk3566-anbernic-rg-arc-s", -+ .board_name = "Anbernic RG ARC-S", -+ .fdtfile = DTB_DIR "rk3566-anbernic-rg-arc-s.dtb", -+ .detect_panel = 0, - }, - }; - - struct rg353_panel { - const u16 id; -- const char *panel_compat; -+ const char *panel_compat[2]; - }; - - static const struct rg353_panel rg353_panel_details[] = { -- { .id = 0x3052, .panel_compat = "newvision,nv3051d"}, -- { .id = 0x3821, .panel_compat = "anbernic,rg353v-panel-v2"}, -+ { -+ .id = 0x3052, -+ .panel_compat[0] = "anbernic,rg353p-panel", -+ .panel_compat[1] = "newvision,nv3051d", -+ }, -+ { -+ .id = 0x3821, -+ .panel_compat[0] = "anbernic,rg353v-panel-v2", -+ .panel_compat[1] = NULL, -+ }, - }; - - /* -- * Start LED very early so user knows device is on. Set color -+ * Check if rockchip_dnl button is pressed and reboot into rockusb if -+ * true. Start LED very early so user knows device is on. Set color - * to red. - */ - void spl_board_init(void) - { -+ setup_boot_mode(); -+ - /* Set GPIO0_C5, GPIO0_C6, and GPIO0_C7 to output. */ - writel(GPIO_WRITEMASK(GPIO_C7 | GPIO_C6 | GPIO_C5) | \ - (GPIO_C7 | GPIO_C6 | GPIO_C5), -@@ -117,34 +168,6 @@ void spl_board_init(void) - (GPIO0_BASE + GPIO_SWPORT_DR_H)); - } - --/* Use hardware rng to seed Linux random. */ --int board_rng_seed(struct abuf *buf) --{ -- struct udevice *dev; -- size_t len = 0x8; -- u64 *data; -- -- data = malloc(len); -- if (!data) { -- printf("Out of memory\n"); -- return -ENOMEM; -- } -- -- if (uclass_get_device(UCLASS_RNG, 0, &dev) || !dev) { -- printf("No RNG device\n"); -- return -ENODEV; -- } -- -- if (dm_rng_read(dev, data, len)) { -- printf("Reading RNG failed\n"); -- return -EIO; -- } -- -- abuf_init_set(buf, data, len); -- -- return 0; --} -- - /* - * Buzz the buzzer so the user knows something is going on. Make it - * optional in case PWM is disabled. -@@ -298,11 +321,10 @@ int rgxx3_detect_display(void) - if (!panel) { - printf("Unable to identify panel_id %x\n", - (panel_id[0] << 8) | panel_id[1]); -- env_set("panel", "unknown"); - return -EINVAL; - } - -- env_set("panel", panel->panel_compat); -+ env_set("panel", panel->panel_compat[0]); - - return 0; - } -@@ -342,19 +364,21 @@ int rgxx3_detect_device(void) - } - - /* -- * Try to access the eMMC on an RG353V or RG353P. If it's -- * missing, it's an RG353VS or RG353PS. Note we could also -- * check for a touchscreen at 0x1a on i2c2. -+ * Try to access the eMMC on an RG353V, RG353P, or RG Arc D. -+ * If it's missing, it's an RG353VS, RG353PS, or RG Arc S. -+ * Note we could also check for a touchscreen at 0x1a on i2c2. - */ -- if (board_id == RG353V || board_id == RG353P) { -+ if (board_id == RG353V || board_id == RG353P || board_id == RGARCD) { - mmc = find_mmc_device(0); - if (mmc) { - ret = mmc_init(mmc); - if (ret) { - if (board_id == RG353V) - board_id = RG353VS; -- else -+ else if (board_id == RG353P) - board_id = RG353PS; -+ else -+ board_id = RGARCS; - } - } - } -@@ -367,13 +391,14 @@ int rgxx3_detect_device(void) - rg3xx_model_details[board_id].board_name); - env_set("fdtfile", rg3xx_model_details[board_id].fdtfile); - -- /* Detect the panel type for any device that isn't a 503. */ -- if (board_id == RG503) -+ /* Skip panel detection for when it is not needed. */ -+ if (!rg3xx_model_details[board_id].detect_panel) - return 0; - -+ /* Warn but don't fail for errors in auto-detection of the panel. */ - ret = rgxx3_detect_display(); - if (ret) -- return ret; -+ printf("Failed to detect panel type\n"); - - return 0; - } -@@ -400,7 +425,8 @@ int rk_board_late_init(void) - - int ft_board_setup(void *blob, struct bd_info *bd) - { -- int node, ret; -+ const struct rg353_panel *panel = NULL; -+ int node, ret, i; - char *env; - - /* No fixups necessary for the RG503 */ -@@ -414,6 +440,12 @@ int ft_board_setup(void *blob, struct bd_info *bd) - rg3xx_model_details[RG353M].board_name, - sizeof(rg3xx_model_details[RG353M].board_name)); - -+ env = env_get("panel"); -+ if (!env) { -+ printf("Can't get panel env\n"); -+ return 0; -+ } -+ - /* - * Check if the environment variable doesn't equal the panel. - * If it doesn't, update the devicetree to the correct panel. -@@ -424,12 +456,6 @@ int ft_board_setup(void *blob, struct bd_info *bd) - return -ENODEV; - } - -- env = env_get("panel"); -- if (!env) { -- printf("Can't get panel env\n"); -- return -ENODEV; -- } -- - ret = fdt_node_check_compatible(blob, node, env); - if (ret < 0) - return -ENODEV; -@@ -438,8 +464,24 @@ int ft_board_setup(void *blob, struct bd_info *bd) - if (!ret) - return 0; - -- do_fixup_by_path_string(blob, "/dsi@fe060000/panel@0", -- "compatible", env); -+ /* Panels don't match, search by first compatible value. */ -+ for (i = 0; i < ARRAY_SIZE(rg353_panel_details); i++) { -+ if (!strcmp(env, rg353_panel_details[i].panel_compat[0])) { -+ panel = &rg353_panel_details[i]; -+ break; -+ } -+ } -+ -+ if (!panel) { -+ printf("Unable to identify panel by compat string\n"); -+ return -ENODEV; -+ } -+ -+ /* Set the compatible with the auto-detected values */ -+ fdt_setprop_string(blob, node, "compatible", panel->panel_compat[0]); -+ if (panel->panel_compat[1]) -+ fdt_appendprop_string(blob, node, "compatible", -+ panel->panel_compat[1]); - - return 0; - } -diff --git a/board/powkiddy/x55/Kconfig b/board/powkiddy/x55/Kconfig -new file mode 100644 -index 0000000000..a7b3ed4d0d ---- /dev/null -+++ b/board/powkiddy/x55/Kconfig -@@ -0,0 +1,15 @@ -+if TARGET_POWKIDDY_X55_RK3566 -+ -+config SYS_BOARD -+ default "x55" -+ -+config SYS_VENDOR -+ default "powkiddy" -+ -+config SYS_CONFIG_NAME -+ default "powkiddy-x55-rk3566" -+ -+config BOARD_SPECIFIC_OPTIONS -+ def_bool y -+ -+endif -diff --git a/board/powkiddy/x55/MAINTAINERS b/board/powkiddy/x55/MAINTAINERS -new file mode 100644 -index 0000000000..9ed48f408e ---- /dev/null -+++ b/board/powkiddy/x55/MAINTAINERS -@@ -0,0 +1,9 @@ -+X55 -+M: Chris Morgan -+S: Maintained -+F: board/powkiddy/x55 -+F: include/configs/powkiddy-x55-rk3566.h -+F: configs/powkiddy-x55-rk3566_defconfig -+F: arch/arm/dts/rk3566-powkiddy-x55.dts -+F: arch/arm/dts/rk3566-powkiddy-x55-u-boot.dtsi -+F: doc/board/powkiddy/x55.rst -diff --git a/board/powkiddy/x55/Makefile b/board/powkiddy/x55/Makefile -new file mode 100644 -index 0000000000..55c8c16aa1 ---- /dev/null -+++ b/board/powkiddy/x55/Makefile -@@ -0,0 +1,6 @@ -+# SPDX-License-Identifier: GPL-2.0+ -+# -+# Copyright (c) 2023 Chris Morgan -+# -+ -+obj-y += x55.o -diff --git a/board/powkiddy/x55/x55.c b/board/powkiddy/x55/x55.c -new file mode 100644 -index 0000000000..8d98baa24f ---- /dev/null -+++ b/board/powkiddy/x55/x55.c -@@ -0,0 +1,42 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * Copyright (c) 2023 Chris Morgan -+ */ -+ -+#include -+#include -+ -+#define GPIO4_BASE 0xfe770000 -+#define GPIO_SWPORT_DR_L 0x0000 -+#define GPIO_SWPORT_DDR_L 0x0008 -+#define GPIO_B4 BIT(12) -+#define GPIO_B5 BIT(13) -+#define GPIO_B6 BIT(14) -+ -+#define GPIO_WRITEMASK(bits) ((bits) << 16) -+ -+/* -+ * Start LED very early so user knows device is on. Set color -+ * to red. -+ */ -+void spl_board_init(void) -+{ -+ setup_boot_mode(); -+ -+ /* Set GPIO4_B4, GPIO4_B5, and GPIO4_B6 to output. */ -+ writel(GPIO_WRITEMASK(GPIO_B6 | GPIO_B5 | GPIO_B4) | \ -+ (GPIO_B6 | GPIO_B5 | GPIO_B4), -+ (GPIO4_BASE + GPIO_SWPORT_DDR_L)); -+ /* Set GPIO4_B5 and GPIO4_B6 to 0 and GPIO4_B4 to 1. */ -+ writel(GPIO_WRITEMASK(GPIO_B6 | GPIO_B5 | GPIO_B4) | GPIO_B4, -+ (GPIO4_BASE + GPIO_SWPORT_DR_L)); -+} -+ -+int rk_board_late_init(void) -+{ -+ /* Turn off red LED and turn on orange LED. */ -+ writel(GPIO_WRITEMASK(GPIO_B6 | GPIO_B5 | GPIO_B4) | GPIO_B6, -+ (GPIO4_BASE + GPIO_SWPORT_DR_L)); -+ -+ return 0; -+} -diff --git a/common/spl/Kconfig b/common/spl/Kconfig -index c521b02f4a..ada9dcea5c 100644 ---- a/common/spl/Kconfig -+++ b/common/spl/Kconfig -@@ -579,6 +579,13 @@ config SPL_FIT_IMAGE_TINY - ensure this information is available to the next image - invoked). - -+config SPL_ADC -+ bool "Support ADC drivers" -+ help -+ Enable ADC drivers in SPL. These drivers can allow the reading of -+ analog values from one or more channels. Enable this option to -+ build the drivers in drivers/adc as part of an SPL build. -+ - config SPL_CACHE - bool "Support CACHE drivers" - help -diff --git a/configs/anbernic-rgxx3-rk3566_defconfig b/configs/anbernic-rgxx3-rk3566_defconfig -index ed6643d9d4..27911cc9fc 100644 ---- a/configs/anbernic-rgxx3-rk3566_defconfig -+++ b/configs/anbernic-rgxx3-rk3566_defconfig -@@ -3,6 +3,7 @@ CONFIG_SKIP_LOWLEVEL_INIT=y - CONFIG_COUNTER_FREQUENCY=24000000 - CONFIG_ARCH_ROCKCHIP=y - CONFIG_TEXT_BASE=0x00a00000 -+CONFIG_SPL_GPIO=y - CONFIG_SPL_LIBCOMMON_SUPPORT=y - CONFIG_SPL_LIBGENERIC_SUPPORT=y - CONFIG_NR_DRAM_BANKS=2 -@@ -24,15 +25,17 @@ CONFIG_SYS_LOAD_ADDR=0xc00800 - CONFIG_DEBUG_UART=y - CONFIG_FIT=y - CONFIG_FIT_VERBOSE=y -+CONFIG_SPL_FIT_SIGNATURE=y - CONFIG_SPL_LOAD_FIT=y -+CONFIG_LEGACY_IMAGE_FORMAT=y - CONFIG_OF_BOARD_SETUP=y - CONFIG_OF_STDOUT_VIA_ALIAS=y --CONFIG_DEFAULT_FDT_FILE="rockchip/rk3566-anbernic-rgxx3.dtb" -+CONFIG_DEFAULT_FDT_FILE="rk3566-anbernic-rgxx3.dtb" - # CONFIG_CONSOLE_MUX is not set - # CONFIG_DISPLAY_CPUINFO is not set - CONFIG_DISPLAY_BOARDINFO_LATE=y - CONFIG_BOARD_RNG_SEED=y --CONFIG_SPL_MAX_SIZE=0x20000 -+CONFIG_SPL_MAX_SIZE=0x40000 - CONFIG_SPL_PAD_TO=0x7f8000 - CONFIG_SPL_HAS_BSS_LINKER_SECTION=y - CONFIG_SPL_BSS_START_ADDR=0x4000000 -@@ -41,6 +44,8 @@ CONFIG_SPL_BOARD_INIT=y - # CONFIG_SPL_RAW_IMAGE_SUPPORT is not set - # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set - CONFIG_SPL_STACK_R=y -+CONFIG_SPL_ADC=y -+CONFIG_SPL_POWER=y - CONFIG_SPL_ATF=y - CONFIG_CMD_PWM=y - CONFIG_CMD_GPT=y -@@ -50,8 +55,10 @@ CONFIG_CMD_MMC=y - # CONFIG_SPL_DOS_PARTITION is not set - CONFIG_SPL_OF_CONTROL=y - CONFIG_OF_LIVE=y -+CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y - # CONFIG_NET is not set -+CONFIG_SPL_DM_SEQ_ALIAS=y - CONFIG_SPL_REGMAP=y - CONFIG_SPL_SYSCON=y - CONFIG_SPL_CLK=y -@@ -67,13 +74,13 @@ CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_SDMA=y - CONFIG_MMC_SDHCI_ROCKCHIP=y - CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y -+CONFIG_SPL_PINCTRL=y - CONFIG_DM_PMIC=y - CONFIG_DM_PMIC_FAN53555=y - CONFIG_PMIC_RK8XX=y --CONFIG_REGULATOR_PWM=y --CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_SPL_DM_REGULATOR=y -+CONFIG_SPL_DM_REGULATOR_FIXED=y - CONFIG_REGULATOR_RK8XX=y --CONFIG_DM_REGULATOR_SCMI=y - CONFIG_PWM_ROCKCHIP=y - CONFIG_SPL_RAM=y - # CONFIG_RAM_ROCKCHIP_DEBUG is not set -@@ -89,5 +96,6 @@ CONFIG_VIDEO_ROCKCHIP=y - CONFIG_DISPLAY_ROCKCHIP_DW_MIPI=y - CONFIG_VIDEO_BRIDGE=y - CONFIG_REGEX=y -+# CONFIG_RSA is not set - CONFIG_ERRNO_STR=y - # CONFIG_EFI_LOADER is not set -diff --git a/configs/powkiddy-x55-rk3566_defconfig b/configs/powkiddy-x55-rk3566_defconfig -new file mode 100644 -index 0000000000..923a1ed92a ---- /dev/null -+++ b/configs/powkiddy-x55-rk3566_defconfig -@@ -0,0 +1,92 @@ -+CONFIG_ARM=y -+CONFIG_SKIP_LOWLEVEL_INIT=y -+CONFIG_COUNTER_FREQUENCY=24000000 -+CONFIG_ARCH_ROCKCHIP=y -+CONFIG_TEXT_BASE=0x00a00000 -+CONFIG_SPL_GPIO=y -+CONFIG_SPL_LIBCOMMON_SUPPORT=y -+CONFIG_SPL_LIBGENERIC_SUPPORT=y -+CONFIG_NR_DRAM_BANKS=2 -+CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y -+CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xc00000 -+CONFIG_DEFAULT_DEVICE_TREE="rk3566-powkiddy-x55" -+CONFIG_ROCKCHIP_RK3568=y -+CONFIG_SPL_ROCKCHIP_BACK_TO_BROM=y -+CONFIG_SPL_ROCKCHIP_COMMON_BOARD=y -+CONFIG_ROCKCHIP_RK8XX_DISABLE_BOOT_ON_POWERON=y -+CONFIG_SPL_MMC=y -+CONFIG_SPL_SERIAL=y -+CONFIG_SPL_STACK_R_ADDR=0x600000 -+CONFIG_TARGET_POWKIDDY_X55_RK3566=y -+CONFIG_SPL_STACK=0x400000 -+CONFIG_DEBUG_UART_BASE=0xFE660000 -+CONFIG_DEBUG_UART_CLOCK=24000000 -+CONFIG_SYS_LOAD_ADDR=0xc00800 -+CONFIG_DEBUG_UART=y -+CONFIG_FIT=y -+CONFIG_FIT_VERBOSE=y -+CONFIG_SPL_FIT_SIGNATURE=y -+CONFIG_SPL_LOAD_FIT=y -+CONFIG_LEGACY_IMAGE_FORMAT=y -+CONFIG_OF_STDOUT_VIA_ALIAS=y -+CONFIG_DEFAULT_FDT_FILE="rk3566-powkiddy-x55.dtb" -+# CONFIG_DISPLAY_CPUINFO is not set -+CONFIG_DISPLAY_BOARDINFO_LATE=y -+CONFIG_SPL_MAX_SIZE=0x40000 -+CONFIG_SPL_PAD_TO=0x7f8000 -+CONFIG_SPL_HAS_BSS_LINKER_SECTION=y -+CONFIG_SPL_BSS_START_ADDR=0x4000000 -+CONFIG_SPL_BSS_MAX_SIZE=0x4000 -+CONFIG_SPL_BOARD_INIT=y -+# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set -+# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set -+CONFIG_SPL_STACK_R=y -+CONFIG_SPL_ADC=y -+CONFIG_SPL_POWER=y -+CONFIG_SPL_ATF=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_MMC=y -+# CONFIG_CMD_SETEXPR is not set -+# CONFIG_SPL_DOS_PARTITION is not set -+CONFIG_SPL_OF_CONTROL=y -+CONFIG_OF_LIVE=y -+CONFIG_OF_SPL_REMOVE_PROPS="clock-names interrupt-parent assigned-clocks assigned-clock-rates assigned-clock-parents" -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+# CONFIG_NET is not set -+CONFIG_SPL_DM_SEQ_ALIAS=y -+CONFIG_SPL_REGMAP=y -+CONFIG_SPL_SYSCON=y -+CONFIG_SPL_CLK=y -+CONFIG_ARM_SMCCC_FEATURES=y -+CONFIG_SCMI_FIRMWARE=y -+CONFIG_ROCKCHIP_GPIO=y -+CONFIG_SYS_I2C_ROCKCHIP=y -+CONFIG_MISC=y -+CONFIG_SUPPORT_EMMC_RPMB=y -+CONFIG_MMC_DW=y -+CONFIG_MMC_DW_ROCKCHIP=y -+CONFIG_MMC_SDHCI=y -+CONFIG_MMC_SDHCI_SDMA=y -+CONFIG_MMC_SDHCI_ROCKCHIP=y -+CONFIG_SPL_PINCTRL=y -+CONFIG_DM_PMIC=y -+CONFIG_DM_PMIC_FAN53555=y -+CONFIG_PMIC_RK8XX=y -+CONFIG_SPL_DM_REGULATOR=y -+CONFIG_SPL_DM_REGULATOR_FIXED=y -+CONFIG_REGULATOR_RK8XX=y -+CONFIG_PWM_ROCKCHIP=y -+CONFIG_SPL_RAM=y -+# CONFIG_RAM_ROCKCHIP_DEBUG is not set -+CONFIG_DM_RNG=y -+CONFIG_RNG_ROCKCHIP=y -+# CONFIG_RNG_SMCCC_TRNG is not set -+CONFIG_BAUDRATE=1500000 -+CONFIG_DEBUG_UART_SHIFT=2 -+CONFIG_SYS_NS16550_MEM32=y -+CONFIG_SYSRESET=y -+CONFIG_REGEX=y -+# CONFIG_RSA is not set -+CONFIG_ERRNO_STR=y -+# CONFIG_EFI_LOADER is not set -diff --git a/doc/board/anbernic/rgxx3.rst b/doc/board/anbernic/rgxx3.rst -index 7d1beb423c..d159ed2f76 100644 ---- a/doc/board/anbernic/rgxx3.rst -+++ b/doc/board/anbernic/rgxx3.rst -@@ -5,6 +5,8 @@ U-Boot for Anbernic RGxx3 Devices - - This allows U-Boot to boot the following Anbernic devices: - -+ - Anbernic RG-ARC-D -+ - Anbernic RG-ARC-S - - Anbernic RG353M - - Anbernic RG353P - - Anbernic RG353PS -@@ -12,18 +14,24 @@ This allows U-Boot to boot the following Anbernic devices: - - Anbernic RG353VS - - Anbernic RG503 - -+Additionally, the following very similar non-Anbernic devices are also -+supported: -+ -+ - Powkiddy RGB30 -+ - Powkiddy RK2023 -+ - The correct device is detected automatically by comparing ADC values - from ADC channel 1. In the event of an RG353V or RG353P, an attempt - is then made to probe for an eMMC and if it fails the device is assumed - to be an RG353VS or RG353PS. Based on the detected device, the - environment variables "board", "board_name", and "fdtfile" are set to - the correct values corresponding to the board which can be read by a --boot script to boot with the correct device tree. If the board detected --is not of type RG503 (which currently has only 1 panel revision) a --panel detect is then performed by probing a "dummy" display on the DSI --bus and then querying the display ID. The display ID is then compared --to a table to get the known compatible string for use in Linux, and --this string is saved as an environment variable of "panel". -+boot script to boot with the correct device tree. If a board is defined -+as requiring panel detection, a panel detect is then performed by -+probing a "dummy" display on the DSI bus and then querying the display -+ID. The display ID is then compared to a table to get the known -+compatible string for use in Linux, and this string is saved as an -+environment variable of "panel". - - FDT fixups are performed in the event of an RG353M to change the device - name, or in the event the panel detected does not match the devicetree. -diff --git a/doc/board/index.rst b/doc/board/index.rst -index 531e547e7e..dd4bce9981 100644 ---- a/doc/board/index.rst -+++ b/doc/board/index.rst -@@ -36,6 +36,7 @@ Board-specific doc - nxp/index - openpiton/index - phytec/index -+ powkiddy/index - purism/index - qualcomm/index - renesas/index -diff --git a/doc/board/powkiddy/index.rst b/doc/board/powkiddy/index.rst -new file mode 100644 -index 0000000000..b0115a73d4 ---- /dev/null -+++ b/doc/board/powkiddy/index.rst -@@ -0,0 +1,9 @@ -+.. SPDX-License-Identifier: GPL-2.0+ -+ -+Powkiddy -+======== -+ -+.. toctree:: -+ :maxdepth: 2 -+ -+ x55.rst -diff --git a/doc/board/powkiddy/x55.rst b/doc/board/powkiddy/x55.rst -new file mode 100644 -index 0000000000..cd7456883b ---- /dev/null -+++ b/doc/board/powkiddy/x55.rst -@@ -0,0 +1,25 @@ -+.. SPDX-License-Identifier: GPL-2.0+ -+ -+U-Boot for Powkiddy X55 Handheld Gaming Console -+=============================================== -+ -+This allows U-Boot to boot the Powkiddy X55 handheld gaming console. -+The X55 is very similar to the other existing Powkiddy RK3566 based -+devices, except that ADC channels 0-3 are used for the ADC joysticks. -+As a result the same auto detection functionality cannot be used on -+this device as the others. -+ -+The indicator LED will change color based on the boot stage. Red means -+the device is powered on but has yet to start U-Boot, amber means the -+device has started U-Boot and is waiting to boot Linux, and when Linux -+has taken over the LED should change to green (or however it has been -+configured by the user). -+ -+In the event the device needs to enter Rockchip download mode, a user -+can, starting with the power off, hold the left joystick all the way -+to the left and then power on the device. At this point the USB-C port -+marked DC/OTG should be set to peripheral mode and allow a user to -+manipulate the device with the rkdeveloptool tool. -+ -+See :doc:`../rockchip/devicetree/rockchip` for building and flashing -+instructions. -diff --git a/doc/board/rockchip/rockchip.rst b/doc/board/rockchip/rockchip.rst -index 18d0b6f089..4e290cecdc 100644 ---- a/doc/board/rockchip/rockchip.rst -+++ b/doc/board/rockchip/rockchip.rst -@@ -98,6 +98,7 @@ List of mainline supported Rockchip boards: - - Pine64 SOQuartz on Blade (soquartz-blade-rk3566) - - Pine64 SOQuartz on CM4-IO (soquartz-cm4-rk3566) - - Pine64 SOQuartz on Model A (soquartz-model-a-rk3566) -+ - Powkiddy X55 (powkiddy-x55-rk3566) - - Radxa CM3 IO Board (radxa-cm3-io-rk3566) - - * rk3568 -diff --git a/drivers/Makefile b/drivers/Makefile -index bf73b7718c..81ba2c534e 100644 ---- a/drivers/Makefile -+++ b/drivers/Makefile -@@ -1,5 +1,6 @@ - # SPDX-License-Identifier: GPL-2.0+ - -+obj-$(CONFIG_$(SPL_)ADC) += adc/ - obj-$(CONFIG_$(SPL_TPL_)BIOSEMU) += bios_emulator/ - obj-$(CONFIG_$(SPL_TPL_)BLK) += block/ - obj-$(CONFIG_$(SPL_TPL_)BOOTCOUNT_LIMIT) += bootcount/ -diff --git a/drivers/adc/Makefile b/drivers/adc/Makefile -index 5336c82097..9eb07769b0 100644 ---- a/drivers/adc/Makefile -+++ b/drivers/adc/Makefile -@@ -4,7 +4,7 @@ - # Przemyslaw Marczak - # - --obj-$(CONFIG_ADC) += adc-uclass.o -+obj-$(CONFIG_$(SPL_)ADC) += adc-uclass.o - obj-$(CONFIG_ADC_EXYNOS) += exynos-adc.o - obj-$(CONFIG_ADC_SANDBOX) += sandbox.o - obj-$(CONFIG_SARADC_ROCKCHIP) += rockchip-saradc.o -diff --git a/include/configs/anbernic-rgxx3-rk3566.h b/include/configs/anbernic-rgxx3-rk3566.h -index 3c4ea4e7d8..2aaac55c06 100644 ---- a/include/configs/anbernic-rgxx3-rk3566.h -+++ b/include/configs/anbernic-rgxx3-rk3566.h -@@ -9,4 +9,6 @@ - "stdout=serial,vidconsole\0" \ - "stderr=serial,vidconsole\0" - -+#define RK_DNL_ADC_CHAN 0 -+ - #endif -diff --git a/include/configs/powkiddy-x55-rk3566.h b/include/configs/powkiddy-x55-rk3566.h -new file mode 100644 -index 0000000000..a25b6de455 ---- /dev/null -+++ b/include/configs/powkiddy-x55-rk3566.h -@@ -0,0 +1,14 @@ -+/* SPDX-License-Identifier: GPL-2.0+ */ -+ -+#ifndef __POWKIDDY_X55_RK3566_H -+#define __POWKIDDY_X55_RK3566_H -+ -+#include -+ -+#define ROCKCHIP_DEVICE_SETTINGS \ -+ "stdout=serial,vidconsole\0" \ -+ "stderr=serial,vidconsole\0" -+ -+#define RK_DNL_ADC_CHAN 0 -+ -+#endif