diff mbox series

dt-bindings: pinctrl: Convert stm32 pinctrl bindings to jason-schema

Message ID 1556876854-32441-1-git-send-email-alexandre.torgue@st.com (mailing list archive)
State New, archived
Headers show
Series dt-bindings: pinctrl: Convert stm32 pinctrl bindings to jason-schema | expand

Commit Message

Alexandre TORGUE May 3, 2019, 9:47 a.m. UTC
Convert the STM32 pinctrl binding to DT schema format using json-schema.

Signed-off-by: Alexandre Torgue <alexandre.torgue@st.com>
---

Hi,

First pacth to convert DT bindings file (here pinctrl STM32) to jsaon-schema
in order to take advantage of devicetree validation tool for STM32.

regards
Alex

Comments

Rob Herring May 8, 2019, 8:54 p.m. UTC | #1
What's jason-schema? ;)

On Fri, May 3, 2019 at 4:47 AM Alexandre Torgue <alexandre.torgue@st.com> wrote:
>
> Convert the STM32 pinctrl binding to DT schema format using json-schema.
>
> Signed-off-by: Alexandre Torgue <alexandre.torgue@st.com>
> ---
>
> Hi,
>
> First pacth to convert DT bindings file (here pinctrl STM32) to jsaon-schema
> in order to take advantage of devicetree validation tool for STM32.

> diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
> new file mode 100644
> index 0000000..fcceca0
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
> @@ -0,0 +1,271 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +# Copyright (C) STMicroelectronics 2019.
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: STM32 GPIO and Pin Mux/Config controller
> +
> +maintainers:
> +  - Alexandre TORGUE <alexandre.torgue@st.com>

nit: add a blank line

> +description: |
> +  STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware
> +  controller. It controls the input/output settings on the available pins and
> +  also provides ability to multiplex and configure the output of various
> +  on-chip controllers onto these pads.
> +
> +properties:
> +  compatible:
> +      items:

You can drop items since there is only 1.

> +        - enum:
> +          - st,stm32f429-pinctrl
> +          - st,stm32f469-pinctrl
> +          - st,stm32f746-pinctrl
> +          - st,stm32f769-pinctrl
> +          - st,stm32h743-pinctrl
> +          - st,stm32mp157-pinctrl
> +          - st,stm32mp157-z-pinctrl
> +
> +  '#address-cells':
> +    const: 1
> +  '#size-cells':
> +    const: 1
> +    description:
> +      Defines mapping between pin controller node (parent) to
> +      gpio-bank node (children).

Don't need description for common properties unless there's really
something binding specific to add. Same is true on a bunch of other
description entries.

> +
> +  ranges:
> +    description:
> +      Defines mapping between pin controller node (parent) to
> +      gpio-bank node (children).
> +  pins-are-numbered:
> +    description:
> +      Specify the subnodes are using numbered pinmux to
> +      specify pins.
> +  st,syscfg:

Needs to define the type (phandle-array).

> +    description: |
> +      Should be phandle/offset/mask:
> +        - The phandle to the syscon node which includes IRQ mux selection register.
> +        - The offset of the IRQ mux selection register
> +        - The field mask of IRQ mux, needed if different of 0xf.

This can be expressed as a constraint:

items:
  - items:
    - description: The phandle to the syscon node which includes IRQ
mux selection register.
    - description: The offset of the IRQ mux selection register
    - description: The field mask of IRQ mux, needed if different of 0xf.

Perhaps there are some constraints on the values of the cells.

> +
> +  hwlocks:
> +    description: Reference to a phandle of a hardware spinlock provider node.

No need for a description.

> +  st,package:
> +    description:
> +     Indicates the SOC package used.
> +     More details in include/dt-bindings/pinctrl/stm32-pinfunc.h
> +    allOf:
> +      - $ref: /schemas/types.yaml#/definitions/uint32
> +      - enum: [1, 2, 4, 8]
> +
> +patternProperties:
> +  '^gpio@[0-9a-z]*$':

Hex only: a-f

> +    properties:
> +      gpio-controller:
> +        description:
> +          Indicates this device is a GPIO controller.

No need to describe standard properties.

> +      '#gpio-cells':
> +        const: 2
> +        description: |
> +          The first cell is the pin number.
> +          The second one is the polarity
> +          * 0 for active high.
> +          * 1 for active low.

As long as this is the standard cell definition, no need to describe.

> +
> +      reg:
> +        description:
> +          The gpio address range, relative to the pinctrl range.

Need to say how many entries (maxItems), not what reg is.

> +      clocks:
> +        description:
> +          Clock that drives this bank.

ditto.

> +      st,bank-name:

type?

possible values or regex match?

> +        description:
> +          Should be a name string for this bank as specified in the datasheet.
> +      reset:

resets

How many items?

