diff mbox series

[v3] dt-bindings: pinctrl: Convert Amlogic Meson pinctrl binding

Message ID 285b7b4b-4fd4-be5f-266c-96b1ee6f4cbf@gmail.com (mailing list archive)
State Superseded
Headers show
Series [v3] dt-bindings: pinctrl: Convert Amlogic Meson pinctrl binding | expand

Commit Message

Heiner Kallweit Jan. 30, 2023, 9 p.m. UTC
Convert Amlogic Meson pinctrl binding to yaml.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
v2:
- consider that more than one compatible can be set
- remove bus part from example
v3:
- remove minItem/maxItem properties for compatible
---
 .../pinctrl/amlogic,meson-pinctrl.yaml        | 122 ++++++++++++++++++
 .../bindings/pinctrl/meson,pinctrl.txt        |  94 --------------
 2 files changed, 122 insertions(+), 94 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
 delete mode 100644 Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt

Comments

Rob Herring Feb. 1, 2023, 2:06 a.m. UTC | #1
On Mon, Jan 30, 2023 at 10:00:24PM +0100, Heiner Kallweit wrote:
> Convert Amlogic Meson pinctrl binding to yaml.
> 
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
> v2:
> - consider that more than one compatible can be set
> - remove bus part from example
> v3:
> - remove minItem/maxItem properties for compatible
> ---
>  .../pinctrl/amlogic,meson-pinctrl.yaml        | 122 ++++++++++++++++++
>  .../bindings/pinctrl/meson,pinctrl.txt        |  94 --------------
>  2 files changed, 122 insertions(+), 94 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
>  delete mode 100644 Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt
> 
> diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
> new file mode 100644
> index 000000000..7aaae606b
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
> @@ -0,0 +1,122 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/pinctrl/amlogic,meson-pinctrl.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Amlogic Meson pinmux controller
> +
> +maintainers:
> +  - Neil Armstrong <neil.armstrong@linaro.org>
> +
> +allOf:
> +  - $ref: pinctrl.yaml#
> +
> +properties:
> +  compatible:
> +    oneOf:
> +      - items:
> +          - enum:
> +              - amlogic,meson8-cbus-pinctrl
> +              - amlogic,meson8b-cbus-pinctrl
> +              - amlogic,meson8m2-cbus-pinctrl
> +              - amlogic,meson8-aobus-pinctrl
> +              - amlogic,meson8b-aobus-pinctrl
> +              - amlogic,meson8m2-aobus-pinctrl
> +              - amlogic,meson-gxbb-periphs-pinctrl
> +              - amlogic,meson-gxbb-aobus-pinctrl
> +              - amlogic,meson-gxl-periphs-pinctrl
> +              - amlogic,meson-gxl-aobus-pinctrl
> +              - amlogic,meson-axg-periphs-pinctrl
> +              - amlogic,meson-axg-aobus-pinctrl
> +              - amlogic,meson-g12a-periphs-pinctrl
> +              - amlogic,meson-g12a-aobus-pinctrl
> +              - amlogic,meson-a1-periphs-pinctrl
> +              - amlogic,meson-s4-periphs-pinctrl
> +      - items:
> +          - const: amlogic,meson8m2-aobus-pinctrl
> +          - const: amlogic,meson8-aobus-pinctrl
> +      - items:
> +          - const: amlogic,meson8m2-cbus-pinctrl
> +          - const: amlogic,meson8-cbus-pinctrl

Again, can't have both with and without the fallback allowed.

> +
> +  ranges: true
> +
> +  "#address-cells":
> +    enum: [1, 2]
> +
> +  "#size-cells":
> +    enum: [1, 2]
> +
> +required:
> +  - compatible
> +  - ranges
> +  - "#address-cells"
> +  - "#size-cells"
> +
> +additionalProperties:
> +  anyOf:

Don't need anyOf.

> +    - type: object
> +      allOf:
> +        - $ref: pincfg-node.yaml#
> +        - $ref: pinmux-node.yaml#
> +
> +patternProperties:
> +  "^bank@[0-9]$":

Unit addresses are hex.

