* [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
@ 2026-04-30 12:13 zain_zhou
2026-04-30 13:41 ` Rob Herring (Arm)
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: zain_zhou @ 2026-04-30 12:13 UTC (permalink / raw)
To: linux-staging, linux-i3c, devicetree
Cc: gregkh, alexandre.belloni, Frank.Li, robh, krzk+dt, conor+dt,
linusw, brgl, linux-gpio, linux-kernel, zain_zhou
From: zain_zhou <zain_zhou@realsil.com.cn>
Add DT binding schema for Realtek RTS490x series I3C HUB devices.
The binding describes configuration properties for:
- LDO enable/disable and voltage level per port group
- Pull-up resistance per port group
- IO driver strength per port
- Per target-port mode (I3C/SMBus/GPIO/disabled), pull-up,
IO mode, SMBus clock frequency and polling interval
- Hub network always-I3C mode
- Hardware identification via CSEL pin (id) and CP1 pins (id-cp1)
Signed-off-by: zain_zhou <zain_zhou@realsil.com.cn>
---
.../bindings/i3c/realtek,rts490x-i3c-hub.yaml | 410 ++++++++++++++++++
MAINTAINERS | 6 +
2 files changed, 416 insertions(+)
create mode 100644 Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
diff --git a/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
new file mode 100644
index 000000000000..30295eefee89
--- /dev/null
+++ b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
@@ -0,0 +1,410 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/i3c/realtek,rts490x-i3c-hub.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: I3C HUB
+
+maintainers:
+ - zain_zhou <zain_zhou@realsil.com.cn>
+
+description: |
+ I3C HUB is smart device which provides multiple functionality:
+ * enabling voltage compatibility across I3C Controller and Target devices,
+ * bus capacitance isolation
+ * address conflict isolation
+ * I3C port expansion
+ * two controllers in a single I3C bus
+ * I3C and SMBus device compatibility
+ * GPIO expansion
+
+ Having such big number of features, there is a need to have some DT knobs to tell the I3C HUB
+ driver which features shall be enabled and how they shall be configured. I3C HUB driver read,
+ validate DT knobs and set corresponding registers with the right way to satisfy user requests from
+ DT.
+
+ All the DT properties for I3C HUB are located under dedicated (for I3C HUB) DT entry. I3C HUB DT
+ entry structure is aligned with regular I3C device DT entry described in i3c.yaml.
+
+allOf:
+ - $ref: i3c.yaml#
+
+properties:
+ $nodename:
+ pattern: "^hub@0,0$"
+
+ cp0-ldo-en:
+ enum:
+ - disabled
+ - enabled
+ description: |
+ I3C HUB Controller Port 0 LDO disabling/enabling setting. If enabled, voltage produced by
+ on-die LDO will be available externally on dedicated pin. This option could be used to supply
+ external pull-up resistors or for any other purpose which does not cross LDO capabilities.
+
+ This property is optional. If not provided, LDO will be disabled.
+
+ cp1-ldo-en:
+ enum:
+ - disabled
+ - enabled
+ description: |
+ I3C HUB Controller Port 1 LDO disabling/enabling setting. If enabled, voltage produced by
+ on-die LDO will be available externally on dedicated pin. This option could be used to supply
+ external pull-up resistors or for any other purpose which does not cross LDO capabilities.
+
+ This property is optional. If not provided, LDO will be disabled.
+
+ tp0145-ldo-en:
+ enum:
+ - disabled
+ - enabled
+ description: |
+ I3C HUB Target Ports 0/1/4/5 LDO disabling/enabling setting. If enabled, voltage produced by
+ on-die LDO will be available externally on dedicated pin. This option could be used to supply
+ external pull-up resistors or for any other purpose which does not cross LDO capabilities.
+
+ This property is optional. If not provided, LDO will be disabled.
+
+ tp2367-ldo-en:
+ enum:
+ - disabled
+ - enabled
+ description: |
+ I3C HUB Target Ports 2/3/6/7 LDO disabling/enabling setting. If enabled, voltage produced by
+ on-die LDO will be available externally on dedicated pin. This option could be used to supply
+ external pull-up resistors or for any other purpose which does not cross LDO capabilities.
+
+ This property is optional. If not provided, LDO will be disabled.
+
+ cp0-ldo-volt:
+ enum:
+ - 1.0V
+ - 1.1V
+ - 1.2V
+ - 1.8V
+ description: |
+ I3C HUB Controller Port 0 LDO setting to control the Controller Port 1 voltage level. This
+ property is optional.
+
+ If not provided, LDO configuration is not modified in I3C HUB.
+
+ cp1-ldo-volt:
+ enum:
+ - 1.0V
+ - 1.1V
+ - 1.2V
+ - 1.8V
+ description: |
+ I3C HUB Controller Port 1 LDO setting to control the Controller Port 1 voltage level. This
+ property is optional.
+
+ If not provided, LDO configuration is not modified in I3C HUB.
+
+ tp0145-ldo-volt:
+ enum:
+ - disabled
+ - 1.0V
+ - 1.1V
+ - 1.2V
+ - 1.8V
+ description: |
+ I3C HUB Target Ports 0/1/4/5 LDO setting to control the Target Ports 0/1/4/5 voltage level.
+
+ If not provided, LDO configuration is not modified in I3C HUB.
+
+ tp2367-ldo-volt:
+ enum:
+ - disabled
+ - 1.0V
+ - 1.1V
+ - 1.2V
+ - 1.8V
+ description: |
+ I3C HUB Target Ports 2/3/6/7 LDO setting to control the Target Ports 2/3/6/7 voltage level.
+
+ If not provided, LDO configuration is not modified in I3C HUB.
+
+ tp0145-pullup:
+ enum:
+ - disabled
+ - 250R
+ - 500R
+ - 1k
+ - 2k
+ description: |
+ I3C HUB Target Ports 0/1/4/5 pull-up setting to control the Target Ports 0/1/4/5 pull-up
+ resistance level.
+
+ This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
+
+ tp2367-pullup:
+ enum:
+ - disabled
+ - 250R
+ - 500R
+ - 1k
+ - 2k
+ description: |
+ I3C HUB Target Ports 2/3/6/7 pull-up setting to control the Target Ports 2/3/6/7 pull-up
+ resistance level.
+
+ This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
+
+ cp0-io-strength:
+ enum:
+ - 20Ohms
+ - 30Ohms
+ - 40Ohms
+ - 50Ohms
+ description: |
+ I3C HUB Controller Port 0 IO strength setting to control the Controller Port 0 output driver
+ strength.
+
+ This property is optional. If not provided, IO strength configuration is not modified in I3C
+ HUB.
+
+ cp1-io-strength:
+ enum:
+ - 20Ohms
+ - 30Ohms
+ - 40Ohms
+ - 50Ohms
+ description: |
+ I3C HUB Controller Port 1 IO strength setting to control the Controller Port 1 output driver
+ strength.
+
+ This property is optional. If not provided, IO strength configuration is not modified in I3C
+ HUB.
+
+ tp0145-io-strength:
+ enum:
+ - 20Ohms
+ - 30Ohms
+ - 40Ohms
+ - 50Ohms
+ description: |
+ I3C HUB Target Ports 0/1/4/5 IO strength setting to control the Target Ports 0/1/4/5 output
+ driver strength.
+
+ This property is optional. If not provided, IO strength configuration is not modified in I3C
+ HUB.
+
+ tp2367-io-strength:
+ enum:
+ - 20Ohms
+ - 30Ohms
+ - 40Ohms
+ - 50Ohms
+ description: |
+ I3C HUB Target Ports 2/3/6/7 IO strength setting to control the Target Ports 2/3/6/7 output
+ driver strength.
+
+ This property is optional. If not provided, IO strength configuration is not modified in I3C
+ HUB.
+
+ id:
+ enum:
+ - 0
+ - 1
+ - 3
+ description: |
+ I3C HUB ID based on CSEL pin. There are three possible values:
+ 0 - CP0 is selected as primary Controller Port
+ 1 - Primary Controller Port is selected by software by writing the REG#56
+ 3 - CP1 is selected as primary Controller Port
+
+ I3C HUB driver reads CSEL pin status (REG#121[5:4]) and tries to find DT node with matching
+ value in 'id' property.
+
+ This property is optional. If not provided, DT node can only be used by the I3C HUB driver if
+ there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes with no
+ 'id' property - the first one will be chosen by I3C HUB driver. If there is a multiple DT
+ nodes with matching 'id' property - the first one will be chosen by I3C HUB driver.
+
+ If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
+ read from I3C HUB.
+
+ id-cp1:
+ enum:
+ - 0
+ - 1
+ - 2
+ - 3
+ description: |
+ I3C HUB ID based on CP1 SDA and SCL pins state probed during power on.
+
+ I3C HUB driver reads CP1 SDA and SCL pin status and tries to find DT node with matching value
+ in 'id-cp1' property.
+
+ This property is optional. If not provided, DT node can only be used by the I3C HUB
+ driver if there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes
+ with no 'id-cp1' property - the first one will be chosen by I3C HUB driver. If there is a
+ multiple DT nodes with matching 'id-cp1' property - the first one will be chosen by I3C HUB
+ driver.
+
+ If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
+ read from I3C HUB.
+
+patternProperties:
+ "@[0-9]$":
+ type: object
+ description: |
+ I3C HUB Target Port child, should be named: target-port@<target-port-id>
+
+ properties:
+ mode:
+ enum:
+ - disabled
+ - i3c
+ - smbus
+ - gpio
+ description: |
+ I3C HUB Target Port mode setting to control Target Port functionality.
+
+ This property is optional. If not provided, Target Port mode configuration is not modified
+ in I3C HUB.
+
+ pullup:
+ enum:
+ - disabled
+ - enabled
+ description: |
+ I3C HUB Target Port pull-up setting to disable/enable Target Port pull-up.
+
+ This property is optional. If not provided, Target Port pull-up configuration is not
+ modified in I3C HUB.
+
+ always-enable:
+ type: boolean
+ description: |
+ I3C HUB Target Port settings to control the port enable/disable policy.
+
+ This property is optional. If not provided, Target Port is enabled only on accessing to
+ the devices connected to it and the port is disabled automatically after the accessing
+ is done. If provided, the Target Port is always enabled.
+
+ polling-interval-ms:
+ type: uint32
+ description: |
+ I3C HUB Target Port SMBus polling interval in milliseconds.
+
+ This property is optional. If not provided or set to 0, polling is disabled and the driver
+ uses IBI (In-Band Interrupts). If provided with a positive value, polling is enabled for
+ this Target Port with the given period.Note: this positive value only affects the SMBus
+ target agent polling. The SMBus controller agent polling interval is computed dynamically
+ from clock and data length.
+
+ clock-frequency:
+ type: uint32
+ enum:
+ - 100000
+ - 200000
+ - 400000
+ - 1000000
+ description: |
+ I3C HUB Target Port SMBus clock frequency in Hz.
+
+ This property follows the standard I2C 'clock-frequency' semantics.
+ Applies only when the Target Port mode is set to "smbus".
+ Optional; if not provided, the driver uses 400000 Hz by default.
+
+additionalProperties: true
+
+examples:
+ - |
+ i3c-master@d040000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ hub@0,0 {
+ cp0-ldo-en = "disabled";
+ cp1-ldo-en = "enabled";
+ cp0-ldo-volt = "1.0V";
+ cp1-ldo-volt = "1.1V";
+ tp0145-ldo-en = "enabled";
+ tp2367-ldo-en = "disabled";
+ tp0145-ldo-volt = "1.2V";
+ tp2367-ldo-volt = "1.8V";
+ tp0145-pullup = "2k";
+ tp2367-pullup = "500R";
+ tp0145-io-strength = "50Ohms";
+ tp2367-io-strength = "30Ohms";
+ cp0-io-strength = "20Ohms";
+ cp1-io-strength = "40Ohms";
+
+ target-port@0 {
+ mode = "i3c";
+ pullup = "enabled";
+ always_enable;
+ };
+ target-port@1 {
+ mode = "smbus";
+ pullup = "enabled";
+ clock-frequency = <1000000>;
+ polling-interval-ms = <10>;
+ backend@10{
+ compatible = "i2c-slave-mqueue";
+ reg = <(0x10 | I2C_OWN_SLAVE_ADDRESS)>;
+ };
+ };
+ target-port@2 {
+ mode = "gpio";
+ pullup = "disabled";
+ };
+ target-port@3 {
+ mode = "disabled";
+ pullup = "disabled";
+ };
+ };
+ };
+
+ - |
+ i3c-master@d040000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ hub@70,3C000000100 {
+ reg = <0x70 0x3C0 0x00000100>;
+ assigned-address = <0x70>;
+ dcr = <0xC2>;
+
+ cp0-ldo-en = "disabled";
+ cp1-ldo-en = "enabled";
+ cp0-ldo-volt = "1.0V";
+ cp1-ldo-volt = "1.1V";
+ tp0145-ldo-en = "enabled";
+ tp2367-ldo-en = "disabled";
+ tp0145-ldo-volt = "1.2V";
+ tp2367-ldo-volt = "1.8V";
+ tp0145-pullup = "2k";
+ tp2367-pullup = "500R";
+ tp0145-io-strength = "50Ohms";
+ tp2367-io-strength = "30Ohms";
+ cp0-io-strength = "20Ohms";
+ cp1-io-strength = "40Ohms";
+
+ target-port@0 {
+ mode = "i3c";
+ pullup = "enabled";
+ always-enable;
+ };
+ target-port@1 {
+ mode = "smbus";
+ pullup = "enabled";
+ backend@12{
+ compatible = "i2c-slave-mqueue";
+ reg = <(0x12 | I2C_OWN_SLAVE_ADDRESS)>;
+ };
+ };
+ target-port@2 {
+ mode = "gpio";
+ pullup = "disabled";
+ };
+ target-port@3 {
+ mode = "disabled";
+ pullup = "disabled";
+ };
+ };
+ };
diff --git a/MAINTAINERS b/MAINTAINERS
index 2fb1c75afd16..71ee5071ac0f 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12214,6 +12214,12 @@ S: Supported
F: Documentation/devicetree/bindings/i3c/renesas,i3c.yaml
F: drivers/i3c/master/renesas-i3c.c
+I3C HUB DRIVER FOR REALTEK RTS490X
+M: zain_zhou <zain_zhou@realsil.com.cn>
+S: Maintained
+F: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
+F: drivers/staging/rts490x/
+
I3C DRIVER FOR SYNOPSYS DESIGNWARE
S: Orphan
F: Documentation/devicetree/bindings/i3c/snps,dw-i3c-master.yaml
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
2026-04-30 12:13 zain_zhou
@ 2026-04-30 13:41 ` Rob Herring (Arm)
2026-05-01 9:37 ` Krzysztof Kozlowski
2026-05-04 20:34 ` Frank Li
2 siblings, 0 replies; 6+ messages in thread
From: Rob Herring (Arm) @ 2026-04-30 13:41 UTC (permalink / raw)
To: zain_zhou
Cc: linusw, gregkh, linux-i3c, brgl, conor+dt, linux-kernel,
devicetree, linux-staging, alexandre.belloni, linux-gpio,
Frank.Li, krzk+dt
On Thu, 30 Apr 2026 20:13:53 +0800, zain_zhou@realsil.com.cn wrote:
> From: zain_zhou <zain_zhou@realsil.com.cn>
>
> Add DT binding schema for Realtek RTS490x series I3C HUB devices.
>
> The binding describes configuration properties for:
> - LDO enable/disable and voltage level per port group
> - Pull-up resistance per port group
> - IO driver strength per port
> - Per target-port mode (I3C/SMBus/GPIO/disabled), pull-up,
> IO mode, SMBus clock frequency and polling interval
> - Hub network always-I3C mode
> - Hardware identification via CSEL pin (id) and CP1 pins (id-cp1)
>
> Signed-off-by: zain_zhou <zain_zhou@realsil.com.cn>
> ---
> .../bindings/i3c/realtek,rts490x-i3c-hub.yaml | 410 ++++++++++++++++++
> MAINTAINERS | 6 +
> 2 files changed, 416 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml: ignoring, error in schema: patternProperties: @[0-9]$: properties: polling-interval-ms: type
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml: patternProperties:@[0-9]$:properties:polling-interval-ms: 'anyOf' conditional failed, one must be fixed:
'maxItems' is a required property
hint: Only "maxItems" is required for a single entry if there are no constraints defined for the values.
'type' is not one of ['maxItems', 'description', 'deprecated']
hint: Only "maxItems" is required for a single entry if there are no constraints defined for the values.
Additional properties are not allowed ('type' was unexpected)
hint: Arrays must be described with a combination of minItems/maxItems/items
'type' is not one of ['description', 'deprecated', 'const', 'enum', 'minimum', 'maximum', 'multipleOf', 'default', '$ref', 'oneOf']
hint: cell array properties must define how many entries and what the entries are when there is more than one entry.
from schema $id: http://devicetree.org/meta-schemas/cell.yaml
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml: patternProperties:@[0-9]$:properties:polling-interval-ms:type: 'uint32' is not one of ['boolean', 'object']
from schema $id: http://devicetree.org/meta-schemas/core.yaml
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml: patternProperties:@[0-9]$:properties:clock-frequency:type: 'uint32' is not one of ['boolean', 'object']
from schema $id: http://devicetree.org/meta-schemas/core.yaml
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml: patternProperties:@[0-9]$:properties:clock-frequency: 'type' is not one of ['description', 'deprecated', 'const', 'enum', 'minimum', 'maximum', 'multipleOf', 'default', '$ref', 'oneOf']
from schema $id: http://devicetree.org/meta-schemas/cell.yaml
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml: patternProperties:@[0-9]$:properties:clock-frequency:type: 'anyOf' conditional failed, one must be fixed:
'uint32' is not one of ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string']
'uint32' is not of type 'array'
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml: patternProperties:@[0-9]$:properties:polling-interval-ms:type: 'anyOf' conditional failed, one must be fixed:
'uint32' is not one of ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string']
'uint32' is not of type 'array'
Lexical error: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.example.dts:50.34-55 Unexpected 'I2C_OWN_SLAVE_ADDRESS'
Lexical error: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.example.dts:114.34-55 Unexpected 'I2C_OWN_SLAVE_ADDRESS'
FATAL ERROR: Syntax error parsing input tree
make[2]: *** [scripts/Makefile.dtbs:140: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.example.dtb] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/builds/robherring/dt-review-ci/linux/Makefile:1637: dt_binding_check] Error 2
make: *** [Makefile:248: __sub-make] Error 2
doc reference errors (make refcheckdocs):
See https://patchwork.kernel.org/project/devicetree/patch/20260430121354.6253-1-zain_zhou@realsil.com.cn
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
2026-04-30 12:13 zain_zhou
2026-04-30 13:41 ` Rob Herring (Arm)
@ 2026-05-01 9:37 ` Krzysztof Kozlowski
2026-05-04 20:34 ` Frank Li
2 siblings, 0 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2026-05-01 9:37 UTC (permalink / raw)
To: zain_zhou, linux-staging, linux-i3c, devicetree
Cc: gregkh, alexandre.belloni, Frank.Li, robh, krzk+dt, conor+dt,
linusw, brgl, linux-gpio, linux-kernel
On 30/04/2026 14:13, zain_zhou@realsil.com.cn wrote:
> From: zain_zhou <zain_zhou@realsil.com.cn>
>
> Add DT binding schema for Realtek RTS490x series I3C HUB devices.
A nit, subject: drop second/last, redundant "bindings". The
"dt-bindings" prefix is already stating that these are bindings.
See also:
https://elixir.bootlin.com/linux/v6.17-rc3/source/Documentation/devicetree/bindings/submitting-patches.rst#L18
>
> The binding describes configuration properties for:
> - LDO enable/disable and voltage level per port group
> - Pull-up resistance per port group
> - IO driver strength per port
> - Per target-port mode (I3C/SMBus/GPIO/disabled), pull-up,
> IO mode, SMBus clock frequency and polling interval
> - Hub network always-I3C mode
> - Hardware identification via CSEL pin (id) and CP1 pins (id-cp1)
>
> Signed-off-by: zain_zhou <zain_zhou@realsil.com.cn>
Don't use login name as full name, but rather latin transliteration.
Name in your native language would also be fine.
But login name is not fine.
> ---
> .../bindings/i3c/realtek,rts490x-i3c-hub.yaml | 410 ++++++++++++++++++
> MAINTAINERS | 6 +
> 2 files changed, 416 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
>
> diff --git a/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> new file mode 100644
> index 000000000000..30295eefee89
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> @@ -0,0 +1,410 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/i3c/realtek,rts490x-i3c-hub.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: I3C HUB
Proper name here of your device
> +
> +maintainers:
> + - zain_zhou <zain_zhou@realsil.com.cn>
> +
> +description: |
> + I3C HUB is smart device which provides multiple functionality:
Are you describing particular device or I3C HUB?
> + * enabling voltage compatibility across I3C Controller and Target devices,
> + * bus capacitance isolation
> + * address conflict isolation
> + * I3C port expansion
> + * two controllers in a single I3C bus
> + * I3C and SMBus device compatibility
> + * GPIO expansion
> +
> + Having such big number of features, there is a need to have some DT knobs to tell the I3C HUB
> + driver which features shall be enabled and how they shall be configured. I3C HUB driver read,
Please wrap code according to the preferred limit expressed in Kernel
coding style (checkpatch is not a coding style description, but only a
tool). However don't wrap blindly (see Kernel coding style).
> + validate DT knobs and set corresponding registers with the right way to satisfy user requests from
> + DT.
Irrelevant. This is binding, so describe hardware. Not your drivers.
DT is irrelevant as well.
> +
> + All the DT properties for I3C HUB are located under dedicated (for I3C HUB) DT entry. I3C HUB DT
> + entry structure is aligned with regular I3C device DT entry described in i3c.yaml.
> +
Irrelevant. Describe your hardware.
> +allOf:
> + - $ref: i3c.yaml#
> +
> +properties:
> + $nodename:
> + pattern: "^hub@0,0$"
> +
> + cp0-ldo-en:
> + enum:
> + - disabled
> + - enabled
Sorry, but what? Your binding does not look like accepted bindings AT
ALL. Please read writing bindings carefully or go via DTS101 slides.
> + description: |
> + I3C HUB Controller Port 0 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + cp1-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Controller Port 1 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + tp0145-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Ports 0/1/4/5 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + tp2367-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Ports 2/3/6/7 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + cp0-ldo-volt:
Nope. There are no such properties. Missing vendor prefix, missing
proper unit suffix. Look at other bindings.
> + enum:
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Controller Port 0 LDO setting to control the Controller Port 1 voltage level. This
> + property is optional.
> +
...
> +
> +additionalProperties: true
No, you cannot have it. Please read writing bindings, writing schema or
open ANY other binding.
> +
> +examples:
> + - |
> + i3c-master@d040000 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + hub@0,0 {
> + cp0-ldo-en = "disabled";
> + cp1-ldo-en = "enabled";
> + cp0-ldo-volt = "1.0V";
> + cp1-ldo-volt = "1.1V";
> + tp0145-ldo-en = "enabled";
> + tp2367-ldo-en = "disabled";
> + tp0145-ldo-volt = "1.2V";
> + tp2367-ldo-volt = "1.8V";
> + tp0145-pullup = "2k";
> + tp2367-pullup = "500R";
> + tp0145-io-strength = "50Ohms";
> + tp2367-io-strength = "30Ohms";
> + cp0-io-strength = "20Ohms";
> + cp1-io-strength = "40Ohms";
> +
> + target-port@0 {
> + mode = "i3c";
> + pullup = "enabled";
> + always_enable;
> + };
> + target-port@1 {
> + mode = "smbus";
> + pullup = "enabled";
> + clock-frequency = <1000000>;
> + polling-interval-ms = <10>;
> + backend@10{
> + compatible = "i2c-slave-mqueue";
> + reg = <(0x10 | I2C_OWN_SLAVE_ADDRESS)>;
> + };
> + };
> + target-port@2 {
> + mode = "gpio";
> + pullup = "disabled";
> + };
> + target-port@3 {
> + mode = "disabled";
> + pullup = "disabled";
> + };
> + };
> + };
> +
> + - |
> + i3c-master@d040000 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + hub@70,3C000000100 {
No way it passes validation. You just said it CANNOT be anything else
than hub@0,0
> + reg = <0x70 0x3C0 0x00000100>;
Lower case hex. Anyway, one example is enough.
> + assigned-address = <0x70>;
> + dcr = <0xC2>;
> +
> + cp0-ldo-en = "disabled";
> + cp1-ldo-en = "enabled";
> + cp0-ldo-volt = "1.0V";
> + cp1-ldo-volt = "1.1V";
> + tp0145-ldo-en = "enabled";
> + tp2367-ldo-en = "disabled";
> + tp0145-ldo-volt = "1.2V";
> + tp2367-ldo-volt = "1.8V";
> + tp0145-pullup = "2k";
> + tp2367-pullup = "500R";
> + tp0145-io-strength = "50Ohms";
> + tp2367-io-strength = "30Ohms";
> + cp0-io-strength = "20Ohms";
> + cp1-io-strength = "40Ohms";
> +
> + target-port@0 {
> + mode = "i3c";
> + pullup = "enabled";
> + always-enable;
> + };
> + target-port@1 {
> + mode = "smbus";
> + pullup = "enabled";
> + backend@12{
> + compatible = "i2c-slave-mqueue";
> + reg = <(0x12 | I2C_OWN_SLAVE_ADDRESS)>;
> + };
> + };
> + target-port@2 {
> + mode = "gpio";
> + pullup = "disabled";
> + };
> + target-port@3 {
> + mode = "disabled";
> + pullup = "disabled";
> + };
> + };
> + };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 2fb1c75afd16..71ee5071ac0f 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12214,6 +12214,12 @@ S: Supported
> F: Documentation/devicetree/bindings/i3c/renesas,i3c.yaml
> F: drivers/i3c/master/renesas-i3c.c
>
> +I3C HUB DRIVER FOR REALTEK RTS490X
> +M: zain_zhou <zain_zhou@realsil.com.cn>
> +S: Maintained
> +F: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> +F: drivers/staging/rts490x/
There is no such directory.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
2026-04-30 12:13 zain_zhou
2026-04-30 13:41 ` Rob Herring (Arm)
2026-05-01 9:37 ` Krzysztof Kozlowski
@ 2026-05-04 20:34 ` Frank Li
2 siblings, 0 replies; 6+ messages in thread
From: Frank Li @ 2026-05-04 20:34 UTC (permalink / raw)
To: zain_zhou
Cc: linux-staging, linux-i3c, devicetree, gregkh, alexandre.belloni,
robh, krzk+dt, conor+dt, linusw, brgl, linux-gpio, linux-kernel
On Thu, Apr 30, 2026 at 08:13:53PM +0800, zain_zhou@realsil.com.cn wrote:
> From: zain_zhou <zain_zhou@realsil.com.cn>
>
> Add DT binding schema for Realtek RTS490x series I3C HUB devices.
>
> The binding describes configuration properties for:
> - LDO enable/disable and voltage level per port group
> - Pull-up resistance per port group
> - IO driver strength per port
> - Per target-port mode (I3C/SMBus/GPIO/disabled), pull-up,
> IO mode, SMBus clock frequency and polling interval
> - Hub network always-I3C mode
> - Hardware identification via CSEL pin (id) and CP1 pins (id-cp1)
Please base on
https://lore.kernel.org/linux-i3c/20260420105222.1562243-1-lakshay.piplani@nxp.com/T/#t
which almost done!
Frank
>
> Signed-off-by: zain_zhou <zain_zhou@realsil.com.cn>
> ---
> .../bindings/i3c/realtek,rts490x-i3c-hub.yaml | 410 ++++++++++++++++++
> MAINTAINERS | 6 +
> 2 files changed, 416 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
>
> diff --git a/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> new file mode 100644
> index 000000000000..30295eefee89
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> @@ -0,0 +1,410 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/i3c/realtek,rts490x-i3c-hub.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: I3C HUB
> +
> +maintainers:
> + - zain_zhou <zain_zhou@realsil.com.cn>
> +
> +description: |
> + I3C HUB is smart device which provides multiple functionality:
> + * enabling voltage compatibility across I3C Controller and Target devices,
> + * bus capacitance isolation
> + * address conflict isolation
> + * I3C port expansion
> + * two controllers in a single I3C bus
> + * I3C and SMBus device compatibility
> + * GPIO expansion
> +
> + Having such big number of features, there is a need to have some DT knobs to tell the I3C HUB
> + driver which features shall be enabled and how they shall be configured. I3C HUB driver read,
> + validate DT knobs and set corresponding registers with the right way to satisfy user requests from
> + DT.
> +
> + All the DT properties for I3C HUB are located under dedicated (for I3C HUB) DT entry. I3C HUB DT
> + entry structure is aligned with regular I3C device DT entry described in i3c.yaml.
> +
> +allOf:
> + - $ref: i3c.yaml#
> +
> +properties:
> + $nodename:
> + pattern: "^hub@0,0$"
> +
> + cp0-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Controller Port 0 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + cp1-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Controller Port 1 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + tp0145-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Ports 0/1/4/5 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + tp2367-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Ports 2/3/6/7 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + cp0-ldo-volt:
> + enum:
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Controller Port 0 LDO setting to control the Controller Port 1 voltage level. This
> + property is optional.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + cp1-ldo-volt:
> + enum:
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Controller Port 1 LDO setting to control the Controller Port 1 voltage level. This
> + property is optional.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + tp0145-ldo-volt:
> + enum:
> + - disabled
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Target Ports 0/1/4/5 LDO setting to control the Target Ports 0/1/4/5 voltage level.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + tp2367-ldo-volt:
> + enum:
> + - disabled
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Target Ports 2/3/6/7 LDO setting to control the Target Ports 2/3/6/7 voltage level.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + tp0145-pullup:
> + enum:
> + - disabled
> + - 250R
> + - 500R
> + - 1k
> + - 2k
> + description: |
> + I3C HUB Target Ports 0/1/4/5 pull-up setting to control the Target Ports 0/1/4/5 pull-up
> + resistance level.
> +
> + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
> +
> + tp2367-pullup:
> + enum:
> + - disabled
> + - 250R
> + - 500R
> + - 1k
> + - 2k
> + description: |
> + I3C HUB Target Ports 2/3/6/7 pull-up setting to control the Target Ports 2/3/6/7 pull-up
> + resistance level.
> +
> + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
> +
> + cp0-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Controller Port 0 IO strength setting to control the Controller Port 0 output driver
> + strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + cp1-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Controller Port 1 IO strength setting to control the Controller Port 1 output driver
> + strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + tp0145-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Target Ports 0/1/4/5 IO strength setting to control the Target Ports 0/1/4/5 output
> + driver strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + tp2367-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Target Ports 2/3/6/7 IO strength setting to control the Target Ports 2/3/6/7 output
> + driver strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + id:
> + enum:
> + - 0
> + - 1
> + - 3
> + description: |
> + I3C HUB ID based on CSEL pin. There are three possible values:
> + 0 - CP0 is selected as primary Controller Port
> + 1 - Primary Controller Port is selected by software by writing the REG#56
> + 3 - CP1 is selected as primary Controller Port
> +
> + I3C HUB driver reads CSEL pin status (REG#121[5:4]) and tries to find DT node with matching
> + value in 'id' property.
> +
> + This property is optional. If not provided, DT node can only be used by the I3C HUB driver if
> + there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes with no
> + 'id' property - the first one will be chosen by I3C HUB driver. If there is a multiple DT
> + nodes with matching 'id' property - the first one will be chosen by I3C HUB driver.
> +
> + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
> + read from I3C HUB.
> +
> + id-cp1:
> + enum:
> + - 0
> + - 1
> + - 2
> + - 3
> + description: |
> + I3C HUB ID based on CP1 SDA and SCL pins state probed during power on.
> +
> + I3C HUB driver reads CP1 SDA and SCL pin status and tries to find DT node with matching value
> + in 'id-cp1' property.
> +
> + This property is optional. If not provided, DT node can only be used by the I3C HUB
> + driver if there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes
> + with no 'id-cp1' property - the first one will be chosen by I3C HUB driver. If there is a
> + multiple DT nodes with matching 'id-cp1' property - the first one will be chosen by I3C HUB
> + driver.
> +
> + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
> + read from I3C HUB.
> +
> +patternProperties:
> + "@[0-9]$":
> + type: object
> + description: |
> + I3C HUB Target Port child, should be named: target-port@<target-port-id>
> +
> + properties:
> + mode:
> + enum:
> + - disabled
> + - i3c
> + - smbus
> + - gpio
> + description: |
> + I3C HUB Target Port mode setting to control Target Port functionality.
> +
> + This property is optional. If not provided, Target Port mode configuration is not modified
> + in I3C HUB.
> +
> + pullup:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Port pull-up setting to disable/enable Target Port pull-up.
> +
> + This property is optional. If not provided, Target Port pull-up configuration is not
> + modified in I3C HUB.
> +
> + always-enable:
> + type: boolean
> + description: |
> + I3C HUB Target Port settings to control the port enable/disable policy.
> +
> + This property is optional. If not provided, Target Port is enabled only on accessing to
> + the devices connected to it and the port is disabled automatically after the accessing
> + is done. If provided, the Target Port is always enabled.
> +
> + polling-interval-ms:
> + type: uint32
> + description: |
> + I3C HUB Target Port SMBus polling interval in milliseconds.
> +
> + This property is optional. If not provided or set to 0, polling is disabled and the driver
> + uses IBI (In-Band Interrupts). If provided with a positive value, polling is enabled for
> + this Target Port with the given period.Note: this positive value only affects the SMBus
> + target agent polling. The SMBus controller agent polling interval is computed dynamically
> + from clock and data length.
> +
> + clock-frequency:
> + type: uint32
> + enum:
> + - 100000
> + - 200000
> + - 400000
> + - 1000000
> + description: |
> + I3C HUB Target Port SMBus clock frequency in Hz.
> +
> + This property follows the standard I2C 'clock-frequency' semantics.
> + Applies only when the Target Port mode is set to "smbus".
> + Optional; if not provided, the driver uses 400000 Hz by default.
> +
> +additionalProperties: true
> +
> +examples:
> + - |
> + i3c-master@d040000 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + hub@0,0 {
> + cp0-ldo-en = "disabled";
> + cp1-ldo-en = "enabled";
> + cp0-ldo-volt = "1.0V";
> + cp1-ldo-volt = "1.1V";
> + tp0145-ldo-en = "enabled";
> + tp2367-ldo-en = "disabled";
> + tp0145-ldo-volt = "1.2V";
> + tp2367-ldo-volt = "1.8V";
> + tp0145-pullup = "2k";
> + tp2367-pullup = "500R";
> + tp0145-io-strength = "50Ohms";
> + tp2367-io-strength = "30Ohms";
> + cp0-io-strength = "20Ohms";
> + cp1-io-strength = "40Ohms";
> +
> + target-port@0 {
> + mode = "i3c";
> + pullup = "enabled";
> + always_enable;
> + };
> + target-port@1 {
> + mode = "smbus";
> + pullup = "enabled";
> + clock-frequency = <1000000>;
> + polling-interval-ms = <10>;
> + backend@10{
> + compatible = "i2c-slave-mqueue";
> + reg = <(0x10 | I2C_OWN_SLAVE_ADDRESS)>;
> + };
> + };
> + target-port@2 {
> + mode = "gpio";
> + pullup = "disabled";
> + };
> + target-port@3 {
> + mode = "disabled";
> + pullup = "disabled";
> + };
> + };
> + };
> +
> + - |
> + i3c-master@d040000 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + hub@70,3C000000100 {
> + reg = <0x70 0x3C0 0x00000100>;
> + assigned-address = <0x70>;
> + dcr = <0xC2>;
> +
> + cp0-ldo-en = "disabled";
> + cp1-ldo-en = "enabled";
> + cp0-ldo-volt = "1.0V";
> + cp1-ldo-volt = "1.1V";
> + tp0145-ldo-en = "enabled";
> + tp2367-ldo-en = "disabled";
> + tp0145-ldo-volt = "1.2V";
> + tp2367-ldo-volt = "1.8V";
> + tp0145-pullup = "2k";
> + tp2367-pullup = "500R";
> + tp0145-io-strength = "50Ohms";
> + tp2367-io-strength = "30Ohms";
> + cp0-io-strength = "20Ohms";
> + cp1-io-strength = "40Ohms";
> +
> + target-port@0 {
> + mode = "i3c";
> + pullup = "enabled";
> + always-enable;
> + };
> + target-port@1 {
> + mode = "smbus";
> + pullup = "enabled";
> + backend@12{
> + compatible = "i2c-slave-mqueue";
> + reg = <(0x12 | I2C_OWN_SLAVE_ADDRESS)>;
> + };
> + };
> + target-port@2 {
> + mode = "gpio";
> + pullup = "disabled";
> + };
> + target-port@3 {
> + mode = "disabled";
> + pullup = "disabled";
> + };
> + };
> + };
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 2fb1c75afd16..71ee5071ac0f 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12214,6 +12214,12 @@ S: Supported
> F: Documentation/devicetree/bindings/i3c/renesas,i3c.yaml
> F: drivers/i3c/master/renesas-i3c.c
>
> +I3C HUB DRIVER FOR REALTEK RTS490X
> +M: zain_zhou <zain_zhou@realsil.com.cn>
> +S: Maintained
> +F: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> +F: drivers/staging/rts490x/
> +
> I3C DRIVER FOR SYNOPSYS DESIGNWARE
> S: Orphan
> F: Documentation/devicetree/bindings/i3c/snps,dw-i3c-master.yaml
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
@ 2026-07-07 7:28 周寅
2026-07-08 15:45 ` Frank Li
0 siblings, 1 reply; 6+ messages in thread
From: 周寅 @ 2026-07-07 7:28 UTC (permalink / raw)
To: Frank Li
Cc: linux-staging@lists.linux.dev, linux-i3c@lists.infradead.org,
devicetree@vger.kernel.org, gregkh@linuxfoundation.org,
alexandre.belloni@bootlin.com, robh@kernel.org,
krzk+dt@kernel.org, conor+dt@kernel.org, linusw@kernel.org,
brgl@kernel.org, linux-gpio@vger.kernel.org,
linux-kernel@vger.kernel.org, 王炜
Hi Frank,
You previously suggested that the Realtek I3C hub driver should be based on
the common framework introduced by the NXP P3H2x4x hub series. We have been
tracking that series, and it has now reached v13:
https://lore.kernel.org/linux-i3c/20260701065755.2067793-1-lakshay.piplani@nxp.com/T/#t
From the current version, [PATCH v13 5/7] appears to contain the generic I3C
hub framework. It adds the common virtual I3C bus support for hub downstream
ports, mainly through drivers/i3c/hub.c and include/linux/i3c/hub.h, and does
not appear to depend on the NXP-specific P3H2x4x hardware implementation.
Would it make sense to split out this generic framework, together with the
required I3C core helper changes, so that it can be reviewed and stabilized
independently from the P3H2x4x hardware driver?
This would allow the Realtek driver, and potentially other I3C hub drivers,
to move earlier to the common upstream framework.
If this direction sounds reasonable, we can rebase the Realtek driver on top
of the generic framework and help test the common hub code as well.
Best Regards,
Zain Zhou 周寅
Realsil Microelectronics CO. LTD.
E-mail✉ : zain_zhou@realsil.com.cn
-----邮件原件-----
发件人: Frank Li <Frank.li@nxp.com>
发送时间: 2026年5月5日 4:34
收件人: 周寅 <zain_zhou@realsil.com.cn>
抄送: linux-staging@lists.linux.dev; linux-i3c@lists.infradead.org; devicetree@vger.kernel.org; gregkh@linuxfoundation.org; alexandre.belloni@bootlin.com; robh@kernel.org; krzk+dt@kernel.org; conor+dt@kernel.org; linusw@kernel.org; brgl@kernel.org; linux-gpio@vger.kernel.org; linux-kernel@vger.kernel.org
主题: Re: [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
External mail : This email originated from outside the organization. Do not reply, click links, or open attachments unless you recognize the sender and know the content is safe.
On Thu, Apr 30, 2026 at 08:13:53PM +0800, zain_zhou@realsil.com.cn wrote:
> From: zain_zhou <zain_zhou@realsil.com.cn>
>
> Add DT binding schema for Realtek RTS490x series I3C HUB devices.
>
> The binding describes configuration properties for:
> - LDO enable/disable and voltage level per port group
> - Pull-up resistance per port group
> - IO driver strength per port
> - Per target-port mode (I3C/SMBus/GPIO/disabled), pull-up,
> IO mode, SMBus clock frequency and polling interval
> - Hub network always-I3C mode
> - Hardware identification via CSEL pin (id) and CP1 pins (id-cp1)
Please base on
https://lore.kernel.org/linux-i3c/20260420105222.1562243-1-lakshay.piplani@nxp.com/T/#t
which almost done!
Frank
>
> Signed-off-by: zain_zhou <zain_zhou@realsil.com.cn>
> ---
> .../bindings/i3c/realtek,rts490x-i3c-hub.yaml | 410 ++++++++++++++++++
> MAINTAINERS | 6 +
> 2 files changed, 416 insertions(+)
> create mode 100644
> Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
>
> diff --git
> a/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> new file mode 100644
> index 000000000000..30295eefee89
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.ya
> +++ ml
> @@ -0,0 +1,410 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/i3c/realtek,rts490x-i3c-hub.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: I3C HUB
> +
> +maintainers:
> + - zain_zhou <zain_zhou@realsil.com.cn>
> +
> +description: |
> + I3C HUB is smart device which provides multiple functionality:
> + * enabling voltage compatibility across I3C Controller and Target
> +devices,
> + * bus capacitance isolation
> + * address conflict isolation
> + * I3C port expansion
> + * two controllers in a single I3C bus
> + * I3C and SMBus device compatibility
> + * GPIO expansion
> +
> + Having such big number of features, there is a need to have some DT
> + knobs to tell the I3C HUB driver which features shall be enabled
> + and how they shall be configured. I3C HUB driver read, validate DT
> + knobs and set corresponding registers with the right way to satisfy user requests from DT.
> +
> + All the DT properties for I3C HUB are located under dedicated (for
> + I3C HUB) DT entry. I3C HUB DT entry structure is aligned with regular I3C device DT entry described in i3c.yaml.
> +
> +allOf:
> + - $ref: i3c.yaml#
> +
> +properties:
> + $nodename:
> + pattern: "^hub@0,0$"
> +
> + cp0-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Controller Port 0 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + cp1-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Controller Port 1 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + tp0145-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Ports 0/1/4/5 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + tp2367-ldo-en:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Ports 2/3/6/7 LDO disabling/enabling setting. If enabled, voltage produced by
> + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> +
> + This property is optional. If not provided, LDO will be disabled.
> +
> + cp0-ldo-volt:
> + enum:
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Controller Port 0 LDO setting to control the Controller Port 1 voltage level. This
> + property is optional.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + cp1-ldo-volt:
> + enum:
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Controller Port 1 LDO setting to control the Controller Port 1 voltage level. This
> + property is optional.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + tp0145-ldo-volt:
> + enum:
> + - disabled
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Target Ports 0/1/4/5 LDO setting to control the Target Ports 0/1/4/5 voltage level.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + tp2367-ldo-volt:
> + enum:
> + - disabled
> + - 1.0V
> + - 1.1V
> + - 1.2V
> + - 1.8V
> + description: |
> + I3C HUB Target Ports 2/3/6/7 LDO setting to control the Target Ports 2/3/6/7 voltage level.
> +
> + If not provided, LDO configuration is not modified in I3C HUB.
> +
> + tp0145-pullup:
> + enum:
> + - disabled
> + - 250R
> + - 500R
> + - 1k
> + - 2k
> + description: |
> + I3C HUB Target Ports 0/1/4/5 pull-up setting to control the Target Ports 0/1/4/5 pull-up
> + resistance level.
> +
> + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
> +
> + tp2367-pullup:
> + enum:
> + - disabled
> + - 250R
> + - 500R
> + - 1k
> + - 2k
> + description: |
> + I3C HUB Target Ports 2/3/6/7 pull-up setting to control the Target Ports 2/3/6/7 pull-up
> + resistance level.
> +
> + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
> +
> + cp0-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Controller Port 0 IO strength setting to control the Controller Port 0 output driver
> + strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + cp1-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Controller Port 1 IO strength setting to control the Controller Port 1 output driver
> + strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + tp0145-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Target Ports 0/1/4/5 IO strength setting to control the Target Ports 0/1/4/5 output
> + driver strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + tp2367-io-strength:
> + enum:
> + - 20Ohms
> + - 30Ohms
> + - 40Ohms
> + - 50Ohms
> + description: |
> + I3C HUB Target Ports 2/3/6/7 IO strength setting to control the Target Ports 2/3/6/7 output
> + driver strength.
> +
> + This property is optional. If not provided, IO strength configuration is not modified in I3C
> + HUB.
> +
> + id:
> + enum:
> + - 0
> + - 1
> + - 3
> + description: |
> + I3C HUB ID based on CSEL pin. There are three possible values:
> + 0 - CP0 is selected as primary Controller Port
> + 1 - Primary Controller Port is selected by software by writing the REG#56
> + 3 - CP1 is selected as primary Controller Port
> +
> + I3C HUB driver reads CSEL pin status (REG#121[5:4]) and tries to find DT node with matching
> + value in 'id' property.
> +
> + This property is optional. If not provided, DT node can only be used by the I3C HUB driver if
> + there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes with no
> + 'id' property - the first one will be chosen by I3C HUB driver. If there is a multiple DT
> + nodes with matching 'id' property - the first one will be chosen by I3C HUB driver.
> +
> + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
> + read from I3C HUB.
> +
> + id-cp1:
> + enum:
> + - 0
> + - 1
> + - 2
> + - 3
> + description: |
> + I3C HUB ID based on CP1 SDA and SCL pins state probed during power on.
> +
> + I3C HUB driver reads CP1 SDA and SCL pin status and tries to find DT node with matching value
> + in 'id-cp1' property.
> +
> + This property is optional. If not provided, DT node can only be used by the I3C HUB
> + driver if there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes
> + with no 'id-cp1' property - the first one will be chosen by I3C HUB driver. If there is a
> + multiple DT nodes with matching 'id-cp1' property - the first one will be chosen by I3C HUB
> + driver.
> +
> + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
> + read from I3C HUB.
> +
> +patternProperties:
> + "@[0-9]$":
> + type: object
> + description: |
> + I3C HUB Target Port child, should be named:
> +target-port@<target-port-id>
> +
> + properties:
> + mode:
> + enum:
> + - disabled
> + - i3c
> + - smbus
> + - gpio
> + description: |
> + I3C HUB Target Port mode setting to control Target Port functionality.
> +
> + This property is optional. If not provided, Target Port mode configuration is not modified
> + in I3C HUB.
> +
> + pullup:
> + enum:
> + - disabled
> + - enabled
> + description: |
> + I3C HUB Target Port pull-up setting to disable/enable Target Port pull-up.
> +
> + This property is optional. If not provided, Target Port pull-up configuration is not
> + modified in I3C HUB.
> +
> + always-enable:
> + type: boolean
> + description: |
> + I3C HUB Target Port settings to control the port enable/disable policy.
> +
> + This property is optional. If not provided, Target Port is enabled only on accessing to
> + the devices connected to it and the port is disabled automatically after the accessing
> + is done. If provided, the Target Port is always enabled.
> +
> + polling-interval-ms:
> + type: uint32
> + description: |
> + I3C HUB Target Port SMBus polling interval in milliseconds.
> +
> + This property is optional. If not provided or set to 0, polling is disabled and the driver
> + uses IBI (In-Band Interrupts). If provided with a positive value, polling is enabled for
> + this Target Port with the given period.Note: this positive value only affects the SMBus
> + target agent polling. The SMBus controller agent polling interval is computed dynamically
> + from clock and data length.
> +
> + clock-frequency:
> + type: uint32
> + enum:
> + - 100000
> + - 200000
> + - 400000
> + - 1000000
> + description: |
> + I3C HUB Target Port SMBus clock frequency in Hz.
> +
> + This property follows the standard I2C 'clock-frequency' semantics.
> + Applies only when the Target Port mode is set to "smbus".
> + Optional; if not provided, the driver uses 400000 Hz by default.
> +
> +additionalProperties: true
> +
> +examples:
> + - |
> + i3c-master@d040000 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + hub@0,0 {
> + cp0-ldo-en = "disabled";
> + cp1-ldo-en = "enabled";
> + cp0-ldo-volt = "1.0V";
> + cp1-ldo-volt = "1.1V";
> + tp0145-ldo-en = "enabled";
> + tp2367-ldo-en = "disabled";
> + tp0145-ldo-volt = "1.2V";
> + tp2367-ldo-volt = "1.8V";
> + tp0145-pullup = "2k";
> + tp2367-pullup = "500R";
> + tp0145-io-strength = "50Ohms";
> + tp2367-io-strength = "30Ohms";
> + cp0-io-strength = "20Ohms";
> + cp1-io-strength = "40Ohms";
> +
> + target-port@0 {
> + mode = "i3c";
> + pullup = "enabled";
> + always_enable;
> + };
> + target-port@1 {
> + mode = "smbus";
> + pullup = "enabled";
> + clock-frequency = <1000000>;
> + polling-interval-ms = <10>;
> + backend@10{
> + compatible = "i2c-slave-mqueue";
> + reg = <(0x10 | I2C_OWN_SLAVE_ADDRESS)>;
> + };
> + };
> + target-port@2 {
> + mode = "gpio";
> + pullup = "disabled";
> + };
> + target-port@3 {
> + mode = "disabled";
> + pullup = "disabled";
> + };
> + };
> + };
> +
> + - |
> + i3c-master@d040000 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + hub@70,3C000000100 {
> + reg = <0x70 0x3C0 0x00000100>;
> + assigned-address = <0x70>;
> + dcr = <0xC2>;
> +
> + cp0-ldo-en = "disabled";
> + cp1-ldo-en = "enabled";
> + cp0-ldo-volt = "1.0V";
> + cp1-ldo-volt = "1.1V";
> + tp0145-ldo-en = "enabled";
> + tp2367-ldo-en = "disabled";
> + tp0145-ldo-volt = "1.2V";
> + tp2367-ldo-volt = "1.8V";
> + tp0145-pullup = "2k";
> + tp2367-pullup = "500R";
> + tp0145-io-strength = "50Ohms";
> + tp2367-io-strength = "30Ohms";
> + cp0-io-strength = "20Ohms";
> + cp1-io-strength = "40Ohms";
> +
> + target-port@0 {
> + mode = "i3c";
> + pullup = "enabled";
> + always-enable;
> + };
> + target-port@1 {
> + mode = "smbus";
> + pullup = "enabled";
> + backend@12{
> + compatible = "i2c-slave-mqueue";
> + reg = <(0x12 | I2C_OWN_SLAVE_ADDRESS)>;
> + };
> + };
> + target-port@2 {
> + mode = "gpio";
> + pullup = "disabled";
> + };
> + target-port@3 {
> + mode = "disabled";
> + pullup = "disabled";
> + };
> + };
> + };
> diff --git a/MAINTAINERS b/MAINTAINERS index
> 2fb1c75afd16..71ee5071ac0f 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12214,6 +12214,12 @@ S: Supported
> F: Documentation/devicetree/bindings/i3c/renesas,i3c.yaml
> F: drivers/i3c/master/renesas-i3c.c
>
> +I3C HUB DRIVER FOR REALTEK RTS490X
> +M: zain_zhou <zain_zhou@realsil.com.cn>
> +S: Maintained
> +F: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> +F: drivers/staging/rts490x/
> +
> I3C DRIVER FOR SYNOPSYS DESIGNWARE
> S: Orphan
> F: Documentation/devicetree/bindings/i3c/snps,dw-i3c-master.yaml
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
2026-07-07 7:28 [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB 周寅
@ 2026-07-08 15:45 ` Frank Li
0 siblings, 0 replies; 6+ messages in thread
From: Frank Li @ 2026-07-08 15:45 UTC (permalink / raw)
To: 周寅
Cc: Frank Li, linux-staging@lists.linux.dev,
linux-i3c@lists.infradead.org, devicetree@vger.kernel.org,
gregkh@linuxfoundation.org, alexandre.belloni@bootlin.com,
robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org,
linusw@kernel.org, brgl@kernel.org, linux-gpio@vger.kernel.org,
linux-kernel@vger.kernel.org, 王炜
On Tue, Jul 07, 2026 at 07:28:28AM +0000, 周寅 wrote:
> Hi Frank,
>
> You previously suggested that the Realtek I3C hub driver should be based on
> the common framework introduced by the NXP P3H2x4x hub series. We have been
> tracking that series, and it has now reached v13:
>
> https://lore.kernel.org/linux-i3c/20260701065755.2067793-1-lakshay.piplani@nxp.com/T/#t
>
> From the current version, [PATCH v13 5/7] appears to contain the generic I3C
> hub framework. It adds the common virtual I3C bus support for hub downstream
> ports, mainly through drivers/i3c/hub.c and include/linux/i3c/hub.h, and does
> not appear to depend on the NXP-specific P3H2x4x hardware implementation.
>
> Would it make sense to split out this generic framework, together with the
> required I3C core helper changes, so that it can be reviewed and stabilized
> independently from the P3H2x4x hardware driver?
So far, I3C hub interface register defination is standard, I suppose P3H2x4x
driver can work on RTS490x with little bit modify.
>
> This would allow the Realtek driver, and potentially other I3C hub drivers,
> to move earlier to the common upstream framework.
>
> If this direction sounds reasonable, we can rebase the Realtek driver on top
> of the generic framework and help test the common hub code as well.
Please base on v13 to continue your work. Some sashiko feedback need be
addressed, it is quite close to land. If you can help test, it will help
much.
Frank
>
> Best Regards,
> Zain Zhou 周寅
> Realsil Microelectronics CO. LTD.
> E-mail✉ : zain_zhou@realsil.com.cn
>
>
> -----邮件原件-----
> 发件人: Frank Li <Frank.li@nxp.com>
> 发送时间: 2026年5月5日 4:34
> 收件人: 周寅 <zain_zhou@realsil.com.cn>
> 抄送: linux-staging@lists.linux.dev; linux-i3c@lists.infradead.org; devicetree@vger.kernel.org; gregkh@linuxfoundation.org; alexandre.belloni@bootlin.com; robh@kernel.org; krzk+dt@kernel.org; conor+dt@kernel.org; linusw@kernel.org; brgl@kernel.org; linux-gpio@vger.kernel.org; linux-kernel@vger.kernel.org
> 主题: Re: [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB
>
>
> External mail : This email originated from outside the organization. Do not reply, click links, or open attachments unless you recognize the sender and know the content is safe.
>
>
>
> On Thu, Apr 30, 2026 at 08:13:53PM +0800, zain_zhou@realsil.com.cn wrote:
> > From: zain_zhou <zain_zhou@realsil.com.cn>
> >
> > Add DT binding schema for Realtek RTS490x series I3C HUB devices.
> >
> > The binding describes configuration properties for:
> > - LDO enable/disable and voltage level per port group
> > - Pull-up resistance per port group
> > - IO driver strength per port
> > - Per target-port mode (I3C/SMBus/GPIO/disabled), pull-up,
> > IO mode, SMBus clock frequency and polling interval
> > - Hub network always-I3C mode
> > - Hardware identification via CSEL pin (id) and CP1 pins (id-cp1)
>
> Please base on
> https://lore.kernel.org/linux-i3c/20260420105222.1562243-1-lakshay.piplani@nxp.com/T/#t
>
> which almost done!
>
> Frank
>
> >
> > Signed-off-by: zain_zhou <zain_zhou@realsil.com.cn>
> > ---
> > .../bindings/i3c/realtek,rts490x-i3c-hub.yaml | 410 ++++++++++++++++++
> > MAINTAINERS | 6 +
> > 2 files changed, 416 insertions(+)
> > create mode 100644
> > Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> >
> > diff --git
> > a/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> > b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> > new file mode 100644
> > index 000000000000..30295eefee89
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.ya
> > +++ ml
> > @@ -0,0 +1,410 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/i3c/realtek,rts490x-i3c-hub.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: I3C HUB
> > +
> > +maintainers:
> > + - zain_zhou <zain_zhou@realsil.com.cn>
> > +
> > +description: |
> > + I3C HUB is smart device which provides multiple functionality:
> > + * enabling voltage compatibility across I3C Controller and Target
> > +devices,
> > + * bus capacitance isolation
> > + * address conflict isolation
> > + * I3C port expansion
> > + * two controllers in a single I3C bus
> > + * I3C and SMBus device compatibility
> > + * GPIO expansion
> > +
> > + Having such big number of features, there is a need to have some DT
> > + knobs to tell the I3C HUB driver which features shall be enabled
> > + and how they shall be configured. I3C HUB driver read, validate DT
> > + knobs and set corresponding registers with the right way to satisfy user requests from DT.
> > +
> > + All the DT properties for I3C HUB are located under dedicated (for
> > + I3C HUB) DT entry. I3C HUB DT entry structure is aligned with regular I3C device DT entry described in i3c.yaml.
> > +
> > +allOf:
> > + - $ref: i3c.yaml#
> > +
> > +properties:
> > + $nodename:
> > + pattern: "^hub@0,0$"
> > +
> > + cp0-ldo-en:
> > + enum:
> > + - disabled
> > + - enabled
> > + description: |
> > + I3C HUB Controller Port 0 LDO disabling/enabling setting. If enabled, voltage produced by
> > + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> > + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> > +
> > + This property is optional. If not provided, LDO will be disabled.
> > +
> > + cp1-ldo-en:
> > + enum:
> > + - disabled
> > + - enabled
> > + description: |
> > + I3C HUB Controller Port 1 LDO disabling/enabling setting. If enabled, voltage produced by
> > + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> > + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> > +
> > + This property is optional. If not provided, LDO will be disabled.
> > +
> > + tp0145-ldo-en:
> > + enum:
> > + - disabled
> > + - enabled
> > + description: |
> > + I3C HUB Target Ports 0/1/4/5 LDO disabling/enabling setting. If enabled, voltage produced by
> > + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> > + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> > +
> > + This property is optional. If not provided, LDO will be disabled.
> > +
> > + tp2367-ldo-en:
> > + enum:
> > + - disabled
> > + - enabled
> > + description: |
> > + I3C HUB Target Ports 2/3/6/7 LDO disabling/enabling setting. If enabled, voltage produced by
> > + on-die LDO will be available externally on dedicated pin. This option could be used to supply
> > + external pull-up resistors or for any other purpose which does not cross LDO capabilities.
> > +
> > + This property is optional. If not provided, LDO will be disabled.
> > +
> > + cp0-ldo-volt:
> > + enum:
> > + - 1.0V
> > + - 1.1V
> > + - 1.2V
> > + - 1.8V
> > + description: |
> > + I3C HUB Controller Port 0 LDO setting to control the Controller Port 1 voltage level. This
> > + property is optional.
> > +
> > + If not provided, LDO configuration is not modified in I3C HUB.
> > +
> > + cp1-ldo-volt:
> > + enum:
> > + - 1.0V
> > + - 1.1V
> > + - 1.2V
> > + - 1.8V
> > + description: |
> > + I3C HUB Controller Port 1 LDO setting to control the Controller Port 1 voltage level. This
> > + property is optional.
> > +
> > + If not provided, LDO configuration is not modified in I3C HUB.
> > +
> > + tp0145-ldo-volt:
> > + enum:
> > + - disabled
> > + - 1.0V
> > + - 1.1V
> > + - 1.2V
> > + - 1.8V
> > + description: |
> > + I3C HUB Target Ports 0/1/4/5 LDO setting to control the Target Ports 0/1/4/5 voltage level.
> > +
> > + If not provided, LDO configuration is not modified in I3C HUB.
> > +
> > + tp2367-ldo-volt:
> > + enum:
> > + - disabled
> > + - 1.0V
> > + - 1.1V
> > + - 1.2V
> > + - 1.8V
> > + description: |
> > + I3C HUB Target Ports 2/3/6/7 LDO setting to control the Target Ports 2/3/6/7 voltage level.
> > +
> > + If not provided, LDO configuration is not modified in I3C HUB.
> > +
> > + tp0145-pullup:
> > + enum:
> > + - disabled
> > + - 250R
> > + - 500R
> > + - 1k
> > + - 2k
> > + description: |
> > + I3C HUB Target Ports 0/1/4/5 pull-up setting to control the Target Ports 0/1/4/5 pull-up
> > + resistance level.
> > +
> > + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
> > +
> > + tp2367-pullup:
> > + enum:
> > + - disabled
> > + - 250R
> > + - 500R
> > + - 1k
> > + - 2k
> > + description: |
> > + I3C HUB Target Ports 2/3/6/7 pull-up setting to control the Target Ports 2/3/6/7 pull-up
> > + resistance level.
> > +
> > + This property is optional. If not provided, pull-up configuration is not modified in I3C HUB.
> > +
> > + cp0-io-strength:
> > + enum:
> > + - 20Ohms
> > + - 30Ohms
> > + - 40Ohms
> > + - 50Ohms
> > + description: |
> > + I3C HUB Controller Port 0 IO strength setting to control the Controller Port 0 output driver
> > + strength.
> > +
> > + This property is optional. If not provided, IO strength configuration is not modified in I3C
> > + HUB.
> > +
> > + cp1-io-strength:
> > + enum:
> > + - 20Ohms
> > + - 30Ohms
> > + - 40Ohms
> > + - 50Ohms
> > + description: |
> > + I3C HUB Controller Port 1 IO strength setting to control the Controller Port 1 output driver
> > + strength.
> > +
> > + This property is optional. If not provided, IO strength configuration is not modified in I3C
> > + HUB.
> > +
> > + tp0145-io-strength:
> > + enum:
> > + - 20Ohms
> > + - 30Ohms
> > + - 40Ohms
> > + - 50Ohms
> > + description: |
> > + I3C HUB Target Ports 0/1/4/5 IO strength setting to control the Target Ports 0/1/4/5 output
> > + driver strength.
> > +
> > + This property is optional. If not provided, IO strength configuration is not modified in I3C
> > + HUB.
> > +
> > + tp2367-io-strength:
> > + enum:
> > + - 20Ohms
> > + - 30Ohms
> > + - 40Ohms
> > + - 50Ohms
> > + description: |
> > + I3C HUB Target Ports 2/3/6/7 IO strength setting to control the Target Ports 2/3/6/7 output
> > + driver strength.
> > +
> > + This property is optional. If not provided, IO strength configuration is not modified in I3C
> > + HUB.
> > +
> > + id:
> > + enum:
> > + - 0
> > + - 1
> > + - 3
> > + description: |
> > + I3C HUB ID based on CSEL pin. There are three possible values:
> > + 0 - CP0 is selected as primary Controller Port
> > + 1 - Primary Controller Port is selected by software by writing the REG#56
> > + 3 - CP1 is selected as primary Controller Port
> > +
> > + I3C HUB driver reads CSEL pin status (REG#121[5:4]) and tries to find DT node with matching
> > + value in 'id' property.
> > +
> > + This property is optional. If not provided, DT node can only be used by the I3C HUB driver if
> > + there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes with no
> > + 'id' property - the first one will be chosen by I3C HUB driver. If there is a multiple DT
> > + nodes with matching 'id' property - the first one will be chosen by I3C HUB driver.
> > +
> > + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
> > + read from I3C HUB.
> > +
> > + id-cp1:
> > + enum:
> > + - 0
> > + - 1
> > + - 2
> > + - 3
> > + description: |
> > + I3C HUB ID based on CP1 SDA and SCL pins state probed during power on.
> > +
> > + I3C HUB driver reads CP1 SDA and SCL pin status and tries to find DT node with matching value
> > + in 'id-cp1' property.
> > +
> > + This property is optional. If not provided, DT node can only be used by the I3C HUB
> > + driver if there is no others with matching 'id' or 'id-cp1'. If there is a multiple DT nodes
> > + with no 'id-cp1' property - the first one will be chosen by I3C HUB driver. If there is a
> > + multiple DT nodes with matching 'id-cp1' property - the first one will be chosen by I3C HUB
> > + driver.
> > +
> > + If both 'id' and 'id-cp1' are available, DT node will chosen only when both values match those
> > + read from I3C HUB.
> > +
> > +patternProperties:
> > + "@[0-9]$":
> > + type: object
> > + description: |
> > + I3C HUB Target Port child, should be named:
> > +target-port@<target-port-id>
> > +
> > + properties:
> > + mode:
> > + enum:
> > + - disabled
> > + - i3c
> > + - smbus
> > + - gpio
> > + description: |
> > + I3C HUB Target Port mode setting to control Target Port functionality.
> > +
> > + This property is optional. If not provided, Target Port mode configuration is not modified
> > + in I3C HUB.
> > +
> > + pullup:
> > + enum:
> > + - disabled
> > + - enabled
> > + description: |
> > + I3C HUB Target Port pull-up setting to disable/enable Target Port pull-up.
> > +
> > + This property is optional. If not provided, Target Port pull-up configuration is not
> > + modified in I3C HUB.
> > +
> > + always-enable:
> > + type: boolean
> > + description: |
> > + I3C HUB Target Port settings to control the port enable/disable policy.
> > +
> > + This property is optional. If not provided, Target Port is enabled only on accessing to
> > + the devices connected to it and the port is disabled automatically after the accessing
> > + is done. If provided, the Target Port is always enabled.
> > +
> > + polling-interval-ms:
> > + type: uint32
> > + description: |
> > + I3C HUB Target Port SMBus polling interval in milliseconds.
> > +
> > + This property is optional. If not provided or set to 0, polling is disabled and the driver
> > + uses IBI (In-Band Interrupts). If provided with a positive value, polling is enabled for
> > + this Target Port with the given period.Note: this positive value only affects the SMBus
> > + target agent polling. The SMBus controller agent polling interval is computed dynamically
> > + from clock and data length.
> > +
> > + clock-frequency:
> > + type: uint32
> > + enum:
> > + - 100000
> > + - 200000
> > + - 400000
> > + - 1000000
> > + description: |
> > + I3C HUB Target Port SMBus clock frequency in Hz.
> > +
> > + This property follows the standard I2C 'clock-frequency' semantics.
> > + Applies only when the Target Port mode is set to "smbus".
> > + Optional; if not provided, the driver uses 400000 Hz by default.
> > +
> > +additionalProperties: true
> > +
> > +examples:
> > + - |
> > + i3c-master@d040000 {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + hub@0,0 {
> > + cp0-ldo-en = "disabled";
> > + cp1-ldo-en = "enabled";
> > + cp0-ldo-volt = "1.0V";
> > + cp1-ldo-volt = "1.1V";
> > + tp0145-ldo-en = "enabled";
> > + tp2367-ldo-en = "disabled";
> > + tp0145-ldo-volt = "1.2V";
> > + tp2367-ldo-volt = "1.8V";
> > + tp0145-pullup = "2k";
> > + tp2367-pullup = "500R";
> > + tp0145-io-strength = "50Ohms";
> > + tp2367-io-strength = "30Ohms";
> > + cp0-io-strength = "20Ohms";
> > + cp1-io-strength = "40Ohms";
> > +
> > + target-port@0 {
> > + mode = "i3c";
> > + pullup = "enabled";
> > + always_enable;
> > + };
> > + target-port@1 {
> > + mode = "smbus";
> > + pullup = "enabled";
> > + clock-frequency = <1000000>;
> > + polling-interval-ms = <10>;
> > + backend@10{
> > + compatible = "i2c-slave-mqueue";
> > + reg = <(0x10 | I2C_OWN_SLAVE_ADDRESS)>;
> > + };
> > + };
> > + target-port@2 {
> > + mode = "gpio";
> > + pullup = "disabled";
> > + };
> > + target-port@3 {
> > + mode = "disabled";
> > + pullup = "disabled";
> > + };
> > + };
> > + };
> > +
> > + - |
> > + i3c-master@d040000 {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + hub@70,3C000000100 {
> > + reg = <0x70 0x3C0 0x00000100>;
> > + assigned-address = <0x70>;
> > + dcr = <0xC2>;
> > +
> > + cp0-ldo-en = "disabled";
> > + cp1-ldo-en = "enabled";
> > + cp0-ldo-volt = "1.0V";
> > + cp1-ldo-volt = "1.1V";
> > + tp0145-ldo-en = "enabled";
> > + tp2367-ldo-en = "disabled";
> > + tp0145-ldo-volt = "1.2V";
> > + tp2367-ldo-volt = "1.8V";
> > + tp0145-pullup = "2k";
> > + tp2367-pullup = "500R";
> > + tp0145-io-strength = "50Ohms";
> > + tp2367-io-strength = "30Ohms";
> > + cp0-io-strength = "20Ohms";
> > + cp1-io-strength = "40Ohms";
> > +
> > + target-port@0 {
> > + mode = "i3c";
> > + pullup = "enabled";
> > + always-enable;
> > + };
> > + target-port@1 {
> > + mode = "smbus";
> > + pullup = "enabled";
> > + backend@12{
> > + compatible = "i2c-slave-mqueue";
> > + reg = <(0x12 | I2C_OWN_SLAVE_ADDRESS)>;
> > + };
> > + };
> > + target-port@2 {
> > + mode = "gpio";
> > + pullup = "disabled";
> > + };
> > + target-port@3 {
> > + mode = "disabled";
> > + pullup = "disabled";
> > + };
> > + };
> > + };
> > diff --git a/MAINTAINERS b/MAINTAINERS index
> > 2fb1c75afd16..71ee5071ac0f 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -12214,6 +12214,12 @@ S: Supported
> > F: Documentation/devicetree/bindings/i3c/renesas,i3c.yaml
> > F: drivers/i3c/master/renesas-i3c.c
> >
> > +I3C HUB DRIVER FOR REALTEK RTS490X
> > +M: zain_zhou <zain_zhou@realsil.com.cn>
> > +S: Maintained
> > +F: Documentation/devicetree/bindings/i3c/realtek,rts490x-i3c-hub.yaml
> > +F: drivers/staging/rts490x/
> > +
> > I3C DRIVER FOR SYNOPSYS DESIGNWARE
> > S: Orphan
> > F: Documentation/devicetree/bindings/i3c/snps,dw-i3c-master.yaml
> > --
> > 2.34.1
> >
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-07-08 15:46 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-07 7:28 [PATCH 1/2] dt-bindings: i3c: add binding for Realtek RTS490x I3C HUB 周寅
2026-07-08 15:45 ` Frank Li
-- strict thread matches above, loose matches on Subject: below --
2026-04-30 12:13 zain_zhou
2026-04-30 13:41 ` Rob Herring (Arm)
2026-05-01 9:37 ` Krzysztof Kozlowski
2026-05-04 20:34 ` Frank Li
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox