arm64: dts: rockchip: add Tinkerboard 3 and 3S device tree
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
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
@@ -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
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
Signed-off-by Michael Opdenacker <[email protected]>--- Documentation/devicetree/bindings/arm/rockchip.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+)
Best regards,
Krzysztof
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
Signed-off-by Michael Opdenacker <[email protected]>--- Documentation/devicetree/bindings/arm/rockchip.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+)Documentation/devicetree/bindings/arm/rockchip.yaml +0
-0
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
PATCH 2/2 arm64: dts: rockchip: add Tinkerboard 3 and 3S device tree
In reply to a message not in the archiveFrom: 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
@@ -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
@@ -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
@@ -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"; +};
Heiko Stübner
maintainerHi 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
Signed-off-by Michael Opdenacker <[email protected]>---
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
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
Signed-off-by Michael Opdenacker <[email protected]>---
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
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
Signed-off-by Michael Opdenacker <[email protected]>--- 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.dtsarch/arm64/boot/dts/rockchip/Makefile +0
-0
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
-0dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-bpi-r2-pro.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-evb1-v10.dtb dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3568-fastrhino-r66s.dtbarch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +0
-0
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
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
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]
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.dtsarch/arm/boot/dts/rockchip/rk3288-tinker-s.dtsarch/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.dtbarch/arm64/boot/dts/rockchip/rk3566-tinker-3.dts new file +0
-0arch/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
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.dtsarch/arm/boot/dts/rockchip/rk3288-tinker-s.dtsarch/arm/boot/dts/rockchip/rk3288-tinker.dtsiI 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.yamlfile:- 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,rk3288What 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".