> +    type: object
> +    properties:
> +      reg:
> +        minItems: 5
> +        maxItems: 5
> +
> +      reg-names:
> +        items:
> +          - const: gpio
> +          - const: pull
> +          - const: pull-enable
> +          - const: mux
> +          - const: ds
> +
> +      gpio-controller: true
> +
> +      "#gpio-cells":
> +        const: 2
> +
> +      gpio-ranges:
> +        $ref: /schemas/types.yaml#/definitions/phandle

Wrong type and gpio-ranges already has a type.

> +
> +    required:
> +      - reg
> +      - reg-names
> +      - gpio-controller
> +      - "#gpio-cells"
> +      - gpio-ranges
> +
> +examples:
> +  - |
> +    pinctrl {
> +      compatible = "amlogic,meson-g12a-periphs-pinctrl";
> +      #address-cells = <1>;
> +      #size-cells = <1>;
> +      ranges;
> +
> +      bank@40 {
> +        reg = <0x0 0x40  0x0 0x4c>,
> +              <0x0 0xe8  0x0 0x18>,
> +              <0x0 0x120 0x0 0x18>,
> +              <0x0 0x2c0 0x0 0x40>,
> +              <0x0 0x340 0x0 0x1c>;
> +        reg-names = "gpio", "pull", "pull-enable", "mux", "ds";
> +        gpio-controller;
> +        #gpio-cells = <2>;
> +        gpio-ranges = <&periphs_pinctrl 0 0 86>;
> +      };
> +
> +      cec_ao_a_h_pins: cec_ao_a_h {
> +        mux {
> +          groups = "cec_ao_a_h";
> +          function = "cec_ao_a_h";
> +          bias-disable;
> +        };
> +      };
> +    };
Neil Armstrong Feb. 1, 2023, 10:56 a.m. UTC | #2
Hi Heiner,

On 30/01/2023 22:00, Heiner Kallweit wrote:
> Convert Amlogic Meson pinctrl binding to yaml.
> 
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
> v2:
> - consider that more than one compatible can be set
> - remove bus part from example
> v3:
> - remove minItem/maxItem properties for compatible
> ---
>   .../pinctrl/amlogic,meson-pinctrl.yaml        | 122 ++++++++++++++++++
>   .../bindings/pinctrl/meson,pinctrl.txt        |  94 --------------
>   2 files changed, 122 insertions(+), 94 deletions(-)
>   create mode 100644 Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
>   delete mode 100644 Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt
> 

<snip>

Please send new versions as separate threads, or keep the same thread structure othwerwise
it highly confuses humans & b4 when applying the patches...

Assuming new revision: v2 ([PATCH v2] dt-bindings: pwm: Convert Amlogic Meson PWM binding)
Assuming new revision: v4 ([PATCH v3] dt-bindings: pinctrl: Convert Amlogic Meson pinctrl binding)
Assuming new revision: v5 ([PATCH v2] dt-bindings: interrupt-controller: Convert Amlogic Meson GPIO interrupt controller binding)
Assuming new revision: v6 ([PATCH v3] dt-bindings: interrupt-controller: Convert Amlogic Meson GPIO interrupt controller binding)
Assuming new revision: v7 ([PATCH v2] dt-bindings: pinctrl: Convert Amlogic Meson pinctrl binding)

