drivers: watchdog: nrfx wdt without IRQs

Add config option to build nrfx wdt driver with
NRFX_WDT_CONFIG_NO_IRQ enabled.

Signed-off-by: Lukasz Stepnicki <lukasz.stepnicki@nordicsemi.no>
This commit is contained in:
Lukasz Stepnicki 2024-07-22 16:31:16 +02:00 committed by Fabio Baltieri
commit 83e3c2eb78
3 changed files with 22 additions and 6 deletions

View file

@ -16,6 +16,11 @@ config WDT_NRFX
select NRFX_WDT130 if HAS_HW_NRF_WDT130
select NRFX_WDT131 if HAS_HW_NRF_WDT131
select NRFX_WDT132 if HAS_HW_NRF_WDT132
help
Enable support for nrfx WDT driver for nRF MCU series.
config WDT_NRFX_NO_IRQ
bool "nRF WDT nrfx driver without IRQ enabled"
depends on WDT_NRFX
help
Disable use of WDT interrupt in driver.

View file

@ -114,7 +114,8 @@ static int wdt_nrf_install_timeout(const struct device *dev,
* the timeout) from range 0xF-0xFFFFFFFF given in 32768 Hz
* clock ticks. This makes the allowed range of 0x1-0x07CFFFFF
* in milliseconds. Check if the provided value is within
* this range. */
* this range.
*/
if ((cfg->window.max == 0U) || (cfg->window.max > 0x07CFFFFF)) {
return -EINVAL;
}
@ -186,23 +187,30 @@ static void wdt_event_handler(const struct device *dev, nrf_wdt_event_t event_ty
#define WDT(idx) DT_NODELABEL(wdt##idx)
#define WDT_NRFX_WDT_IRQ(idx) \
COND_CODE_1(CONFIG_WDT_NRFX_NO_IRQ, \
(), \
(IRQ_CONNECT(DT_IRQN(WDT(idx)), DT_IRQ(WDT(idx), priority), \
nrfx_isr, nrfx_wdt_##idx##_irq_handler, 0)))
#define WDT_NRFX_WDT_DEVICE(idx) \
static void wdt_##idx##_event_handler(nrf_wdt_event_t event_type, \
uint32_t requests, \
void *p_context) \
{ \
wdt_event_handler(DEVICE_DT_GET(WDT(idx)), event_type, \
wdt_event_handler(DEVICE_DT_GET(WDT(idx)), event_type, \
requests, p_context); \
} \
static int wdt_##idx##_init(const struct device *dev) \
{ \
const struct wdt_nrfx_config *config = dev->config; \
nrfx_err_t err_code; \
IRQ_CONNECT(DT_IRQN(WDT(idx)), DT_IRQ(WDT(idx), priority), \
nrfx_isr, nrfx_wdt_##idx##_irq_handler, 0); \
WDT_NRFX_WDT_IRQ(idx); \
err_code = nrfx_wdt_init(&config->wdt, \
NULL, \
wdt_##idx##_event_handler, \
IS_ENABLED(CONFIG_WDT_NRFX_NO_IRQ) \
? NULL \
: wdt_##idx##_event_handler, \
NULL); \
if (err_code != NRFX_SUCCESS) { \
return -EBUSY; \

View file

@ -835,6 +835,9 @@
#ifdef CONFIG_NRFX_WDT
#define NRFX_WDT_ENABLED 1
#endif
#ifdef CONFIG_WDT_NRFX_NO_IRQ
#define NRFX_WDT_CONFIG_NO_IRQ 1
#endif
#ifdef CONFIG_NRFX_WDT_LOG
#define NRFX_WDT_CONFIG_LOG_ENABLED 1
#endif