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