Thanks,
Neil
Heiner Kallweit Feb. 1, 2023, 10:13 p.m. UTC | #3
On 01.02.2023 03:06, Rob Herring wrote:
> On Mon, Jan 30, 2023 at 10:00:24PM +0100, Heiner Kallweit wrote:
>> Convert Amlogic Meson pinctrl binding to yaml.
>>
>> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
>> ---
>> v2:
>> - consider that more than one compatible can be set
>> - remove bus part from example
>> v3:
>> - remove minItem/maxItem properties for compatible
>> ---
>>  .../pinctrl/amlogic,meson-pinctrl.yaml        | 122 ++++++++++++++++++
>>  .../bindings/pinctrl/meson,pinctrl.txt        |  94 --------------
>>  2 files changed, 122 insertions(+), 94 deletions(-)
>>  create mode 100644 Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
>>  delete mode 100644 Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt
>>
>> diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
>> new file mode 100644
>> index 000000000..7aaae606b
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
>> @@ -0,0 +1,122 @@
>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/pinctrl/amlogic,meson-pinctrl.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Amlogic Meson pinmux controller
>> +
>> +maintainers:
>> +  - Neil Armstrong <neil.armstrong@linaro.org>
>> +
>> +allOf:
>> +  - $ref: pinctrl.yaml#
>> +
>> +properties:
>> +  compatible:
>> +    oneOf:
>> +      - items:
>> +          - enum:
>> +              - amlogic,meson8-cbus-pinctrl
>> +              - amlogic,meson8b-cbus-pinctrl
>> +              - amlogic,meson8m2-cbus-pinctrl
>> +              - amlogic,meson8-aobus-pinctrl
>> +              - amlogic,meson8b-aobus-pinctrl
>> +              - amlogic,meson8m2-aobus-pinctrl
>> +              - amlogic,meson-gxbb-periphs-pinctrl
>> +              - amlogic,meson-gxbb-aobus-pinctrl
>> +              - amlogic,meson-gxl-periphs-pinctrl
>> +              - amlogic,meson-gxl-aobus-pinctrl
>> +              - amlogic,meson-axg-periphs-pinctrl
>> +              - amlogic,meson-axg-aobus-pinctrl
>> +              - amlogic,meson-g12a-periphs-pinctrl
>> +              - amlogic,meson-g12a-aobus-pinctrl
>> +              - amlogic,meson-a1-periphs-pinctrl
>> +              - amlogic,meson-s4-periphs-pinctrl
>> +      - items:
>> +          - const: amlogic,meson8m2-aobus-pinctrl
>> +          - const: amlogic,meson8-aobus-pinctrl
>> +      - items:
>> +          - const: amlogic,meson8m2-cbus-pinctrl
>> +          - const: amlogic,meson8-cbus-pinctrl
> 
> Again, can't have both with and without the fallback allowed.
> 
Hi Martin,

meson8m2 is the only chip version having a fallback for the
pinctrl compatible. Is this fallback really needed?
Looking at the driver it seems that both compatibles
are handled identically.
Martin Blumenstingl Feb. 4, 2023, 10:56 p.m. UTC | #4
Hi Heiner,

On Wed, Feb 1, 2023 at 11:13 PM Heiner Kallweit <hkallweit1@gmail.com> wrote:
[...]
> >> +      - items:
> >> +          - const: amlogic,meson8m2-aobus-pinctrl
> >> +          - const: amlogic,meson8-aobus-pinctrl
> >> +      - items:
> >> +          - const: amlogic,meson8m2-cbus-pinctrl
> >> +          - const: amlogic,meson8-cbus-pinctrl
> >
> > Again, can't have both with and without the fallback allowed.
> >
> Hi Martin,
>
> meson8m2 is the only chip version having a fallback for the
> pinctrl compatible. Is this fallback really needed?
> Looking at the driver it seems that both compatibles
> are handled identically.
Back in the day we decided to duplicate the Meson8 driver code just to
add four new pin functions that are added by the Meson8m2 SoC
generation:
"eth_rxd2", "eth_rxd3", "eth_txd2", "eth_txd3"

The compatible string was defined with a similar approach: since
Meson8m2 just adds a few bits to the Meson8 pin controller it's
backwards compatible.

If the fallback has to be removed then I'm okay with that but I would
like to understand it first.
So far I thought that Rob basically asked to remove the following two
compatible strings from the enum (as they're listed separately with
their fallbacks):
- amlogic,meson8m2-cbus-pinctrl
- amlogic,meson8m2-aobus-pinctrl


