@@ -25,12 +25,12 @@ LOG_MODULE_REGISTER(uart_nrfx_uarte, CONFIG_UART_LOG_LEVEL);
2525#include <zephyr/drivers/pinctrl.h>
2626
2727/* Generalize PPI or DPPI channel management */
28- #if defined(CONFIG_HAS_HW_NRF_PPI )
28+ #if defined(PPI_PRESENT )
2929#include <nrfx_ppi.h>
3030#define gppi_channel_t nrf_ppi_channel_t
3131#define gppi_channel_alloc nrfx_ppi_channel_alloc
3232#define gppi_channel_enable nrfx_ppi_channel_enable
33- #elif defined(CONFIG_HAS_HW_NRF_DPPIC )
33+ #elif defined(DPPI_PRESENT )
3434#include <nrfx_dppi.h>
3535#define gppi_channel_t uint8_t
3636#define gppi_channel_alloc nrfx_dppi_channel_alloc
@@ -39,39 +39,49 @@ LOG_MODULE_REGISTER(uart_nrfx_uarte, CONFIG_UART_LOG_LEVEL);
3939#error "No PPI or DPPI"
4040#endif
4141
42+ /* Execute macro f(x) for all instances. */
43+ #define UARTE_FOR_EACH_INSTANCE (f , sep , off_code ) \
44+ NRFX_FOREACH_PRESENT(UARTE, f, sep, off_code, _)
4245
43- #if (defined(CONFIG_HAS_HW_NRF_UARTE0 ) && \
44- defined(CONFIG_UART_0_INTERRUPT_DRIVEN )) || \
45- (defined(CONFIG_HAS_HW_NRF_UARTE1 ) && \
46- defined(CONFIG_UART_1_INTERRUPT_DRIVEN )) || \
47- (defined(CONFIG_HAS_HW_NRF_UARTE2 ) && \
48- defined(CONFIG_UART_2_INTERRUPT_DRIVEN )) || \
49- (defined(CONFIG_HAS_HW_NRF_UARTE3 ) && \
50- defined(CONFIG_UART_3_INTERRUPT_DRIVEN ))
46+ /* Determine if any instance is using interrupt driven API. */
47+ #define IS_INT_DRIVEN (unused , prefix , i , _ ) \
48+ (IS_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i) && \
49+ IS_ENABLED(CONFIG_UART_##prefix##i##_INTERRUPT_DRIVEN))
50+
51+ #if UARTE_FOR_EACH_INSTANCE (IS_INT_DRIVEN , (|| ), (0 ))
5152 #define UARTE_INTERRUPT_DRIVEN 1
5253#endif
5354
54- #if (defined(CONFIG_HAS_HW_NRF_UARTE0 ) && !defined(CONFIG_UART_0_ASYNC )) || \
55- (defined(CONFIG_HAS_HW_NRF_UARTE1 ) && !defined(CONFIG_UART_1_ASYNC )) || \
56- (defined(CONFIG_HAS_HW_NRF_UARTE2 ) && !defined(CONFIG_UART_2_ASYNC )) || \
57- (defined(CONFIG_HAS_HW_NRF_UARTE3 ) && !defined(CONFIG_UART_3_ASYNC ))
55+ /* Determine if any instance is not using asynchronous API. */
56+ #define IS_NOT_ASYNC (unused , prefix , i , _ ) \
57+ (IS_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i) && \
58+ !IS_ENABLED(CONFIG_UART_##prefix##i##_ASYNC))
59+
60+ #if UARTE_FOR_EACH_INSTANCE (IS_NOT_ASYNC , (|| ), (0 ))
5861#define UARTE_ANY_NONE_ASYNC 1
5962#endif
6063
61- #if (defined(CONFIG_HAS_HW_NRF_UARTE0 ) && defined(CONFIG_UART_0_ASYNC )) || \
62- (defined(CONFIG_HAS_HW_NRF_UARTE1 ) && defined(CONFIG_UART_1_ASYNC )) || \
63- (defined(CONFIG_HAS_HW_NRF_UARTE2 ) && defined(CONFIG_UART_2_ASYNC )) || \
64- (defined(CONFIG_HAS_HW_NRF_UARTE3 ) && defined(CONFIG_UART_3_ASYNC ))
64+ /* Determine if any instance is using asynchronous API. */
65+ #define IS_ASYNC (unused , prefix , i , _ ) \
66+ (IS_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i) && \
67+ IS_ENABLED(CONFIG_UART_##prefix##i##_ASYNC))
68+
69+ #if UARTE_FOR_EACH_INSTANCE (IS_ASYNC , (|| ), (0 ))
6570#define UARTE_ANY_ASYNC 1
6671#endif
6772
68- #if defined(CONFIG_UART_0_NRF_HW_ASYNC ) || defined(CONFIG_UART_1_NRF_HW_ASYNC ) || \
69- defined(CONFIG_UART_2_NRF_HW_ASYNC ) || defined(CONFIG_UART_3_NRF_HW_ASYNC )
73+ /* Determine if any instance is using asynchronous API with HW byte counting. */
74+ #define IS_HW_ASYNC (unused , prefix , i , _ ) IS_ENABLED(CONFIG_UART_##prefix##i##_NRF_HW_ASYNC)
75+
76+ #if UARTE_FOR_EACH_INSTANCE (IS_HW_ASYNC , (|| ), (0 ))
7077#define UARTE_HW_ASYNC 1
7178#endif
7279
73- #if defined(CONFIG_UART_0_ENHANCED_POLL_OUT ) || defined(CONFIG_UART_1_ENHANCED_POLL_OUT ) || \
74- defined(CONFIG_UART_2_ENHANCED_POLL_OUT ) || defined(CONFIG_UART_3_ENHANCED_POLL_OUT )
80+ /* Determine if any instance is using enhanced poll_out feature. */
81+ #define IS_ENHANCED_POLL_OUT (unused , prefix , i , _ ) \
82+ IS_ENABLED(CONFIG_UART_##prefix##i##_ENHANCED_POLL_OUT)
83+
84+ #if UARTE_FOR_EACH_INSTANCE (IS_ENHANCED_POLL_OUT , (|| ), (0 ))
7585#define UARTE_ENHANCED_POLL_OUT 1
7686#endif
7787
@@ -2074,18 +2084,7 @@ static int uarte_nrfx_pm_action(const struct device *dev,
20742084 DT_PHANDLE(UARTE(idx), memory_regions)))))), \
20752085 ())
20762086
2077- #ifdef CONFIG_HAS_HW_NRF_UARTE0
2078- UART_NRF_UARTE_DEVICE (0 );
2079- #endif
2087+ #define COND_UART_NRF_UARTE_DEVICE (unused , prefix , i , _ ) \
2088+ IF_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i, (UART_NRF_UARTE_DEVICE(prefix##i);))
20802089
2081- #ifdef CONFIG_HAS_HW_NRF_UARTE1
2082- UART_NRF_UARTE_DEVICE (1 );
2083- #endif
2084-
2085- #ifdef CONFIG_HAS_HW_NRF_UARTE2
2086- UART_NRF_UARTE_DEVICE (2 );
2087- #endif
2088-
2089- #ifdef CONFIG_HAS_HW_NRF_UARTE3
2090- UART_NRF_UARTE_DEVICE (3 );
2091- #endif
2090+ UARTE_FOR_EACH_INSTANCE (COND_UART_NRF_UARTE_DEVICE , ( ), ( ))
0 commit comments