1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (C) 2016, STMicroelectronics - All Rights Reserved
4  * Author(s): Vikas Manocha, <vikas.manocha@st.com> for STMicroelectronics.
5  */
6 
7 #ifndef _GPIO_H_
8 #define _GPIO_H_
9 
10 enum stm32_gpio_port {
11 	STM32_GPIO_PORT_A = 0,
12 	STM32_GPIO_PORT_B,
13 	STM32_GPIO_PORT_C,
14 	STM32_GPIO_PORT_D,
15 	STM32_GPIO_PORT_E,
16 	STM32_GPIO_PORT_F,
17 	STM32_GPIO_PORT_G,
18 	STM32_GPIO_PORT_H,
19 	STM32_GPIO_PORT_I
20 };
21 
22 enum stm32_gpio_pin {
23 	STM32_GPIO_PIN_0 = 0,
24 	STM32_GPIO_PIN_1,
25 	STM32_GPIO_PIN_2,
26 	STM32_GPIO_PIN_3,
27 	STM32_GPIO_PIN_4,
28 	STM32_GPIO_PIN_5,
29 	STM32_GPIO_PIN_6,
30 	STM32_GPIO_PIN_7,
31 	STM32_GPIO_PIN_8,
32 	STM32_GPIO_PIN_9,
33 	STM32_GPIO_PIN_10,
34 	STM32_GPIO_PIN_11,
35 	STM32_GPIO_PIN_12,
36 	STM32_GPIO_PIN_13,
37 	STM32_GPIO_PIN_14,
38 	STM32_GPIO_PIN_15
39 };
40 
41 enum stm32_gpio_mode {
42 	STM32_GPIO_MODE_IN = 0,
43 	STM32_GPIO_MODE_OUT,
44 	STM32_GPIO_MODE_AF,
45 	STM32_GPIO_MODE_AN
46 };
47 
48 enum stm32_gpio_otype {
49 	STM32_GPIO_OTYPE_PP = 0,
50 	STM32_GPIO_OTYPE_OD
51 };
52 
53 enum stm32_gpio_speed {
54 	STM32_GPIO_SPEED_2M = 0,
55 	STM32_GPIO_SPEED_25M,
56 	STM32_GPIO_SPEED_50M,
57 	STM32_GPIO_SPEED_100M
58 };
59 
60 enum stm32_gpio_pupd {
61 	STM32_GPIO_PUPD_NO = 0,
62 	STM32_GPIO_PUPD_UP,
63 	STM32_GPIO_PUPD_DOWN
64 };
65 
66 enum stm32_gpio_af {
67 	STM32_GPIO_AF0 = 0,
68 	STM32_GPIO_AF1,
69 	STM32_GPIO_AF2,
70 	STM32_GPIO_AF3,
71 	STM32_GPIO_AF4,
72 	STM32_GPIO_AF5,
73 	STM32_GPIO_AF6,
74 	STM32_GPIO_AF7,
75 	STM32_GPIO_AF8,
76 	STM32_GPIO_AF9,
77 	STM32_GPIO_AF10,
78 	STM32_GPIO_AF11,
79 	STM32_GPIO_AF12,
80 	STM32_GPIO_AF13,
81 	STM32_GPIO_AF14,
82 	STM32_GPIO_AF15
83 };
84 
85 struct stm32_gpio_dsc {
86 	enum stm32_gpio_port	port;
87 	enum stm32_gpio_pin	pin;
88 };
89 
90 struct stm32_gpio_ctl {
91 	enum stm32_gpio_mode	mode;
92 	enum stm32_gpio_otype	otype;
93 	enum stm32_gpio_speed	speed;
94 	enum stm32_gpio_pupd	pupd;
95 	enum stm32_gpio_af	af;
96 };
97 
98 struct stm32_gpio_regs {
99 	u32 moder;	/* GPIO port mode */
100 	u32 otyper;	/* GPIO port output type */
101 	u32 ospeedr;	/* GPIO port output speed */
102 	u32 pupdr;	/* GPIO port pull-up/pull-down */
103 	u32 idr;	/* GPIO port input data */
104 	u32 odr;	/* GPIO port output data */
105 	u32 bsrr;	/* GPIO port bit set/reset */
106 	u32 lckr;	/* GPIO port configuration lock */
107 	u32 afr[2];	/* GPIO alternate function */
108 };
109 
110 struct stm32_gpio_priv {
111 	struct stm32_gpio_regs *regs;
112 };
113 
114 #endif /* _GPIO_H_ */
115