> +        description:
> +          Reference to the reset controller.
> +      gpio-ranges:
> +        description: |
> +          Define a dedicated mapping between a pin-controller and
> +          a gpio controller. Format is <&phandle a b c> with:
> +          -(phandle): phandle of pin-controller.
> +          -(a): gpio base offset in range.
> +          -(b): pin base offset in range.
> +          -(c): gpio count in range.

All common, so not needed here.

> +          This entry has to be used either if there are holes inside a bank:
> +          GPIOB0/B1/B2/B14/B15 (see example 2) or if banks are not contiguous:
> +          GPIOA/B/C/E...
> +          NOTE: If "gpio-ranges" is used for a gpio controller, all gpio-controller
> +          have to use a "gpio-ranges" entry.
> +          More details in Documentation/devicetree/bindings/gpio/gpio.txt.
> +
> +      ngpios:
> +        description:
> +          Number of available gpios in a bank.
> +        minimum: 1
> +        maximum: 16
> +
> +      st,bank-ioport:

type?

> +        description:
> +          Should correspond to the EXTI IOport selection (EXTI line used
> +          to select GPIOs as interrupts).
> +
> +    required:
> +      - gpio-controller
> +      - '#gpio-cells'
> +      - reg
> +      - clocks
> +      - st,bank-name
> +
> +  '-[0-9]*$':
> +    patternProperties:
> +      '^pins':
> +        description: |
> +          A pinctrl node should contain at least one subnode representing the
> +          pinctrl group available on the machine. Each subnode will list the
> +          pins it needs, and how they should be configured, with regard to muxer
> +          configuration, pullups, drive, output high/low and output speed.
> +        properties:
> +          pinmux:
> +            allOf:
> +              - $ref: "/schemas/types.yaml#/definitions/uint32-array"
> +            description: |
> +              Integer array, represents gpio pin number and mux setting.
> +              Supported pin number and mux varies for different SoCs, and are
> +              defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
> +              These defines are calculated as: ((port * 16 + line) << 8) | function
> +              With:
> +              - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
> +              - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
> +              - function: The function number, can be:
> +              * 0 : GPIO
> +              * 1 : Alternate Function 0
> +              * 2 : Alternate Function 1
> +              * 3 : Alternate Function 2
> +              * ...
> +              * 16 : Alternate Function 15
> +              * 17 : Analog
> +              To simplify the usage, macro is available to generate "pinmux" field.
> +              This macro is available here:
> +                - include/dt-bindings/pinctrl/stm32-pinfunc.h
> +              Some examples of using macro:
> +               /* GPIO A9 set as alernate function 2 */
> +               ... {
> +                          pinmux = <STM32_PINMUX('A', 9, AF2)>;
> +               };
> +               /* GPIO A9 set as GPIO  */
> +               ... {
> +                          pinmux = <STM32_PINMUX('A', 9, GPIO)>;
> +               };
> +               /* GPIO A9 set as analog */
> +               ... {
> +                          pinmux = <STM32_PINMUX('A', 9, ANALOG)>;
> +               };
> +
> +          bias-disable:
> +            type: boolean
> +          bias-pull-down:
> +            type: boolean
> +          bias-pull-up:
> +            type: boolean
> +          drive-push-pull:
> +            type: boolean
> +          drive-open-drain:
> +            type: boolean
> +          output-low:
> +            type: boolean
> +          output-high:
> +            type: boolean
> +          slew-rate:
> +            description: |
> +              0: Low speed
> +              1: Medium speed
> +              2: Fast speed
> +              3: High speed
> +            allOf:
> +              - $ref: /schemas/types.yaml#/definitions/uint32
> +              - enum: [0, 1, 2, 3]
> +
> +        required:
> +          - pinmux
> +
> +required:
> +  - compatible
> +  - '#address-cells'
> +  - '#size-cells'
> +  - ranges
> +  - pins-are-numbered
> +
> +examples:
> +  - |
> +    #include <dt-bindings/pinctrl/stm32-pinfunc.h>
> +    //Example 1
> +      pin-controller@40020000 {

Because we're horribly inconsistent, 'pinctrl' is the standard node name.

> +              #address-cells = <1>;
> +              #size-cells = <1>;
> +              compatible = "st,stm32f429-pinctrl";
> +              ranges = <0 0x40020000 0x3000>;
> +              pins-are-numbered;
> +
> +              gpioa: gpio@0 {
> +                      gpio-controller;
> +                      #gpio-cells = <2>;
> +                      reg = <0x0 0x400>;
> +                      resets = <&reset_ahb1 0>;
> +                      st,bank-name = "GPIOA";
> +              };
> +       };
> +
> +    //Example 2 (using gpio-ranges)
> +      pin-controller@50020000 {
> +              #address-cells = <1>;
> +              #size-cells = <1>;
> +              compatible = "st,stm32f429-pinctrl";
> +              ranges = <0 0x50020000 0x3000>;
> +              pins-are-numbered;
> +
> +              gpiob: gpio@1000 {
> +                      gpio-controller;
> +                      #gpio-cells = <2>;
> +                      reg = <0x1000 0x400>;
> +                      resets = <&reset_ahb1 0>;
> +                      st,bank-name = "GPIOB";
> +                      gpio-ranges = <&pinctrl 0 0 16>;
> +              };
> +
> +              gpioc: gpio@2000 {
> +                      gpio-controller;
> +                      #gpio-cells = <2>;
> +                      reg = <0x2000 0x400>;
> +                      resets = <&reset_ahb1 0>;
> +                      st,bank-name = "GPIOC";
> +                      ngpios = <5>;
> +                      gpio-ranges = <&pinctrl 0 16 3>,
> +                                    <&pinctrl 14 30 2>;
> +              };
> +      };
> +
> +    //Example 3 pin groups
> +      pin-controller@60020000 {
> +        usart1_pins_a: usart1-0 {
> +                pins1 {
> +                        pinmux = <STM32_PINMUX('A', 9, AF7)>;
> +                        bias-disable;
> +                        drive-push-pull;
> +                        slew-rate = <0>;
> +                };
> +                pins2 {
> +                        pinmux = <STM32_PINMUX('A', 10, AF7)>;
> +                        bias-disable;
> +                };
> +        };
> +    };
> +
> +    usart1 {
> +                pinctrl-0 = <&usart1_pins_a>;
> +                pinctrl-names = "default";
> +    };
> +
> +...
> --
> 2.7.4
>
Alexandre TORGUE May 9, 2019, 8:52 a.m. UTC | #2
Hi Rob

