[PATCH v4 2/3] dt-bindings: i2c: realtek,rtl9301-i2c: extend for RTL9310 support

Jonas Jelonek posted 3 patches 2 months, 1 week ago
There is a newer version of this series
[PATCH v4 2/3] dt-bindings: i2c: realtek,rtl9301-i2c: extend for RTL9310 support
Posted by Jonas Jelonek 2 months, 1 week ago
Add dt-bindings for RTL9310 series I2C controller.

Adjust the regex for child-node address to account for the fact that
RTL9310 supports 12 instead of only 8 SDA lines. Also, narrow this per
variant.

Add a vendor-specific property to explicitly specify the
Realtek-internal ID of the defined I2C controller/master. This is
required, in particular for RTL9310, to describe the correct I2C
master. Require this property for RTL9310.

Add compatibles for known SoC variants RTL9311, RTL9312 and RTL9313.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
---
 .../bindings/i2c/realtek,rtl9301-i2c.yaml     | 58 +++++++++++++++++--
 1 file changed, 53 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
index 69ac5db8b914..29676e99a8c3 100644
--- a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
+++ b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
@@ -10,9 +10,11 @@ maintainers:
   - Chris Packham <chris.packham@alliedtelesis.co.nz>
 
 description:
-  The RTL9300 SoC has two I2C controllers. Each of these has an SCL line (which
-  if not-used for SCL can be a GPIO). There are 8 common SDA lines that can be
-  assigned to either I2C controller.
+  The RTL9300 SoCs have two I2C controllers. Each of these has an SCL line
+  (which if not-used for SCL can be a GPIO). There are 8 common SDA lines
+  that can be assigned to either I2C controller.
+  The RTL9310 SoCs have equal capabilities but support 12 common SDA lines
+  which can be assigned to either I2C controller.
 
 properties:
   compatible:
@@ -23,7 +25,15 @@ properties:
               - realtek,rtl9302c-i2c
               - realtek,rtl9303-i2c
           - const: realtek,rtl9301-i2c
-      - const: realtek,rtl9301-i2c
+      - items:
+          - enum:
+              - realtek,rtl9311-i2c
+              - realtek,rtl9312-i2c
+              - realtek,rtl9313-i2c
+          - const: realtek,rtl9310-i2c
+      - enum:
+          - realtek,rtl9301-i2c
+          - realtek,rtl9310-i2c
 
   reg:
     items:
@@ -35,8 +45,15 @@ properties:
   "#size-cells":
     const: 0
 
+  realtek,mst-id:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Realtek-internal ID of the I2C controller/master.
+    minimum: 1
+    maximum: 2
+
 patternProperties:
-  '^i2c@[0-7]$':
+  '^i2c@([0-9]|1[0-1])$':
     $ref: /schemas/i2c/i2c-controller.yaml
     unevaluatedProperties: false
 
@@ -48,6 +65,25 @@ patternProperties:
     required:
       - reg
 
+
+allOf:
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: realtek,rtl9310-i2c
+    then:
+      required:
+        - realtek,mst-id
+  - if:
+      properties:
+        compatible:
+          contains:
+            const: realtek,rtl9301-i2c
+    then:
+      patternProperties:
+        '^i2c@([8-9]|1[0-1])$': false
+
 required:
   - compatible
   - reg
@@ -68,3 +104,15 @@ examples:
         #size-cells = <0>;
       };
     };
+  - |
+    i2c@100c {
+      compatible = "realtek,rtl9310-i2c";
+      reg = <0x100c 0x18>;
+      #address-cells = <1>;
+      #size-cells = <0>;
+      realtek,mst-id = <1>;
+
+      i2c@0 {
+        reg = <0>;
+      };
+    };
-- 
2.48.1
Re: [PATCH v4 2/3] dt-bindings: i2c: realtek,rtl9301-i2c: extend for RTL9310 support
Posted by Rob Herring 2 months ago
On Tue, Jul 29, 2025 at 07:51:44AM +0000, Jonas Jelonek wrote:
> Add dt-bindings for RTL9310 series I2C controller.
> 
> Adjust the regex for child-node address to account for the fact that
> RTL9310 supports 12 instead of only 8 SDA lines. Also, narrow this per
> variant.
> 
> Add a vendor-specific property to explicitly specify the
> Realtek-internal ID of the defined I2C controller/master. This is
> required, in particular for RTL9310, to describe the correct I2C
> master. Require this property for RTL9310.
> 
> Add compatibles for known SoC variants RTL9311, RTL9312 and RTL9313.
> 
> Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
> ---
>  .../bindings/i2c/realtek,rtl9301-i2c.yaml     | 58 +++++++++++++++++--
>  1 file changed, 53 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
> index 69ac5db8b914..29676e99a8c3 100644
> --- a/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
> +++ b/Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
> @@ -10,9 +10,11 @@ maintainers:
>    - Chris Packham <chris.packham@alliedtelesis.co.nz>
>  
>  description:
> -  The RTL9300 SoC has two I2C controllers. Each of these has an SCL line (which
> -  if not-used for SCL can be a GPIO). There are 8 common SDA lines that can be
> -  assigned to either I2C controller.
> +  The RTL9300 SoCs have two I2C controllers. Each of these has an SCL line
> +  (which if not-used for SCL can be a GPIO). There are 8 common SDA lines
> +  that can be assigned to either I2C controller.
> +  The RTL9310 SoCs have equal capabilities but support 12 common SDA lines
> +  which can be assigned to either I2C controller.
>  
>  properties:
>    compatible:
> @@ -23,7 +25,15 @@ properties:
>                - realtek,rtl9302c-i2c
>                - realtek,rtl9303-i2c
>            - const: realtek,rtl9301-i2c
> -      - const: realtek,rtl9301-i2c
> +      - items:
> +          - enum:
> +              - realtek,rtl9311-i2c
> +              - realtek,rtl9312-i2c
> +              - realtek,rtl9313-i2c
> +          - const: realtek,rtl9310-i2c
> +      - enum:
> +          - realtek,rtl9301-i2c
> +          - realtek,rtl9310-i2c
>  
>    reg:
>      items:
> @@ -35,8 +45,15 @@ properties:
>    "#size-cells":
>      const: 0
>  
> +  realtek,mst-id:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description:
> +      Realtek-internal ID of the I2C controller/master.
> +    minimum: 1
> +    maximum: 2

