[RFC PATCH 1/4] dt-bindings: i3c: Add Realtek RTS490x I3C hub support

From: zain_zhou

Date: Sun Sep 20 2026 - 06:08:18 EST


From: Yin Zhou <zain_zhou@xxxxxxxxxxxxxx>

Add the device tree binding for the Realtek RTS490x family of I3C
hubs. The hubs provide four or eight downstream target ports that can
operate as I3C buses or SMBus controller and target interfaces, along
with programmable LDO outputs for the controller and target-port
power domains.

Signed-off-by: Yin Zhou <zain_zhou@xxxxxxxxxxxxxx>
---
.../bindings/i3c/realtek,rts490x.yaml | 266 ++++++++++++++++++
MAINTAINERS | 7 +
2 files changed, 273 insertions(+)
create mode 100644 Documentation/devicetree/bindings/i3c/realtek,rts490x.yaml

diff --git a/Documentation/devicetree/bindings/i3c/realtek,rts490x.yaml b/Documentation/devicetree/bindings/i3c/realtek,rts490x.yaml
new file mode 100644
index 000000000000..92d5d73db435
--- /dev/null
+++ b/Documentation/devicetree/bindings/i3c/realtek,rts490x.yaml
@@ -0,0 +1,266 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright 2025-2026 Realtek Semiconductor Corp.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/i3c/realtek,rts490x.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Realtek RTS490x I3C hub
+
+maintainers:
+ - Yin Zhou <zain_zhou@xxxxxxxxxxxxxx>
+
+description: |
+ The Realtek RTS490x family provides four or eight downstream target ports.
+ The hub is an I3C target and is accessed through an upstream I3C controller.
+ Each target port can operate as an I3C bus or as an SMBus controller and
+ target interface. The hub also provides four programmable LDO outputs for
+ its controller and target-port power domains.
+
+properties:
+ compatible:
+ enum:
+ - realtek,rts4900
+ - realtek,rts4901
+ - realtek,rts4902
+ - realtek,rts4903
+ - realtek,rts4904
+ - realtek,rts4906
+
+ reg:
+ maxItems: 1
+
+ '#address-cells':
+ const: 1
+
+ '#size-cells':
+ const: 0
+
+ assigned-address:
+ maximum: 0x7f
+
+ realtek,tp0145-pullup-ohms:
+ description:
+ Pull-up resistance for target ports 0, 1, 4 and 5, in ohms. If omitted,
+ the driver retains the current hardware setting.
+ enum: [250, 500, 1000, 2000]
+
+ realtek,tp2367-pullup-ohms:
+ description:
+ Pull-up resistance for target ports 2, 3, 6 and 7, in ohms. If omitted,
+ the driver retains the current hardware setting.
+ enum: [250, 500, 1000, 2000]
+
+ realtek,cp0-io-strength-ohms:
+ description:
+ IO drive strength for controller port 0, in ohms. If omitted, the driver
+ retains the current hardware setting.
+ enum: [20, 30, 40, 50]
+
+ realtek,cp1-io-strength-ohms:
+ description:
+ IO drive strength for controller port 1, in ohms. If omitted, the driver
+ retains the current hardware setting.
+ enum: [20, 30, 40, 50]
+
+ realtek,tp0145-io-strength-ohms:
+ description:
+ IO drive strength for target ports 0, 1, 4 and 5, in ohms. If omitted,
+ the driver retains the current hardware setting.
+ enum: [20, 30, 40, 50]
+
+ realtek,tp2367-io-strength-ohms:
+ description:
+ IO drive strength for target ports 2, 3, 6 and 7, in ohms. If omitted,
+ the driver retains the current hardware setting.
+ enum: [20, 30, 40, 50]
+
+ vcc-cp0-supply:
+ description:
+ Optional external power supply for controller port 0. If omitted, the
+ driver does not request or enable this supply.
+
+ vcc-cp1-supply:
+ description:
+ Optional external power supply for controller port 1. If omitted, the
+ driver does not request or enable this supply.
+
+ vcc-tp0145-supply:
+ description:
+ Optional external power supply for target ports 0, 1, 4 and 5. If
+ omitted, the driver does not request or enable this supply.
+
+ vcc-tp2367-supply:
+ description:
+ Optional external power supply for target ports 2, 3, 6 and 7. If
+ omitted, the driver does not request or enable this supply.
+
+ regulators:
+ type: object
+ description:
+ Optional container for the hub's programmable LDOs. Only enabled LDO
+ child nodes are registered by the driver. An omitted or disabled LDO
+ child is not registered and its hardware state is left unchanged.
+ additionalProperties: false
+
+ properties:
+ ldo-cp0:
+ type: object
+ $ref: /schemas/regulator/regulator.yaml#
+ unevaluatedProperties: false
+
+ ldo-cp1:
+ type: object
+ $ref: /schemas/regulator/regulator.yaml#
+ unevaluatedProperties: false
+
+ ldo-tp0145:
+ type: object
+ $ref: /schemas/regulator/regulator.yaml#
+ unevaluatedProperties: false
+
+ ldo-tp2367:
+ type: object
+ $ref: /schemas/regulator/regulator.yaml#
+ unevaluatedProperties: false
+
+required:
+ - compatible
+ - reg
+ - '#address-cells'
+ - '#size-cells'
+
+patternProperties:
+ '^i3c@[0-7]$':
+ type: object
+ $ref: /schemas/i3c/i3c.yaml#
+ unevaluatedProperties: false
+
+ properties:
+ reg:
+ description: Target-port number.
+ items:
+ - minimum: 0
+ maximum: 7
+
+ realtek,pullup-enable:
+ type: boolean
+ description:
+ Enable the on-chip pull-up for this target port. If omitted, the
+ on-chip pull-up is disabled.
+
+ required:
+ - reg
+
+ '^smbus@[0-7]$':
+ type: object
+ $ref: /schemas/i2c/i2c-controller.yaml#
+ unevaluatedProperties: false
+
+ properties:
+ reg:
+ description: Target-port number.
+ items:
+ - minimum: 0
+ maximum: 7
+
+ realtek,pullup-enable:
+ type: boolean
+ description:
+ Enable the on-chip pull-up for this target port. If omitted, the
+ on-chip pull-up is disabled.
+
+ clock-frequency:
+ description:
+ SMBus controller-agent clock frequency for this target port, in Hz.
+ If omitted, the driver uses 400 kHz.
+ enum: [100000, 200000, 400000, 1000000]
+ default: 400000
+
+ required:
+ - reg
+
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - realtek,rts4900
+ - realtek,rts4901
+ - realtek,rts4904
+ then:
+ patternProperties:
+ '^i3c@[0-3]$':
+ properties:
+ reg:
+ items:
+ - maximum: 3
+ '^smbus@[0-3]$':
+ properties:
+ reg:
+ items:
+ - maximum: 3
+ '^i3c@[4-7]$': false
+ '^smbus@[4-7]$': false
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ i3c {
+ #address-cells = <3>;
+ #size-cells = <0>;
+
+ hub@70,4ba00000000 {
+ compatible = "realtek,rts4900";
+ reg = <0x70 0x4ba 0x00000000>;
+ assigned-address = <0x70>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ realtek,tp0145-pullup-ohms = <1000>;
+ realtek,cp0-io-strength-ohms = <20>;
+ realtek,cp1-io-strength-ohms = <20>;
+ realtek,tp0145-io-strength-ohms = <30>;
+
+ vcc-cp0-supply = <&ldo_cp0>;
+ vcc-cp1-supply = <&ldo_cp1>;
+ vcc-tp0145-supply = <&ldo_tp0145>;
+
+ regulators {
+ ldo_cp0: ldo-cp0 {
+ regulator-name = "ldo-cp0";
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1000000>;
+ };
+
+ ldo_cp1: ldo-cp1 {
+ regulator-name = "ldo-cp1";
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1000000>;
+ };
+
+ ldo_tp0145: ldo-tp0145 {
+ regulator-name = "ldo-tp0145";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+ };
+
+ i3c@0 {
+ reg = <0>;
+ #address-cells = <3>;
+ #size-cells = <0>;
+ realtek,pullup-enable;
+ };
+
+ smbus@1 {
+ reg = <1>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clock-frequency = <400000>;
+ realtek,pullup-enable;
+ };
+ };
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index f76359fdebbf..a2c171a28cd2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -22992,6 +22992,13 @@ S: Maintained
F: include/sound/rt*.h
F: sound/soc/codecs/rt*

+REALTEK RTS490X I3C HUB DRIVER
+M: Yin Zhou <zain_zhou@xxxxxxxxxxxxxx>
+L: linux-i3c@xxxxxxxxxxxxxxxxxxx
+L: linux-kernel@xxxxxxxxxxxxxxx
+S: Maintained
+F: Documentation/devicetree/bindings/i3c/realtek,rts490x.yaml
+
REALTEK OTTO WATCHDOG
M: Sander Vanheule <sander@xxxxxxxxxxxxx>
L: linux-watchdog@xxxxxxxxxxxxxxx
--
2.34.1