On 5/8/19 10:54 PM, Rob Herring wrote:
> What's jason-schema? ;)

I thought It sounds better than JSON :). I'll fix it in v2.


> On Fri, May 3, 2019 at 4:47 AM Alexandre Torgue <alexandre.torgue@st.com> wrote:
>>
>> Convert the STM32 pinctrl binding to DT schema format using json-schema.
>>
>> Signed-off-by: Alexandre Torgue <alexandre.torgue@st.com>
>> ---
>>
>> Hi,
>>
>> First pacth to convert DT bindings file (here pinctrl STM32) to jsaon-schema
>> in order to take advantage of devicetree validation tool for STM32.
> 
>> diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
>> new file mode 100644
>> index 0000000..fcceca0
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
>> @@ -0,0 +1,271 @@
>> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>> +# Copyright (C) STMicroelectronics 2019.
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: STM32 GPIO and Pin Mux/Config controller
>> +
>> +maintainers:
>> +  - Alexandre TORGUE <alexandre.torgue@st.com>
> 
> nit: add a blank line

ok

> 
>> +description: |
>> +  STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware
>> +  controller. It controls the input/output settings on the available pins and
>> +  also provides ability to multiplex and configure the output of various
>> +  on-chip controllers onto these pads.
>> +
>> +properties:
>> +  compatible:
>> +      items:
> 
> You can drop items since there is only 1.
> 

ok

>> +        - enum:
>> +          - st,stm32f429-pinctrl
>> +          - st,stm32f469-pinctrl
>> +          - st,stm32f746-pinctrl
>> +          - st,stm32f769-pinctrl
>> +          - st,stm32h743-pinctrl
>> +          - st,stm32mp157-pinctrl
>> +          - st,stm32mp157-z-pinctrl
>> +
>> +  '#address-cells':
>> +    const: 1
>> +  '#size-cells':
>> +    const: 1
>> +    description:
>> +      Defines mapping between pin controller node (parent) to
>> +      gpio-bank node (children).
> 
> Don't need description for common properties unless there's really
> something binding specific to add. Same is true on a bunch of other
> description entries.

Ok, I'll remove description for cells, ranges, pins-are-numbered.
Actually, I kept them to have the same information level than the txt file.

So no issue to not have the same level of information ?

> 
>> +
>> +  ranges:
>> +    description:
>> +      Defines mapping between pin controller node (parent) to
>> +      gpio-bank node (children).
>> +  pins-are-numbered:
>> +    description:
>> +      Specify the subnodes are using numbered pinmux to
>> +      specify pins.
>> +  st,syscfg:
> 
> Needs to define the type (phandle-array).

ok

> 
>> +    description: |
>> +      Should be phandle/offset/mask:
>> +        - The phandle to the syscon node which includes IRQ mux selection register.
>> +        - The offset of the IRQ mux selection register
>> +        - The field mask of IRQ mux, needed if different of 0xf.
> 
> This can be expressed as a constraint:
> 
> items:
>    - items:
>      - description: The phandle to the syscon node which includes IRQ
> mux selection register.
>      - description: The offset of the IRQ mux selection register
>      - description: The field mask of IRQ mux, needed if different of 0xf.
> 
> Perhaps there are some constraints on the values of the cells.

Ok

