xref: /OK3568_Linux_fs/kernel/Documentation/devicetree/bindings/pinctrl/st,stm32-pinctrl.yaml (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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