1982 lines
50 KiB
Diff
1982 lines
50 KiB
Diff
commit 09171fb74ce617c17776c23599d74194009d04d6
|
|
Author: Vitaliy Ognev <vognev@localhost.localdomain>
|
|
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 <dt-bindings/gpio/gpio.h>
|
|
+#include <dt-bindings/input/linux-event-codes.h>
|
|
+#include <dt-bindings/leds/common.h>
|
|
+#include <dt-bindings/pinctrl/rockchip.h>
|
|
+#include <dt-bindings/soc/rockchip,vop2.h>
|
|
+#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 = <ABS_X>;
|
|
+ };
|
|
+
|
|
+ axis@1 {
|
|
+ reg = <1>;
|
|
+ abs-flat = <30>;
|
|
+ abs-fuzz = <20>;
|
|
+ abs-range = <1023 15>;
|
|
+ linux,code = <ABS_Y>;
|
|
+ };
|
|
+
|
|
+ axis@2 {
|
|
+ reg = <2>;
|
|
+ abs-flat = <30>;
|
|
+ abs-fuzz = <20>;
|
|
+ abs-range = <15 1023>;
|
|
+ linux,code = <ABS_RX>;
|
|
+ };
|
|
+
|
|
+ axis@3 {
|
|
+ reg = <3>;
|
|
+ abs-flat = <30>;
|
|
+ abs-fuzz = <20>;
|
|
+ abs-range = <1023 15>;
|
|
+ linux,code = <ABS_RY>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ 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 = <BTN_EAST>;
|
|
+ };
|
|
+
|
|
+ button-b {
|
|
+ gpios = <&gpio3 RK_PD2 GPIO_ACTIVE_LOW>;
|
|
+ label = "SOUTH";
|
|
+ linux,code = <BTN_SOUTH>;
|
|
+ };
|
|
+
|
|
+ button-down {
|
|
+ gpios = <&gpio4 RK_PA1 GPIO_ACTIVE_LOW>;
|
|
+ label = "DPAD-DOWN";
|
|
+ linux,code = <BTN_DPAD_DOWN>;
|
|
+ };
|
|
+
|
|
+ button-l1 {
|
|
+ gpios = <&gpio3 RK_PD0 GPIO_ACTIVE_LOW>;
|
|
+ label = "TL";
|
|
+ linux,code = <BTN_TL>;
|
|
+ };
|
|
+
|
|
+ button-l2 {
|
|
+ gpios = <&gpio3 RK_PD1 GPIO_ACTIVE_LOW>;
|
|
+ label = "TL2";
|
|
+ linux,code = <BTN_TL2>;
|
|
+ };
|
|
+
|
|
+ button-left {
|
|
+ gpios = <&gpio3 RK_PD6 GPIO_ACTIVE_LOW>;
|
|
+ label = "DPAD-LEFT";
|
|
+ linux,code = <BTN_DPAD_LEFT>;
|
|
+ };
|
|
+
|
|
+ button-right {
|
|
+ gpios = <&gpio3 RK_PD7 GPIO_ACTIVE_LOW>;
|
|
+ label = "DPAD-RIGHT";
|
|
+ linux,code = <BTN_DPAD_RIGHT>;
|
|
+ };
|
|
+
|
|
+ button-select {
|
|
+ gpios = <&gpio4 RK_PA4 GPIO_ACTIVE_LOW>;
|
|
+ label = "SELECT";
|
|
+ linux,code = <BTN_SELECT>;
|
|
+ };
|
|
+
|
|
+ button-start {
|
|
+ gpios = <&gpio4 RK_PA2 GPIO_ACTIVE_LOW>;
|
|
+ label = "START";
|
|
+ linux,code = <BTN_START>;
|
|
+ };
|
|
+
|
|
+ button-thumbl {
|
|
+ gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_LOW>;
|
|
+ label = "THUMBL";
|
|
+ linux,code = <BTN_THUMBL>;
|
|
+ };
|
|
+
|
|
+ button-thumbr {
|
|
+ gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_LOW>;
|
|
+ label = "THUMBR";
|
|
+ linux,code = <BTN_THUMBR>;
|
|
+ };
|
|
+
|
|
+ button-r1 {
|
|
+ gpios = <&gpio3 RK_PC6 GPIO_ACTIVE_LOW>;
|
|
+ label = "TR";
|
|
+ linux,code = <BTN_TR>;
|
|
+ };
|
|
+
|
|
+ button-r2 {
|
|
+ gpios = <&gpio3 RK_PC7 GPIO_ACTIVE_LOW>;
|
|
+ label = "TR2";
|
|
+ linux,code = <BTN_TR2>;
|
|
+ };
|
|
+
|
|
+ button-up {
|
|
+ gpios = <&gpio4 RK_PA0 GPIO_ACTIVE_LOW>;
|
|
+ label = "DPAD-UP";
|
|
+ linux,code = <BTN_DPAD_UP>;
|
|
+ };
|
|
+
|
|
+ button-x {
|
|
+ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_LOW>;
|
|
+ label = "NORTH";
|
|
+ linux,code = <BTN_NORTH>;
|
|
+ };
|
|
+
|
|
+ button-y {
|
|
+ gpios = <&gpio3 RK_PD4 GPIO_ACTIVE_LOW>;
|
|
+ label = "WEST";
|
|
+ linux,code = <BTN_WEST>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ 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 = <KEY_VOLUMEDOWN>;
|
|
+ };
|
|
+
|
|
+ button-volup {
|
|
+ gpios = <&gpio4 RK_PA5 GPIO_ACTIVE_LOW>;
|
|
+ label = "VOLUMEUP";
|
|
+ linux,code = <KEY_VOLUMEUP>;
|
|
+ };
|
|
+ };
|
|
+
|
|
+ gpio_leds: gpio-leds {
|
|
+ compatible = "gpio-leds";
|
|
+ pinctrl-names = "default";
|
|
+ pinctrl-0 = <&led_pins>;
|
|
+
|
|
+ red_led: led-0 {
|
|
+ color = <LED_COLOR_ID_RED>;
|
|
+ default-state = "off";
|
|
+ gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;
|
|
+ function = LED_FUNCTION_STATUS;
|
|
+ };
|
|
+
|
|
+ green_led: led-1 {
|
|
+ color = <LED_COLOR_ID_GREEN>;
|
|
+ default-state = "on";
|
|
+ gpios = <&gpio4 RK_PB5 GPIO_ACTIVE_HIGH>;
|
|
+ function = LED_FUNCTION_POWER;
|
|
+ };
|
|
+
|
|
+ amber_led: led-2 {
|
|
+ color = <LED_COLOR_ID_AMBER>;
|
|
+ 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 = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
|
|
+ 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 = <ROCKCHIP_VOP2_EP_HDMI0>;
|
|
+ remote-endpoint = <&hdmi_in_vp0>;
|
|
+ };
|
|
+};
|
|
+
|
|
+&vp1 {
|
|
+ vp1_out_dsi0: endpoint@ROCKCHIP_VOP2_EP_MIPI0 {
|
|
+ reg = <ROCKCHIP_VOP2_EP_MIPI0>;
|
|
+ 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 <rng.h>
|
|
+
|
|
+/* 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 <abuf.h>
|
|
#include <adc.h>
|
|
+#include <asm/arch-rockchip/boot_mode.h>
|
|
#include <asm/io.h>
|
|
#include <display.h>
|
|
#include <dm.h>
|
|
@@ -16,7 +17,6 @@
|
|
#include <mmc.h>
|
|
#include <panel.h>
|
|
#include <pwm.h>
|
|
-#include <rng.h>
|
|
#include <stdlib.h>
|
|
#include <video_bridge.h>
|
|
|
|
@@ -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 <macromorgan@hotmail.com>
|
|
+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 <macromorgan@hotmail.com>
|
|
+#
|
|
+
|
|
+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 <macromorgan@hotmail.com>
|
|
+ */
|
|
+
|
|
+#include <asm/arch-rockchip/boot_mode.h>
|
|
+#include <asm/io.h>
|
|
+
|
|
+#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 <p.marczak@samsung.com>
|
|
#
|
|
|
|
-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 <configs/rk3568_common.h>
|
|
+
|
|
+#define ROCKCHIP_DEVICE_SETTINGS \
|
|
+ "stdout=serial,vidconsole\0" \
|
|
+ "stderr=serial,vidconsole\0"
|
|
+
|
|
+#define RK_DNL_ADC_CHAN 0
|
|
+
|
|
+#endif
|