Skip to contentSkip to conversation

arm64: dts: rockchip: add Tinkerboard 3 and 3S device tree

PATCH Superseded [email protected] 4 participants 9 messages Nov 11, 2025 – Nov 14, 2025 1 message not in the archive

Subsystems (2)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

PATCH 1/2 dt-bindings: arm: rockchip: Asus Tinkerboard 3 and 3S

From: Michael Opdenacker <[email protected]>

Document the compatible strings for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

The "3S" version ("S" for "storage") just adds a 16 GB eMMC and a "mask ROM" DIP switch to the "3" version.

---
 Documentation/devicetree/bindings/arm/rockchip.yaml | 11 +++++++++++
 1 file changed, 11 insertions(+)
Documentation/devicetree/bindings/arm/rockchip.yaml +11 -0
index 6aceaa8acbb2..451597a6cffb 100644
@@ -86,6 +86,17 @@ properties:
           - const: asus,rk3288-tinker-s
           - const: rockchip,rk3288
 
+      - description: Asus Tinker board 3
+        items:
+          - const: asus,rk3566-tinker-3
+          - const: rockchip,rk3566
+
+      - description: Asus Tinker board 3S
+        items:
+          - const: asus,rk3566-tinker-3s
+          - const: asus,rk3566-tinker-3
+          - const: rockchip,rk3566
+
       - description: Beelink A1
         items:
           - const: azw,beelink-a1
Acked-by on v1 1/2
#2 lore raw

Re: [PATCH 1/2] dt-bindings: arm: rockchip: Asus Tinkerboard 3 and 3S

Quoted 8 lines · On Tue, Nov 11, 2025 at 05:20:22PM +0000, [email protected]…

From: Michael Opdenacker <[email protected]>

Document the compatible strings for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

The "3S" version ("S" for "storage") just adds a 16 GB eMMC and a "mask ROM" DIP switch to the "3" version.

Quoted 6 lines
---
 Documentation/devicetree/bindings/arm/rockchip.yaml | 11 +++++++++++
 1 file changed, 11 insertions(+)

Best regards,
Krzysztof

#3 lore raw

Re: [PATCH 1/2] dt-bindings: arm: rockchip: Asus Tinkerboard 3 and 3S

In reply to [email protected]

Hello Michael,

Thanks for this patch! Please, see some comments below.

Quoted 4 lines · On Tuesday, November 11, 2025 18:20 CET, [email protected]…

From: Michael Opdenacker <[email protected]>

Document the compatible strings for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

For consistency, this should be s/Tinkerboard/Tinker Board/.

Quoted 5 lines

The "3S" version ("S" for "storage") just adds a 16 GB eMMC and a "mask ROM" DIP switch to the "3" version.

These two lines should read like this, to serve as references, with an empty line afterwards, of course:

[1] https://tinker-board.asus.com/series/tinker-board-3.html
[2] https://tinker-board.asus.com/series/tinker-board-3s.html

Quoted 10 lines
---
 Documentation/devicetree/bindings/arm/rockchip.yaml | 11 +++++++++++
 1 file changed, 11 insertions(+)
Documentation/devicetree/bindings/arm/rockchip.yaml +0 -0
index 6aceaa8acbb2..451597a6cffb 100644

Documentation/devicetree/bindings/arm/rockchip.yaml properties: · line 89

Quoted 4 lines
Documentation/devicetree/bindings/arm/rockchip.yaml +1 -0
@@ -86,6 +86,17 @@ properties:
           - const: asus,rk3288-tinker-s
           - const: rockchip,rk3288
 
+      - description: Asus Tinker board 3

This should be s/Tinker board/Tinker Board/, because it's actually a proper noun/name.

Documentation/devicetree/bindings/arm/rockchip.yaml properties: · line 94

Quoted 5 lines
Documentation/devicetree/bindings/arm/rockchip.yaml +5 -0
+        items:
+          - const: asus,rk3566-tinker-3
+          - const: rockchip,rk3566
+
+      - description: Asus Tinker board 3S

