@@ -29,8 +29,46 @@ LOG_MODULE_REGISTER(spi_gecko);
29
29
#endif
30
30
#endif /* CONFIG_PINCTRL */
31
31
32
-
32
+ #if DT_NODE_HAS_PROP ( n , peripheral_id )
33
33
#define CLOCK_USART (id ) _CONCAT(cmuClock_USART, id)
34
+ #define GET_GECKO_USART_CLOCK (n ) CLOCK_USART(DT_INST_PROP(n, peripheral_id))
35
+ #else
36
+ #if (USART_COUNT <= 2 )
37
+ #define CLOCK_USART (ref ) (((ref) == USART0) ? cmuClock_USART0 \
38
+ : ((ref) == USART1) ? cmuClock_USART1 \
39
+ : -1)
40
+ #elif (USART_COUNT == 3 )
41
+ #define CLOCK_USART (ref ) (((ref) == USART0) ? cmuClock_USART0 \
42
+ : ((ref) == USART1) ? cmuClock_USART1 \
43
+ : ((ref) == USART2) ? cmuClock_USART2 \
44
+ : -1)
45
+ #elif (USART_COUNT == 4 )
46
+ #define CLOCK_USART (ref ) (((ref) == USART0) ? cmuClock_USART0 \
47
+ : ((ref) == USART1) ? cmuClock_USART1 \
48
+ : ((ref) == USART2) ? cmuClock_USART2 \
49
+ : ((ref) == USART3) ? cmuClock_USART3 \
50
+ : -1)
51
+ #elif (USART_COUNT == 5 )
52
+ #define CLOCK_USART (ref ) (((ref) == USART0) ? cmuClock_USART0 \
53
+ : ((ref) == USART1) ? cmuClock_USART1 \
54
+ : ((ref) == USART2) ? cmuClock_USART2 \
55
+ : ((ref) == USART3) ? cmuClock_USART3 \
56
+ : ((ref) == USART4) ? cmuClock_USART4 \
57
+ : -1)
58
+ #elif (USART_COUNT == 6 )
59
+ #define CLOCK_USART (ref ) (((ref) == USART0) ? cmuClock_USART0 \
60
+ : ((ref) == USART1) ? cmuClock_USART1 \
61
+ : ((ref) == USART2) ? cmuClock_USART2 \
62
+ : ((ref) == USART3) ? cmuClock_USART3 \
63
+ : ((ref) == USART4) ? cmuClock_USART4 \
64
+ : ((ref) == USART5) ? cmuClock_USART5 \
65
+ : -1)
66
+ #else
67
+ #error "Undefined number of USARTs."
68
+ #endif /* USART_COUNT */
69
+ #define GET_GECKO_USART_CLOCK (id ) CLOCK_USART((USART_TypeDef *)DT_INST_REG_ADDR(id))
70
+ #endif /* DT_NODE_HAS_PROP(n, peripheral_id) */
71
+
34
72
35
73
#define SPI_WORD_SIZE 8
36
74
@@ -328,7 +366,7 @@ static struct spi_driver_api spi_gecko_api = {
328
366
};
329
367
330
368
#ifdef CONFIG_PINCTRL
331
- #define SPI_INIT2 ( n , usart ) \
369
+ #define SPI_INIT ( n ) \
332
370
PINCTRL_DT_INST_DEFINE(n); \
333
371
static struct spi_gecko_data spi_gecko_data_##n = { \
334
372
SPI_CONTEXT_INIT_LOCK(spi_gecko_data_##n, ctx), \
@@ -339,7 +377,7 @@ static struct spi_driver_api spi_gecko_api = {
339
377
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \
340
378
.base = (USART_TypeDef *) \
341
379
DT_INST_REG_ADDR(n), \
342
- .clock = CLOCK_USART(usart ) \
380
+ .clock = GET_GECKO_USART_CLOCK(n ) \
343
381
}; \
344
382
DEVICE_DT_INST_DEFINE(n, \
345
383
spi_gecko_init, \
@@ -350,7 +388,7 @@ static struct spi_driver_api spi_gecko_api = {
350
388
CONFIG_SPI_INIT_PRIORITY, \
351
389
&spi_gecko_api);
352
390
#else
353
- #define SPI_INIT2 ( n , usart ) \
391
+ #define SPI_INIT ( n ) \
354
392
static struct spi_gecko_data spi_gecko_data_##n = { \
355
393
SPI_CONTEXT_INIT_LOCK(spi_gecko_data_##n, ctx), \
356
394
SPI_CONTEXT_INIT_SYNC(spi_gecko_data_##n, ctx), \
@@ -359,7 +397,7 @@ static struct spi_driver_api spi_gecko_api = {
359
397
static struct spi_gecko_config spi_gecko_cfg_##n = { \
360
398
.base = (USART_TypeDef *) \
361
399
DT_INST_REG_ADDR(n), \
362
- .clock = CLOCK_USART(usart ), \
400
+ .clock = GET_GECKO_USART_CLOCK(n ), \
363
401
.pin_rx = { DT_INST_PROP_BY_IDX(n, location_rx, 1), \
364
402
DT_INST_PROP_BY_IDX(n, location_rx, 2), \
365
403
gpioModeInput, 1}, \
@@ -383,8 +421,4 @@ static struct spi_driver_api spi_gecko_api = {
383
421
&spi_gecko_api);
384
422
#endif /* CONFIG_PINCTRL */
385
423
386
- #define SPI_ID (n ) DT_INST_PROP(n, peripheral_id)
387
-
388
- #define SPI_INIT (n ) SPI_INIT2(n, SPI_ID(n))
389
-
390
424
DT_INST_FOREACH_STATUS_OKAY (SPI_INIT )
0 commit comments