1*4882a593Smuzhiyun# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2*4882a593Smuzhiyun# Copyright (C) STMicroelectronics 2019. 3*4882a593Smuzhiyun%YAML 1.2 4*4882a593Smuzhiyun--- 5*4882a593Smuzhiyun$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml# 6*4882a593Smuzhiyun$schema: http://devicetree.org/meta-schemas/core.yaml# 7*4882a593Smuzhiyun 8*4882a593Smuzhiyuntitle: STM32 GPIO and Pin Mux/Config controller 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunmaintainers: 11*4882a593Smuzhiyun - Alexandre TORGUE <alexandre.torgue@st.com> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyundescription: | 14*4882a593Smuzhiyun STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware 15*4882a593Smuzhiyun controller. It controls the input/output settings on the available pins and 16*4882a593Smuzhiyun also provides ability to multiplex and configure the output of various 17*4882a593Smuzhiyun on-chip controllers onto these pads. 18*4882a593Smuzhiyun 19*4882a593Smuzhiyunproperties: 20*4882a593Smuzhiyun compatible: 21*4882a593Smuzhiyun enum: 22*4882a593Smuzhiyun - st,stm32f429-pinctrl 23*4882a593Smuzhiyun - st,stm32f469-pinctrl 24*4882a593Smuzhiyun - st,stm32f746-pinctrl 25*4882a593Smuzhiyun - st,stm32f769-pinctrl 26*4882a593Smuzhiyun - st,stm32h743-pinctrl 27*4882a593Smuzhiyun - st,stm32mp157-pinctrl 28*4882a593Smuzhiyun - st,stm32mp157-z-pinctrl 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun '#address-cells': 31*4882a593Smuzhiyun const: 1 32*4882a593Smuzhiyun '#size-cells': 33*4882a593Smuzhiyun const: 1 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun ranges: true 36*4882a593Smuzhiyun pins-are-numbered: true 37*4882a593Smuzhiyun hwlocks: true 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun interrupts: 40*4882a593Smuzhiyun maxItems: 1 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun st,syscfg: 43*4882a593Smuzhiyun description: Should be phandle/offset/mask 44*4882a593Smuzhiyun - Phandle to the syscon node which includes IRQ mux selection. 45*4882a593Smuzhiyun - The offset of the IRQ mux selection register. 46*4882a593Smuzhiyun - The field mask of IRQ mux, needed if different of 0xf. 47*4882a593Smuzhiyun $ref: "/schemas/types.yaml#/definitions/phandle-array" 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun st,package: 50*4882a593Smuzhiyun description: 51*4882a593Smuzhiyun Indicates the SOC package used. 52*4882a593Smuzhiyun More details in include/dt-bindings/pinctrl/stm32-pinfunc.h 53*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 54*4882a593Smuzhiyun enum: [1, 2, 4, 8] 55*4882a593Smuzhiyun 56*4882a593SmuzhiyunpatternProperties: 57*4882a593Smuzhiyun '^gpio@[0-9a-f]*$': 58*4882a593Smuzhiyun type: object 59*4882a593Smuzhiyun properties: 60*4882a593Smuzhiyun gpio-controller: true 61*4882a593Smuzhiyun '#gpio-cells': 62*4882a593Smuzhiyun const: 2 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun reg: 65*4882a593Smuzhiyun maxItems: 1 66*4882a593Smuzhiyun clocks: 67*4882a593Smuzhiyun maxItems: 1 68*4882a593Smuzhiyun reset: 69*4882a593Smuzhiyun minItems: 1 70*4882a593Smuzhiyun maxItems: 1 71*4882a593Smuzhiyun gpio-ranges: 72*4882a593Smuzhiyun minItems: 1 73*4882a593Smuzhiyun maxItems: 16 74*4882a593Smuzhiyun ngpios: 75*4882a593Smuzhiyun description: 76*4882a593Smuzhiyun Number of available gpios in a bank. 77*4882a593Smuzhiyun minimum: 1 78*4882a593Smuzhiyun maximum: 16 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun st,bank-name: 81*4882a593Smuzhiyun description: 82*4882a593Smuzhiyun Should be a name string for this bank as specified in the datasheet. 83*4882a593Smuzhiyun $ref: "/schemas/types.yaml#/definitions/string" 84*4882a593Smuzhiyun enum: 85*4882a593Smuzhiyun - GPIOA 86*4882a593Smuzhiyun - GPIOB 87*4882a593Smuzhiyun - GPIOC 88*4882a593Smuzhiyun - GPIOD 89*4882a593Smuzhiyun - GPIOE 90*4882a593Smuzhiyun - GPIOF 91*4882a593Smuzhiyun - GPIOG 92*4882a593Smuzhiyun - GPIOH 93*4882a593Smuzhiyun - GPIOI 94*4882a593Smuzhiyun - GPIOJ 95*4882a593Smuzhiyun - GPIOK 96*4882a593Smuzhiyun - GPIOZ 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun st,bank-ioport: 99*4882a593Smuzhiyun description: 100*4882a593Smuzhiyun Should correspond to the EXTI IOport selection (EXTI line used 101*4882a593Smuzhiyun to select GPIOs as interrupts). 102*4882a593Smuzhiyun $ref: "/schemas/types.yaml#/definitions/uint32" 103*4882a593Smuzhiyun minimum: 0 104*4882a593Smuzhiyun maximum: 11 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun required: 107*4882a593Smuzhiyun - gpio-controller 108*4882a593Smuzhiyun - '#gpio-cells' 109*4882a593Smuzhiyun - reg 110*4882a593Smuzhiyun - clocks 111*4882a593Smuzhiyun - st,bank-name 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun '-[0-9]*$': 114*4882a593Smuzhiyun type: object 115*4882a593Smuzhiyun patternProperties: 116*4882a593Smuzhiyun '^pins': 117*4882a593Smuzhiyun type: object 118*4882a593Smuzhiyun description: | 119*4882a593Smuzhiyun A pinctrl node should contain at least one subnode representing the 120*4882a593Smuzhiyun pinctrl group available on the machine. Each subnode will list the 121*4882a593Smuzhiyun pins it needs, and how they should be configured, with regard to muxer 122*4882a593Smuzhiyun configuration, pullups, drive, output high/low and output speed. 123*4882a593Smuzhiyun properties: 124*4882a593Smuzhiyun pinmux: 125*4882a593Smuzhiyun $ref: "/schemas/types.yaml#/definitions/uint32-array" 126*4882a593Smuzhiyun description: | 127*4882a593Smuzhiyun Integer array, represents gpio pin number and mux setting. 128*4882a593Smuzhiyun Supported pin number and mux varies for different SoCs, and are 129*4882a593Smuzhiyun defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly. 130*4882a593Smuzhiyun These defines are calculated as: ((port * 16 + line) << 8) | function 131*4882a593Smuzhiyun With: 132*4882a593Smuzhiyun - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11) 133*4882a593Smuzhiyun - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15) 134*4882a593Smuzhiyun - function: The function number, can be: 135*4882a593Smuzhiyun * 0 : GPIO 136*4882a593Smuzhiyun * 1 : Alternate Function 0 137*4882a593Smuzhiyun * 2 : Alternate Function 1 138*4882a593Smuzhiyun * 3 : Alternate Function 2 139*4882a593Smuzhiyun * ... 140*4882a593Smuzhiyun * 16 : Alternate Function 15 141*4882a593Smuzhiyun * 17 : Analog 142*4882a593Smuzhiyun To simplify the usage, macro is available to generate "pinmux" field. 143*4882a593Smuzhiyun This macro is available here: 144*4882a593Smuzhiyun - include/dt-bindings/pinctrl/stm32-pinfunc.h 145*4882a593Smuzhiyun Some examples of using macro: 146*4882a593Smuzhiyun /* GPIO A9 set as alernate function 2 */ 147*4882a593Smuzhiyun ... { 148*4882a593Smuzhiyun pinmux = <STM32_PINMUX('A', 9, AF2)>; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun /* GPIO A9 set as GPIO */ 151*4882a593Smuzhiyun ... { 152*4882a593Smuzhiyun pinmux = <STM32_PINMUX('A', 9, GPIO)>; 153*4882a593Smuzhiyun }; 154*4882a593Smuzhiyun /* GPIO A9 set as analog */ 155*4882a593Smuzhiyun ... { 156*4882a593Smuzhiyun pinmux = <STM32_PINMUX('A', 9, ANALOG)>; 157*4882a593Smuzhiyun }; 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun bias-disable: 160*4882a593Smuzhiyun type: boolean 161*4882a593Smuzhiyun bias-pull-down: 162*4882a593Smuzhiyun type: boolean 163*4882a593Smuzhiyun bias-pull-up: 164*4882a593Smuzhiyun type: boolean 165*4882a593Smuzhiyun drive-push-pull: 166*4882a593Smuzhiyun type: boolean 167*4882a593Smuzhiyun drive-open-drain: 168*4882a593Smuzhiyun type: boolean 169*4882a593Smuzhiyun output-low: 170*4882a593Smuzhiyun type: boolean 171*4882a593Smuzhiyun output-high: 172*4882a593Smuzhiyun type: boolean 173*4882a593Smuzhiyun slew-rate: 174*4882a593Smuzhiyun description: | 175*4882a593Smuzhiyun 0: Low speed 176*4882a593Smuzhiyun 1: Medium speed 177*4882a593Smuzhiyun 2: Fast speed 178*4882a593Smuzhiyun 3: High speed 179*4882a593Smuzhiyun $ref: /schemas/types.yaml#/definitions/uint32 180*4882a593Smuzhiyun enum: [0, 1, 2, 3] 181*4882a593Smuzhiyun 182*4882a593Smuzhiyun required: 183*4882a593Smuzhiyun - pinmux 184*4882a593Smuzhiyun 185*4882a593Smuzhiyunrequired: 186*4882a593Smuzhiyun - compatible 187*4882a593Smuzhiyun - '#address-cells' 188*4882a593Smuzhiyun - '#size-cells' 189*4882a593Smuzhiyun - ranges 190*4882a593Smuzhiyun - pins-are-numbered 191*4882a593Smuzhiyun 192*4882a593SmuzhiyunadditionalProperties: false 193*4882a593Smuzhiyun 194*4882a593Smuzhiyunexamples: 195*4882a593Smuzhiyun - | 196*4882a593Smuzhiyun #include <dt-bindings/pinctrl/stm32-pinfunc.h> 197*4882a593Smuzhiyun #include <dt-bindings/mfd/stm32f4-rcc.h> 198*4882a593Smuzhiyun //Example 1 199*4882a593Smuzhiyun pinctrl@40020000 { 200*4882a593Smuzhiyun #address-cells = <1>; 201*4882a593Smuzhiyun #size-cells = <1>; 202*4882a593Smuzhiyun compatible = "st,stm32f429-pinctrl"; 203*4882a593Smuzhiyun ranges = <0 0x40020000 0x3000>; 204*4882a593Smuzhiyun pins-are-numbered; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun gpioa: gpio@0 { 207*4882a593Smuzhiyun gpio-controller; 208*4882a593Smuzhiyun #gpio-cells = <2>; 209*4882a593Smuzhiyun reg = <0x0 0x400>; 210*4882a593Smuzhiyun resets = <&reset_ahb1 0>; 211*4882a593Smuzhiyun clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>; 212*4882a593Smuzhiyun st,bank-name = "GPIOA"; 213*4882a593Smuzhiyun }; 214*4882a593Smuzhiyun }; 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun //Example 2 (using gpio-ranges) 217*4882a593Smuzhiyun pinctrl@50020000 { 218*4882a593Smuzhiyun #address-cells = <1>; 219*4882a593Smuzhiyun #size-cells = <1>; 220*4882a593Smuzhiyun compatible = "st,stm32f429-pinctrl"; 221*4882a593Smuzhiyun ranges = <0 0x50020000 0x3000>; 222*4882a593Smuzhiyun pins-are-numbered; 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun gpiob: gpio@1000 { 225*4882a593Smuzhiyun gpio-controller; 226*4882a593Smuzhiyun #gpio-cells = <2>; 227*4882a593Smuzhiyun reg = <0x1000 0x400>; 228*4882a593Smuzhiyun resets = <&reset_ahb1 0>; 229*4882a593Smuzhiyun clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>; 230*4882a593Smuzhiyun st,bank-name = "GPIOB"; 231*4882a593Smuzhiyun gpio-ranges = <&pinctrl 0 0 16>; 232*4882a593Smuzhiyun }; 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun gpioc: gpio@2000 { 235*4882a593Smuzhiyun gpio-controller; 236*4882a593Smuzhiyun #gpio-cells = <2>; 237*4882a593Smuzhiyun reg = <0x2000 0x400>; 238*4882a593Smuzhiyun resets = <&reset_ahb1 0>; 239*4882a593Smuzhiyun clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>; 240*4882a593Smuzhiyun st,bank-name = "GPIOC"; 241*4882a593Smuzhiyun ngpios = <5>; 242*4882a593Smuzhiyun gpio-ranges = <&pinctrl 0 16 3>, 243*4882a593Smuzhiyun <&pinctrl 14 30 2>; 244*4882a593Smuzhiyun }; 245*4882a593Smuzhiyun }; 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun //Example 3 pin groups 248*4882a593Smuzhiyun pinctrl { 249*4882a593Smuzhiyun usart1_pins_a: usart1-0 { 250*4882a593Smuzhiyun pins1 { 251*4882a593Smuzhiyun pinmux = <STM32_PINMUX('A', 9, AF7)>; 252*4882a593Smuzhiyun bias-disable; 253*4882a593Smuzhiyun drive-push-pull; 254*4882a593Smuzhiyun slew-rate = <0>; 255*4882a593Smuzhiyun }; 256*4882a593Smuzhiyun pins2 { 257*4882a593Smuzhiyun pinmux = <STM32_PINMUX('A', 10, AF7)>; 258*4882a593Smuzhiyun bias-disable; 259*4882a593Smuzhiyun }; 260*4882a593Smuzhiyun }; 261*4882a593Smuzhiyun }; 262*4882a593Smuzhiyun 263*4882a593Smuzhiyun usart1 { 264*4882a593Smuzhiyun pinctrl-0 = <&usart1_pins_a>; 265*4882a593Smuzhiyun pinctrl-names = "default"; 266*4882a593Smuzhiyun }; 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun... 269