162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci# Copyright (C) STMicroelectronics 2019.
362306a36Sopenharmony_ci%YAML 1.2
462306a36Sopenharmony_ci---
562306a36Sopenharmony_ci$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml#
662306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
762306a36Sopenharmony_ci
862306a36Sopenharmony_cititle: STM32 GPIO and Pin Mux/Config controller
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cimaintainers:
1162306a36Sopenharmony_ci  - Alexandre TORGUE <alexandre.torgue@foss.st.com>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cidescription: |
1462306a36Sopenharmony_ci  STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware
1562306a36Sopenharmony_ci  controller. It controls the input/output settings on the available pins and
1662306a36Sopenharmony_ci  also provides ability to multiplex and configure the output of various
1762306a36Sopenharmony_ci  on-chip controllers onto these pads.
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciproperties:
2062306a36Sopenharmony_ci  compatible:
2162306a36Sopenharmony_ci    enum:
2262306a36Sopenharmony_ci      - st,stm32f429-pinctrl
2362306a36Sopenharmony_ci      - st,stm32f469-pinctrl
2462306a36Sopenharmony_ci      - st,stm32f746-pinctrl
2562306a36Sopenharmony_ci      - st,stm32f769-pinctrl
2662306a36Sopenharmony_ci      - st,stm32h743-pinctrl
2762306a36Sopenharmony_ci      - st,stm32mp135-pinctrl
2862306a36Sopenharmony_ci      - st,stm32mp157-pinctrl
2962306a36Sopenharmony_ci      - st,stm32mp157-z-pinctrl
3062306a36Sopenharmony_ci      - st,stm32mp257-pinctrl
3162306a36Sopenharmony_ci      - st,stm32mp257-z-pinctrl
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci  '#address-cells':
3462306a36Sopenharmony_ci    const: 1
3562306a36Sopenharmony_ci  '#size-cells':
3662306a36Sopenharmony_ci    const: 1
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci  ranges: true
3962306a36Sopenharmony_ci  pins-are-numbered:
4062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/flag
4162306a36Sopenharmony_ci    deprecated: true
4262306a36Sopenharmony_ci  hwlocks: true
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  interrupts:
4562306a36Sopenharmony_ci    maxItems: 1
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci  st,syscfg:
4862306a36Sopenharmony_ci    description: Phandle+args to the syscon node which includes IRQ mux selection.
4962306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/phandle-array
5062306a36Sopenharmony_ci    items:
5162306a36Sopenharmony_ci      - items:
5262306a36Sopenharmony_ci          - description: syscon node which includes IRQ mux selection
5362306a36Sopenharmony_ci          - description: The offset of the IRQ mux selection register
5462306a36Sopenharmony_ci          - description: The field mask of IRQ mux, needed if different of 0xf
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci  st,package:
5762306a36Sopenharmony_ci    description:
5862306a36Sopenharmony_ci      Indicates the SOC package used.
5962306a36Sopenharmony_ci      More details in include/dt-bindings/pinctrl/stm32-pinfunc.h
6062306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
6162306a36Sopenharmony_ci    enum: [0x1, 0x2, 0x4, 0x8, 0x100, 0x400, 0x800]
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_cipatternProperties:
6462306a36Sopenharmony_ci  '^gpio@[0-9a-f]*$':
6562306a36Sopenharmony_ci    type: object
6662306a36Sopenharmony_ci    additionalProperties: false
6762306a36Sopenharmony_ci    properties:
6862306a36Sopenharmony_ci      gpio-controller: true
6962306a36Sopenharmony_ci      '#gpio-cells':
7062306a36Sopenharmony_ci        const: 2
7162306a36Sopenharmony_ci      interrupt-controller: true
7262306a36Sopenharmony_ci      '#interrupt-cells':
7362306a36Sopenharmony_ci        const: 2
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci      reg:
7662306a36Sopenharmony_ci        maxItems: 1
7762306a36Sopenharmony_ci      clocks:
7862306a36Sopenharmony_ci        maxItems: 1
7962306a36Sopenharmony_ci      resets:
8062306a36Sopenharmony_ci        maxItems: 1
8162306a36Sopenharmony_ci      gpio-line-names: true
8262306a36Sopenharmony_ci      gpio-ranges:
8362306a36Sopenharmony_ci        minItems: 1
8462306a36Sopenharmony_ci        maxItems: 16
8562306a36Sopenharmony_ci      ngpios:
8662306a36Sopenharmony_ci        description:
8762306a36Sopenharmony_ci          Number of available gpios in a bank.
8862306a36Sopenharmony_ci        minimum: 1
8962306a36Sopenharmony_ci        maximum: 16
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci      st,bank-name:
9262306a36Sopenharmony_ci        description:
9362306a36Sopenharmony_ci          Should be a name string for this bank as specified in the datasheet.
9462306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/string
9562306a36Sopenharmony_ci        enum:
9662306a36Sopenharmony_ci          - GPIOA
9762306a36Sopenharmony_ci          - GPIOB
9862306a36Sopenharmony_ci          - GPIOC
9962306a36Sopenharmony_ci          - GPIOD
10062306a36Sopenharmony_ci          - GPIOE
10162306a36Sopenharmony_ci          - GPIOF
10262306a36Sopenharmony_ci          - GPIOG
10362306a36Sopenharmony_ci          - GPIOH
10462306a36Sopenharmony_ci          - GPIOI
10562306a36Sopenharmony_ci          - GPIOJ
10662306a36Sopenharmony_ci          - GPIOK
10762306a36Sopenharmony_ci          - GPIOZ
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci      st,bank-ioport:
11062306a36Sopenharmony_ci        description:
11162306a36Sopenharmony_ci          Should correspond to the EXTI IOport selection (EXTI line used
11262306a36Sopenharmony_ci          to select GPIOs as interrupts).
11362306a36Sopenharmony_ci        $ref: /schemas/types.yaml#/definitions/uint32
11462306a36Sopenharmony_ci        minimum: 0
11562306a36Sopenharmony_ci        maximum: 11
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci    patternProperties:
11862306a36Sopenharmony_ci      "^(.+-hog(-[0-9]+)?)$":
11962306a36Sopenharmony_ci        type: object
12062306a36Sopenharmony_ci        required:
12162306a36Sopenharmony_ci          - gpio-hog
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci    required:
12462306a36Sopenharmony_ci      - gpio-controller
12562306a36Sopenharmony_ci      - '#gpio-cells'
12662306a36Sopenharmony_ci      - reg
12762306a36Sopenharmony_ci      - clocks
12862306a36Sopenharmony_ci      - st,bank-name
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci  '-[0-9]*$':
13162306a36Sopenharmony_ci    type: object
13262306a36Sopenharmony_ci    additionalProperties: false
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci    patternProperties:
13562306a36Sopenharmony_ci      '^pins':
13662306a36Sopenharmony_ci        type: object
13762306a36Sopenharmony_ci        additionalProperties: false
13862306a36Sopenharmony_ci        description: |
13962306a36Sopenharmony_ci          A pinctrl node should contain at least one subnode representing the
14062306a36Sopenharmony_ci          pinctrl group available on the machine. Each subnode will list the
14162306a36Sopenharmony_ci          pins it needs, and how they should be configured, with regard to muxer
14262306a36Sopenharmony_ci          configuration, pullups, drive, output high/low and output speed.
14362306a36Sopenharmony_ci        properties:
14462306a36Sopenharmony_ci          pinmux:
14562306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/uint32-array
14662306a36Sopenharmony_ci            description: |
14762306a36Sopenharmony_ci              Integer array, represents gpio pin number and mux setting.
14862306a36Sopenharmony_ci              Supported pin number and mux varies for different SoCs, and are
14962306a36Sopenharmony_ci              defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
15062306a36Sopenharmony_ci              These defines are calculated as: ((port * 16 + line) << 8) | function
15162306a36Sopenharmony_ci              With:
15262306a36Sopenharmony_ci              - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
15362306a36Sopenharmony_ci              - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
15462306a36Sopenharmony_ci              - function: The function number, can be:
15562306a36Sopenharmony_ci              * 0 : GPIO
15662306a36Sopenharmony_ci              * 1 : Alternate Function 0
15762306a36Sopenharmony_ci              * 2 : Alternate Function 1
15862306a36Sopenharmony_ci              * 3 : Alternate Function 2
15962306a36Sopenharmony_ci              * ...
16062306a36Sopenharmony_ci              * 16 : Alternate Function 15
16162306a36Sopenharmony_ci              * 17 : Analog
16262306a36Sopenharmony_ci              To simplify the usage, macro is available to generate "pinmux" field.
16362306a36Sopenharmony_ci              This macro is available here:
16462306a36Sopenharmony_ci                - include/dt-bindings/pinctrl/stm32-pinfunc.h
16562306a36Sopenharmony_ci              Some examples of using macro:
16662306a36Sopenharmony_ci               /* GPIO A9 set as alernate function 2 */
16762306a36Sopenharmony_ci               ... {
16862306a36Sopenharmony_ci                          pinmux = <STM32_PINMUX('A', 9, AF2)>;
16962306a36Sopenharmony_ci               };
17062306a36Sopenharmony_ci               /* GPIO A9 set as GPIO  */
17162306a36Sopenharmony_ci               ... {
17262306a36Sopenharmony_ci                          pinmux = <STM32_PINMUX('A', 9, GPIO)>;
17362306a36Sopenharmony_ci               };
17462306a36Sopenharmony_ci               /* GPIO A9 set as analog */
17562306a36Sopenharmony_ci               ... {
17662306a36Sopenharmony_ci                          pinmux = <STM32_PINMUX('A', 9, ANALOG)>;
17762306a36Sopenharmony_ci               };
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci          bias-disable:
18062306a36Sopenharmony_ci            type: boolean
18162306a36Sopenharmony_ci          bias-pull-down:
18262306a36Sopenharmony_ci            type: boolean
18362306a36Sopenharmony_ci          bias-pull-up:
18462306a36Sopenharmony_ci            type: boolean
18562306a36Sopenharmony_ci          drive-push-pull:
18662306a36Sopenharmony_ci            type: boolean
18762306a36Sopenharmony_ci          drive-open-drain:
18862306a36Sopenharmony_ci            type: boolean
18962306a36Sopenharmony_ci          output-low:
19062306a36Sopenharmony_ci            type: boolean
19162306a36Sopenharmony_ci          output-high:
19262306a36Sopenharmony_ci            type: boolean
19362306a36Sopenharmony_ci          slew-rate:
19462306a36Sopenharmony_ci            description: |
19562306a36Sopenharmony_ci              0: Low speed
19662306a36Sopenharmony_ci              1: Medium speed
19762306a36Sopenharmony_ci              2: Fast speed
19862306a36Sopenharmony_ci              3: High speed
19962306a36Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/uint32
20062306a36Sopenharmony_ci            enum: [0, 1, 2, 3]
20162306a36Sopenharmony_ci
20262306a36Sopenharmony_ci        required:
20362306a36Sopenharmony_ci          - pinmux
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ciallOf:
20662306a36Sopenharmony_ci  - $ref: pinctrl.yaml#
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_cirequired:
20962306a36Sopenharmony_ci  - compatible
21062306a36Sopenharmony_ci  - '#address-cells'
21162306a36Sopenharmony_ci  - '#size-cells'
21262306a36Sopenharmony_ci  - ranges
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ciadditionalProperties: false
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ciexamples:
21762306a36Sopenharmony_ci  - |
21862306a36Sopenharmony_ci    #include <dt-bindings/pinctrl/stm32-pinfunc.h>
21962306a36Sopenharmony_ci    #include <dt-bindings/mfd/stm32f4-rcc.h>
22062306a36Sopenharmony_ci    //Example 1
22162306a36Sopenharmony_ci      pinctrl@40020000 {
22262306a36Sopenharmony_ci              #address-cells = <1>;
22362306a36Sopenharmony_ci              #size-cells = <1>;
22462306a36Sopenharmony_ci              compatible = "st,stm32f429-pinctrl";
22562306a36Sopenharmony_ci              ranges = <0 0x40020000 0x3000>;
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci              gpioa: gpio@0 {
22862306a36Sopenharmony_ci                      gpio-controller;
22962306a36Sopenharmony_ci                      #gpio-cells = <2>;
23062306a36Sopenharmony_ci                      reg = <0x0 0x400>;
23162306a36Sopenharmony_ci                      resets = <&reset_ahb1 0>;
23262306a36Sopenharmony_ci                      clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
23362306a36Sopenharmony_ci                      st,bank-name = "GPIOA";
23462306a36Sopenharmony_ci              };
23562306a36Sopenharmony_ci       };
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci    //Example 2 (using gpio-ranges)
23862306a36Sopenharmony_ci      pinctrl@50020000 {
23962306a36Sopenharmony_ci              #address-cells = <1>;
24062306a36Sopenharmony_ci              #size-cells = <1>;
24162306a36Sopenharmony_ci              compatible = "st,stm32f429-pinctrl";
24262306a36Sopenharmony_ci              ranges = <0 0x50020000 0x3000>;
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ci              gpiob: gpio@1000 {
24562306a36Sopenharmony_ci                      gpio-controller;
24662306a36Sopenharmony_ci                      #gpio-cells = <2>;
24762306a36Sopenharmony_ci                      reg = <0x1000 0x400>;
24862306a36Sopenharmony_ci                      resets = <&reset_ahb1 0>;
24962306a36Sopenharmony_ci                      clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
25062306a36Sopenharmony_ci                      st,bank-name = "GPIOB";
25162306a36Sopenharmony_ci                      gpio-ranges = <&pinctrl 0 0 16>;
25262306a36Sopenharmony_ci              };
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci              gpioc: gpio@2000 {
25562306a36Sopenharmony_ci                      gpio-controller;
25662306a36Sopenharmony_ci                      #gpio-cells = <2>;
25762306a36Sopenharmony_ci                      reg = <0x2000 0x400>;
25862306a36Sopenharmony_ci                      resets = <&reset_ahb1 0>;
25962306a36Sopenharmony_ci                      clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
26062306a36Sopenharmony_ci                      st,bank-name = "GPIOC";
26162306a36Sopenharmony_ci                      ngpios = <5>;
26262306a36Sopenharmony_ci                      gpio-ranges = <&pinctrl 0 16 3>,
26362306a36Sopenharmony_ci                                    <&pinctrl 14 30 2>;
26462306a36Sopenharmony_ci              };
26562306a36Sopenharmony_ci      };
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci    //Example 3 pin groups
26862306a36Sopenharmony_ci      pinctrl {
26962306a36Sopenharmony_ci        usart1_pins_a: usart1-0 {
27062306a36Sopenharmony_ci                pins1 {
27162306a36Sopenharmony_ci                        pinmux = <STM32_PINMUX('A', 9, AF7)>;
27262306a36Sopenharmony_ci                        bias-disable;
27362306a36Sopenharmony_ci                        drive-push-pull;
27462306a36Sopenharmony_ci                        slew-rate = <0>;
27562306a36Sopenharmony_ci                };
27662306a36Sopenharmony_ci                pins2 {
27762306a36Sopenharmony_ci                        pinmux = <STM32_PINMUX('A', 10, AF7)>;
27862306a36Sopenharmony_ci                        bias-disable;
27962306a36Sopenharmony_ci                };
28062306a36Sopenharmony_ci        };
28162306a36Sopenharmony_ci    };
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ci    usart1 {
28462306a36Sopenharmony_ci                pinctrl-0 = <&usart1_pins_a>;
28562306a36Sopenharmony_ci                pinctrl-names = "default";
28662306a36Sopenharmony_ci    };
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ci...
289