We normally try to avoid instance IDs. Why not just a property defining 
the SCL # to use.

> +
>  patternProperties:
> -  '^i2c@[0-7]$':
> +  '^i2c@([0-9]|1[0-1])$':

Unit-addresses are typically hex.

>      $ref: /schemas/i2c/i2c-controller.yaml
>      unevaluatedProperties: false
>  
> @@ -48,6 +65,25 @@ patternProperties:
>      required:
>        - reg
>  
> +
> +allOf:
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: realtek,rtl9310-i2c
> +    then:
> +      required:
> +        - realtek,mst-id
> +  - if:
> +      properties:
> +        compatible:
> +          contains:
> +            const: realtek,rtl9301-i2c
> +    then:
> +      patternProperties:
> +        '^i2c@([8-9]|1[0-1])$': false
> +
>  required:
>    - compatible
>    - reg
> @@ -68,3 +104,15 @@ examples:
>          #size-cells = <0>;
>        };
>      };
> +  - |
> +    i2c@100c {
> +      compatible = "realtek,rtl9310-i2c";
> +      reg = <0x100c 0x18>;
> +      #address-cells = <1>;
> +      #size-cells = <0>;
> +      realtek,mst-id = <1>;
> +
> +      i2c@0 {
> +        reg = <0>;
> +      };
> +    };

Is this really different enough to justify another example?
Re: [PATCH v4 2/3] dt-bindings: i2c: realtek,rtl9301-i2c: extend for RTL9310 support
Posted by Jonas Jelonek 2 months ago
Hi Rob,

On 31.07.2025 00:29, Rob Herring wrote:
> On Tue, Jul 29, 2025 at 07:51:44AM +0000, Jonas Jelonek wrote:
>>  
>>    reg:
>>      items:
>> @@ -35,8 +45,15 @@ properties:
>>    "#size-cells":
>>      const: 0
>>  
>> +  realtek,mst-id:
>> +    $ref: /schemas/types.yaml#/definitions/uint32
>> +    description:
>> +      Realtek-internal ID of the I2C controller/master.
>> +    minimum: 1
>> +    maximum: 2
> We normally try to avoid instance IDs. Why not just a property defining 
> the SCL # to use.
>

I argued with the following reasons to use the master id:
- Realtek mentions 'Master 1' and 'Master 2' a lot in their documentation while
   the SCL number is barely mentioned and probably also confusing in their
   docs [1]
- other specifics could be inferred from that master id, not only the SCL
   number. While this is not relevant yet, future SoC series might need this
   if support for them can be added in this driver

However, using `realtek,scl-num` would be perfectly fine for now if you'd
really like to avoid this master ID. Either way, this property has to match the
other settings anyway (i. e. unit address) to make this actually work.
The master ID only would have made this more flexible if not only the SCL
number is different, but this actually isn't relevant for RTL9300 and RTL9310.

>> +
>>  patternProperties:
>> -  '^i2c@[0-7]$':
>> +  '^i2c@([0-9]|1[0-1])$':
> Unit-addresses are typically hex.

Will fix that.

>>  required:
>>    - compatible
>>    - reg
>> @@ -68,3 +104,15 @@ examples:
>>          #size-cells = <0>;
>>        };
>>      };
>> +  - |
>> +    i2c@100c {
>> +      compatible = "realtek,rtl9310-i2c";
>> +      reg = <0x100c 0x18>;
>> +      #address-cells = <1>;
>> +      #size-cells = <0>;
>> +      realtek,mst-id = <1>;
>> +
>> +      i2c@0 {
>> +        reg = <0>;
>> +      };
>> +    };
> Is this really different enough to justify another example?

Probably not, would be only to showcase the subtle differences between
RTL9300 and RTL9310.
I just added it, temporarily with another unit address, to check with
dt_binding_check if this is working.


Best,
Jonas Jelonek