blob: 0f6b7523425ff48e49e3960c965b58aea1260067 [file] [log] [blame]
From ec38c113f143e25c595422d8ae1be5399f0559ab Mon Sep 17 00:00:00 2001
From: Steven Niu <steven.niu.uj@renesas.com>
Date: Wed, 22 Jan 2025 01:14:52 +0800
Subject: [PATCH 2/9] dt-bindings: i3c-hub: Document I3C Hub bindings
Document I3C Hub DT bindings.
Signed-off-by: Steven Niu <steven.niu.uj@renesas.com>
---
.../devicetree/bindings/i3c/i3c-hub.yaml | 250 ++++++++++++++++++
1 file changed, 250 insertions(+)
create mode 100644 Documentation/devicetree/bindings/i3c/i3c-hub.yaml
diff --git a/Documentation/devicetree/bindings/i3c/i3c-hub.yaml b/Documentation/devicetree/bindings/i3c/i3c-hub.yaml
new file mode 100644
index 000000000000..14c43461b971
--- /dev/null
+++ b/Documentation/devicetree/bindings/i3c/i3c-hub.yaml
@@ -0,0 +1,250 @@
+# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/i3c/i3c-hub.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: I3C HUB
+
+maintainers:
+ - Zbigniew Lukwinski <zbigniew.lukwinski@linux.intel.com>
+ - Steven Niu <steven.niu.uj@renesas.com>
+
+description: |
+ The I3C Hub is a family of I2C/I3C 2-to-N Hub devices. An I3C Hub device
+ provides connectivity to up to two control ports, and up to eight target
+ ports. By cascading and duplicating the i3c hub, the user can build a hub
+ network to provide connectivity to a number of devices, with extended reach
+ distance, and running with different level of I2C, I3C, and SMBus protocols.
+
+ I3C Hub Spec:
+ https://www.intel.com/content/www/us/en/content-details/823670/i3c-hub-device-specification.html
+
+allOf:
+ - $ref: i3c.yaml#
+
+properties:
+ $nodename:
+ pattern: "^hub@0,0$"
+
+ compatible:
+ enum:
+ - renesas,rg3mxx
+
+ '#address-cells':
+ const: 1
+
+ '#size-cells':
+ const: 0
+
+ id-csel:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: |
+ The input settings of CSEL pin. This can be used to idendify the i3c hub
+ in a hub network with mulitple i3c hub hardware instance.
+ enum: [0, 1, 3]
+
+ id-cp1:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: |
+ The input settings of control port 1 SCL & SDA pin. This can be used to
+ idendify the i3c hub in a hub network with mulitple i3c hub hardware
+ instance.
+ enum: [0, 1, 2, 3]
+
+ id-tpx:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: |
+ The input settings of target port[n] SCL & SDA pin. This can be used to
+ idendify the i3c hub in a hub network with mulitple i3c hub hardware
+ instance.
+ enum: [0, 1, 2, 3]
+
+ control-port:
+ description:
+ Control port configuration.
+ $ref: '#/$defs/control-port'
+
+ target-group-0:
+ description:
+ Target group 0 configuration.
+ $ref: '#/$defs/target-group'
+
+ target-group-1:
+ description:
+ Target group 1 configuration.
+ $ref: '#/$defs/target-group'
+
+patternProperties:
+ "target-port@[0-7]$":
+ type: object
+
+ description:
+ Child nodes used to configure target port.
+
+ properties:
+ compatible:
+ oneOf:
+ - items:
+ - enum:
+ - i3c-hub-i3c
+ - i3c-hub-smbus
+
+ reg:
+ description:
+ Target port identifier.
+ enum: [0, 7]
+
+ io-internal-pullups-disable:
+ description:
+ Select whether to disable the internl pullups on I3C signals.
+ type:
+ boolean
+
+ idle-disconnect:
+ description: The target port will be disconnected automatically when
+ there is no bus activity.
+ type: boolean
+
+ clock-frequency:
+ description:
+ Select the clock frequency of SMBus Agent Tx function.
+ enum: [100000, 200000, 400000, 1000000]
+
+ additionalProperties: false
+
+required:
+ - dcr
+ - "#address-cells"
+ - "#size-cells"
+
+additionalProperties: false
+
+$defs:
+ control-port:
+ type: object
+ description:
+ Child nodes used to configure control port.
+
+ properties:
+ port-name:
+ description:
+ Name of the control port
+ enum:
+ - CP0
+ - CP1
+
+ io-microvolt:
+ description:
+ Select the i3c signal voltage level for the control port
+ enum: [1000000, 1100000, 1200000, 1800000]
+
+ io-strength-ohms:
+ description:
+ Select the io drive strength for control port
+ enum: [20, 30, 40, 50]
+
+ vio-source:
+ description:
+ Select the source of VIO supply.
+ enum:
+ - external
+ - internal
+
+ required:
+ - port-name
+
+ target-group:
+ type: object
+
+ properties:
+ io-microvolt:
+ description:
+ Select the i3c signal voltage level for the control port
+ enum: [1000000, 1100000, 1200000, 1800000]
+
+ io-strength-ohms:
+ description:
+ Select the io drive strength for control port
+ enum: [20, 30, 40, 50]
+
+ io-internal-pullups-ohms:
+ description:
+ Select the internal pullup resister value if the internal pullups are
+ enabled for the target port.
+ enum: [250, 500, 1000, 2000]
+
+ vio-source:
+ description:
+ Select the source of VIO supply.
+ enum:
+ - external
+ - internal
+
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ i3c@0 {
+ reg = <0x0d040000 0x1000>;
+ #address-cells = <3>;
+ #size-cells = <0>;
+
+ hub@0,4cc00000000 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ reg = <0x0 0x4cc 0x0>;
+
+ control-port {
+ port-name = "CP0";
+ io-microvolt = <1000000>;
+ io-strength-ohms = <20>;
+ vio-source = "external";
+ };
+
+ target-group-0 {
+ io-microvolt = <1000000>;
+ io-strength-ohms = <20>;
+ io-internal-pullups-ohms = <500>;
+ vio-source = "internal";
+ };
+
+ target-group-1 {
+ io-microvolt = <1800000>;
+ io-strength-ohms = <20>;
+ io-internal-pullups-ohms = <1000>;
+ vio-source = "internal";
+ };
+
+ target-port@0 {
+ compatible = "i3c-hub-i3c";
+ reg = <0>;
+ };
+
+ target-port@1 {
+ compatible = "i3c-hub-i3c";
+ reg = <1>;
+ io-internal-pullups-disable;
+ idle-disconnect;
+ };
+
+ target-port@2 {
+ compatible = "i3c-hub-smbus";
+ reg = <2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clock-frequency = <100000>;
+ };
+
+ target-port@3 {
+ compatible = "i3c-hub-smbus";
+ reg = <3>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clock-frequency = <400000>;
+ };
+ };
+ };
+...
--
2.49.0.906.g1f30a19c02-goog