The same as above.

Quoted 8 lines
Documentation/devicetree/bindings/arm/rockchip.yaml +5 -0
+        items:
+          - const: asus,rk3566-tinker-3s
+          - const: asus,rk3566-tinker-3
+          - const: rockchip,rk3566
+
       - description: Beelink A1
         items:
           - const: azw,beelink-a1
#4 lore raw

PATCH 2/2 arm64: dts: rockchip: add Tinkerboard 3 and 3S device tree

In reply to a message not in the archive

From: Michael Opdenacker <[email protected]>

Add initial device tree support for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

The "3S" version ("S" for "storage") just adds a 16 GB eMMC and a "mask ROM" DIP switch (to mask the eMMC and enter "Mask ROM" mode for recovery) to the "3" version.

This adds support for:
- Debug UART (/dev/ttyS2)
- SD card (/dev/mmcblk1)
- eMMC (/dev/mmcblk0, only on Tinkerboard 3S)
- I2C:
- i2c0 (internal bus with a PMIC and regulators)
- i2c2 (internal bus with an at24 eeprom and an RTC device)
- USB 2.0 ports
- 2 GPIO LEDS

---
 arch/arm64/boot/dts/rockchip/Makefile         |   2 +
 .../boot/dts/rockchip/rk3566-tinker-3.dts     |  14 +
 .../boot/dts/rockchip/rk3566-tinker-3.dtsi    | 264 ++++++++++++++++++
 .../boot/dts/rockchip/rk3566-tinker-3s.dts    |  30 ++
 4 files changed, 310 insertions(+)
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts
arch/arm64/boot/dts/rockchip/Makefile +2 -0
index ad684e3831bc..381831cab20c 100644
@@ -130,6 +130,8 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-lubancat-1.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-nanopi-r3s.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-bigtreetech-cb2-manta.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-bigtreetech-pi2.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-tinker-3.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-tinker-3s.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-bpi-r2-pro.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb1-v10.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-fastrhino-r66s.dtb
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +14 -0
new file mode 100644
index 000000000000..938af35b9004
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2025 Michael Opdenacker <[email protected]>
+ */
+
+/dts-v1/;
+
+#include "rk3566-tinker-3.dtsi"
+
+/ {
+	model = "Rockchip RK3566 Asus Tinker Board 3";
+	compatible = "asus,rk3566-tinker-3", "rockchip,rk3566";
+};
+
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +264 -0

264 lines not on this page · raw message

arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts new file +30 -0
new file mode 100644
index 000000000000..ba7efd702050
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2025 Michael Opdenacker <[email protected]>
+ */
+
+/dts-v1/;
+
+#include "rk3566-tinker-3.dtsi"
+
+/ {
+	model = "Rockchip RK3566 Asus Tinker Board 3S";
+	compatible = "asus,rk3566-tinker-3s", "asus,rk3566-tinker-3", "rockchip,rk3566";
+
+	aliases {
+		mmc0 = &sdhci;
+	};
+};
+
+&sdhci {
+	bus-width = <8>;
+	cap-mmc-highspeed;
+	max-frequency = <200000000>;
+	mmc-hs200-1_8v;
+	non-removable;
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd &emmc_datastrobe>;
+	vmmc-supply = <&vcc_3v3>;
+	vqmmc-supply = <&vcc_1v8>;
+	status = "okay";
+};
maintainer
#5 lore raw

Hi Michael,

Am Dienstag, 11. November 2025, 18:20:23 Mitteleuropäische Normalzeit schrieb [email protected]:

Quoted 19 lines

From: Michael Opdenacker <[email protected]>

Add initial device tree support for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

The "3S" version ("S" for "storage") just adds a 16 GB eMMC and a "mask ROM" DIP switch (to mask the eMMC and enter "Mask ROM" mode for recovery) to the "3" version.

