Re: [PATCH v3 1/2] dt-bindings: i2c-mux: Add property for settle time
From: Rob Herring
Date: Tue Nov 02 2021 - 14:37:34 EST
On Mon, Nov 01, 2021 at 10:32:01PM +0100, Horatiu Vultur wrote:
> The 11/01/2021 15:32, Peter Rosin wrote:
>
> Hi Peter,
>
> >
> > On 2021-11-01 13:25, Horatiu Vultur wrote:
> > > 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@xxxxxxxxxxxxx>
> > > ---
> > > 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.
> >
> > > +
> > > 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.
> + - '#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.
Rob