Thread (9 messages) 9 messages, 3 authors, 2021-11-03

Re: [PATCH v3 1/2] dt-bindings: i2c-mux: Add property for settle time

From: Horatiu Vultur <horatiu.vultur@microchip.com>
Date: 2021-11-02 22:26:37
Also in: linux-i2c, lkml

The 11/02/2021 13:37, Rob Herring wrote:

Hi Rob,
On Mon, Nov 01, 2021 at 10:32:01PM +0100, Horatiu Vultur wrote:
quoted
The 11/01/2021 15:32, Peter Rosin wrote:

Hi Peter,
quoted
On 2021-11-01 13:25, Horatiu Vultur wrote:
quoted
Some HW requires some time for the signals to settle after the muxing is
changed. Allow this time to be specified in device tree.

Signed-off-by: Horatiu Vultur <horatiu.vultur@microchip.com>
---
 Documentation/devicetree/bindings/i2c/i2c-mux.yaml | 6 ++++++
 1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux.yaml b/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
index 24cac36037f5..4628ff6340c1 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
+++ b/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
@@ -29,6 +29,12 @@ properties:
   '#size-cells':
     const: 0

+  settle-time-us:
+    default: 0
+    description:
+      The time required for the signals to settle. Currently only the
+      i2c-mux-gpmux driver supports this optional binding.
The information about how i2c-mux-gpmux is special is bound to go stale,
and I don't think we should mention such specific details in the binding.
What I meant was a generic warnings about optional bindings perhaps not
being supported by all drivers, along the lines of this from i2c.txt:

"These properties may not be supported by all drivers. However, if a driver
 wants to support one of the below features, it should adapt these bindings."

However, I now notice that this sentence makes no sense. It looks like it
should be s/adapt/adopt/.

And, in the i2c-mux.yaml case it can simply say "Optional properties"
instead of "These properites" (which refers to a subset of properties
immediately below the text) since with a yaml binding it is always
clear which properties are optional and which are required. Lastly, I
guess this warning belongs in the description.
quoted
+
 patternProperties:
   '^i2c@[0-9a-f]+$':
     $ref: /schemas/i2c/i2c-controller.yaml
Since this is the first optional property, you now need to specify what
properties are required, which is everything but settle-time-us. If you
don't, all properties are required. Which is not what we want...

Something like this should do it, I think:

required:
  - compatible
  - '#address-cells'
  - '#size-cells'
Thanks for a detail explanation but I am still struggling with these
bindings. Were you thinking to have something like this?

---
diff --git a/Documentation/devicetree/bindings/i2c/i2c-mux.yaml b/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
index 24cac36037f5..c9fde1bb0fea 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
+++ b/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
@@ -19,6 +19,9 @@ description: |+
   populating the i2c child busses.  If an 'i2c-mux' subnode is present, only
   subnodes of this will be considered as i2c child busses.

+  Optional properties may not be supported by all drivers. However, if a driver
+  wants to support one of the below features, it should adopt these bindings.
+
 properties:
   $nodename:
     pattern: '^(i2c-?)?mux'
@@ -29,6 +32,11 @@ properties:
   '#size-cells':
     const: 0

+  settle-time-us:
+    default: 0
+    description:
+      The time required for the signals to settle.
+
 patternProperties:
   '^i2c@[0-9a-f]+$':
     $ref: /schemas/i2c/i2c-controller.yaml
@@ -41,6 +49,11 @@ patternProperties:

 additionalProperties: true

+required:
+  - compatible
compatible should not be required here.
quoted
+  - '#address-cells'
+  - '#size-cells'
+
 examples:
   - |
     /*
---

If I have this then my problem is with the required properties because then I
start to get new warnings once I run:

make ARCH=arm CROSS_COMPILE=arm-linux- dtbs_check DT_SCHEMA_FILES=Documentation/devicetree/bindings/i2c/i2c-mux.yaml

For example, one of new the warnings is this:

/home/hvultur/linux/arch/arm/boot/dts/am335x-icev2.dt.yaml: mux-mii-hog: 'compatible' is a required property
      From schema: /home/hvultur/linux/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
/home/hvultur/linux/arch/arm/boot/dts/am335x-icev2.dt.yaml: mux-mii-hog: '#address-cells' is a required property
      From schema: /home/hvultur/linux/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
/home/hvultur/linux/arch/arm/boot/dts/am335x-icev2.dt.yaml: mux-mii-hog: '#size-cells' is a required property
      From schema: /home/hvultur/linux/Documentation/devicetree/bindings/i2c/i2c-mux.yaml
This is because of the $nodename pattern being pretty lax and matches
on mux-mii-hog by mistake. We have 2 options. Change the nodename
pattern to '^(i2c-?)?mux(@.*)?$' or add 'select: false'. The former
would still match on 'mux' or 'mux@.*' which might still have problems.
For the latter, we just need to make sure all the i2c-mux schemas have a
$ref to this schema. Also, with that change we'd stop checking 'i2c-mux'
nodes that don't yet have a specific schema. That said, I do lean toward
the latter option.
From what I can see there are only two i2c-mux schemas and both of them
have a $ref to this schema [1][2]

[1] https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/i2c/i2c-mux-gpmux.yaml#L33
[2] https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/i2c/i2c-mux-pca954x.yaml#L16
Rob
-- 
/Horatiu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help