Best regards,
Martin
Heiner Kallweit Feb. 5, 2023, 12:05 a.m. UTC | #5
On 04.02.2023 23:56, Martin Blumenstingl wrote:
> Hi Heiner,
> 
> On Wed, Feb 1, 2023 at 11:13 PM Heiner Kallweit <hkallweit1@gmail.com> wrote:
> [...]
>>>> +      - items:
>>>> +          - const: amlogic,meson8m2-aobus-pinctrl
>>>> +          - const: amlogic,meson8-aobus-pinctrl
>>>> +      - items:
>>>> +          - const: amlogic,meson8m2-cbus-pinctrl
>>>> +          - const: amlogic,meson8-cbus-pinctrl
>>>
>>> Again, can't have both with and without the fallback allowed.
>>>
>> Hi Martin,
>>
>> meson8m2 is the only chip version having a fallback for the
>> pinctrl compatible. Is this fallback really needed?
>> Looking at the driver it seems that both compatibles
>> are handled identically.
> Back in the day we decided to duplicate the Meson8 driver code just to
> add four new pin functions that are added by the Meson8m2 SoC
> generation:
> "eth_rxd2", "eth_rxd3", "eth_txd2", "eth_txd3"
> 
> The compatible string was defined with a similar approach: since
> Meson8m2 just adds a few bits to the Meson8 pin controller it's
> backwards compatible.
> 
> If the fallback has to be removed then I'm okay with that but I would
> like to understand it first.
> So far I thought that Rob basically asked to remove the following two
> compatible strings from the enum (as they're listed separately with
> their fallbacks):
> - amlogic,meson8m2-cbus-pinctrl
> - amlogic,meson8m2-aobus-pinctrl
> 
Right, this should be sufficient. There's no place where the 8m2 pinctrl
compatibles are used w/o fallback.

Then the hopefully final version of the binding is almost ready.
I'm just still checking whether there's any way in yaml to specify
a reg-names list with mandatory and optional names. Doesn't seem so.

> 
> Best regards,
> Martin

Heiner
Neil Armstrong Feb. 5, 2023, 7:57 a.m. UTC | #6
> Le 5 févr. 2023 à 01:05, Heiner Kallweit <hkallweit1@gmail.com> a écrit :
> 
> On 04.02.2023 23:56, Martin Blumenstingl wrote:
>> Hi Heiner,
>> 
>> On Wed, Feb 1, 2023 at 11:13 PM Heiner Kallweit <hkallweit1@gmail.com> wrote:
>> [...]
>>>>> +      - items:
>>>>> +          - const: amlogic,meson8m2-aobus-pinctrl
>>>>> +          - const: amlogic,meson8-aobus-pinctrl
>>>>> +      - items:
>>>>> +          - const: amlogic,meson8m2-cbus-pinctrl
>>>>> +          - const: amlogic,meson8-cbus-pinctrl
>>>> 
>>>> Again, can't have both with and without the fallback allowed.
>>>> 
>>> Hi Martin,
>>> 
>>> meson8m2 is the only chip version having a fallback for the
>>> pinctrl compatible. Is this fallback really needed?
>>> Looking at the driver it seems that both compatibles
>>> are handled identically.
>> Back in the day we decided to duplicate the Meson8 driver code just to
>> add four new pin functions that are added by the Meson8m2 SoC
>> generation:
>> "eth_rxd2", "eth_rxd3", "eth_txd2", "eth_txd3"
>> 
>> The compatible string was defined with a similar approach: since
>> Meson8m2 just adds a few bits to the Meson8 pin controller it's
>> backwards compatible.
>> 
>> If the fallback has to be removed then I'm okay with that but I would
>> like to understand it first.
>> So far I thought that Rob basically asked to remove the following two
>> compatible strings from the enum (as they're listed separately with
>> their fallbacks):
>> - amlogic,meson8m2-cbus-pinctrl
>> - amlogic,meson8m2-aobus-pinctrl
>> 
> Right, this should be sufficient. There's no place where the 8m2 pinctrl
> compatibles are used w/o fallback.
> 
> Then the hopefully final version of the binding is almost ready.
> I'm just still checking whether there's any way in yaml to specify
> a reg-names list with mandatory and optional names. Doesn't seem so.

It’s possible with minItems/maxItems and allOf:if/else to specify different min/max for each compatible

Neil