This adds support for:
- Debug UART (/dev/ttyS2)
- SD card (/dev/mmcblk1)
- eMMC (/dev/mmcblk0, only on Tinkerboard 3S)
- I2C:
- i2c0 (internal bus with a PMIC and regulators)
- i2c2 (internal bus with an at24 eeprom and an RTC device)
- USB 2.0 ports
- 2 GPIO LEDS

Quoted 4 lines

---

please follow the DTS coding style
https://docs.kernel.org/devicetree/bindings/dts-coding-style.html

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 17

Quoted 6 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +6 -0
+/ {
+	aliases {
+		serial2 = &uart2;
+		mmc1 = &sdmmc0;
+		i2c0 = &i2c0;
+		i2c2 = &i2c2;

alphabetical property order

Quoted 28 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +28 -0
+	};
+
+	chosen {
+		stdout-path = "serial2:1500000n8";
+	};
+
+	vcc3v3_sys: regulator-3v3-vcc-sys {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc3v3_sys";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		vin-supply = <&vcc5v0_sys>;
+	};
+
+	vcc5v0_sys: regulator-5v0-vcc-sys {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc5v0_sys";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+	};
+
+	vcc5v0_usb_host: regulator-5v0-vcc-usb-host {
+		compatible = "regulator-fixed";
+		enable-active-high;

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 55

Quoted 10 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +10 -0
+		gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usb_host_pwren_h>;
+		regulator-name = "vcc5v0_usb_host";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		vin-supply = <&vcc5v0_sys>;
+	};
+
+	gpio_leds: gpio-leds {

gpio-foo before regulator-bar

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 61

Quoted 6 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +6 -0
+		compatible = "gpio-leds";
+
+		act-led {
+			gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger="mmc1";
+};

missing indentation

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 70

Quoted 9 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +9 -0
+
+		rsv-led {
+			gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger="none";
+		};
+	};
+};
+
+&uart2 {

alphabetical ordering of phandles please (uart2 definitly somewhere after i2c0)

Quoted 71 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +71 -0
+	status = "okay";
+};
+
+&i2c0 {
+	status = "okay";
+
+	rk809: pmic@20 {
+		compatible = "rockchip,rk809";
+		reg = <0x20>;
+		assigned-clocks = <&cru I2S1_MCLKOUT_TX>;
+		assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>;
+		#clock-cells = <1>;
+		clocks = <&cru I2S1_MCLKOUT_TX>;
+		clock-names = "mclk";
+		clock-output-names = "rk809-clkout1", "rk809-clkout2";
+		interrupt-parent = <&gpio0>;
+		interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pmic_int_l>, <&i2s1m0_mclk>;
+		#sound-dai-cells = <0>;
+		system-power-controller;
+		wakeup-source;
+
+		vcc1-supply = <&vcc3v3_sys>;
+		vcc2-supply = <&vcc3v3_sys>;
+		vcc3-supply = <&vcc3v3_sys>;
+		vcc4-supply = <&vcc3v3_sys>;
+		vcc5-supply = <&vcc3v3_sys>;
+		vcc6-supply = <&vcc3v3_sys>;
+		vcc7-supply = <&vcc3v3_sys>;
+		vcc8-supply = <&vcc3v3_sys>;
+		vcc9-supply = <&vcc3v3_sys>;
+
+		regulators {
+			vcc_1v8: DCDC_REG5 {
+				regulator-name = "vcc_1v8";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc3v3_sd: SWITCH_REG2 {
+				regulator-name = "vcc3v3_sd";
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vccio_sd: LDO_REG5 {
+				regulator-name = "vccio_sd";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <3300000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc_3v3: SWITCH_REG1 {
+				regulator-name = "vcc_3v3";
+				regulator-always-on;

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 151

Quoted 10 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +10 -0
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+		};
+	};
+
+	vdd_cpu: regulator@40 {

you probably need &cpu0 phandles to set this regulator-supply?

Quoted 11 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +11 -0
+		compatible = "silergy,syr827";
+		reg = <0x40>;
+		fcs,suspend-voltage-selector = <1>;
+		regulator-name = "vdd_cpu";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <830000>;
+		regulator-max-microvolt = <1200000>;
+		regulator-ramp-delay = <2300>;
+		vin-supply = <&vcc3v3_sys>;
+

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 172

Quoted 10 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +10 -0
+		regulator-state-mem {
+			regulator-off-in-suspend;
+		};
+	};
+};
+
+&i2c2 {
+	status = "okay";
+
+	m24c08@50 {

I guess eeprom@50 ?

Heiko

#6 lore raw

Hi Heiko

Thanks a lot for the review!

Quoted 22 lines · Heiko Stübner

Hi Michael,

Am Dienstag, 11. November 2025, 18:20:23 Mitteleuropäische Normalzeit schrieb [email protected]:

Quoted 19 lines

From: Michael Opdenacker <[email protected]>

Add initial device tree support for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

The "3S" version ("S" for "storage") just adds a 16 GB eMMC and a "mask ROM" DIP switch (to mask the eMMC and enter "Mask ROM" mode for recovery) to the "3" version.

This adds support for:
- Debug UART (/dev/ttyS2)
- SD card (/dev/mmcblk1)
- eMMC (/dev/mmcblk0, only on Tinkerboard 3S)
- I2C:
- i2c0 (internal bus with a PMIC and regulators)
- i2c2 (internal bus with an at24 eeprom and an RTC device)
- USB 2.0 ports
- 2 GPIO LEDS

Quoted 6 lines
Quoted 4 lines

---

please follow the DTS coding style
https://docs.kernel.org/devicetree/bindings/dts-coding-style.html

Great, I was looking for such a document :)

Quoted 9 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 17

Quoted 8 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +6 -0
+/ {
+	aliases {
+		serial2 = &uart2;
+		mmc1 = &sdmmc0;
+		i2c0 = &i2c0;
+		i2c2 = &i2c2;

alphabetical property order

Fixed.

Quoted 33 lines
Quoted 33 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +31 -0
+	};
+
+	chosen {
+		stdout-path = "serial2:1500000n8";
+	};
+
+	vcc3v3_sys: regulator-3v3-vcc-sys {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc3v3_sys";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		vin-supply = <&vcc5v0_sys>;
+	};
+
+	vcc5v0_sys: regulator-5v0-vcc-sys {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc5v0_sys";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+	};
+
+	vcc5v0_usb_host: regulator-5v0-vcc-usb-host {
+		compatible = "regulator-fixed";
+		enable-active-high;
+		gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usb_host_pwren_h>;
Quoted 8 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 55

Quoted 7 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +7 -0
+		regulator-name = "vcc5v0_usb_host";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		vin-supply = <&vcc5v0_sys>;
+	};
+
+	gpio_leds: gpio-leds {

gpio-foo before regulator-bar

Done

Quoted 8 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 61

Quoted 7 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +6 -0
+		compatible = "gpio-leds";
+
+		act-led {
+			gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger="mmc1";
+};

missing indentation

Oops, fixed.

Quoted 10 lines
Quoted 10 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +7 -0
+
+		rsv-led {
+			gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger="none";
+		};
+	};
+};
Quoted 6 lines
Quoted 5 lines
Quoted 3 lines

Heiko

+
+&uart2 {

alphabetical ordering of phandles please (uart2 definitly somewhere after i2c0)

Indeed. Done.

Quoted 75 lines
Quoted 75 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +74 -0
+	status = "okay";
+};
+
+&i2c0 {
+	status = "okay";
+
+	rk809: pmic@20 {
+		compatible = "rockchip,rk809";
+		reg = <0x20>;
+		assigned-clocks = <&cru I2S1_MCLKOUT_TX>;
+		assigned-clock-parents = <&cru CLK_I2S1_8CH_TX>;
+		#clock-cells = <1>;
+		clocks = <&cru I2S1_MCLKOUT_TX>;
+		clock-names = "mclk";
+		clock-output-names = "rk809-clkout1", "rk809-clkout2";
+		interrupt-parent = <&gpio0>;
+		interrupts = <RK_PA3 IRQ_TYPE_LEVEL_LOW>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&pmic_int_l>, <&i2s1m0_mclk>;
+		#sound-dai-cells = <0>;
+		system-power-controller;
+		wakeup-source;
+
+		vcc1-supply = <&vcc3v3_sys>;
+		vcc2-supply = <&vcc3v3_sys>;
+		vcc3-supply = <&vcc3v3_sys>;
+		vcc4-supply = <&vcc3v3_sys>;
+		vcc5-supply = <&vcc3v3_sys>;
+		vcc6-supply = <&vcc3v3_sys>;
+		vcc7-supply = <&vcc3v3_sys>;
+		vcc8-supply = <&vcc3v3_sys>;
+		vcc9-supply = <&vcc3v3_sys>;
+
+		regulators {
+			vcc_1v8: DCDC_REG5 {
+				regulator-name = "vcc_1v8";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc3v3_sd: SWITCH_REG2 {
+				regulator-name = "vcc3v3_sd";
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vccio_sd: LDO_REG5 {
+				regulator-name = "vccio_sd";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <3300000>;
+
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc_3v3: SWITCH_REG1 {
+				regulator-name = "vcc_3v3";
+				regulator-always-on;
+				regulator-boot-on;
+
+				regulator-state-mem {
Quoted 8 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 151

Quoted 7 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +7 -0
+					regulator-off-in-suspend;
+				};
+			};
+		};
+	};
+
+	vdd_cpu: regulator@40 {

you probably need &cpu0 phandles to set this regulator-supply?

Oh, you're the maintainer on this one :)
Good catch. I was imitating the Orange Pi 3B DT, and since the board seemed to boot fine, I didn't pay attention to the fact that vdd_cpu was needed elsewhere. Fixed.

Quoted 15 lines
Quoted 15 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +14 -0
+		compatible = "silergy,syr827";
+		reg = <0x40>;
+		fcs,suspend-voltage-selector = <1>;
+		regulator-name = "vdd_cpu";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <830000>;
+		regulator-max-microvolt = <1200000>;
+		regulator-ramp-delay = <2300>;
+		vin-supply = <&vcc3v3_sys>;
+
+		regulator-state-mem {
+			regulator-off-in-suspend;
+		};
Quoted 8 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi line 172

Quoted 7 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +7 -0
+	};
+};
+
+&i2c2 {
+	status = "okay";
+
+	m24c08@50 {

I guess eeprom@50 ?

Indeed. Fixed too.
Thanks again,
Michael.

Signature · 10 lines
Michael Opdenacker
Root Commit
Embedded Linux Training and Consulting
https://rootcommit.com


_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
#7 lore raw
In reply to [email protected]

Hello Michael,

Thanks for this patch! Please, see some comments below.

Quoted 4 lines · On Tuesday, November 11, 2025 18:20 CET, [email protected]…

From: Michael Opdenacker <[email protected]>

Add initial device tree support for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

For consistency and because it's a proper noun, this should be s/Tinkerboard/Tinker Board/.

Quoted 14 lines

The "3S" version ("S" for "storage") just adds a 16 GB eMMC and a "mask ROM" DIP switch (to mask the eMMC and enter "Mask ROM" mode for recovery) to the "3" version.

This adds support for:
- Debug UART (/dev/ttyS2)
- SD card (/dev/mmcblk1)
- eMMC (/dev/mmcblk0, only on Tinkerboard 3S)
- I2C:
- i2c0 (internal bus with a PMIC and regulators)
- i2c2 (internal bus with an at24 eeprom and an RTC device)
- USB 2.0 ports
- 2 GPIO LEDS

Quoted 2 lines

These two lines should read like this, to serve as references, with an empty line afterwards, of course:

[1] https://tinker-board.asus.com/series/tinker-board-3.html
[2] https://tinker-board.asus.com/series/tinker-board-3s.html

Quoted 16 lines
---
 arch/arm64/boot/dts/rockchip/Makefile         |   2 +
 .../boot/dts/rockchip/rk3566-tinker-3.dts     |  14 +
 .../boot/dts/rockchip/rk3566-tinker-3.dtsi    | 264 ++++++++++++++++++
 .../boot/dts/rockchip/rk3566-tinker-3s.dts    |  30 ++
 4 files changed, 310 insertions(+)
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi
 create mode 100644 arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts
arch/arm64/boot/dts/rockchip/Makefile +0 -0
index ad684e3831bc..381831cab20c 100644

arch/arm64/boot/dts/rockchip/Makefile dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-lubancat-1.dtb · line 134

Quoted 5 lines
arch/arm64/boot/dts/rockchip/Makefile +2 -0
@@ -130,6 +130,8 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-lubancat-1.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-nanopi-r3s.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-bigtreetech-cb2-manta.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-bigtreetech-pi2.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-tinker-3.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3566-tinker-3s.dtb

The board .dts/.dtb files should include "-board", i.e. these should be "rk3566-tinker-board-3.dtb" and "rk3566-tinker-board-3s.dtb" instead, because there's no real need for shortening. These boards are simply named "Tinker Board", which should be preserved.

Quoted 9 lines
arch/arm64/boot/dts/rockchip/Makefile +0 -0
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-bpi-r2-pro.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb1-v10.dtb
 dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-fastrhino-r66s.dtb
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +0 -0
new file mode 100644
index 000000000000..938af35b9004

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 8

Quoted 8 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +8 -0
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2025 Michael Opdenacker <[email protected]>
+ */
+
+/dts-v1/;
+
+#include "rk3566-tinker-3.dtsi"

The same comment from above about the naming applies here (as well as in other places), so we should have "rk3566-tinker-board-3.dtsi" here instead.

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 11

Quoted 3 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +3 -0
+
+/ {
+	model = "Rockchip RK3566 Asus Tinker Board 3";

For consistency and to avoid redundancy, the "Rockchip RK3566" part should be removed.

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 12

Quoted 1 line
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +1 -0
+	compatible = "asus,rk3566-tinker-3", "rockchip,rk3566";

Actually, the compatible should be "asus,rk3566-tinker-board-3" instead, because there's no real need for shortening it.

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi

Quoted 7 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +2 -0
+};
+
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dtsi new file +0 -0
new file mode 100644
index 000000000000..45269d33b0cb

This .dtsi file should be named "rk3566-tinker-board-3.dtsi" instead, because there's no need for shortening. Please see also a comment above, regarding the naming.

[snip]

arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts

Quoted 5 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts new file +0 -0
new file mode 100644
index 000000000000..ba7efd702050

This .dts file should be named "rk3566-tinker-board-3s.dts" instead, because there's no need for shortening.

arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts line 11

Quoted 12 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts new file +11 -0
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2025 Michael Opdenacker <[email protected]>
+ */
+
+/dts-v1/;
+
+#include "rk3566-tinker-3.dtsi"
+
+/ {
+	model = "Rockchip RK3566 Asus Tinker Board 3S";

For consistency and to avoid redundancy, the "Rockchip RK3566" part should be removed.

arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts line 12

Quoted 1 line
arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts new file +1 -0
+	compatible = "asus,rk3566-tinker-3s", "asus,rk3566-tinker-3", "rockchip,rk3566";

The compatibles should be as below instead, for the same reasons as already explained above.

"asus,rk3566-tinker-board-3s", "asus,rk3566-tinker-board-3", "rockchip,rk3566"

Though, perhaps it would be better to not include the "asus,rk3566- tinker-board-3" part, because I think it's pretty much redundant.

[snip]

#8 lore raw

Hi Dragan,

Thanks a lot for your review and feedback!

Quoted 11 lines · Dragan Simic

Hello Michael,

Thanks for this patch! Please, see some comments below.

Quoted 4 lines · On Tuesday, November 11, 2025 18:20 CET, [email protected]…

From: Michael Opdenacker <[email protected]>

Add initial device tree support for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

For consistency and because it's a proper noun, this should be s/Tinkerboard/Tinker Board/.

Fixed in all the patches.

Quoted 5 lines

The board .dts/.dtb files should include "-board", i.e. these should be "rk3566-tinker-board-3.dtb" and "rk3566-tinker-board-3s.dtb" instead, because there's no real need for shortening. These boards are simply named "Tinker Board", which should be preserved.

Done too. However, I used these names for consistency with what was used on arm(32) for the original Tinker Board:
arch/arm/boot/dts/rockchip/rk3288-tinker.dts
arch/arm/boot/dts/rockchip/rk3288-tinker-s.dts
arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi

I guess it's fine to ignore what arm did right? It won't live as long as arm64 (I attend Arnd's talk about arm 32).

Quoted 22 lines
Quoted 10 lines
  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-bpi-r2-pro.dtb
  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb1-v10.dtb
  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-fastrhino-r66s.dtb
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +0 -0
new file mode 100644
index 000000000000..938af35b9004

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 8

Quoted 8 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +8 -0
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: (GPL-2.0 OR MIT)
+/*
+ * Copyright (C) 2025 Michael Opdenacker <[email protected]>
+ */
+
+/dts-v1/;
+
+#include "rk3566-tinker-3.dtsi"

The same comment from above about the naming applies here (as well as in other places), so we should have "rk3566-tinker-board-3.dtsi" here instead.

Quoted 5 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 11

Quoted 3 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +3 -0
+
+/ {
+	model = "Rockchip RK3566 Asus Tinker Board 3";

For consistency and to avoid redundancy, the "Rockchip RK3566" part should be removed.

Done.

Quoted 4 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 12

Quoted 2 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +1 -0
+	compatible = "asus,rk3566-tinker-3", "rockchip,rk3566";

Actually, the compatible should be "asus,rk3566-tinker-board-3" instead, because there's no real need for shortening it.

No problem to do it. However, here we have a slightly bigger problem: it would be inconsistent with the bindings for the original Tinker Board in the same rockchip.yaml file:

      - description: Asus Tinker board
        items:
          - const: asus,rk3288-tinker
          - const: rockchip,rk3288

      - description: Asus Tinker board S
        items:
          - const: asus,rk3288-tinker-s
          - const: rockchip,rk3288

What do you think? The discrepancy would be quite visiible.

Quoted 5 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 13

Quoted 1 line
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +1 -0
+	compatible = "asus,rk3566-tinker-3s", "asus,rk3566-tinker-3", "rockchip,rk3566";

The compatibles should be as below instead, for the same reasons as already explained above.

   "asus,rk3566-tinker-board-3s", "asus,rk3566-tinker-board-3", "rockchip,rk3566"

Yes, whatever is decided for the compatible strings.

Quoted 3 lines

Though, perhaps it would be better to not include the "asus,rk3566- tinker-board-3" part, because I think it's pretty much redundant.

My reasoning was that Tinker Board 3S is a superset of Tinker Board 3 (additional eMMC and headers).
If someday some code is associated to the compatible string for Tinker 3, than Tinker 3S should use it too, right? Unless we want to have the possibility to ignore some Tinker3 code in Tinker 3S for some reason. Then, it's better indeed that 3S doesn't use the Tinker 3 compatible string. It seems we have more options with what you're suggesting.

What do you think?

Thanks again,
Cheers
Michael.

Signature · 4 lines
Michael Opdenacker
Root Commit
Embedded Linux Training and Consulting
https://rootcommit.com
#9 lore raw

Hello Michael,

Quoted 6 lines · Michael Opdenacker

Thanks a lot for your review and feedback!

Quoted 3 lines · Dragan Simic

Thanks for this patch! Please, see some comments below.

On Tuesday, November 11, 2025 18:20 CET, [email protected] wrote:

Quoted 8 lines
Quoted 6 lines
Quoted 4 lines

From: Michael Opdenacker <[email protected]>

Add initial device tree support for Asus Tinkerboard 3 [1] and 3S [2], which are SBCs based on the Rockchip 3566 SoC.

For consistency and because it's a proper noun, this should be s/Tinkerboard/Tinker Board/.

Fixed in all the patches.

Thanks.

Quoted 8 lines
Quoted 4 lines

The board .dts/.dtb files should include "-board", i.e. these should be "rk3566-tinker-board-3.dtb" and "rk3566-tinker-board-3s.dtb" instead, because there's no real need for shortening. These boards are simply named "Tinker Board", which should be preserved.

Done too. However, I used these names for consistency with what was used on arm(32) for the original Tinker Board:

Quoted 6 lines

arch/arm/boot/dts/rockchip/rk3288-tinker.dts
arch/arm/boot/dts/rockchip/rk3288-tinker-s.dts
arch/arm/boot/dts/rockchip/rk3288-tinker.dtsi

I guess it's fine to ignore what arm did right? It won't live as long as arm64 (I attend Arnd's talk about arm 32).

Thanks. Yes, I saw that naming for the other Tinker Board, based on RK3288, which I'd consider a mistake from the past we should heed from, instead of repeating it. :)

[snip]

Quoted 6 lines
Quoted 4 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 11

Quoted 2 lines
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +2 -0
+/ {
+	model = "Rockchip RK3566 Asus Tinker Board 3";

For consistency and to avoid redundancy, the "Rockchip RK3566" part should be removed.

Done.

Thanks.

Quoted 14 lines
Quoted 4 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts line 12

Quoted 1 line
arch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +1 -0
+	compatible = "asus,rk3566-tinker-3", "rockchip,rk3566";

Actually, the compatible should be "asus,rk3566-tinker-board-3" instead, because there's no real need for shortening it.

No problem to do it. However, here we have a slightly bigger problem: it would be inconsistent with the bindings for the original Tinker Board in the same rockchip.yaml file:

      - description: Asus Tinker board
        items:
          - const: asus,rk3288-tinker
          - const: rockchip,rk3288

Quoted 6 lines

      - description: Asus Tinker board S
        items:
          - const: asus,rk3288-tinker-s
          - const: rockchip,rk3288

What do you think? The discrepancy would be quite visiible.

I'd still consider that old naming a mistake from the past we should heed from, instead of repeating it for the sake of consistency that's already lacking left and right.

Quoted 11 lines
Quoted 5 lines

arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts line 12

Quoted 1 line
arch/arm64/boot/dts/rockchip/rk3566-tinker-3s.dts new file +1 -0
+	compatible = "asus,rk3566-tinker-3s", "asus,rk3566-tinker-3", "rockchip,rk3566";

The compatibles should be as below instead, for the same reasons as already explained above.

   "asus,rk3566-tinker-board-3s", "asus,rk3566-tinker-board-3", "rockchip,rk3566"

Yes, whatever is decided for the compatible strings.

Quoted 2 lines

Though, perhaps it would be better to not include the "asus,rk3566- tinker-board-3" part, because I think it's pretty much redundant.

Quoted 7 lines

My reasoning was that Tinker Board 3S is a superset of Tinker Board 3 (additional eMMC and headers).
If someday some code is associated to the compatible string for Tinker 3, than Tinker 3S should use it too, right? Unless we want to have the possibility to ignore some Tinker3 code in Tinker 3S for some reason. Then, it's better indeed that 3S doesn't use the Tinker 3 compatible string. It seems we have more options with what you're suggesting.

You were right about having "asus,rk3566-tinker-board-3" there as well originally, because that would allow us to possibly define some specifics later that apply to both the 3 and 3S variants.

Just like "asus,rk3566-tinker-board-3" refines "rockchip,rk3566" and makes it more specific, "asus,rk3566-tinker-board-3s" also does the same to "asus,rk3566-tinker-board-3".