arm64: dts: rockchip: add PX30-µQ7 (Ringneck) SoM with Haikou baseboard
authorQuentin Schulz <quentin.schulz@theobroma-systems.com>
Mon, 17 Oct 2022 10:25:24 +0000 (12:25 +0200)
committerHeiko Stuebner <heiko@sntech.de>
Mon, 17 Oct 2022 11:42:13 +0000 (13:42 +0200)
The PX30-uQ7 (Ringneck) SoM is a µQseven-compatible (40mmx70mm, MXM-230
connector) system-on-module from Theobroma Systems[1], featuring the
Rockchip PX30.

It provides the following feature set:
 * up to 4GB DDR4
 * up to 128GB on-module eMMC (with 8-bit 1.8V interface)
 * SD card (on a baseboard) via edge connector
 * Fast Ethernet with on-module TI DP83825I PHY
 * MIPI-DSI/LVDS
 * MIPI-CSI
 * USB
   - 1x USB 2.0 dual-role
   - 3x USB 2.0 host
 * on-module STM32 Cortex-M0 companion controller, implementing:
   - low-power RTC functionality (ISL1208 emulation)
   - fan controller (AMC6821 emulation)
   - USB<->CAN bridge controller
 * on-module Espressif ESP32 for Bluetooth + 2.4GHz WiFi
 * on-module NXP SE05x Secure Element

[1] https://www.theobroma-systems.com/som-product/px30-%C2%B5q7/

Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Link: https://lore.kernel.org/r/20220930-upstream-ringneck-v2-1-6671694b6934@theobroma-systems.com
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
arch/arm64/boot/dts/rockchip/Makefile
arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts [new file with mode: 0644]
arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi [new file with mode: 0644]

