From: Rob Herring <robh@kernel.org>
To: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
Nishanth Menon <nm@ti.com>,
Bjorn Andersson <andersson@kernel.org>
Subject: Re: [PATCH] dt-bindings: examples: Add GPIO hogs and variable-lists
Date: Thu, 26 Sep 2024 17:37:18 -0500 [thread overview]
Message-ID: <20240926223718.GA3116989-robh@kernel.org> (raw)
In-Reply-To: <20240926134218.20863-1-krzysztof.kozlowski@linaro.org>
On Thu, Sep 26, 2024 at 03:42:18PM +0200, Krzysztof Kozlowski wrote:
> Same Devicetree binding can be expressed multiple ways thus no wonder
> we have multiple variants of similar concept. All such code could be
> cleaned up, but even then new contributor might not be able to find
> good, existing binding solving their case.
>
> Add subdirectory with two Devicetree schema examples (GPIO hog and
> variable lists like clocks), hoping it will grow with reference-designs.
> All these bindings use valid compatibles, although with "test" vendor
> prefix, so they will be validated by DT schema.
>
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
>
> ---
>
> If approach is accepted, I will come with more ideas, as commented
> during LPC DT BoF to creates examples based on review.
>
> Cc: Nishanth Menon <nm@ti.com>
> Cc: Bjorn Andersson <andersson@kernel.org>
> ---
> .../devicetree/bindings/example-schema.yaml | 2 +
> .../examples/gpio-controller-and-hogs.yaml | 72 ++++++++++++
> .../multiple-variants-and-variable-lists.yaml | 110 ++++++++++++++++++
> .../devicetree/bindings/writing-schema.rst | 6 +-
> 4 files changed, 189 insertions(+), 1 deletion(-)
> create mode 100644 Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml
> create mode 100644 Documentation/devicetree/bindings/examples/multiple-variants-and-variable-lists.yaml
>
> diff --git a/Documentation/devicetree/bindings/example-schema.yaml b/Documentation/devicetree/bindings/example-schema.yaml
> index a41f9b9a196b..0aece1823fde 100644
> --- a/Documentation/devicetree/bindings/example-schema.yaml
> +++ b/Documentation/devicetree/bindings/example-schema.yaml
> @@ -25,6 +25,8 @@ description: |
> indentation less than the first line of the literal block. Lines also cannot
> begin with a tab character.
>
> + See also examples/ subdirectory for more detailed code snippets.
> +
> select: false
> # 'select' is a schema applied to a DT node to determine if this binding
> # schema should be applied to the node. It is optional and by default the
> diff --git a/Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml b/Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml
> new file mode 100644
> index 000000000000..597a847daa12
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/examples/gpio-controller-and-hogs.yaml
> @@ -0,0 +1,72 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/examples/gpio-controller-and-hogs.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: An Example GPIO Controller with Hogs
> +
> +maintainers:
> + - Rob Herring <robh@kernel.org>
> + - Krzysztof Kozlowski <krzk@kernel.org>
> + - Conor Dooley <conor@kernel.org>
> +
> +properties:
> + compatible:
> + const: test,gpio-controller-and-hogs
> +
> + gpio-controller: true
> +
> + "#gpio-cells":
> + const: 2
> +
> + gpio-line-names:
> + minItems: 1
> + maxItems: 32
> +
> + gpio-ranges:
> + minItems: 1
> + maxItems: 16
> +
> + # Not every GPIO controller is an interrupt-controller
> + interrupt-controller: true
> +
> + "#interrupt-cells":
> + const: 2
> +
> +patternProperties:
> + "-hog(-[0-9]+)?$":
> + type: object
> + required:
> + - gpio-hog
The best way to ensure this is done right is eliminate the need rather
than adding examples to be ignored.
I think we need to make gpio provider bindings reference gpio.yaml and
then handle hogs there. Generally, the pattern is that providers which
just list properties don't have a $ref to the provider schema and are
always applied. Schemas that have child nodes like bus schemas are
referenced by the specific controller schemas. GPIO started out as the
former, but the addition of hogs made it more like the latter. That of
course means that every GPIO provider can have hogs, but I think that's
the right answer even though I'd really prefer no hogs at all.
Always applying schemas like gpio.yaml has some benefits over relying
on applying it via $ref, but that's diminished once everything has a
schema. Of course, we can do both at the expense of applying the schema
twice.
Rob
next prev parent reply other threads:[~2024-09-26 22:37 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-26 13:42 [PATCH] dt-bindings: examples: Add GPIO hogs and variable-lists Krzysztof Kozlowski
2024-09-26 22:37 ` Rob Herring [this message]
2024-10-10 6:08 ` Krzysztof Kozlowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240926223718.GA3116989-robh@kernel.org \
--to=robh@kernel.org \
--cc=andersson@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=krzk+dt@kernel.org \
--cc=krzysztof.kozlowski@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nm@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).