> 
>> +
>> +  hwlocks:
>> +    description: Reference to a phandle of a hardware spinlock provider node.
> 
> No need for a description.

ok

> 
>> +  st,package:
>> +    description:
>> +     Indicates the SOC package used.
>> +     More details in include/dt-bindings/pinctrl/stm32-pinfunc.h
>> +    allOf:
>> +      - $ref: /schemas/types.yaml#/definitions/uint32
>> +      - enum: [1, 2, 4, 8]
>> +
>> +patternProperties:
>> +  '^gpio@[0-9a-z]*$':
> 
> Hex only: a-f

:)

> 
>> +    properties:
>> +      gpio-controller:
>> +        description:
>> +          Indicates this device is a GPIO controller.
> 
> No need to describe standard properties.
> 
>> +      '#gpio-cells':
>> +        const: 2
>> +        description: |
>> +          The first cell is the pin number.
>> +          The second one is the polarity
>> +          * 0 for active high.
>> +          * 1 for active low.
> 
> As long as this is the standard cell definition, no need to describe.
> 
>> +
>> +      reg:
>> +        description:
>> +          The gpio address range, relative to the pinctrl range.
> 
> Need to say how many entries (maxItems), not what reg is.

Sorry, what is for reg and clocks ?

> 
>> +      clocks:
>> +        description:
>> +          Clock that drives this bank.
> 
> ditto.
> 
>> +      st,bank-name:
> 
> type?
> 
> possible values or regex match?
> 
>> +        description:
>> +          Should be a name string for this bank as specified in the datasheet.
>> +      reset:
> 
> resets
> 
> How many items?
> 
>> +        description:
>> +          Reference to the reset controller.
>> +      gpio-ranges:
>> +        description: |
>> +          Define a dedicated mapping between a pin-controller and
>> +          a gpio controller. Format is <&phandle a b c> with:
>> +          -(phandle): phandle of pin-controller.
>> +          -(a): gpio base offset in range.
>> +          -(b): pin base offset in range.
>> +          -(c): gpio count in range.
> 
> All common, so not needed here.
> 
>> +          This entry has to be used either if there are holes inside a bank:
>> +          GPIOB0/B1/B2/B14/B15 (see example 2) or if banks are not contiguous:
>> +          GPIOA/B/C/E...
>> +          NOTE: If "gpio-ranges" is used for a gpio controller, all gpio-controller
>> +          have to use a "gpio-ranges" entry.
>> +          More details in Documentation/devicetree/bindings/gpio/gpio.txt.
>> +
>> +      ngpios:
>> +        description:
>> +          Number of available gpios in a bank.
>> +        minimum: 1
>> +        maximum: 16
>> +
>> +      st,bank-ioport:
> 
> type?
> 
>> +        description:
>> +          Should correspond to the EXTI IOport selection (EXTI line used
>> +          to select GPIOs as interrupts).
>> +
>> +    required:
>> +      - gpio-controller
>> +      - '#gpio-cells'
>> +      - reg
>> +      - clocks
>> +      - st,bank-name
>> +
>> +  '-[0-9]*$':
>> +    patternProperties:
>> +      '^pins':
>> +        description: |
>> +          A pinctrl node should contain at least one subnode representing the
>> +          pinctrl group available on the machine. Each subnode will list the
>> +          pins it needs, and how they should be configured, with regard to muxer
>> +          configuration, pullups, drive, output high/low and output speed.
>> +        properties:
>> +          pinmux:
>> +            allOf:
>> +              - $ref: "/schemas/types.yaml#/definitions/uint32-array"
>> +            description: |
>> +              Integer array, represents gpio pin number and mux setting.
>> +              Supported pin number and mux varies for different SoCs, and are
>> +              defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
>> +              These defines are calculated as: ((port * 16 + line) << 8) | function
>> +              With:
>> +              - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
>> +              - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
>> +              - function: The function number, can be:
>> +              * 0 : GPIO
>> +              * 1 : Alternate Function 0
>> +              * 2 : Alternate Function 1
>> +              * 3 : Alternate Function 2
>> +              * ...
>> +              * 16 : Alternate Function 15
>> +              * 17 : Analog
>> +              To simplify the usage, macro is available to generate "pinmux" field.
>> +              This macro is available here:
>> +                - include/dt-bindings/pinctrl/stm32-pinfunc.h
>> +              Some examples of using macro:
>> +               /* GPIO A9 set as alernate function 2 */
>> +               ... {
>> +                          pinmux = <STM32_PINMUX('A', 9, AF2)>;
>> +               };
>> +               /* GPIO A9 set as GPIO  */
>> +               ... {
>> +                          pinmux = <STM32_PINMUX('A', 9, GPIO)>;
>> +               };
>> +               /* GPIO A9 set as analog */
>> +               ... {
>> +                          pinmux = <STM32_PINMUX('A', 9, ANALOG)>;
>> +               };
>> +
>> +          bias-disable:
>> +            type: boolean
>> +          bias-pull-down:
>> +            type: boolean
>> +          bias-pull-up:
>> +            type: boolean
>> +          drive-push-pull:
>> +            type: boolean
>> +          drive-open-drain:
>> +            type: boolean
>> +          output-low:
>> +            type: boolean
>> +          output-high:
>> +            type: boolean
>> +          slew-rate:
>> +            description: |
>> +              0: Low speed
>> +              1: Medium speed
>> +              2: Fast speed
>> +              3: High speed
>> +            allOf:
>> +              - $ref: /schemas/types.yaml#/definitions/uint32
>> +              - enum: [0, 1, 2, 3]
>> +
>> +        required:
>> +          - pinmux
>> +
>> +required:
>> +  - compatible
>> +  - '#address-cells'
>> +  - '#size-cells'
>> +  - ranges
>> +  - pins-are-numbered
>> +
>> +examples:
>> +  - |
>> +    #include <dt-bindings/pinctrl/stm32-pinfunc.h>
>> +    //Example 1
>> +      pin-controller@40020000 {
> 
> Because we're horribly inconsistent, 'pinctrl' is the standard node name.

Ok. I'll also fix it in dts files for STM32.


> 
>> +              #address-cells = <1>;
>> +              #size-cells = <1>;
>> +              compatible = "st,stm32f429-pinctrl";
>> +              ranges = <0 0x40020000 0x3000>;
>> +              pins-are-numbered;
>> +
>> +              gpioa: gpio@0 {
>> +                      gpio-controller;
>> +                      #gpio-cells = <2>;
>> +                      reg = <0x0 0x400>;
>> +                      resets = <&reset_ahb1 0>;
>> +                      st,bank-name = "GPIOA";
>> +              };
>> +       };
>> +
>> +    //Example 2 (using gpio-ranges)
>> +      pin-controller@50020000 {
>> +              #address-cells = <1>;
>> +              #size-cells = <1>;
>> +              compatible = "st,stm32f429-pinctrl";
>> +              ranges = <0 0x50020000 0x3000>;
>> +              pins-are-numbered;
>> +
>> +              gpiob: gpio@1000 {
>> +                      gpio-controller;
>> +                      #gpio-cells = <2>;
>> +                      reg = <0x1000 0x400>;
>> +                      resets = <&reset_ahb1 0>;
>> +                      st,bank-name = "GPIOB";
>> +                      gpio-ranges = <&pinctrl 0 0 16>;
>> +              };
>> +
>> +              gpioc: gpio@2000 {
>> +                      gpio-controller;
>> +                      #gpio-cells = <2>;
>> +                      reg = <0x2000 0x400>;
>> +                      resets = <&reset_ahb1 0>;
>> +                      st,bank-name = "GPIOC";
>> +                      ngpios = <5>;
>> +                      gpio-ranges = <&pinctrl 0 16 3>,
>> +                                    <&pinctrl 14 30 2>;
>> +              };
>> +      };
>> +
>> +    //Example 3 pin groups
>> +      pin-controller@60020000 {
>> +        usart1_pins_a: usart1-0 {
>> +                pins1 {
>> +                        pinmux = <STM32_PINMUX('A', 9, AF7)>;
>> +                        bias-disable;
>> +                        drive-push-pull;
>> +                        slew-rate = <0>;
>> +                };
>> +                pins2 {
>> +                        pinmux = <STM32_PINMUX('A', 10, AF7)>;
>> +                        bias-disable;
>> +                };
>> +        };
>> +    };
>> +
>> +    usart1 {
>> +                pinctrl-0 = <&usart1_pins_a>;
>> +                pinctrl-names = "default";
>> +    };
>> +
>> +...
>> --
>> 2.7.4
>>
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.txt
deleted file mode 100644
index 0016925..0000000
--- a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.txt
+++ /dev/null
@@ -1,208 +0,0 @@ 
-* STM32 GPIO and Pin Mux/Config controller
-
-STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware
-controller. It controls the input/output settings on the available pins and
-also provides ability to multiplex and configure the output of various on-chip
-controllers onto these pads.
-
-Pin controller node:
-Required properies:
- - compatible: value should be one of the following:
-   "st,stm32f429-pinctrl"
-   "st,stm32f469-pinctrl"
-   "st,stm32f746-pinctrl"
-   "st,stm32f769-pinctrl"
-   "st,stm32h743-pinctrl"
-   "st,stm32mp157-pinctrl"
-   "st,stm32mp157-z-pinctrl"
- - #address-cells: The value of this property must be 1
- - #size-cells	: The value of this property must be 1
- - ranges	: defines mapping between pin controller node (parent) to
-   gpio-bank node (children).
- - pins-are-numbered: Specify the subnodes are using numbered pinmux to
-   specify pins.
-
-GPIO controller/bank node:
-Required properties:
- - gpio-controller : Indicates this device is a GPIO controller
- - #gpio-cells	  : Should be two.
-			The first cell is the pin number
-			The second one is the polarity:
-				- 0 for active high
-				- 1 for active low
- - reg		  : The gpio address range, relative to the pinctrl range
- - clocks	  : clock that drives this bank
- - st,bank-name	  : Should be a name string for this bank as specified in
-   the datasheet
-
-Optional properties:
- - reset:	  : Reference to the reset controller
- - st,syscfg: Should be phandle/offset/mask.
-	-The phandle to the syscon node which includes IRQ mux selection register.
-	-The offset of the IRQ mux selection register
-	-The field mask of IRQ mux, needed if different of 0xf.
- - gpio-ranges: Define a dedicated mapping between a pin-controller and
-   a gpio controller. Format is <&phandle a b c> with:
-	-(phandle): phandle of pin-controller.
-	-(a): gpio base offset in range.
-	-(b): pin base offset in range.
-	-(c): gpio count in range
-   This entry has to be used either if there are holes inside a bank:
-	GPIOB0/B1/B2/B14/B15 (see example 2)
-   or if banks are not contiguous:
-	GPIOA/B/C/E...
-   NOTE: If "gpio-ranges" is used for a gpio controller, all gpio-controller
-   have to use a "gpio-ranges" entry.
-   More details in Documentation/devicetree/bindings/gpio/gpio.txt.
- - st,bank-ioport: should correspond to the EXTI IOport selection (EXTI line
-   used to select GPIOs as interrupts).
- - hwlocks: reference to a phandle of a hardware spinlock provider node.
- - st,package: Indicates the SOC package used.
-   More details in include/dt-bindings/pinctrl/stm32-pinfunc.h
-
-Example 1:
-#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
-...
-
-	pin-controller {
-		#address-cells = <1>;
-		#size-cells = <1>;
-		compatible = "st,stm32f429-pinctrl";
-		ranges = <0 0x40020000 0x3000>;
-		pins-are-numbered;
-
-		gpioa: gpio@40020000 {
-			gpio-controller;
-			#gpio-cells = <2>;
-			reg = <0x0 0x400>;
-			resets = <&reset_ahb1 0>;
-			st,bank-name = "GPIOA";
-		};
-		...
-		pin-functions nodes follow...
-	};
-
-Example 2:
-#include <dt-bindings/pinctrl/stm32f429-pinfunc.h>
-...
-
-	pinctrl: pin-controller {
-		#address-cells = <1>;
-		#size-cells = <1>;
-		compatible = "st,stm32f429-pinctrl";
-		ranges = <0 0x40020000 0x3000>;
-		pins-are-numbered;
-
-		gpioa: gpio@40020000 {
-			gpio-controller;
-			#gpio-cells = <2>;
-			reg = <0x0 0x400>;
-			resets = <&reset_ahb1 0>;
-			st,bank-name = "GPIOA";
-			gpio-ranges = <&pinctrl 0 0 16>;
-		};
-
-		gpiob: gpio@40020400 {
-			gpio-controller;
-			#gpio-cells = <2>;
-			reg = <0x0 0x400>;
-			resets = <&reset_ahb1 0>;
-			st,bank-name = "GPIOB";
-			ngpios = 4;
-			gpio-ranges = <&pinctrl 0 16 3>,
-				      <&pinctrl 14 30 2>;
-		};
-
-
-		...
-		pin-functions nodes follow...
-	};
-
-
-Contents of function subnode node:
-----------------------------------
-Subnode format
-A pinctrl node should contain at least one subnode representing the
-pinctrl group available on the machine. Each subnode will list the
-pins it needs, and how they should be configured, with regard to muxer
-configuration, pullups, drive, output high/low and output speed.
-
-    node {
-	pinmux = <PIN_NUMBER_PINMUX>;
-	GENERIC_PINCONFIG;
-    };
-
-Required properties:
-- pinmux: integer array, represents gpio pin number and mux setting.
-  Supported pin number and mux varies for different SoCs, and are defined in
-  dt-bindings/pinctrl/<soc>-pinfunc.h directly.
-  These defines are calculated as:
-    ((port * 16 + line) << 8) | function
-  With:
-    - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
-    - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
-    - function: The function number, can be:
-      * 0 : GPIO
-      * 1 : Alternate Function 0
-      * 2 : Alternate Function 1
-      * 3 : Alternate Function 2
-      * ...
-      * 16 : Alternate Function 15
-      * 17 : Analog
-
-  To simplify the usage, macro is available to generate "pinmux" field.
-  This macro is available here:
-    - include/dt-bindings/pinctrl/stm32-pinfunc.h
-
-  Some examples of using macro:
-    /* GPIO A9 set as alernate function 2 */
-    ... {
-		pinmux = <STM32_PINMUX('A', 9, AF2)>;
-    };
-    /* GPIO A9 set as GPIO  */
-    ... {
-		pinmux = <STM32_PINMUX('A', 9, GPIO)>;
-    };
-    /* GPIO A9 set as analog */
-    ... {
-		pinmux = <STM32_PINMUX('A', 9, ANALOG)>;
-    };
-
-Optional properties:
-- GENERIC_PINCONFIG: is the generic pinconfig options to use.
-  Available options are:
-   - bias-disable,
-   - bias-pull-down,
-   - bias-pull-up,
-   - drive-push-pull,
-   - drive-open-drain,
-   - output-low
-   - output-high
-   - slew-rate = <x>, with x being:
-       < 0 > : Low speed
-       < 1 > : Medium speed
-       < 2 > : Fast speed
-       < 3 > : High speed
-
-Example:
-
-pin-controller {
-...
-	usart1_pins_a: usart1@0 {
-		pins1 {
-			pinmux = <STM32_PINMUX('A', 9, AF7)>;
-			bias-disable;
-			drive-push-pull;
-			slew-rate = <0>;
-		};
-		pins2 {
-			pinmux = <STM32_PINMUX('A', 10, AF7)>;
-			bias-disable;
-		};
-	};
-};
-
-&usart1 {
-	pinctrl-0 = <&usart1_pins_a>;
-	pinctrl-names = "default";
-};
diff --git a/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
new file mode 100644
index 0000000..fcceca0
--- /dev/null
+++ b/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml
@@ -0,0 +1,271 @@ 
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright (C) STMicroelectronics 2019.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STM32 GPIO and Pin Mux/Config controller
+
+maintainers:
+  - Alexandre TORGUE <alexandre.torgue@st.com>
+description: |
+  STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware
+  controller. It controls the input/output settings on the available pins and
+  also provides ability to multiplex and configure the output of various
+  on-chip controllers onto these pads.
+
+properties:
+  compatible:
+      items:
+        - enum:
+          - st,stm32f429-pinctrl
+          - st,stm32f469-pinctrl
+          - st,stm32f746-pinctrl
+          - st,stm32f769-pinctrl
+          - st,stm32h743-pinctrl
+          - st,stm32mp157-pinctrl
+          - st,stm32mp157-z-pinctrl
+
+  '#address-cells':
+    const: 1
+  '#size-cells':
+    const: 1
+    description:
+      Defines mapping between pin controller node (parent) to
+      gpio-bank node (children).
+
+  ranges:
+    description:
+      Defines mapping between pin controller node (parent) to
+      gpio-bank node (children).
+  pins-are-numbered:
+    description:
+      Specify the subnodes are using numbered pinmux to
+      specify pins.
+  st,syscfg:
+    description: |
+      Should be phandle/offset/mask:
+        - The phandle to the syscon node which includes IRQ mux selection register.
+        - The offset of the IRQ mux selection register
+        - The field mask of IRQ mux, needed if different of 0xf.
+
+  hwlocks:
+    description: Reference to a phandle of a hardware spinlock provider node.
+  st,package:
+    description:
+     Indicates the SOC package used.
+     More details in include/dt-bindings/pinctrl/stm32-pinfunc.h
+    allOf:
+      - $ref: /schemas/types.yaml#/definitions/uint32
+      - enum: [1, 2, 4, 8]
+
+patternProperties:
+  '^gpio@[0-9a-z]*$':
+    properties:
+      gpio-controller:
+        description:
+          Indicates this device is a GPIO controller.
+      '#gpio-cells':
+        const: 2
+        description: |
+          The first cell is the pin number.
+          The second one is the polarity
+          * 0 for active high.
+          * 1 for active low.
+
+      reg:
+        description:
+          The gpio address range, relative to the pinctrl range.
+      clocks:
+        description:
+          Clock that drives this bank.
+      st,bank-name:
+        description:
+          Should be a name string for this bank as specified in the datasheet.
+      reset:
+        description:
+          Reference to the reset controller.
+      gpio-ranges:
+        description: |
+          Define a dedicated mapping between a pin-controller and
+          a gpio controller. Format is <&phandle a b c> with:
+          -(phandle): phandle of pin-controller.
+          -(a): gpio base offset in range.
+          -(b): pin base offset in range.
+          -(c): gpio count in range.
+          This entry has to be used either if there are holes inside a bank:
+          GPIOB0/B1/B2/B14/B15 (see example 2) or if banks are not contiguous:
+          GPIOA/B/C/E...
+          NOTE: If "gpio-ranges" is used for a gpio controller, all gpio-controller
+          have to use a "gpio-ranges" entry.
+          More details in Documentation/devicetree/bindings/gpio/gpio.txt.
+
+      ngpios:
+        description:
+          Number of available gpios in a bank.
+        minimum: 1
+        maximum: 16
+
+      st,bank-ioport:
+        description:
+          Should correspond to the EXTI IOport selection (EXTI line used
+          to select GPIOs as interrupts).
+
+    required:
+      - gpio-controller
+      - '#gpio-cells'
+      - reg
+      - clocks
+      - st,bank-name
+
+  '-[0-9]*$':
+    patternProperties:
+      '^pins':
+        description: |
+          A pinctrl node should contain at least one subnode representing the
+          pinctrl group available on the machine. Each subnode will list the
+          pins it needs, and how they should be configured, with regard to muxer
+          configuration, pullups, drive, output high/low and output speed.
+        properties:
+          pinmux:
+            allOf:
+              - $ref: "/schemas/types.yaml#/definitions/uint32-array"
+            description: |
+              Integer array, represents gpio pin number and mux setting.
+              Supported pin number and mux varies for different SoCs, and are
+              defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
+              These defines are calculated as: ((port * 16 + line) << 8) | function
+              With:
+              - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
+              - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
+              - function: The function number, can be:
+              * 0 : GPIO
+              * 1 : Alternate Function 0
+              * 2 : Alternate Function 1
+              * 3 : Alternate Function 2
+              * ...
+              * 16 : Alternate Function 15
+              * 17 : Analog
+              To simplify the usage, macro is available to generate "pinmux" field.
+              This macro is available here:
+                - include/dt-bindings/pinctrl/stm32-pinfunc.h
+              Some examples of using macro:
+               /* GPIO A9 set as alernate function 2 */
+               ... {
+                          pinmux = <STM32_PINMUX('A', 9, AF2)>;
+               };
+               /* GPIO A9 set as GPIO  */
+               ... {
+                          pinmux = <STM32_PINMUX('A', 9, GPIO)>;
+               };
+               /* GPIO A9 set as analog */
+               ... {
+                          pinmux = <STM32_PINMUX('A', 9, ANALOG)>;
+               };
+
+          bias-disable:
+            type: boolean
+          bias-pull-down:
+            type: boolean
+          bias-pull-up:
+            type: boolean
+          drive-push-pull:
+            type: boolean
+          drive-open-drain:
+            type: boolean
+          output-low:
+            type: boolean
+          output-high:
+            type: boolean
+          slew-rate:
+            description: |
+              0: Low speed
+              1: Medium speed
+              2: Fast speed
+              3: High speed
+            allOf:
+              - $ref: /schemas/types.yaml#/definitions/uint32
+              - enum: [0, 1, 2, 3]
+
+        required:
+          - pinmux
+
+required:
+  - compatible
+  - '#address-cells'
+  - '#size-cells'
+  - ranges
+  - pins-are-numbered
+
+examples:
+  - |
+    #include <dt-bindings/pinctrl/stm32-pinfunc.h>
+    //Example 1
+      pin-controller@40020000 {
+              #address-cells = <1>;
+              #size-cells = <1>;
+              compatible = "st,stm32f429-pinctrl";
+              ranges = <0 0x40020000 0x3000>;
+              pins-are-numbered;
+
+              gpioa: gpio@0 {
+                      gpio-controller;
+                      #gpio-cells = <2>;
+                      reg = <0x0 0x400>;
+                      resets = <&reset_ahb1 0>;
+                      st,bank-name = "GPIOA";
+              };
+       };
+
+    //Example 2 (using gpio-ranges)
+      pin-controller@50020000 {
+              #address-cells = <1>;
+              #size-cells = <1>;
+              compatible = "st,stm32f429-pinctrl";
+              ranges = <0 0x50020000 0x3000>;
+              pins-are-numbered;
+
+              gpiob: gpio@1000 {
+                      gpio-controller;
+                      #gpio-cells = <2>;
+                      reg = <0x1000 0x400>;
+                      resets = <&reset_ahb1 0>;
+                      st,bank-name = "GPIOB";
+                      gpio-ranges = <&pinctrl 0 0 16>;
+              };
+
+              gpioc: gpio@2000 {
+                      gpio-controller;
+                      #gpio-cells = <2>;
+                      reg = <0x2000 0x400>;
+                      resets = <&reset_ahb1 0>;
+                      st,bank-name = "GPIOC";
+                      ngpios = <5>;
+                      gpio-ranges = <&pinctrl 0 16 3>,
+                                    <&pinctrl 14 30 2>;
+              };
+      };
+
+    //Example 3 pin groups
+      pin-controller@60020000 {
+        usart1_pins_a: usart1-0 {
+                pins1 {
+                        pinmux = <STM32_PINMUX('A', 9, AF7)>;
+                        bias-disable;
+                        drive-push-pull;
+                        slew-rate = <0>;
+                };
+                pins2 {
+                        pinmux = <STM32_PINMUX('A', 10, AF7)>;
+                        bias-disable;
+                };
+        };
+    };
+
+    usart1 {
+                pinctrl-0 = <&usart1_pins_a>;
+                pinctrl-names = "default";
+    };
+
+...