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

zain_zhou at realsil.com.cn zain_zhou at realsil.com.cn
Sun Sep 20 03:04:58 PDT 2026


From: Yin Zhou <zain_zhou at realsil.com.cn>

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 at realsil.com.cn>
---
 .../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 at realsil.com.cn>
+
+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 at 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 at 0 {
+                reg = <0>;
+                #address-cells = <3>;
+                #size-cells = <0>;
+                realtek,pullup-enable;
+            };
+
+            smbus at 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 at realsil.com.cn>
+L:	linux-i3c at lists.infradead.org
+L:	linux-kernel at vger.kernel.org
+S:	Maintained
+F:	Documentation/devicetree/bindings/i3c/realtek,rts490x.yaml
+
 REALTEK OTTO WATCHDOG
 M:	Sander Vanheule <sander at svanheule.net>
 L:	linux-watchdog at vger.kernel.org
-- 
2.34.1




More information about the linux-i3c mailing list