18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
28c2ecf20Sopenharmony_ci# Copyright (C) STMicroelectronics 2019.
38c2ecf20Sopenharmony_ci%YAML 1.2
48c2ecf20Sopenharmony_ci---
58c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml#
68c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cititle: STM32 GPIO and Pin Mux/Config controller
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cimaintainers:
118c2ecf20Sopenharmony_ci  - Alexandre TORGUE <alexandre.torgue@st.com>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cidescription: |
148c2ecf20Sopenharmony_ci  STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware
158c2ecf20Sopenharmony_ci  controller. It controls the input/output settings on the available pins and
168c2ecf20Sopenharmony_ci  also provides ability to multiplex and configure the output of various
178c2ecf20Sopenharmony_ci  on-chip controllers onto these pads.
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciproperties:
208c2ecf20Sopenharmony_ci  compatible:
218c2ecf20Sopenharmony_ci    enum:
228c2ecf20Sopenharmony_ci      - st,stm32f429-pinctrl
238c2ecf20Sopenharmony_ci      - st,stm32f469-pinctrl
248c2ecf20Sopenharmony_ci      - st,stm32f746-pinctrl
258c2ecf20Sopenharmony_ci      - st,stm32f769-pinctrl
268c2ecf20Sopenharmony_ci      - st,stm32h743-pinctrl
278c2ecf20Sopenharmony_ci      - st,stm32mp157-pinctrl
288c2ecf20Sopenharmony_ci      - st,stm32mp157-z-pinctrl
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci  '#address-cells':
318c2ecf20Sopenharmony_ci    const: 1
328c2ecf20Sopenharmony_ci  '#size-cells':
338c2ecf20Sopenharmony_ci    const: 1
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci  ranges: true
368c2ecf20Sopenharmony_ci  pins-are-numbered: true
378c2ecf20Sopenharmony_ci  hwlocks: true
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci  interrupts:
408c2ecf20Sopenharmony_ci    maxItems: 1
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci  st,syscfg:
438c2ecf20Sopenharmony_ci    description: Should be phandle/offset/mask
448c2ecf20Sopenharmony_ci      - Phandle to the syscon node which includes IRQ mux selection.
458c2ecf20Sopenharmony_ci      - The offset of the IRQ mux selection register.
468c2ecf20Sopenharmony_ci      - The field mask of IRQ mux, needed if different of 0xf.
478c2ecf20Sopenharmony_ci    $ref: "/schemas/types.yaml#/definitions/phandle-array"
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci  st,package:
508c2ecf20Sopenharmony_ci    description:
518c2ecf20Sopenharmony_ci      Indicates the SOC package used.
528c2ecf20Sopenharmony_ci      More details in include/dt-bindings/pinctrl/stm32-pinfunc.h
538c2ecf20Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint32
548c2ecf20Sopenharmony_ci    enum: [1, 2, 4, 8]
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_cipatternProperties:
578c2ecf20Sopenharmony_ci  '^gpio@[0-9a-f]*$':
588c2ecf20Sopenharmony_ci    type: object
598c2ecf20Sopenharmony_ci    properties:
608c2ecf20Sopenharmony_ci      gpio-controller: true
618c2ecf20Sopenharmony_ci      '#gpio-cells':
628c2ecf20Sopenharmony_ci        const: 2
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci      reg:
658c2ecf20Sopenharmony_ci        maxItems: 1
668c2ecf20Sopenharmony_ci      clocks:
678c2ecf20Sopenharmony_ci        maxItems: 1
688c2ecf20Sopenharmony_ci      reset:
698c2ecf20Sopenharmony_ci        minItems: 1
708c2ecf20Sopenharmony_ci        maxItems: 1
718c2ecf20Sopenharmony_ci      gpio-ranges:
728c2ecf20Sopenharmony_ci        minItems: 1
738c2ecf20Sopenharmony_ci        maxItems: 16
748c2ecf20Sopenharmony_ci      ngpios:
758c2ecf20Sopenharmony_ci        description:
768c2ecf20Sopenharmony_ci          Number of available gpios in a bank.
778c2ecf20Sopenharmony_ci        minimum: 1
788c2ecf20Sopenharmony_ci        maximum: 16
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci      st,bank-name:
818c2ecf20Sopenharmony_ci        description:
828c2ecf20Sopenharmony_ci          Should be a name string for this bank as specified in the datasheet.
838c2ecf20Sopenharmony_ci        $ref: "/schemas/types.yaml#/definitions/string"
848c2ecf20Sopenharmony_ci        enum:
858c2ecf20Sopenharmony_ci          - GPIOA
868c2ecf20Sopenharmony_ci          - GPIOB
878c2ecf20Sopenharmony_ci          - GPIOC
888c2ecf20Sopenharmony_ci          - GPIOD
898c2ecf20Sopenharmony_ci          - GPIOE
908c2ecf20Sopenharmony_ci          - GPIOF
918c2ecf20Sopenharmony_ci          - GPIOG
928c2ecf20Sopenharmony_ci          - GPIOH
938c2ecf20Sopenharmony_ci          - GPIOI
948c2ecf20Sopenharmony_ci          - GPIOJ
958c2ecf20Sopenharmony_ci          - GPIOK
968c2ecf20Sopenharmony_ci          - GPIOZ
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ci      st,bank-ioport:
998c2ecf20Sopenharmony_ci        description:
1008c2ecf20Sopenharmony_ci          Should correspond to the EXTI IOport selection (EXTI line used
1018c2ecf20Sopenharmony_ci          to select GPIOs as interrupts).
1028c2ecf20Sopenharmony_ci        $ref: "/schemas/types.yaml#/definitions/uint32"
1038c2ecf20Sopenharmony_ci        minimum: 0
1048c2ecf20Sopenharmony_ci        maximum: 11
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci    required:
1078c2ecf20Sopenharmony_ci      - gpio-controller
1088c2ecf20Sopenharmony_ci      - '#gpio-cells'
1098c2ecf20Sopenharmony_ci      - reg
1108c2ecf20Sopenharmony_ci      - clocks
1118c2ecf20Sopenharmony_ci      - st,bank-name
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_ci  '-[0-9]*$':
1148c2ecf20Sopenharmony_ci    type: object
1158c2ecf20Sopenharmony_ci    patternProperties:
1168c2ecf20Sopenharmony_ci      '^pins':
1178c2ecf20Sopenharmony_ci        type: object
1188c2ecf20Sopenharmony_ci        description: |
1198c2ecf20Sopenharmony_ci          A pinctrl node should contain at least one subnode representing the
1208c2ecf20Sopenharmony_ci          pinctrl group available on the machine. Each subnode will list the
1218c2ecf20Sopenharmony_ci          pins it needs, and how they should be configured, with regard to muxer
1228c2ecf20Sopenharmony_ci          configuration, pullups, drive, output high/low and output speed.
1238c2ecf20Sopenharmony_ci        properties:
1248c2ecf20Sopenharmony_ci          pinmux:
1258c2ecf20Sopenharmony_ci            $ref: "/schemas/types.yaml#/definitions/uint32-array"
1268c2ecf20Sopenharmony_ci            description: |
1278c2ecf20Sopenharmony_ci              Integer array, represents gpio pin number and mux setting.
1288c2ecf20Sopenharmony_ci              Supported pin number and mux varies for different SoCs, and are
1298c2ecf20Sopenharmony_ci              defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
1308c2ecf20Sopenharmony_ci              These defines are calculated as: ((port * 16 + line) << 8) | function
1318c2ecf20Sopenharmony_ci              With:
1328c2ecf20Sopenharmony_ci              - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
1338c2ecf20Sopenharmony_ci              - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
1348c2ecf20Sopenharmony_ci              - function: The function number, can be:
1358c2ecf20Sopenharmony_ci              * 0 : GPIO
1368c2ecf20Sopenharmony_ci              * 1 : Alternate Function 0
1378c2ecf20Sopenharmony_ci              * 2 : Alternate Function 1
1388c2ecf20Sopenharmony_ci              * 3 : Alternate Function 2
1398c2ecf20Sopenharmony_ci              * ...
1408c2ecf20Sopenharmony_ci              * 16 : Alternate Function 15
1418c2ecf20Sopenharmony_ci              * 17 : Analog
1428c2ecf20Sopenharmony_ci              To simplify the usage, macro is available to generate "pinmux" field.
1438c2ecf20Sopenharmony_ci              This macro is available here:
1448c2ecf20Sopenharmony_ci                - include/dt-bindings/pinctrl/stm32-pinfunc.h
1458c2ecf20Sopenharmony_ci              Some examples of using macro:
1468c2ecf20Sopenharmony_ci               /* GPIO A9 set as alernate function 2 */
1478c2ecf20Sopenharmony_ci               ... {
1488c2ecf20Sopenharmony_ci                          pinmux = <STM32_PINMUX('A', 9, AF2)>;
1498c2ecf20Sopenharmony_ci               };
1508c2ecf20Sopenharmony_ci               /* GPIO A9 set as GPIO  */
1518c2ecf20Sopenharmony_ci               ... {
1528c2ecf20Sopenharmony_ci                          pinmux = <STM32_PINMUX('A', 9, GPIO)>;
1538c2ecf20Sopenharmony_ci               };
1548c2ecf20Sopenharmony_ci               /* GPIO A9 set as analog */
1558c2ecf20Sopenharmony_ci               ... {
1568c2ecf20Sopenharmony_ci                          pinmux = <STM32_PINMUX('A', 9, ANALOG)>;
1578c2ecf20Sopenharmony_ci               };
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_ci          bias-disable:
1608c2ecf20Sopenharmony_ci            type: boolean
1618c2ecf20Sopenharmony_ci          bias-pull-down:
1628c2ecf20Sopenharmony_ci            type: boolean
1638c2ecf20Sopenharmony_ci          bias-pull-up:
1648c2ecf20Sopenharmony_ci            type: boolean
1658c2ecf20Sopenharmony_ci          drive-push-pull:
1668c2ecf20Sopenharmony_ci            type: boolean
1678c2ecf20Sopenharmony_ci          drive-open-drain:
1688c2ecf20Sopenharmony_ci            type: boolean
1698c2ecf20Sopenharmony_ci          output-low:
1708c2ecf20Sopenharmony_ci            type: boolean
1718c2ecf20Sopenharmony_ci          output-high:
1728c2ecf20Sopenharmony_ci            type: boolean
1738c2ecf20Sopenharmony_ci          slew-rate:
1748c2ecf20Sopenharmony_ci            description: |
1758c2ecf20Sopenharmony_ci              0: Low speed
1768c2ecf20Sopenharmony_ci              1: Medium speed
1778c2ecf20Sopenharmony_ci              2: Fast speed
1788c2ecf20Sopenharmony_ci              3: High speed
1798c2ecf20Sopenharmony_ci            $ref: /schemas/types.yaml#/definitions/uint32
1808c2ecf20Sopenharmony_ci            enum: [0, 1, 2, 3]
1818c2ecf20Sopenharmony_ci
1828c2ecf20Sopenharmony_ci        required:
1838c2ecf20Sopenharmony_ci          - pinmux
1848c2ecf20Sopenharmony_ci
1858c2ecf20Sopenharmony_cirequired:
1868c2ecf20Sopenharmony_ci  - compatible
1878c2ecf20Sopenharmony_ci  - '#address-cells'
1888c2ecf20Sopenharmony_ci  - '#size-cells'
1898c2ecf20Sopenharmony_ci  - ranges
1908c2ecf20Sopenharmony_ci  - pins-are-numbered
1918c2ecf20Sopenharmony_ci
1928c2ecf20Sopenharmony_ciadditionalProperties: false
1938c2ecf20Sopenharmony_ci
1948c2ecf20Sopenharmony_ciexamples:
1958c2ecf20Sopenharmony_ci  - |
1968c2ecf20Sopenharmony_ci    #include <dt-bindings/pinctrl/stm32-pinfunc.h>
1978c2ecf20Sopenharmony_ci    #include <dt-bindings/mfd/stm32f4-rcc.h>
1988c2ecf20Sopenharmony_ci    //Example 1
1998c2ecf20Sopenharmony_ci      pinctrl@40020000 {
2008c2ecf20Sopenharmony_ci              #address-cells = <1>;
2018c2ecf20Sopenharmony_ci              #size-cells = <1>;
2028c2ecf20Sopenharmony_ci              compatible = "st,stm32f429-pinctrl";
2038c2ecf20Sopenharmony_ci              ranges = <0 0x40020000 0x3000>;
2048c2ecf20Sopenharmony_ci              pins-are-numbered;
2058c2ecf20Sopenharmony_ci
2068c2ecf20Sopenharmony_ci              gpioa: gpio@0 {
2078c2ecf20Sopenharmony_ci                      gpio-controller;
2088c2ecf20Sopenharmony_ci                      #gpio-cells = <2>;
2098c2ecf20Sopenharmony_ci                      reg = <0x0 0x400>;
2108c2ecf20Sopenharmony_ci                      resets = <&reset_ahb1 0>;
2118c2ecf20Sopenharmony_ci                      clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
2128c2ecf20Sopenharmony_ci                      st,bank-name = "GPIOA";
2138c2ecf20Sopenharmony_ci              };
2148c2ecf20Sopenharmony_ci       };
2158c2ecf20Sopenharmony_ci
2168c2ecf20Sopenharmony_ci    //Example 2 (using gpio-ranges)
2178c2ecf20Sopenharmony_ci      pinctrl@50020000 {
2188c2ecf20Sopenharmony_ci              #address-cells = <1>;
2198c2ecf20Sopenharmony_ci              #size-cells = <1>;
2208c2ecf20Sopenharmony_ci              compatible = "st,stm32f429-pinctrl";
2218c2ecf20Sopenharmony_ci              ranges = <0 0x50020000 0x3000>;
2228c2ecf20Sopenharmony_ci              pins-are-numbered;
2238c2ecf20Sopenharmony_ci
2248c2ecf20Sopenharmony_ci              gpiob: gpio@1000 {
2258c2ecf20Sopenharmony_ci                      gpio-controller;
2268c2ecf20Sopenharmony_ci                      #gpio-cells = <2>;
2278c2ecf20Sopenharmony_ci                      reg = <0x1000 0x400>;
2288c2ecf20Sopenharmony_ci                      resets = <&reset_ahb1 0>;
2298c2ecf20Sopenharmony_ci                      clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
2308c2ecf20Sopenharmony_ci                      st,bank-name = "GPIOB";
2318c2ecf20Sopenharmony_ci                      gpio-ranges = <&pinctrl 0 0 16>;
2328c2ecf20Sopenharmony_ci              };
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ci              gpioc: gpio@2000 {
2358c2ecf20Sopenharmony_ci                      gpio-controller;
2368c2ecf20Sopenharmony_ci                      #gpio-cells = <2>;
2378c2ecf20Sopenharmony_ci                      reg = <0x2000 0x400>;
2388c2ecf20Sopenharmony_ci                      resets = <&reset_ahb1 0>;
2398c2ecf20Sopenharmony_ci                      clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
2408c2ecf20Sopenharmony_ci                      st,bank-name = "GPIOC";
2418c2ecf20Sopenharmony_ci                      ngpios = <5>;
2428c2ecf20Sopenharmony_ci                      gpio-ranges = <&pinctrl 0 16 3>,
2438c2ecf20Sopenharmony_ci                                    <&pinctrl 14 30 2>;
2448c2ecf20Sopenharmony_ci              };
2458c2ecf20Sopenharmony_ci      };
2468c2ecf20Sopenharmony_ci
2478c2ecf20Sopenharmony_ci    //Example 3 pin groups
2488c2ecf20Sopenharmony_ci      pinctrl {
2498c2ecf20Sopenharmony_ci        usart1_pins_a: usart1-0 {
2508c2ecf20Sopenharmony_ci                pins1 {
2518c2ecf20Sopenharmony_ci                        pinmux = <STM32_PINMUX('A', 9, AF7)>;
2528c2ecf20Sopenharmony_ci                        bias-disable;
2538c2ecf20Sopenharmony_ci                        drive-push-pull;
2548c2ecf20Sopenharmony_ci                        slew-rate = <0>;
2558c2ecf20Sopenharmony_ci                };
2568c2ecf20Sopenharmony_ci                pins2 {
2578c2ecf20Sopenharmony_ci                        pinmux = <STM32_PINMUX('A', 10, AF7)>;
2588c2ecf20Sopenharmony_ci                        bias-disable;
2598c2ecf20Sopenharmony_ci                };
2608c2ecf20Sopenharmony_ci        };
2618c2ecf20Sopenharmony_ci    };
2628c2ecf20Sopenharmony_ci
2638c2ecf20Sopenharmony_ci    usart1 {
2648c2ecf20Sopenharmony_ci                pinctrl-0 = <&usart1_pins_a>;
2658c2ecf20Sopenharmony_ci                pinctrl-names = "default";
2668c2ecf20Sopenharmony_ci    };
2678c2ecf20Sopenharmony_ci
2688c2ecf20Sopenharmony_ci...
269