> 
>> 
>> Best regards,
>> Martin
> 
> Heiner
Heiner Kallweit Feb. 5, 2023, 4:54 p.m. UTC | #7
On 05.02.2023 08:57, Neil Armstrong wrote:
> 
>> Le 5 févr. 2023 à 01:05, Heiner Kallweit <hkallweit1@gmail.com> a écrit :
>>
>> On 04.02.2023 23:56, Martin Blumenstingl wrote:
>>> Hi Heiner,
>>>
>>> On Wed, Feb 1, 2023 at 11:13 PM Heiner Kallweit <hkallweit1@gmail.com> wrote:
>>> [...]
>>>>>> +      - items:
>>>>>> +          - const: amlogic,meson8m2-aobus-pinctrl
>>>>>> +          - const: amlogic,meson8-aobus-pinctrl
>>>>>> +      - items:
>>>>>> +          - const: amlogic,meson8m2-cbus-pinctrl
>>>>>> +          - const: amlogic,meson8-cbus-pinctrl
>>>>>
>>>>> Again, can't have both with and without the fallback allowed.
>>>>>
>>>> Hi Martin,
>>>>
>>>> meson8m2 is the only chip version having a fallback for the
>>>> pinctrl compatible. Is this fallback really needed?
>>>> Looking at the driver it seems that both compatibles
>>>> are handled identically.
>>> Back in the day we decided to duplicate the Meson8 driver code just to
>>> add four new pin functions that are added by the Meson8m2 SoC
>>> generation:
>>> "eth_rxd2", "eth_rxd3", "eth_txd2", "eth_txd3"
>>>
>>> The compatible string was defined with a similar approach: since
>>> Meson8m2 just adds a few bits to the Meson8 pin controller it's
>>> backwards compatible.
>>>
>>> If the fallback has to be removed then I'm okay with that but I would
>>> like to understand it first.
>>> So far I thought that Rob basically asked to remove the following two
>>> compatible strings from the enum (as they're listed separately with
>>> their fallbacks):
>>> - amlogic,meson8m2-cbus-pinctrl
>>> - amlogic,meson8m2-aobus-pinctrl
>>>
>> Right, this should be sufficient. There's no place where the 8m2 pinctrl
>> compatibles are used w/o fallback.
>>
>> Then the hopefully final version of the binding is almost ready.
>> I'm just still checking whether there's any way in yaml to specify
>> a reg-names list with mandatory and optional names. Doesn't seem so.
> 
> It’s possible with minItems/maxItems and allOf:if/else to specify different min/max for each compatible
> 
I have a problem here because reg-names is in the gpio-controller child node and compatible is in the
pinctrl parent node. An expression under patternProperties doesn't see the compatible property of the
parent node. It would have been better to place regs/reg-names in the pinctrl node.
Not sure how to deal with this. The easiest would be to just have minItems:2 and maxItems:5 as criteria
for regs and reg-names.
Neil Armstrong Feb. 6, 2023, 9:30 a.m. UTC | #8
On 05/02/2023 17:54, Heiner Kallweit wrote:
> On 05.02.2023 08:57, Neil Armstrong wrote:
>>
>>> Le 5 févr. 2023 à 01:05, Heiner Kallweit <hkallweit1@gmail.com> a écrit :
>>>
>>> On 04.02.2023 23:56, Martin Blumenstingl wrote:
>>>> Hi Heiner,
>>>>
>>>> On Wed, Feb 1, 2023 at 11:13 PM Heiner Kallweit <hkallweit1@gmail.com> wrote:
>>>> [...]
>>>>>>> +      - items:
>>>>>>> +          - const: amlogic,meson8m2-aobus-pinctrl
>>>>>>> +          - const: amlogic,meson8-aobus-pinctrl
>>>>>>> +      - items:
>>>>>>> +          - const: amlogic,meson8m2-cbus-pinctrl
>>>>>>> +          - const: amlogic,meson8-cbus-pinctrl
>>>>>>
>>>>>> Again, can't have both with and without the fallback allowed.
>>>>>>
>>>>> Hi Martin,
>>>>>
>>>>> meson8m2 is the only chip version having a fallback for the
>>>>> pinctrl compatible. Is this fallback really needed?
>>>>> Looking at the driver it seems that both compatibles
>>>>> are handled identically.
>>>> Back in the day we decided to duplicate the Meson8 driver code just to
>>>> add four new pin functions that are added by the Meson8m2 SoC
>>>> generation:
>>>> "eth_rxd2", "eth_rxd3", "eth_txd2", "eth_txd3"
>>>>
>>>> The compatible string was defined with a similar approach: since
>>>> Meson8m2 just adds a few bits to the Meson8 pin controller it's
>>>> backwards compatible.
>>>>
>>>> If the fallback has to be removed then I'm okay with that but I would
>>>> like to understand it first.
>>>> So far I thought that Rob basically asked to remove the following two
>>>> compatible strings from the enum (as they're listed separately with
>>>> their fallbacks):
>>>> - amlogic,meson8m2-cbus-pinctrl
>>>> - amlogic,meson8m2-aobus-pinctrl
>>>>
>>> Right, this should be sufficient. There's no place where the 8m2 pinctrl
>>> compatibles are used w/o fallback.
>>>
>>> Then the hopefully final version of the binding is almost ready.
>>> I'm just still checking whether there's any way in yaml to specify
>>> a reg-names list with mandatory and optional names. Doesn't seem so.
>>
>> It’s possible with minItems/maxItems and allOf:if/else to specify different min/max for each compatible
>>
> I have a problem here because reg-names is in the gpio-controller child node and compatible is in the
> pinctrl parent node. An expression under patternProperties doesn't see the compatible property of the
> parent node. It would have been better to place regs/reg-names in the pinctrl node.
> Not sure how to deal with this. The easiest would be to just have minItems:2 and maxItems:5 as criteria
> for regs and reg-names.
> 

