summaryrefslogtreecommitdiff
path: root/arch/arm/include/asm/arch-stm32f4/gpio.h
blob: 6173fa130000c3808fb7fe5d0c110d288110aede (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 * (C) Copyright 2011
 * Yuri Tikhonov, Emcraft Systems, yur@emcraft.com
 *
 * (C) Copyright 2015
 * Kamil Lulko, <kamil.lulko@gmail.com>
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */

#ifndef _STM32_GPIO_H_
#define _STM32_GPIO_H_

#if (CONFIG_STM32_USART == 1)
#define STM32_GPIO_PORT_X   STM32_GPIO_PORT_A
#define STM32_GPIO_PIN_TX   STM32_GPIO_PIN_9
#define STM32_GPIO_PIN_RX   STM32_GPIO_PIN_10
#define STM32_GPIO_USART    STM32_GPIO_AF7

#elif (CONFIG_STM32_USART == 2)
#define STM32_GPIO_PORT_X   STM32_GPIO_PORT_D
#define STM32_GPIO_PIN_TX   STM32_GPIO_PIN_5
#define STM32_GPIO_PIN_RX   STM32_GPIO_PIN_6
#define STM32_GPIO_USART    STM32_GPIO_AF7

#elif (CONFIG_STM32_USART == 3)
#define STM32_GPIO_PORT_X   STM32_GPIO_PORT_C
#define STM32_GPIO_PIN_TX   STM32_GPIO_PIN_10
#define STM32_GPIO_PIN_RX   STM32_GPIO_PIN_11
#define STM32_GPIO_USART    STM32_GPIO_AF7

#elif (CONFIG_STM32_USART == 6)
#define STM32_GPIO_PORT_X   STM32_GPIO_PORT_G
#define STM32_GPIO_PIN_TX   STM32_GPIO_PIN_14
#define STM32_GPIO_PIN_RX   STM32_GPIO_PIN_9
#define STM32_GPIO_USART    STM32_GPIO_AF8

#else
#define STM32_GPIO_PORT_X   STM32_GPIO_PORT_A
#define STM32_GPIO_PIN_TX   STM32_GPIO_PIN_9
#define STM32_GPIO_PIN_RX   STM32_GPIO_PIN_10
#define STM32_GPIO_USART    STM32_GPIO_AF7

#endif

enum stm32_gpio_port {
	STM32_GPIO_PORT_A = 0,
	STM32_GPIO_PORT_B,
	STM32_GPIO_PORT_C,
	STM32_GPIO_PORT_D,
	STM32_GPIO_PORT_E,
	STM32_GPIO_PORT_F,
	STM32_GPIO_PORT_G,
	STM32_GPIO_PORT_H,
	STM32_GPIO_PORT_I
};

enum stm32_gpio_pin {
	STM32_GPIO_PIN_0 = 0,
	STM32_GPIO_PIN_1,
	STM32_GPIO_PIN_2,
	STM32_GPIO_PIN_3,
	STM32_GPIO_PIN_4,
	STM32_GPIO_PIN_5,
	STM32_GPIO_PIN_6,
	STM32_GPIO_PIN_7,
	STM32_GPIO_PIN_8,
	STM32_GPIO_PIN_9,
	STM32_GPIO_PIN_10,
	STM32_GPIO_PIN_11,
	STM32_GPIO_PIN_12,
	STM32_GPIO_PIN_13,
	STM32_GPIO_PIN_14,
	STM32_GPIO_PIN_15
};

enum stm32_gpio_mode {
	STM32_GPIO_MODE_IN = 0,
	STM32_GPIO_MODE_OUT,
	STM32_GPIO_MODE_AF,
	STM32_GPIO_MODE_AN
};

enum stm32_gpio_otype {
	STM32_GPIO_OTYPE_PP = 0,
	STM32_GPIO_OTYPE_OD
};

enum stm32_gpio_speed {
	STM32_GPIO_SPEED_2M = 0,
	STM32_GPIO_SPEED_25M,
	STM32_GPIO_SPEED_50M,
	STM32_GPIO_SPEED_100M
};

enum stm32_gpio_pupd {
	STM32_GPIO_PUPD_NO = 0,
	STM32_GPIO_PUPD_UP,
	STM32_GPIO_PUPD_DOWN
};

enum stm32_gpio_af {
	STM32_GPIO_AF0 = 0,
	STM32_GPIO_AF1,
	STM32_GPIO_AF2,
	STM32_GPIO_AF3,
	STM32_GPIO_AF4,
	STM32_GPIO_AF5,
	STM32_GPIO_AF6,
	STM32_GPIO_AF7,
	STM32_GPIO_AF8,
	STM32_GPIO_AF9,
	STM32_GPIO_AF10,
	STM32_GPIO_AF11,
	STM32_GPIO_AF12,
	STM32_GPIO_AF13,
	STM32_GPIO_AF14,
	STM32_GPIO_AF15
};

struct stm32_gpio_dsc {
	enum stm32_gpio_port	port;
	enum stm32_gpio_pin	pin;
};

struct stm32_gpio_ctl {
	enum stm32_gpio_mode	mode;
	enum stm32_gpio_otype	otype;
	enum stm32_gpio_speed	speed;
	enum stm32_gpio_pupd	pupd;
	enum stm32_gpio_af	af;
};

struct stm32_gpio_regs {
	u32 moder;	/* GPIO port mode */
	u32 otyper;	/* GPIO port output type */
	u32 ospeedr;	/* GPIO port output speed */
	u32 pupdr;	/* GPIO port pull-up/pull-down */
	u32 idr;	/* GPIO port input data */
	u32 odr;	/* GPIO port output data */
	u32 bsrr;	/* GPIO port bit set/reset */
	u32 lckr;	/* GPIO port configuration lock */
	u32 afr[2];	/* GPIO alternate function */
};

struct stm32_gpio_priv {
	struct stm32_gpio_regs *regs;
};

static inline unsigned stm32_gpio_to_port(unsigned gpio)
{
	return gpio / 16;
}

static inline unsigned stm32_gpio_to_pin(unsigned gpio)
{
	return gpio % 16;
}

#endif /* _STM32_GPIO_H_ */