index 8c15593..a5a6262 100644 (file)
@@ -3,6 +3,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += px30-evb.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += px30-engicam-px30-core-ctouch2.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += px30-engicam-px30-core-ctouch2-of10.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += px30-engicam-px30-core-edimm2.2.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += px30-ringneck-haikou.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-evb.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-roc-cc.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3308-rock-pi-s.dtb
diff --git a/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts b/arch/arm64/boot/dts/rockchip/px30-ringneck-haikou.dts
new file mode 100644 (file)
index 0000000..08a3ad3
--- /dev/null
@@ -0,0 +1,232 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2022 Theobroma Systems Design und Consulting GmbH
+ */
+
+/dts-v1/;
+#include "px30-ringneck.dtsi"
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+       model = "Theobroma Systems PX30-uQ7 SoM on Haikou devkit";
+       compatible = "tsd,px30-ringneck-haikou", "rockchip,px30";
+
+       aliases {
+               mmc2 = &sdmmc;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               pinctrl-0 = <&haikou_keys_pin>;
+               pinctrl-names = "default";
+
+               button-batlow-n {
+                       label = "BATLOW#";
+                       linux,code = <KEY_BATTERY>;
+                       gpios = <&gpio3 RK_PA7 GPIO_ACTIVE_LOW>;
+               };
+
+               button-slp-btn-n {
+                       label = "SLP_BTN#";
+                       linux,code = <KEY_SLEEP>;
+                       gpios = <&gpio1 RK_PB7 GPIO_ACTIVE_LOW>;
+               };
+
+               button-wake-n {
+                       label = "WAKE#";
+                       linux,code = <KEY_WAKEUP>;
+                       gpios = <&gpio1 RK_PB6 GPIO_ACTIVE_LOW>;
+                       wakeup-source;
+               };
+
+               switch-lid-btn-n {
+                       label = "LID_BTN#";
+                       linux,code = <SW_LID>;
+                       linux,input-type = <EV_SW>;
+                       gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       leds {
+               pinctrl-0 = <&module_led_pin>, <&sd_card_led_pin>;
+
+               sd_card_led: led-1 {
+                       gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>;
+                       linux,default-trigger = "mmc2";
+                       function = LED_FUNCTION_SD;
+                       color = <LED_COLOR_ID_BLUE>;
+               };
+       };
+
+       i2s0-sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,name = "Haikou,I2S-codec";
+               simple-audio-card,mclk-fs = <512>;
+
+               simple-audio-card,codec {
+                       clocks = <&sgtl5000_clk>;
+                       sound-dai = <&sgtl5000>;
+               };
+
+               simple-audio-card,cpu {
+                       bitclock-master;
+                       frame-master;
+                       sound-dai = <&i2s0_8ch>;
+               };
+       };
+
+       sgtl5000_clk: sgtl5000-oscillator {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency  = <24576000>;
+       };
+
+       dc_12v: dc-12v-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "dc_12v";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <12000000>;
+               regulator-max-microvolt = <12000000>;
+       };
+
+       vcc3v3_baseboard: vcc3v3-baseboard-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc3v3_baseboard";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&dc_12v>;
+       };
+
+       vcc5v0_baseboard: vcc5v0-baseboard-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0_baseboard";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               vin-supply = <&dc_12v>;
+       };
+
+       vdda_codec: vdda-codec-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vdda_codec";
+               regulator-boot-on;
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               vin-supply = <&vcc5v0_baseboard>;
+       };
+
+       vddd_codec: vddd-codec-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vddd_codec";
+               regulator-boot-on;
+               regulator-min-microvolt = <1600000>;
+               regulator-max-microvolt = <1600000>;
+               vin-supply = <&vcc5v0_baseboard>;
+       };
+};
+
+&i2c2 {
+       status = "okay";
+       clock-frequency = <400000>;
+
+       sgtl5000: codec@a {
+               compatible = "fsl,sgtl5000";
+               reg = <0x0a>;
+               clocks = <&sgtl5000_clk>;
+               #sound-dai-cells = <0>;
+               VDDA-supply = <&vdda_codec>;
+               VDDIO-supply = <&vcc3v3_baseboard>;
+               VDDD-supply = <&vddd_codec>;
+       };
+};
+
+&i2c3 {
+       eeprom@50 {
+               reg = <0x50>;
+               compatible = "atmel,24c01";
+               pagesize = <8>;
+               size = <128>;
+               vcc-supply = <&vcc3v3_baseboard>;
+       };
+};
+
+&i2s0_8ch {
+       status = "okay";
+};
+
+&gmac {
+       status = "okay";
+};
+
+&pinctrl {
+       haikou {
+               haikou_keys_pin: haikou-keys-pin {
+                       rockchip,pins =
+                         /* WAKE# */
+                         <1 RK_PB6 RK_FUNC_GPIO &pcfg_pull_up>,
+                         /* SLP_BTN# */
+                         <1 RK_PB7 RK_FUNC_GPIO &pcfg_pull_up>,
+                         /* LID_BTN */
+                         <3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_up>,
+                         /* BATLOW# */
+                         <3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>,
+                         /* BIOS_DISABLE# */
+                         <2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+
+       leds {
+               sd_card_led_pin: sd-card-led-pin {
+                       rockchip,pins =
+                         <3 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+};
+
+&pwm0 {
+       status = "okay";
+};
+
+&sdmmc {
+       sd-uhs-sdr12;
+       sd-uhs-sdr25;
+       sd-uhs-sdr50;
+       bus-width = <4>;
+       cap-mmc-highspeed;
+       cap-sd-highspeed;
+       cd-gpios = <&gpio0 RK_PA3 GPIO_ACTIVE_LOW>;
+       disable-wp;
+       vmmc-supply = <&vcc3v3_baseboard>;
+       status = "okay";
+};
+
+&spi1 {
+       status = "okay";
+};
+
+&u2phy_otg {
+       status = "okay";
+};
+
+&uart0 {
+       status = "okay";
+};
+
+&uart5 {
+       pinctrl-0 = <&uart5_xfer>;
+       status = "okay";
+};
+
+&usb20_otg {
+       status = "okay";
+};
diff --git a/arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi b/arch/arm64/boot/dts/rockchip/px30-ringneck.dtsi
new file mode 100644 (file)
index 0000000..1239775
--- /dev/null
@@ -0,0 +1,382 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2022 Theobroma Systems Design und Consulting GmbH
+ */
+
+/dts-v1/;
+#include "px30.dtsi"
+#include <dt-bindings/leds/common.h>
+
+/ {
+       aliases {
+               mmc0 = &emmc;
+               mmc1 = &sdio;
+               rtc0 = &rtc_twi;
+               rtc1 = &rk809;
+       };
+
+       emmc_pwrseq: emmc-pwrseq {
+               compatible = "mmc-pwrseq-emmc";
+               pinctrl-0 = <&emmc_reset>;
+               pinctrl-names = "default";
+               reset-gpios = <&gpio1 RK_PB3 GPIO_ACTIVE_HIGH>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+               pinctrl-names = "default";
+               pinctrl-0 = <&module_led_pin>;
+               status = "okay";
+
+               module_led: led-0 {
+                       gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
+                       function = LED_FUNCTION_HEARTBEAT;
+                       linux,default-trigger = "heartbeat";
+                       color = <LED_COLOR_ID_AMBER>;
+               };
+       };
+
+       vcc5v0_sys: vccsys-regulator {
+               compatible = "regulator-fixed";
+               regulator-name = "vcc5v0_sys";
+               regulator-always-on;
+               regulator-boot-on;
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+       };
+};
+
+&cpu0 {
+       cpu-supply = <&vdd_arm>;
+};
+
+&cpu1 {
+       cpu-supply = <&vdd_arm>;
+};
+
+&cpu2 {
+       cpu-supply = <&vdd_arm>;
+};
+
+&cpu3 {
+       cpu-supply = <&vdd_arm>;
+};
+
+&emmc {
+       bus-width = <8>;
+       cap-mmc-highspeed;
+       mmc-hs200-1_8v;
+       supports-emmc;
+       mmc-pwrseq = <&emmc_pwrseq>;
+       non-removable;
+       vmmc-supply = <&vcc_3v3>;
+       vqmmc-supply = <&vcc_emmc>;
+
+       status = "okay";
+};
+
+/* On-module TI DP83825I PHY but no connector, enable in carrierboard */
+&gmac {
+       snps,reset-gpio = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
+       snps,reset-active-low;
+       snps,reset-delays-us = <0 50000 50000>;
+       phy-supply = <&vcc_3v3>;
+       clock_in_out = "output";
+};
+
+&gpio2 {
+       /*
+        * The Qseven BIOS_DISABLE signal on the PX30-µQ7 keeps the on-module
+        * eMMC powered-down initially (in fact it keeps the reset signal
+        * asserted). BIOS_DISABLE_OVERRIDE pin allows to re-enable eMMC after
+        * the SPL has been booted from SD Card.
+        */
+       bios-disable-override-hog {
+               gpios = <RK_PB5 GPIO_ACTIVE_LOW>;
+               output-high;
+               line-name = "bios_disable_override";
+               gpio-hog;
+       };
+
+       /*
+        * The BIOS_DISABLE hog is a feedback pin for the actual status of the
+        * signal, ignoring the BIOS_DISABLE_OVERRIDE logic. This usually
+        * represents the state of a switch on the baseboard.
+        */
+       bios-disable-n-hog {
+               gpios = <RK_PC2 GPIO_ACTIVE_LOW>;
+               line-name = "bios_disable";
+               input;
+               gpio-hog;
+       };
+};
+
+&gpu {
+       status = "okay";
+};
+
+&i2c0 {
+       status = "okay";
+
+       rk809: pmic@20 {
+               compatible = "rockchip,rk809";
+               reg = <0x20>;
+               interrupt-parent = <&gpio0>;
+               interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
+               pinctrl-0 = <&pmic_int>;
+               pinctrl-names = "default";
+               #clock-cells = <0>;
+               clock-output-names = "xin32k";
+               rockchip,system-power-controller;
+               wakeup-source;
+
+               vcc1-supply = <&vcc5v0_sys>;
+               vcc2-supply = <&vcc5v0_sys>;
+               vcc3-supply = <&vcc5v0_sys>;
+               vcc4-supply = <&vcc5v0_sys>;
+               vcc5-supply = <&vcc_3v3>;
+               vcc6-supply = <&vcc_3v3>;
+               vcc7-supply = <&vcc_3v3>;
+               vcc9-supply = <&vcc5v0_sys>;
+
+               regulators {
+                       vdd_log: DCDC_REG1 {
+                               regulator-name = "vdd_log";
+                               regulator-min-microvolt = <950000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <950000>;
+                               };
+                       };
+
+                       vdd_arm: DCDC_REG2 {
+                               regulator-name = "vdd_arm";
+                               regulator-min-microvolt = <950000>;
+                               regulator-max-microvolt = <1350000>;
+                               regulator-ramp-delay = <6001>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                                       regulator-suspend-microvolt = <950000>;
+                               };
+                       };
+
+                       vcc_ddr: DCDC_REG3 {
+                               regulator-name = "vcc_ddr";
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                               };
+                       };
+
+                       vcc_3v0_1v8: vcc_emmc: DCDC_REG4 {
+                               regulator-name = "vcc_3v0_1v8";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3000000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3000000>;
+                               };
+                       };
+
+                       vcc_3v3: DCDC_REG5 {
+                               regulator-name = "vcc_3v3";
+                               regulator-min-microvolt = <3300000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcc_1v8: LDO_REG2 {
+                               regulator-name = "vcc_1v8";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcc_1v0: LDO_REG3 {
+                               regulator-name = "vcc_1v0";
+                               regulator-min-microvolt = <1000000>;
+                               regulator-max-microvolt = <1000000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1000000>;
+                               };
+                       };
+
+                       vccio_sd: LDO_REG5 {
+                               regulator-name = "vccio_sd";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <3300000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <3300000>;
+                               };
+                       };
+
+                       vcc_lcd: LDO_REG7 {
+                               regulator-always-on;
+                               regulator-boot-on;
+                               regulator-min-microvolt = <1000000>;
+                               regulator-max-microvolt = <1000000>;
+                               regulator-name = "vcc_lcd";
+
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                                       regulator-suspend-microvolt = <1000000>;
+                               };
+                       };
+
+                       vcc_1v8_lcd: LDO_REG8 {
+                               regulator-name = "vcc_1v8_lcd";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-on-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+
+                       vcca_1v8: LDO_REG9 {
+                               regulator-name = "vcca_1v8";
+                               regulator-min-microvolt = <1800000>;
+                               regulator-max-microvolt = <1800000>;
+                               regulator-always-on;
+                               regulator-boot-on;
+
+                               regulator-state-mem {
+                                       regulator-off-in-suspend;
+                                       regulator-suspend-microvolt = <1800000>;
+                               };
+                       };
+               };
+       };
+};
+
+&i2c1 {
+       status = "okay";
+
+       /* SE05x is limited to Fast Mode */
+       clock-frequency = <400000>;
+
+       fan: fan@18 {
+               compatible = "ti,amc6821";
+               reg = <0x18>;
+               #cooling-cells = <2>;
+       };
+
+       rtc_twi: rtc@6f {
+               compatible = "isil,isl1208";
+               reg = <0x6f>;
+       };
+};
+
+&i2c3 {
+       status = "okay";
+};
+
+&i2s0_8ch {
+       rockchip,trcm-sync-tx-only;
+
+       pinctrl-0 = <&i2s0_8ch_sclktx &i2s0_8ch_lrcktx
+                    &i2s0_8ch_sdo0 &i2s0_8ch_sdi0>;
+};
+
+&io_domains {
+       vccio1-supply = <&vcc_3v3>;
+       vccio2-supply = <&vccio_sd>;
+       vccio3-supply = <&vcc_3v3>;
+       vccio4-supply = <&vcc_3v3>;
+       vccio5-supply = <&vcc_3v3>;
+       vccio6-supply = <&vcc_emmc>;
+       vccio-oscgpi-supply = <&vcc_3v3>;
+
+       status = "okay";
+};
+
+&pinctrl {
+       emmc {
+               emmc_reset: emmc-reset {
+                       rockchip,pins = <1 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       leds {
+               module_led_pin: module-led-pin {
+                       rockchip,pins = <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+       };
+
+       pmic {
+               pmic_int: pmic-int {
+                       rockchip,pins =
+                               <0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>;
+               };
+       };
+};
+
+&saradc {
+       vref-supply = <&vcc_1v8>;
+       status = "okay";
+};
+
+&sdmmc {
+       vqmmc-supply = <&vccio_sd>;
+};
+
+&tsadc {
+       status = "okay";
+};
+
+&u2phy {
+       status = "okay";
+};
+
+&u2phy_host {
+       status = "okay";
+};
+
+/* Mule UCAN */
+&usb_host0_ehci {
+       status = "okay";
+};
+
+&usb_host0_ohci {
+       status = "okay";
+};
+
+&wdt {
+       status = "okay";
+};