summaryrefslogtreecommitdiff
path: root/arch/arm/include/asm/arch-stm32f4/gpio.h
blob: dd33b96c4848443ed47d720b82a742182e57b436 (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
/*
 * (C) Copyright 2011
 * Yuri Tikhonov, Emcraft Systems, yur@emcraft.com
 *
 * (C) Copyright 2015
 * Kamil Lulko, <rev13@wp.pl>
 *
 * 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;
};

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

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

int stm32_gpio_config(const struct stm32_gpio_dsc *gpio_dsc,
		const struct stm32_gpio_ctl *gpio_ctl);
int stm32_gpout_set(const struct stm32_gpio_dsc *gpio_dsc, int state);

#endif /* _STM32_GPIO_H_ */