In this case, either you add 2 yaml bindings with perhaps a common yaml using allOf:ref or
you add some complex matching but I think you should split it in 3 files like:


================================================================
amlogic,meson-pinctrl-common.yaml:
...

properties:
   ranges: true

   "#address-cells":
     enum: [1, 2]

   "#size-cells":
     enum: [1, 2]

patternProperties:
   "-state$":
     allOf:
       - $ref: pincfg-node.yaml#
       - $ref: pinmux-node.yaml#

allOf:
   - $ref: pinctrl.yaml#

required:
   - compatible
   - ranges
   - "#address-cells"
   - "#size-cells"

additionalProperties: true

$defs:
   meson-gpio:
     type: object
     properties:
       gpio-controller: true

       "#gpio-cells":
         const: 2

       gpio-ranges:
         $ref: /schemas/types.yaml#/definitions/phandle

       required:
         - gpio-controller
         - "#gpio-cells"
         - gpio-ranges
...

================================================================
amlogic,meson8-cbus-pinctrl.yaml:

...
$ref: amlogic,meson-pinctrl-common.yaml#

properties:
   compatible:
     oneOf:
       - items:
           - enum:
               - amlogic,meson8-cbus-pinctrl
               - amlogic,meson8b-cbus-pinctrl
               - amlogic,meson8-aobus-pinctrl
               - amlogic,meson8b-aobus-pinctrl
       - items:
           - const: amlogic,meson8m2-aobus-pinctrl
           - const: amlogic,meson8-aobus-pinctrl
       - items:
           - const: amlogic,meson8m2-cbus-pinctrl
           - const: amlogic,meson8-cbus-pinctrl

required:
   - compatible

patternProperties:
   "^bank@[0-9]$":
     $ref: "#/$defs/meson-gpio"

     properties:
       reg:
         maxItems: 2

       reg-names:
         items:
           - const: gpio
           - const: pull

     required:
       - reg
       - reg-names
...

================================================================
amlogic,meson-gxbb-periphs-pinctrl.yaml:

...
$ref: amlogic,meson-pinctrl-common.yaml#

properties:
   compatible:
     items:
       - enum:
          - amlogic,meson-gxbb-periphs-pinctrl
          - amlogic,meson-gxbb-aobus-pinctrl
          - amlogic,meson-gxl-periphs-pinctrl
          - amlogic,meson-gxl-aobus-pinctrl
          - amlogic,meson-axg-periphs-pinctrl
          - amlogic,meson-axg-aobus-pinctrl
          - amlogic,meson-g12a-periphs-pinctrl
          - amlogic,meson-g12a-aobus-pinctrl
          - amlogic,meson-a1-periphs-pinctrl
          - amlogic,meson-s4-periphs-pinctrl

