2020 February 29 Breaking Changes Update (#8064)
[jackhill/qmk/firmware.git] / drivers / boards / GENERIC_STM32_F072XB / board.c
1 /*
2 ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 */
16
17 /*
18 * This file has been automatically generated using ChibiStudio board
19 * generator plugin. Do not edit manually.
20 */
21
22 #include "hal.h"
23 #include "stm32_gpio.h"
24
25 /*===========================================================================*/
26 /* Driver local definitions. */
27 /*===========================================================================*/
28
29 /*===========================================================================*/
30 /* Driver exported variables. */
31 /*===========================================================================*/
32
33 /*===========================================================================*/
34 /* Driver local variables and types. */
35 /*===========================================================================*/
36
37 /**
38 * @brief Type of STM32 GPIO port setup.
39 */
40 typedef struct {
41 uint32_t moder;
42 uint32_t otyper;
43 uint32_t ospeedr;
44 uint32_t pupdr;
45 uint32_t odr;
46 uint32_t afrl;
47 uint32_t afrh;
48 } gpio_setup_t;
49
50 /**
51 * @brief Type of STM32 GPIO initialization data.
52 */
53 typedef struct {
54 #if STM32_HAS_GPIOA || defined(__DOXYGEN__)
55 gpio_setup_t PAData;
56 #endif
57 #if STM32_HAS_GPIOB || defined(__DOXYGEN__)
58 gpio_setup_t PBData;
59 #endif
60 #if STM32_HAS_GPIOC || defined(__DOXYGEN__)
61 gpio_setup_t PCData;
62 #endif
63 #if STM32_HAS_GPIOD || defined(__DOXYGEN__)
64 gpio_setup_t PDData;
65 #endif
66 #if STM32_HAS_GPIOE || defined(__DOXYGEN__)
67 gpio_setup_t PEData;
68 #endif
69 #if STM32_HAS_GPIOF || defined(__DOXYGEN__)
70 gpio_setup_t PFData;
71 #endif
72 #if STM32_HAS_GPIOG || defined(__DOXYGEN__)
73 gpio_setup_t PGData;
74 #endif
75 #if STM32_HAS_GPIOH || defined(__DOXYGEN__)
76 gpio_setup_t PHData;
77 #endif
78 #if STM32_HAS_GPIOI || defined(__DOXYGEN__)
79 gpio_setup_t PIData;
80 #endif
81 #if STM32_HAS_GPIOJ || defined(__DOXYGEN__)
82 gpio_setup_t PJData;
83 #endif
84 #if STM32_HAS_GPIOK || defined(__DOXYGEN__)
85 gpio_setup_t PKData;
86 #endif
87 } gpio_config_t;
88
89 /**
90 * @brief STM32 GPIO static initialization data.
91 */
92 static const gpio_config_t gpio_default_config = {
93 #if STM32_HAS_GPIOA
94 {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
95 #endif
96 #if STM32_HAS_GPIOB
97 {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
98 #endif
99 #if STM32_HAS_GPIOC
100 {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
101 #endif
102 #if STM32_HAS_GPIOD
103 {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
104 #endif
105 #if STM32_HAS_GPIOE
106 {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR, VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
107 #endif
108 #if STM32_HAS_GPIOF
109 {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
110 #endif
111 #if STM32_HAS_GPIOG
112 {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR, VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
113 #endif
114 #if STM32_HAS_GPIOH
115 {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR, VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
116 #endif
117 #if STM32_HAS_GPIOI
118 {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH},
119 #endif
120 #if STM32_HAS_GPIOJ
121 {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR, VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH},
122 #endif
123 #if STM32_HAS_GPIOK
124 {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR, VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH}
125 #endif
126 };
127
128 /*===========================================================================*/
129 /* Driver local functions. */
130 /*===========================================================================*/
131
132 static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) {
133 gpiop->OTYPER = config->otyper;
134 gpiop->OSPEEDR = config->ospeedr;
135 gpiop->PUPDR = config->pupdr;
136 gpiop->ODR = config->odr;
137 gpiop->AFRL = config->afrl;
138 gpiop->AFRH = config->afrh;
139 gpiop->MODER = config->moder;
140 }
141
142 static void stm32_gpio_init(void) {
143 /* Enabling GPIO-related clocks, the mask comes from the
144 registry header file.*/
145 rccResetAHB(STM32_GPIO_EN_MASK);
146 rccEnableAHB(STM32_GPIO_EN_MASK, true);
147
148 /* Initializing all the defined GPIO ports.*/
149 #if STM32_HAS_GPIOA
150 gpio_init(GPIOA, &gpio_default_config.PAData);
151 #endif
152 #if STM32_HAS_GPIOB
153 gpio_init(GPIOB, &gpio_default_config.PBData);
154 #endif
155 #if STM32_HAS_GPIOC
156 gpio_init(GPIOC, &gpio_default_config.PCData);
157 #endif
158 #if STM32_HAS_GPIOD
159 gpio_init(GPIOD, &gpio_default_config.PDData);
160 #endif
161 #if STM32_HAS_GPIOE
162 gpio_init(GPIOE, &gpio_default_config.PEData);
163 #endif
164 #if STM32_HAS_GPIOF
165 gpio_init(GPIOF, &gpio_default_config.PFData);
166 #endif
167 #if STM32_HAS_GPIOG
168 gpio_init(GPIOG, &gpio_default_config.PGData);
169 #endif
170 #if STM32_HAS_GPIOH
171 gpio_init(GPIOH, &gpio_default_config.PHData);
172 #endif
173 #if STM32_HAS_GPIOI
174 gpio_init(GPIOI, &gpio_default_config.PIData);
175 #endif
176 #if STM32_HAS_GPIOJ
177 gpio_init(GPIOJ, &gpio_default_config.PJData);
178 #endif
179 #if STM32_HAS_GPIOK
180 gpio_init(GPIOK, &gpio_default_config.PKData);
181 #endif
182 }
183
184 /*===========================================================================*/
185 /* Driver interrupt handlers. */
186 /*===========================================================================*/
187
188 /*===========================================================================*/
189 /* Driver exported functions. */
190 /*===========================================================================*/
191
192 __attribute__((weak)) void enter_bootloader_mode_if_requested(void) {}
193
194 /**
195 * @brief Early initialization code.
196 * @details GPIO ports and system clocks are initialized before everything
197 * else.
198 */
199 void __early_init(void) {
200 enter_bootloader_mode_if_requested();
201
202 stm32_gpio_init();
203 stm32_clock_init();
204 }
205
206 #if HAL_USE_SDC || defined(__DOXYGEN__)
207 /**
208 * @brief SDC card detection.
209 */
210 bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
211 (void)sdcp;
212 /* TODO: Fill the implementation.*/
213 return true;
214 }
215
216 /**
217 * @brief SDC card write protection detection.
218 */
219 bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
220 (void)sdcp;
221 /* TODO: Fill the implementation.*/
222 return false;
223 }
224 #endif /* HAL_USE_SDC */
225
226 #if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
227 /**
228 * @brief MMC_SPI card detection.
229 */
230 bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
231 (void)mmcp;
232 /* TODO: Fill the implementation.*/
233 return true;
234 }
235
236 /**
237 * @brief MMC_SPI card write protection detection.
238 */
239 bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
240 (void)mmcp;
241 /* TODO: Fill the implementation.*/
242 return false;
243 }
244 #endif
245
246 /**
247 * @brief Board-specific initialization code.
248 * @todo Add your board-specific code, if any.
249 */
250 void boardInit(void) {}