required:
   - compatible

patternProperties:
   "^bank@[0-9]$":
     $ref: "#/$defs/meson-gpio"

     properties:
       reg:
         minItems: 5

       reg-names:
         items:
           - const: gpio
           - const: pull
           - const: pull-enable
           - const: mux
           - const: ds

     required:
       - reg
       - reg-names
...
================================================================

You may even add a 4th file for G12/A1 is reg-names need a different count.

Neil
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
new file mode 100644
index 000000000..7aaae606b
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/amlogic,meson-pinctrl.yaml
@@ -0,0 +1,122 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/amlogic,meson-pinctrl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Amlogic Meson pinmux controller
+
+maintainers:
+  - Neil Armstrong <neil.armstrong@linaro.org>
+
+allOf:
+  - $ref: pinctrl.yaml#
+
+properties:
+  compatible:
+    oneOf:
+      - items:
+          - enum:
+              - amlogic,meson8-cbus-pinctrl
+              - amlogic,meson8b-cbus-pinctrl
+              - amlogic,meson8m2-cbus-pinctrl
+              - amlogic,meson8-aobus-pinctrl
+              - amlogic,meson8b-aobus-pinctrl
+              - amlogic,meson8m2-aobus-pinctrl
+              - amlogic,meson-gxbb-periphs-pinctrl
+              - amlogic,meson-gxbb-aobus-pinctrl
+              - amlogic,meson-gxl-periphs-pinctrl
+              - amlogic,meson-gxl-aobus-pinctrl
+              - amlogic,meson-axg-periphs-pinctrl
+              - amlogic,meson-axg-aobus-pinctrl
+              - amlogic,meson-g12a-periphs-pinctrl
+              - amlogic,meson-g12a-aobus-pinctrl
+              - amlogic,meson-a1-periphs-pinctrl
+              - amlogic,meson-s4-periphs-pinctrl
+      - items:
+          - const: amlogic,meson8m2-aobus-pinctrl
+          - const: amlogic,meson8-aobus-pinctrl
+      - items:
+          - const: amlogic,meson8m2-cbus-pinctrl
+          - const: amlogic,meson8-cbus-pinctrl
+
+  ranges: true
+
+  "#address-cells":
+    enum: [1, 2]
+
+  "#size-cells":
+    enum: [1, 2]
+
+required:
+  - compatible
+  - ranges
+  - "#address-cells"
+  - "#size-cells"
+
+additionalProperties:
+  anyOf:
+    - type: object
+      allOf:
+        - $ref: pincfg-node.yaml#
+        - $ref: pinmux-node.yaml#
+
+patternProperties:
+  "^bank@[0-9]$":
+    type: object
+    properties:
+      reg:
+        minItems: 5
+        maxItems: 5
+
+      reg-names:
+        items:
+          - const: gpio
+          - const: pull
+          - const: pull-enable
+          - const: mux
+          - const: ds
+
+      gpio-controller: true
+
+      "#gpio-cells":
+        const: 2
+
+      gpio-ranges:
+        $ref: /schemas/types.yaml#/definitions/phandle
+
+    required:
+      - reg
+      - reg-names
+      - gpio-controller
+      - "#gpio-cells"
+      - gpio-ranges
+
+examples:
+  - |
+    pinctrl {
+      compatible = "amlogic,meson-g12a-periphs-pinctrl";
+      #address-cells = <1>;
+      #size-cells = <1>;
+      ranges;
+
+      bank@40 {
+        reg = <0x0 0x40  0x0 0x4c>,
+              <0x0 0xe8  0x0 0x18>,
+              <0x0 0x120 0x0 0x18>,
+              <0x0 0x2c0 0x0 0x40>,
+              <0x0 0x340 0x0 0x1c>;
+        reg-names = "gpio", "pull", "pull-enable", "mux", "ds";
+        gpio-controller;
+        #gpio-cells = <2>;
+        gpio-ranges = <&periphs_pinctrl 0 0 86>;
+      };
+
+      cec_ao_a_h_pins: cec_ao_a_h {
+        mux {
+          groups = "cec_ao_a_h";
+          function = "cec_ao_a_h";
+          bias-disable;
+        };
+      };
+    };
diff --git a/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt
deleted file mode 100644
index 8146193bd..000000000
--- a/Documentation/devicetree/bindings/pinctrl/meson,pinctrl.txt
+++ /dev/null
@@ -1,94 +0,0 @@ 
-== Amlogic Meson pinmux controller ==
-
-Required properties for the root node:
- - compatible: one of "amlogic,meson8-cbus-pinctrl"
-		      "amlogic,meson8b-cbus-pinctrl"
-		      "amlogic,meson8m2-cbus-pinctrl"
-		      "amlogic,meson8-aobus-pinctrl"
-		      "amlogic,meson8b-aobus-pinctrl"
-		      "amlogic,meson8m2-aobus-pinctrl"
-		      "amlogic,meson-gxbb-periphs-pinctrl"
-		      "amlogic,meson-gxbb-aobus-pinctrl"
-		      "amlogic,meson-gxl-periphs-pinctrl"
-		      "amlogic,meson-gxl-aobus-pinctrl"
-		      "amlogic,meson-axg-periphs-pinctrl"
-		      "amlogic,meson-axg-aobus-pinctrl"
-		      "amlogic,meson-g12a-periphs-pinctrl"
-		      "amlogic,meson-g12a-aobus-pinctrl"
-		      "amlogic,meson-a1-periphs-pinctrl"
-		      "amlogic,meson-s4-periphs-pinctrl"
- - reg: address and size of registers controlling irq functionality
-
-=== GPIO sub-nodes ===
-
-The GPIO bank for the controller is represented as a sub-node and it acts as a
-GPIO controller.
-
-Required properties for sub-nodes are:
- - reg: should contain a list of address and size, one tuple for each entry
-   in reg-names.
- - reg-names: an array of strings describing the "reg" entries.
-   Must contain "mux" and "gpio".
-   May contain "pull", "pull-enable" and "ds" when appropriate.
- - gpio-controller: identifies the node as a gpio controller
- - #gpio-cells: must be 2
-
-=== Other sub-nodes ===
-
-Child nodes without the "gpio-controller" represent some desired
-configuration for a pin or a group. Those nodes can be pinmux nodes or
-configuration nodes.
-
-Required properties for pinmux nodes are:
- - groups: a list of pinmux groups. The list of all available groups
-   depends on the SoC and can be found in driver sources.
- - function: the name of a function to activate for the specified set
-   of groups. The list of all available functions depends on the SoC
-   and can be found in driver sources.
-
-Required properties for configuration nodes:
- - pins: a list of pin names
-
-Configuration nodes support the following generic properties, as
-described in file pinctrl-bindings.txt:
- - "bias-disable"
- - "bias-pull-up"
- - "bias-pull-down"
- - "output-enable"
- - "output-disable"
- - "output-low"
- - "output-high"
-
-Optional properties :
- - drive-strength-microamp: Drive strength for the specified pins in uA.
-			    This property is only valid for G12A and newer.
-
-=== Example ===
-
-	pinctrl: pinctrl@c1109880 {
-		compatible = "amlogic,meson8-cbus-pinctrl";
-		reg = <0xc1109880 0x10>;
-		#address-cells = <1>;
-		#size-cells = <1>;
-		ranges;
-
-		gpio: banks@c11080b0 {
-			reg = <0xc11080b0 0x28>,
-			      <0xc11080e8 0x18>,
-			      <0xc1108120 0x18>,
-			      <0xc1108030 0x30>;
-			reg-names = "mux", "pull", "pull-enable", "gpio";
-			gpio-controller;
-			#gpio-cells = <2>;
-               };
-
-		nand {
-			mux {
-				groups = "nand_io", "nand_io_ce0", "nand_io_ce1",
-					 "nand_io_rb0", "nand_ale", "nand_cle",
-					 "nand_wen_clk", "nand_ren_clk", "nand_dqs",
-					 "nand_ce2", "nand_ce3";
-				function = "nand";
-			};
-		};
-	};