diff --git a/drivers/i2c/Kconfig.nrfx b/drivers/i2c/Kconfig.nrfx index 54d53363674..c6a7dbeadcf 100644 --- a/drivers/i2c/Kconfig.nrfx +++ b/drivers/i2c/Kconfig.nrfx @@ -23,25 +23,7 @@ config I2C_NRFX_TWI config I2C_NRFX_TWIM def_bool y depends on DT_HAS_NORDIC_NRF_TWIM_ENABLED - select NRFX_TWIM0 if HAS_HW_NRF_TWIM0 - select NRFX_TWIM1 if HAS_HW_NRF_TWIM1 - select NRFX_TWIM2 if HAS_HW_NRF_TWIM2 - select NRFX_TWIM3 if HAS_HW_NRF_TWIM3 - select NRFX_TWIM20 if HAS_HW_NRF_TWIM20 - select NRFX_TWIM21 if HAS_HW_NRF_TWIM21 - select NRFX_TWIM22 if HAS_HW_NRF_TWIM22 - select NRFX_TWIM23 if HAS_HW_NRF_TWIM23 - select NRFX_TWIM24 if HAS_HW_NRF_TWIM24 - select NRFX_TWIM30 if HAS_HW_NRF_TWIM30 - select NRFX_TWIM120 if HAS_HW_NRF_TWIM120 - select NRFX_TWIM130 if HAS_HW_NRF_TWIM130 - select NRFX_TWIM131 if HAS_HW_NRF_TWIM131 - select NRFX_TWIM132 if HAS_HW_NRF_TWIM132 - select NRFX_TWIM133 if HAS_HW_NRF_TWIM133 - select NRFX_TWIM134 if HAS_HW_NRF_TWIM134 - select NRFX_TWIM135 if HAS_HW_NRF_TWIM135 - select NRFX_TWIM136 if HAS_HW_NRF_TWIM136 - select NRFX_TWIM137 if HAS_HW_NRF_TWIM137 + select NRFX_TWIM config I2C_NRFX_TRANSFER_TIMEOUT int "Transfer timeout [ms]" @@ -56,23 +38,7 @@ config I2C_NRFX_TWIS depends on DT_HAS_NORDIC_NRF_TWIS_ENABLED depends on I2C_TARGET depends on I2C_TARGET_BUFFER_MODE - select NRFX_TWIS0 if HAS_HW_NRF_TWIS0 - select NRFX_TWIS1 if HAS_HW_NRF_TWIS1 - select NRFX_TWIS2 if HAS_HW_NRF_TWIS2 - select NRFX_TWIS3 if HAS_HW_NRF_TWIS3 - select NRFX_TWIS20 if HAS_HW_NRF_TWIS20 - select NRFX_TWIS21 if HAS_HW_NRF_TWIS21 - select NRFX_TWIS22 if HAS_HW_NRF_TWIS22 - select NRFX_TWIS23 if HAS_HW_NRF_TWIS23 - select NRFX_TWIS24 if HAS_HW_NRF_TWIS24 - select NRFX_TWIS30 if HAS_HW_NRF_TWIS30 - select NRFX_TWIS130 if HAS_HW_NRF_TWIS130 - select NRFX_TWIS131 if HAS_HW_NRF_TWIS131 - select NRFX_TWIS133 if HAS_HW_NRF_TWIS133 - select NRFX_TWIS134 if HAS_HW_NRF_TWIS134 - select NRFX_TWIS135 if HAS_HW_NRF_TWIS135 - select NRFX_TWIS136 if HAS_HW_NRF_TWIS136 - select NRFX_TWIS137 if HAS_HW_NRF_TWIS137 + select NRFX_TWIS if I2C_NRFX_TWIS diff --git a/drivers/i2c/i2c_nrfx_twi.c b/drivers/i2c/i2c_nrfx_twi.c index c2c0a28d875..732b6f32491 100644 --- a/drivers/i2c/i2c_nrfx_twi.c +++ b/drivers/i2c/i2c_nrfx_twi.c @@ -131,49 +131,40 @@ static DEVICE_API(i2c, i2c_nrfx_twi_driver_api) = { .recover_bus = i2c_nrfx_twi_recover_bus, }; -#define I2C_NRFX_TWI_DEVICE(idx) \ - NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(I2C(idx)); \ - BUILD_ASSERT(I2C_FREQUENCY(idx) != \ - I2C_NRFX_TWI_INVALID_FREQUENCY, \ - "Wrong I2C " #idx " frequency setting in dts"); \ - static int twi_##idx##_init(const struct device *dev) \ - { \ - IRQ_CONNECT(DT_IRQN(I2C(idx)), DT_IRQ(I2C(idx), priority), \ - nrfx_isr, nrfx_twi_##idx##_irq_handler, 0); \ - const struct i2c_nrfx_twi_config *config = dev->config; \ - int err = pinctrl_apply_state(config->pcfg, \ - PINCTRL_STATE_DEFAULT); \ - if (err < 0) { \ - return err; \ - } \ - return i2c_nrfx_twi_init(dev); \ - } \ - static struct i2c_nrfx_twi_data twi_##idx##_data = { \ - .transfer_sync = Z_SEM_INITIALIZER( \ - twi_##idx##_data.transfer_sync, 1, 1), \ - .completion_sync = Z_SEM_INITIALIZER( \ - twi_##idx##_data.completion_sync, 0, 1) \ - }; \ - PINCTRL_DT_DEFINE(I2C(idx)); \ - static const struct i2c_nrfx_twi_config twi_##idx##z_config = { \ - .twi = NRFX_TWI_INSTANCE(idx), \ - .config = { \ - .skip_gpio_cfg = true, \ - .skip_psel_cfg = true, \ - .frequency = I2C_FREQUENCY(idx), \ - }, \ - .event_handler = event_handler, \ - .pcfg = PINCTRL_DT_DEV_CONFIG_GET(I2C(idx)), \ - }; \ - PM_DEVICE_DT_DEFINE(I2C(idx), twi_nrfx_pm_action); \ - I2C_DEVICE_DT_DEFINE(I2C(idx), \ - twi_##idx##_init, \ - PM_DEVICE_DT_GET(I2C(idx)), \ - &twi_##idx##_data, \ - &twi_##idx##z_config, \ - POST_KERNEL, \ - CONFIG_I2C_INIT_PRIORITY, \ - &i2c_nrfx_twi_driver_api) +#define I2C_NRFX_TWI_DEVICE(idx) \ + NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(I2C(idx)); \ + BUILD_ASSERT(I2C_FREQUENCY(I2C(idx)) != I2C_NRFX_TWI_INVALID_FREQUENCY, \ + "Wrong I2C " #idx " frequency setting in dts"); \ + static int twi_##idx##_init(const struct device *dev) \ + { \ + IRQ_CONNECT(DT_IRQN(I2C(idx)), DT_IRQ(I2C(idx), priority), nrfx_isr, \ + nrfx_twi_##idx##_irq_handler, 0); \ + const struct i2c_nrfx_twi_config *config = dev->config; \ + int err = pinctrl_apply_state(config->pcfg, PINCTRL_STATE_DEFAULT); \ + if (err < 0) { \ + return err; \ + } \ + return i2c_nrfx_twi_init(dev); \ + } \ + static struct i2c_nrfx_twi_data twi_##idx##_data = { \ + .transfer_sync = Z_SEM_INITIALIZER(twi_##idx##_data.transfer_sync, 1, 1), \ + .completion_sync = Z_SEM_INITIALIZER(twi_##idx##_data.completion_sync, 0, 1)}; \ + PINCTRL_DT_DEFINE(I2C(idx)); \ + static const struct i2c_nrfx_twi_config twi_##idx##z_config = { \ + .twi = NRFX_TWI_INSTANCE(idx), \ + .config = \ + { \ + .skip_gpio_cfg = true, \ + .skip_psel_cfg = true, \ + .frequency = I2C_FREQUENCY(I2C(idx)), \ + }, \ + .event_handler = event_handler, \ + .pcfg = PINCTRL_DT_DEV_CONFIG_GET(I2C(idx)), \ + }; \ + PM_DEVICE_DT_DEFINE(I2C(idx), twi_nrfx_pm_action); \ + I2C_DEVICE_DT_DEFINE(I2C(idx), twi_##idx##_init, PM_DEVICE_DT_GET(I2C(idx)), \ + &twi_##idx##_data, &twi_##idx##z_config, POST_KERNEL, \ + CONFIG_I2C_INIT_PRIORITY, &i2c_nrfx_twi_driver_api) #ifdef CONFIG_HAS_HW_NRF_TWI0 I2C_NRFX_TWI_DEVICE(0); diff --git a/drivers/i2c/i2c_nrfx_twim.c b/drivers/i2c/i2c_nrfx_twim.c index bc26bf84112..d459504c4dd 100644 --- a/drivers/i2c/i2c_nrfx_twim.c +++ b/drivers/i2c/i2c_nrfx_twim.c @@ -29,9 +29,10 @@ LOG_MODULE_REGISTER(i2c_nrfx_twim, CONFIG_I2C_LOG_LEVEL); #endif struct i2c_nrfx_twim_data { + nrfx_twim_t twim; struct k_sem transfer_sync; struct k_sem completion_sync; - volatile nrfx_err_t res; + volatile int res; }; int i2c_nrfx_twim_exclusive_access_acquire(const struct device *dev, k_timeout_t timeout) @@ -81,7 +82,7 @@ static int i2c_nrfx_twim_transfer(const struct device *dev, break; } - bool dma_accessible = nrf_dma_accessible_check(&dev_config->twim, msgs[i].buf); + bool dma_accessible = nrf_dma_accessible_check(&dev_data->twim, msgs[i].buf); /* This fragment needs to be merged with the next one if: * - it is not the last fragment @@ -162,7 +163,7 @@ static int i2c_nrfx_twim_transfer(const struct device *dev, break; } - if (dev_data->res != NRFX_SUCCESS) { + if (dev_data->res < 0) { ret = -EIO; break; } @@ -198,16 +199,16 @@ static void event_handler(nrfx_twim_evt_t const *p_event, void *p_context) switch (p_event->type) { case NRFX_TWIM_EVT_DONE: - dev_data->res = NRFX_SUCCESS; + dev_data->res = 0; break; case NRFX_TWIM_EVT_ADDRESS_NACK: - dev_data->res = NRFX_ERROR_DRV_TWI_ERR_ANACK; + dev_data->res = -EFAULT; break; case NRFX_TWIM_EVT_DATA_NACK: - dev_data->res = NRFX_ERROR_DRV_TWI_ERR_DNACK; + dev_data->res = -EAGAIN; break; default: - dev_data->res = NRFX_ERROR_INTERNAL; + dev_data->res = -EIO; break; } @@ -238,142 +239,73 @@ static DEVICE_API(i2c, i2c_nrfx_twim_driver_api) = { .recover_bus = i2c_nrfx_twim_recover_bus, }; -#define CONCAT_BUF_SIZE(idx) \ - COND_CODE_1(DT_NODE_HAS_PROP(I2C(idx), zephyr_concat_buf_size), \ - (DT_PROP(I2C(idx), zephyr_concat_buf_size)), (0)) -#define FLASH_BUF_MAX_SIZE(idx) \ - COND_CODE_1(DT_NODE_HAS_PROP(I2C(idx), zephyr_flash_buf_max_size), \ - (DT_PROP(I2C(idx), zephyr_flash_buf_max_size)), (0)) +#if DT_HAS_COMPAT_STATUS_OKAY(nordic_nrf_twim) +#define DT_DRV_COMPAT nordic_nrf_twim +#endif + +#define CONCAT_BUF_SIZE(idx) \ + COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_concat_buf_size), \ + (DT_INST_PROP(idx, zephyr_concat_buf_size)), (0)) +#define FLASH_BUF_MAX_SIZE(idx) \ + COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_flash_buf_max_size), \ + (DT_INST_PROP(idx, zephyr_flash_buf_max_size)), (0)) -#define USES_MSG_BUF(idx) \ - COND_CODE_0(CONCAT_BUF_SIZE(idx), \ - (COND_CODE_0(FLASH_BUF_MAX_SIZE(idx), (0), (1))), \ +#define USES_MSG_BUF(idx) \ + COND_CODE_0(CONCAT_BUF_SIZE(idx), \ + (COND_CODE_0(FLASH_BUF_MAX_SIZE(idx), (0), (1))), \ (1)) #define MSG_BUF_SIZE(idx) MAX(CONCAT_BUF_SIZE(idx), FLASH_BUF_MAX_SIZE(idx)) -#define I2C_NRFX_TWIM_DEVICE(idx) \ - NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(I2C(idx)); \ - NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(I2C(idx)); \ - BUILD_ASSERT(I2C_FREQUENCY(idx) != \ - I2C_NRFX_TWIM_INVALID_FREQUENCY, \ - "Wrong I2C " #idx " frequency setting in dts"); \ - static void irq_connect##idx(void) \ - { \ - IRQ_CONNECT(DT_IRQN(I2C(idx)), DT_IRQ(I2C(idx), priority), \ - nrfx_isr, nrfx_twim_##idx##_irq_handler, 0); \ - } \ +#define I2C_NRFX_TWIM_DEVICE(idx) \ + NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(DT_DRV_INST(idx)); \ + NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(idx)); \ + BUILD_ASSERT(I2C_FREQUENCY(DT_DRV_INST(idx)) != I2C_NRFX_TWIM_INVALID_FREQUENCY, \ + "Wrong I2C " #idx " frequency setting in dts"); \ + static struct i2c_nrfx_twim_data twim_##idx##_data; \ + static struct i2c_nrfx_twim_common_config twim_##idx##z_config; \ + static void pre_init##idx(void) \ + { \ + twim_##idx##z_config.twim = &twim_##idx##_data.twim; \ + twim_##idx##_data.twim.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(idx); \ + IRQ_CONNECT(DT_INST_IRQN(idx), DT_INST_IRQ(idx, priority), nrfx_twim_irq_handler, \ + &twim_##idx##_data.twim, 0); \ + } \ IF_ENABLED(USES_MSG_BUF(idx), \ (static uint8_t twim_##idx##_msg_buf[MSG_BUF_SIZE(idx)] \ - I2C_MEMORY_SECTION(idx);)) \ - static struct i2c_nrfx_twim_data twim_##idx##_data; \ - PINCTRL_DT_DEFINE(I2C(idx)); \ - static const \ - struct i2c_nrfx_twim_common_config twim_##idx##z_config = { \ - .twim = NRFX_TWIM_INSTANCE(idx), \ - .twim_config = { \ - .skip_gpio_cfg = true, \ - .skip_psel_cfg = true, \ - .frequency = I2C_FREQUENCY(idx), \ - }, \ - .event_handler = event_handler, \ - .msg_buf_size = MSG_BUF_SIZE(idx), \ - .irq_connect = irq_connect##idx, \ - .pcfg = PINCTRL_DT_DEV_CONFIG_GET(I2C(idx)), \ + I2C_MEMORY_SECTION(idx);)) \ + PINCTRL_DT_INST_DEFINE(idx); \ + static struct i2c_nrfx_twim_common_config twim_##idx##z_config = { \ + .twim_config = \ + { \ + .skip_gpio_cfg = true, \ + .skip_psel_cfg = true, \ + .frequency = I2C_FREQUENCY(DT_DRV_INST(idx)), \ + }, \ + .event_handler = event_handler, \ + .msg_buf_size = MSG_BUF_SIZE(idx), \ + .pre_init = pre_init##idx, \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \ IF_ENABLED(USES_MSG_BUF(idx), \ (.msg_buf = twim_##idx##_msg_buf,)) \ .max_transfer_size = BIT_MASK( \ - DT_PROP(I2C(idx), easydma_maxcnt_bits)), \ + DT_INST_PROP(idx, easydma_maxcnt_bits)), \ }; \ - PM_DEVICE_DT_DEFINE(I2C(idx), twim_nrfx_pm_action, \ + PM_DEVICE_DT_INST_DEFINE(idx, twim_nrfx_pm_action, \ I2C_PM_ISR_SAFE(idx)); \ - I2C_DEVICE_DT_DEINIT_DEFINE(I2C(idx), \ + I2C_DEVICE_DT_INST_DEINIT_DEFINE(idx, \ i2c_nrfx_twim_init, \ i2c_nrfx_twim_deinit, \ - PM_DEVICE_DT_GET(I2C(idx)), \ + PM_DEVICE_DT_INST_GET(idx), \ &twim_##idx##_data, \ &twim_##idx##z_config, \ POST_KERNEL, \ CONFIG_I2C_INIT_PRIORITY, \ &i2c_nrfx_twim_driver_api) -#define I2C_MEMORY_SECTION(idx) \ - COND_CODE_1(I2C_HAS_PROP(idx, memory_regions), \ +#define I2C_MEMORY_SECTION(idx) \ + COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), prop), \ (__attribute__((__section__(LINKER_DT_NODE_REGION_NAME( \ - DT_PHANDLE(I2C(idx), memory_regions)))))), \ + DT_PHANDLE(DT_DRV_INST(idx), memory_regions)))))), \ ()) -#ifdef CONFIG_HAS_HW_NRF_TWIM0 -I2C_NRFX_TWIM_DEVICE(0); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM1 -I2C_NRFX_TWIM_DEVICE(1); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM2 -I2C_NRFX_TWIM_DEVICE(2); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM3 -I2C_NRFX_TWIM_DEVICE(3); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM20 -I2C_NRFX_TWIM_DEVICE(20); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM21 -I2C_NRFX_TWIM_DEVICE(21); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM22 -I2C_NRFX_TWIM_DEVICE(22); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM23 -I2C_NRFX_TWIM_DEVICE(23); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM24 -I2C_NRFX_TWIM_DEVICE(24); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM30 -I2C_NRFX_TWIM_DEVICE(30); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM120 -I2C_NRFX_TWIM_DEVICE(120); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM130 -I2C_NRFX_TWIM_DEVICE(130); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM131 -I2C_NRFX_TWIM_DEVICE(131); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM132 -I2C_NRFX_TWIM_DEVICE(132); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM133 -I2C_NRFX_TWIM_DEVICE(133); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM134 -I2C_NRFX_TWIM_DEVICE(134); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM135 -I2C_NRFX_TWIM_DEVICE(135); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM136 -I2C_NRFX_TWIM_DEVICE(136); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM137 -I2C_NRFX_TWIM_DEVICE(137); -#endif +DT_INST_FOREACH_STATUS_OKAY(I2C_NRFX_TWIM_DEVICE) diff --git a/drivers/i2c/i2c_nrfx_twim_common.c b/drivers/i2c/i2c_nrfx_twim_common.c index f7fd0d097b0..7e8dda45c9a 100644 --- a/drivers/i2c/i2c_nrfx_twim_common.c +++ b/drivers/i2c/i2c_nrfx_twim_common.c @@ -20,15 +20,15 @@ int i2c_nrfx_twim_recover_bus(const struct device *dev) enum pm_device_state state; uint32_t scl_pin; uint32_t sda_pin; - nrfx_err_t err; + int err; - scl_pin = nrf_twim_scl_pin_get(config->twim.p_twim); - sda_pin = nrf_twim_sda_pin_get(config->twim.p_twim); + scl_pin = nrf_twim_scl_pin_get(config->twim->p_twim); + sda_pin = nrf_twim_sda_pin_get(config->twim->p_twim); /* disable peripheral if active (required to release SCL/SDA lines) */ (void)pm_device_state_get(dev, &state); if (state == PM_DEVICE_STATE_ACTIVE) { - nrfx_twim_disable(&config->twim); + nrfx_twim_disable(config->twim); } err = nrfx_twim_bus_recover(scl_pin, sda_pin); @@ -36,10 +36,10 @@ int i2c_nrfx_twim_recover_bus(const struct device *dev) /* restore peripheral if it was active before */ if (state == PM_DEVICE_STATE_ACTIVE) { (void)pinctrl_apply_state(config->pcfg, PINCTRL_STATE_DEFAULT); - nrfx_twim_enable(&config->twim); + nrfx_twim_enable(config->twim); } - return (err == NRFX_SUCCESS ? 0 : -EBUSY); + return err; } int i2c_nrfx_twim_configure(const struct device *dev, uint32_t i2c_config) @@ -52,14 +52,14 @@ int i2c_nrfx_twim_configure(const struct device *dev, uint32_t i2c_config) switch (I2C_SPEED_GET(i2c_config)) { case I2C_SPEED_STANDARD: - nrf_twim_frequency_set(config->twim.p_twim, NRF_TWIM_FREQ_100K); + nrf_twim_frequency_set(config->twim->p_twim, NRF_TWIM_FREQ_100K); break; case I2C_SPEED_FAST: - nrf_twim_frequency_set(config->twim.p_twim, NRF_TWIM_FREQ_400K); + nrf_twim_frequency_set(config->twim->p_twim, NRF_TWIM_FREQ_400K); break; #if NRF_TWIM_HAS_1000_KHZ_FREQ case I2C_SPEED_FAST_PLUS: - nrf_twim_frequency_set(config->twim.p_twim, NRF_TWIM_FREQ_1000K); + nrf_twim_frequency_set(config->twim->p_twim, NRF_TWIM_FREQ_1000K); break; #endif default: @@ -80,8 +80,6 @@ int i2c_nrfx_twim_msg_transfer(const struct device *dev, uint8_t flags, uint8_t .p_primary_buf = buf, .primary_length = buf_len, }; - nrfx_err_t res; - int ret = 0; if (buf_len > config->max_transfer_size) { LOG_ERR("Trying to transfer more than the maximum size " @@ -90,16 +88,8 @@ int i2c_nrfx_twim_msg_transfer(const struct device *dev, uint8_t flags, uint8_t return -ENOSPC; } - res = nrfx_twim_xfer(&config->twim, &cur_xfer, - (flags & I2C_MSG_STOP) ? 0 : NRFX_TWIM_FLAG_TX_NO_STOP); - if (res != NRFX_SUCCESS) { - if (res == NRFX_ERROR_BUSY) { - ret = -EBUSY; - } else { - ret = -EIO; - } - } - return ret; + return nrfx_twim_xfer(config->twim, &cur_xfer, + (flags & I2C_MSG_STOP) ? 0 : NRFX_TWIM_FLAG_TX_NO_STOP); } void twim_nrfx_pm_resume(const struct device *dev) @@ -107,14 +97,14 @@ void twim_nrfx_pm_resume(const struct device *dev) const struct i2c_nrfx_twim_common_config *config = dev->config; (void)pinctrl_apply_state(config->pcfg, PINCTRL_STATE_DEFAULT); - nrfx_twim_enable(&config->twim); + nrfx_twim_enable(config->twim); } void twim_nrfx_pm_suspend(const struct device *dev) { const struct i2c_nrfx_twim_common_config *config = dev->config; - nrfx_twim_disable(&config->twim); + nrfx_twim_disable(config->twim); (void)pinctrl_apply_state(config->pcfg, PINCTRL_STATE_SLEEP); } @@ -138,12 +128,12 @@ int i2c_nrfx_twim_common_init(const struct device *dev) { const struct i2c_nrfx_twim_common_config *config = dev->config; - config->irq_connect(); + config->pre_init(); (void)pinctrl_apply_state(config->pcfg, PINCTRL_STATE_SLEEP); - if (nrfx_twim_init(&config->twim, &config->twim_config, config->event_handler, - (void *)dev) != NRFX_SUCCESS) { + if (nrfx_twim_init(config->twim, &config->twim_config, config->event_handler, (void *)dev) < + 0) { LOG_ERR("Failed to initialize device: %s", dev->name); return -EIO; } @@ -175,6 +165,6 @@ int i2c_nrfx_twim_common_deinit(const struct device *dev) #endif /* Uninit device hardware */ - nrfx_twim_uninit(&config->twim); + nrfx_twim_uninit(config->twim); return 0; } diff --git a/drivers/i2c/i2c_nrfx_twim_common.h b/drivers/i2c/i2c_nrfx_twim_common.h index d476ba3f05f..d6b2474b20d 100644 --- a/drivers/i2c/i2c_nrfx_twim_common.h +++ b/drivers/i2c/i2c_nrfx_twim_common.h @@ -28,8 +28,8 @@ extern "C" { #define I2C(idx) DT_NODELABEL(i2c##idx) #define I2C_HAS_PROP(idx, prop) DT_NODE_HAS_PROP(I2C(idx), prop) -#define I2C_FREQUENCY(idx) I2C_NRFX_TWIM_FREQUENCY(DT_PROP_OR(I2C(idx), clock_frequency, \ - I2C_BITRATE_STANDARD)) +#define I2C_FREQUENCY(node) \ + I2C_NRFX_TWIM_FREQUENCY(DT_PROP_OR(node, clock_frequency, I2C_BITRATE_STANDARD)) /* Macro determines PM actions interrupt safety level. * @@ -43,8 +43,8 @@ extern "C" { UTIL_AND( \ IS_ENABLED(CONFIG_PM_DEVICE_POWER_DOMAIN), \ UTIL_AND( \ - DT_NODE_HAS_PROP(I2C(idx), power_domains), \ - DT_NODE_HAS_STATUS_OKAY(DT_PHANDLE(I2C(idx), power_domains)) \ + DT_NODE_HAS_PROP(DT_DRV_INST(idx), power_domains), \ + DT_NODE_HAS_STATUS_OKAY(DT_PHANDLE(DT_DRV_INST(idx), power_domains)) \ ) \ ), \ (0), \ @@ -52,14 +52,14 @@ extern "C" { ) struct i2c_nrfx_twim_common_config { - nrfx_twim_t twim; nrfx_twim_config_t twim_config; - nrfx_twim_evt_handler_t event_handler; + nrfx_twim_event_handler_t event_handler; uint16_t msg_buf_size; - void (*irq_connect)(void); + void (*pre_init)(void); const struct pinctrl_dev_config *pcfg; uint8_t *msg_buf; uint16_t max_transfer_size; + nrfx_twim_t *twim; }; int i2c_nrfx_twim_common_init(const struct device *dev); diff --git a/drivers/i2c/i2c_nrfx_twim_rtio.c b/drivers/i2c/i2c_nrfx_twim_rtio.c index 7326deaafb0..b6683ffef2a 100644 --- a/drivers/i2c/i2c_nrfx_twim_rtio.c +++ b/drivers/i2c/i2c_nrfx_twim_rtio.c @@ -21,12 +21,15 @@ LOG_MODULE_REGISTER(i2c_nrfx_twim, CONFIG_I2C_LOG_LEVEL); +#define DT_DRV_COMPAT nordic_nrf_twim + struct i2c_nrfx_twim_rtio_config { struct i2c_nrfx_twim_common_config common; struct i2c_rtio *ctx; }; struct i2c_nrfx_twim_rtio_data { + nrfx_twim_t twim; uint8_t *user_rx_buf; uint16_t user_rx_buf_size; }; @@ -217,21 +220,20 @@ static int i2c_nrfx_twim_rtio_deinit(const struct device *dev) } #define CONCAT_BUF_SIZE(idx) \ - COND_CODE_1(DT_NODE_HAS_PROP(I2C(idx), zephyr_concat_buf_size), \ - (DT_PROP(I2C(idx), zephyr_concat_buf_size)), (0)) + COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_concat_buf_size), \ + (DT_INST_PROP(idx, zephyr_concat_buf_size)), (0)) #define FLASH_BUF_MAX_SIZE(idx) \ - COND_CODE_1(DT_NODE_HAS_PROP(I2C(idx), zephyr_flash_buf_max_size), \ - (DT_PROP(I2C(idx), zephyr_flash_buf_max_size)), (0)) + COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_flash_buf_max_size), \ + (DT_INST_PROP(idx, zephyr_flash_buf_max_size)), (0)) #define USES_MSG_BUF(idx) \ COND_CODE_0(CONCAT_BUF_SIZE(idx), (COND_CODE_0(FLASH_BUF_MAX_SIZE(idx), (0), (1))), (1)) #define MSG_BUF_SIZE(idx) MAX(CONCAT_BUF_SIZE(idx), FLASH_BUF_MAX_SIZE(idx)) -#define MSG_BUF_HAS_MEMORY_REGIONS(idx) \ - DT_NODE_HAS_PROP(I2C(idx), memory_regions) +#define MSG_BUF_HAS_MEMORY_REGIONS(idx) DT_NODE_HAS_PROP(DT_DRV_INST(idx), memory_regions) -#define MSG_BUF_LINKER_REGION_NAME(idx) \ - LINKER_DT_NODE_REGION_NAME(DT_PHANDLE(I2C(idx), memory_regions)) +#define MSG_BUF_LINKER_REGION_NAME(idx) \ + LINKER_DT_NODE_REGION_NAME(DT_PHANDLE(DT_DRV_INST(idx), memory_regions)) #define MSG_BUF_ATTR_SECTION(idx) \ __attribute__((__section__(MSG_BUF_LINKER_REGION_NAME(idx)))) @@ -249,122 +251,52 @@ static int i2c_nrfx_twim_rtio_deinit(const struct device *dev) #define MSG_BUF_DEFINE(idx) \ static uint8_t MSG_BUF_SYM(idx)[MSG_BUF_SIZE(idx)] MSG_BUF_ATTR(idx) -#define MAX_TRANSFER_SIZE(idx) \ - BIT_MASK(DT_PROP(I2C(idx), easydma_maxcnt_bits)) +#define MAX_TRANSFER_SIZE(idx) BIT_MASK(DT_INST_PROP(idx, easydma_maxcnt_bits)) #define I2C_NRFX_TWIM_RTIO_DEVICE(idx) \ - NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(I2C(idx)); \ - NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(I2C(idx)); \ - BUILD_ASSERT(I2C_FREQUENCY(idx) != I2C_NRFX_TWIM_INVALID_FREQUENCY, \ + NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(DT_DRV_INST(idx)); \ + NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(idx)); \ + BUILD_ASSERT(I2C_FREQUENCY(DT_DRV_INST(idx)) != I2C_NRFX_TWIM_INVALID_FREQUENCY, \ "Wrong I2C " #idx " frequency setting in dts"); \ - static void irq_connect##idx(void) \ + static struct i2c_nrfx_twim_rtio_data twim_##idx##z_data = { \ + .twim = \ + { \ + .p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(idx), \ + }, \ + }; \ + static void pre_init##idx(void) \ { \ - IRQ_CONNECT(DT_IRQN(I2C(idx)), DT_IRQ(I2C(idx), priority), nrfx_isr, \ - nrfx_twim_##idx##_irq_handler, 0); \ + twim_##idx##z_data.twim.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(idx); \ + IRQ_CONNECT(DT_INST_IRQN(idx), DT_INST_IRQ(idx, priority), nrfx_twim_irq_handler, \ + &twim_##idx##z_data.twim, 0); \ } \ IF_ENABLED(USES_MSG_BUF(idx), (MSG_BUF_DEFINE(idx);)) \ I2C_RTIO_DEFINE(_i2c##idx##_twim_rtio, \ DT_INST_PROP_OR(n, sq_size, CONFIG_I2C_RTIO_SQ_SIZE), \ DT_INST_PROP_OR(n, cq_size, CONFIG_I2C_RTIO_CQ_SIZE)); \ - PINCTRL_DT_DEFINE(I2C(idx)); \ - static struct i2c_nrfx_twim_rtio_data twim_##idx##z_data; \ + PINCTRL_DT_INST_DEFINE(idx); \ static const struct i2c_nrfx_twim_rtio_config twim_##idx##z_config = { \ - .common = \ - { \ - .twim = NRFX_TWIM_INSTANCE(idx), \ - .twim_config = \ - { \ - .skip_gpio_cfg = true, \ - .skip_psel_cfg = true, \ - .frequency = I2C_FREQUENCY(idx), \ - }, \ - .event_handler = event_handler, \ - .msg_buf_size = MSG_BUF_SIZE(idx), \ - .irq_connect = irq_connect##idx, \ - .pcfg = PINCTRL_DT_DEV_CONFIG_GET(I2C(idx)), \ - IF_ENABLED(USES_MSG_BUF(idx), (.msg_buf = MSG_BUF_SYM(idx),)) \ - .max_transfer_size = MAX_TRANSFER_SIZE(idx), \ - }, \ - .ctx = &_i2c##idx##_twim_rtio, \ + .common = { \ + .twim_config = \ + { \ + .skip_gpio_cfg = true, \ + .skip_psel_cfg = true, \ + .frequency = I2C_FREQUENCY(DT_DRV_INST(idx)), \ + }, \ + .event_handler = event_handler, \ + .msg_buf_size = MSG_BUF_SIZE(idx), \ + .pre_init = pre_init##idx, \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \ + IF_ENABLED(USES_MSG_BUF(idx), (.msg_buf = MSG_BUF_SYM(idx),)) .max_transfer_size = \ + MAX_TRANSFER_SIZE(idx), \ + .twim = &twim_##idx##z_data.twim, \ + }, \ + .ctx = &_i2c##idx##_twim_rtio, \ }; \ - PM_DEVICE_DT_DEFINE(I2C(idx), twim_nrfx_pm_action, I2C_PM_ISR_SAFE(idx)); \ - I2C_DEVICE_DT_DEINIT_DEFINE(I2C(idx), i2c_nrfx_twim_rtio_init, i2c_nrfx_twim_rtio_deinit, \ - PM_DEVICE_DT_GET(I2C(idx)), &twim_##idx##z_data, \ - &twim_##idx##z_config, POST_KERNEL, CONFIG_I2C_INIT_PRIORITY, \ - &i2c_nrfx_twim_driver_api); - -#ifdef CONFIG_HAS_HW_NRF_TWIM0 -I2C_NRFX_TWIM_RTIO_DEVICE(0); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM1 -I2C_NRFX_TWIM_RTIO_DEVICE(1); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM2 -I2C_NRFX_TWIM_RTIO_DEVICE(2); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM3 -I2C_NRFX_TWIM_RTIO_DEVICE(3); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM20 -I2C_NRFX_TWIM_RTIO_DEVICE(20); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM21 -I2C_NRFX_TWIM_RTIO_DEVICE(21); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM22 -I2C_NRFX_TWIM_RTIO_DEVICE(22); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM23 -I2C_NRFX_TWIM_RTIO_DEVICE(23); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM24 -I2C_NRFX_TWIM_RTIO_DEVICE(24); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM30 -I2C_NRFX_TWIM_RTIO_DEVICE(30); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM120 -I2C_NRFX_TWIM_RTIO_DEVICE(120); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM130 -I2C_NRFX_TWIM_RTIO_DEVICE(130); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM131 -I2C_NRFX_TWIM_RTIO_DEVICE(131); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM132 -I2C_NRFX_TWIM_RTIO_DEVICE(132); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM133 -I2C_NRFX_TWIM_RTIO_DEVICE(133); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM134 -I2C_NRFX_TWIM_RTIO_DEVICE(134); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM135 -I2C_NRFX_TWIM_RTIO_DEVICE(135); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM136 -I2C_NRFX_TWIM_RTIO_DEVICE(136); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIM137 -I2C_NRFX_TWIM_RTIO_DEVICE(137); -#endif + PM_DEVICE_DT_INST_DEFINE(idx, twim_nrfx_pm_action, I2C_PM_ISR_SAFE(idx)); \ + I2C_DEVICE_DT_INST_DEINIT_DEFINE(idx, i2c_nrfx_twim_rtio_init, i2c_nrfx_twim_rtio_deinit, \ + PM_DEVICE_DT_INST_GET(idx), &twim_##idx##z_data, \ + &twim_##idx##z_config, POST_KERNEL, \ + CONFIG_I2C_INIT_PRIORITY, &i2c_nrfx_twim_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(I2C_NRFX_TWIM_RTIO_DEVICE) diff --git a/drivers/i2c/i2c_nrfx_twis.c b/drivers/i2c/i2c_nrfx_twis.c index 0fd9b667d23..3c8b3159d61 100644 --- a/drivers/i2c/i2c_nrfx_twis.c +++ b/drivers/i2c/i2c_nrfx_twis.c @@ -16,26 +16,10 @@ #define DT_DRV_COMPAT nordic_nrf_twis -#define SHIM_NRF_TWIS_NODE(id) \ - DT_NODELABEL(_CONCAT(i2c, id)) +#define SHIM_NRF_TWIS_HAS_MEMORY_REGIONS(id) DT_NODE_HAS_PROP(DT_DRV_INST(id), memory_regions) -#define SHIM_NRF_TWIS_DEVICE_GET(id) \ - DEVICE_DT_GET(SHIM_NRF_TWIS_NODE(id)) - -#define SHIM_NRF_TWIS_IRQ_HANDLER(id) \ - _CONCAT_3(nrfx_twis_, id, _irq_handler) - -#define SHIM_NRF_TWIS_IRQN(id) \ - DT_IRQN(SHIM_NRF_TWIS_NODE(id)) - -#define SHIM_NRF_TWIS_IRQ_PRIO(id) \ - DT_IRQ(SHIM_NRF_TWIS_NODE(id), priority) - -#define SHIM_NRF_TWIS_HAS_MEMORY_REGIONS(id) \ - DT_NODE_HAS_PROP(SHIM_NRF_TWIS_NODE(id), memory_regions) - -#define SHIM_NRF_TWIS_LINKER_REGION_NAME(id) \ - LINKER_DT_NODE_REGION_NAME(DT_PHANDLE(SHIM_NRF_TWIS_NODE(id), memory_regions)) +#define SHIM_NRF_TWIS_LINKER_REGION_NAME(id) \ + LINKER_DT_NODE_REGION_NAME(DT_PHANDLE(DT_DRV_INST(id), memory_regions)) #define SHIM_NRF_TWIS_BUF_ATTR_SECTION(id) \ __attribute__((__section__(SHIM_NRF_TWIS_LINKER_REGION_NAME(id)))) @@ -53,14 +37,14 @@ LOG_MODULE_REGISTER(i2c_nrfx_twis, CONFIG_I2C_LOG_LEVEL); struct shim_nrf_twis_config { - nrfx_twis_t twis; - void (*irq_connect)(void); + void (*pre_init)(void); void (*event_handler)(nrfx_twis_evt_t const *event); const struct pinctrl_dev_config *pcfg; uint8_t *buf; }; struct shim_nrf_twis_data { + nrfx_twis_t twis; struct i2c_target_config *target_config; bool enabled; }; @@ -105,7 +89,7 @@ static void shim_nrf_twis_enable(const struct device *dev) } (void)pinctrl_apply_state(dev_config->pcfg, PINCTRL_STATE_DEFAULT); - nrfx_twis_enable(&dev_config->twis); + nrfx_twis_enable(&dev_data->twis); dev_data->enabled = true; } @@ -119,7 +103,7 @@ static void shim_nrf_twis_disable(const struct device *dev) } dev_data->enabled = false; - nrfx_twis_disable(&dev_config->twis); + nrfx_twis_disable(&dev_data->twis); (void)pinctrl_apply_state(dev_config->pcfg, PINCTRL_STATE_SLEEP); } @@ -129,10 +113,10 @@ static void shim_nrf_twis_handle_read_req(const struct device *dev) const struct shim_nrf_twis_config *dev_config = dev->config; struct i2c_target_config *target_config = dev_data->target_config; const struct i2c_target_callbacks *callbacks = target_config->callbacks; - const nrfx_twis_t *twis = &dev_config->twis; + nrfx_twis_t *twis = &dev_data->twis; uint8_t *buf; uint32_t buf_size; - nrfx_err_t err; + int err; if (callbacks->buf_read_requested(target_config, &buf, &buf_size)) { LOG_ERR("no buffer provided"); @@ -147,7 +131,7 @@ static void shim_nrf_twis_handle_read_req(const struct device *dev) memcpy(dev_config->buf, buf, buf_size); err = nrfx_twis_tx_prepare(twis, dev_config->buf, buf_size); - if (err != NRFX_SUCCESS) { + if (err < 0) { LOG_ERR("tx prepare failed"); return; } @@ -155,12 +139,13 @@ static void shim_nrf_twis_handle_read_req(const struct device *dev) static void shim_nrf_twis_handle_write_req(const struct device *dev) { + struct shim_nrf_twis_data *dev_data = dev->data; const struct shim_nrf_twis_config *dev_config = dev->config; - const nrfx_twis_t *twis = &dev_config->twis; - nrfx_err_t err; + nrfx_twis_t *twis = &dev_data->twis; + int err; err = nrfx_twis_rx_prepare(twis, dev_config->buf, SHIM_NRF_TWIS_BUF_SIZE); - if (err != NRFX_SUCCESS) { + if (err < 0) { LOG_ERR("rx prepare failed"); return; } @@ -172,7 +157,7 @@ static void shim_nrf_twis_handle_write_done(const struct device *dev) const struct shim_nrf_twis_config *dev_config = dev->config; struct i2c_target_config *target_config = dev_data->target_config; const struct i2c_target_callbacks *callbacks = target_config->callbacks; - const nrfx_twis_t *twis = &dev_config->twis; + nrfx_twis_t *twis = &dev_data->twis; callbacks->buf_write_received(target_config, dev_config->buf, nrfx_twis_rx_amount(twis)); } @@ -223,9 +208,8 @@ static int shim_nrf_twis_target_register(const struct device *dev, struct i2c_target_config *target_config) { struct shim_nrf_twis_data *dev_data = dev->data; - const struct shim_nrf_twis_config *dev_config = dev->config; - const nrfx_twis_t *twis = &dev_config->twis; - nrfx_err_t err; + nrfx_twis_t *twis = &dev_data->twis; + int err; const nrfx_twis_config_t config = { .addr = { target_config->address, @@ -242,7 +226,7 @@ static int shim_nrf_twis_target_register(const struct device *dev, shim_nrf_twis_disable(dev); err = nrfx_twis_reconfigure(twis, &config); - if (err != NRFX_SUCCESS) { + if (err < 0) { return -ENODEV; } @@ -276,25 +260,25 @@ const struct i2c_driver_api shim_nrf_twis_api = { static int shim_nrf_twis_init(const struct device *dev) { + struct shim_nrf_twis_data *dev_data = dev->data; const struct shim_nrf_twis_config *dev_config = dev->config; - nrfx_err_t err; + int err; const nrfx_twis_config_t config = { .skip_gpio_cfg = true, .skip_psel_cfg = true, }; - err = nrfx_twis_init(&dev_config->twis, &config, dev_config->event_handler); - if (err != NRFX_SUCCESS) { + dev_config->pre_init(); + err = nrfx_twis_init(&dev_data->twis, &config, dev_config->event_handler); + if (err < 0) { return -ENODEV; } - dev_config->irq_connect(); return pm_device_driver_init(dev, shim_nrf_twis_pm_action_cb); } static int shim_nrf_twis_deinit(const struct device *dev) { - const struct shim_nrf_twis_config *dev_config = dev->config; struct shim_nrf_twis_data *dev_data = dev->data; if (dev_data->target_config != NULL) { @@ -317,127 +301,45 @@ static int shim_nrf_twis_deinit(const struct device *dev) #endif /* Uninit device hardware */ - nrfx_twis_uninit(&dev_config->twis); + nrfx_twis_uninit(&dev_data->twis); return 0; } #define SHIM_NRF_TWIS_NAME(id, name) \ _CONCAT_4(shim_nrf_twis_, name, _, id) -#define SHIM_NRF_TWIS_DEVICE_DEFINE(id) \ - NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(SHIM_NRF_TWIS_NODE(id)); \ - static void SHIM_NRF_TWIS_NAME(id, irq_connect)(void) \ - { \ - IRQ_CONNECT( \ - SHIM_NRF_TWIS_IRQN(id), \ - SHIM_NRF_TWIS_IRQ_PRIO(id), \ - nrfx_isr, \ - SHIM_NRF_TWIS_IRQ_HANDLER(id), \ - 0 \ - ); \ - } \ - \ - static void SHIM_NRF_TWIS_NAME(id, event_handler)(nrfx_twis_evt_t const *event) \ - { \ - shim_nrf_twis_event_handler(SHIM_NRF_TWIS_DEVICE_GET(id), event); \ - } \ - \ - static struct shim_nrf_twis_data SHIM_NRF_TWIS_NAME(id, data); \ - \ - PINCTRL_DT_DEFINE(SHIM_NRF_TWIS_NODE(id)); \ - \ - static uint8_t SHIM_NRF_TWIS_NAME(id, buf) \ - [SHIM_NRF_TWIS_BUF_SIZE] SHIM_NRF_TWIS_BUF_ATTR(id); \ - \ - static const struct shim_nrf_twis_config SHIM_NRF_TWIS_NAME(id, config) = { \ - .twis = NRFX_TWIS_INSTANCE(id), \ - .irq_connect = SHIM_NRF_TWIS_NAME(id, irq_connect), \ - .event_handler = SHIM_NRF_TWIS_NAME(id, event_handler), \ - .pcfg = PINCTRL_DT_DEV_CONFIG_GET(SHIM_NRF_TWIS_NODE(id)), \ - .buf = SHIM_NRF_TWIS_NAME(id, buf), \ - }; \ - \ - PM_DEVICE_DT_DEFINE( \ - SHIM_NRF_TWIS_NODE(id), \ - shim_nrf_twis_pm_action_cb, \ - ); \ - \ - DEVICE_DT_DEINIT_DEFINE( \ - SHIM_NRF_TWIS_NODE(id), \ - shim_nrf_twis_init, \ - shim_nrf_twis_deinit, \ - PM_DEVICE_DT_GET(SHIM_NRF_TWIS_NODE(id)), \ - &SHIM_NRF_TWIS_NAME(id, data), \ - &SHIM_NRF_TWIS_NAME(id, config), \ - POST_KERNEL, \ - CONFIG_I2C_INIT_PRIORITY, \ - &shim_nrf_twis_api \ - ); - -#ifdef CONFIG_HAS_HW_NRF_TWIS0 -SHIM_NRF_TWIS_DEVICE_DEFINE(0); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS1 -SHIM_NRF_TWIS_DEVICE_DEFINE(1); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS2 -SHIM_NRF_TWIS_DEVICE_DEFINE(2); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS3 -SHIM_NRF_TWIS_DEVICE_DEFINE(3); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS20 -SHIM_NRF_TWIS_DEVICE_DEFINE(20); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS21 -SHIM_NRF_TWIS_DEVICE_DEFINE(21); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS22 -SHIM_NRF_TWIS_DEVICE_DEFINE(22); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS23 -SHIM_NRF_TWIS_DEVICE_DEFINE(23); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS24 -SHIM_NRF_TWIS_DEVICE_DEFINE(24); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS30 -SHIM_NRF_TWIS_DEVICE_DEFINE(30); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS130 -SHIM_NRF_TWIS_DEVICE_DEFINE(130); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS131 -SHIM_NRF_TWIS_DEVICE_DEFINE(131); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS133 -SHIM_NRF_TWIS_DEVICE_DEFINE(133); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS134 -SHIM_NRF_TWIS_DEVICE_DEFINE(134); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS135 -SHIM_NRF_TWIS_DEVICE_DEFINE(135); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS136 -SHIM_NRF_TWIS_DEVICE_DEFINE(136); -#endif - -#ifdef CONFIG_HAS_HW_NRF_TWIS137 -SHIM_NRF_TWIS_DEVICE_DEFINE(137); -#endif +#define SHIM_NRF_TWIS_DEVICE_DEFINE(id) \ + static struct shim_nrf_twis_data SHIM_NRF_TWIS_NAME(id, data); \ + NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(id)); \ + static void SHIM_NRF_TWIS_NAME(id, pre_init)(void) \ + { \ + SHIM_NRF_TWIS_NAME(id, data).twis.p_reg = (NRF_TWIS_Type *)DT_INST_REG_ADDR(id); \ + IRQ_CONNECT(DT_INST_IRQN(id), DT_INST_IRQ(id, priority), nrfx_twis_irq_handler, \ + &SHIM_NRF_TWIS_NAME(id, data).twis, 0); \ + } \ + \ + static void SHIM_NRF_TWIS_NAME(id, event_handler)(nrfx_twis_evt_t const *event) \ + { \ + shim_nrf_twis_event_handler(DEVICE_DT_INST_GET(id), event); \ + } \ + \ + PINCTRL_DT_INST_DEFINE(id); \ + \ + static uint8_t SHIM_NRF_TWIS_NAME(id, \ + buf)[SHIM_NRF_TWIS_BUF_SIZE] SHIM_NRF_TWIS_BUF_ATTR(id); \ + \ + static const struct shim_nrf_twis_config SHIM_NRF_TWIS_NAME(id, config) = { \ + .pre_init = SHIM_NRF_TWIS_NAME(id, pre_init), \ + .event_handler = SHIM_NRF_TWIS_NAME(id, event_handler), \ + .pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(id), \ + .buf = SHIM_NRF_TWIS_NAME(id, buf), \ + }; \ + \ + PM_DEVICE_DT_INST_DEFINE(id, shim_nrf_twis_pm_action_cb, ); \ + \ + DEVICE_DT_INST_DEINIT_DEFINE(id, shim_nrf_twis_init, shim_nrf_twis_deinit, \ + PM_DEVICE_DT_INST_GET(id), &SHIM_NRF_TWIS_NAME(id, data), \ + &SHIM_NRF_TWIS_NAME(id, config), POST_KERNEL, \ + CONFIG_I2C_INIT_PRIORITY, &shim_nrf_twis_api); + +DT_INST_FOREACH_STATUS_OKAY(SHIM_NRF_TWIS_DEVICE_DEFINE) diff --git a/modules/hal_nordic/nrfx/Kconfig b/modules/hal_nordic/nrfx/Kconfig index 523931be649..c8403d04024 100644 --- a/modules/hal_nordic/nrfx/Kconfig +++ b/modules/hal_nordic/nrfx/Kconfig @@ -905,195 +905,10 @@ config NRFX_TWI1 select NRFX_TWI config NRFX_TWIM - bool - -config NRFX_TWIM0 - bool "TWIM0 driver instance" - depends on $(dt_nodelabel_exists,i2c0) && !SOC_SERIES_NRF51X - select NRFX_TWIM - -config NRFX_TWIM1 - bool "TWIM1 driver instance" - depends on $(dt_nodelabel_exists,i2c1) && !SOC_SERIES_NRF51X - select NRFX_TWIM - -config NRFX_TWIM2 - bool "TWIM2 driver instance" - depends on $(dt_nodelabel_exists,i2c2) - select NRFX_TWIM - -config NRFX_TWIM3 - bool "TWIM3 driver instance" - depends on $(dt_nodelabel_exists,i2c3) - select NRFX_TWIM - -config NRFX_TWIM20 - bool "TWIM20 driver instance" - depends on $(dt_nodelabel_exists,i2c20) - select NRFX_TWIM - -config NRFX_TWIM21 - bool "TWIM21 driver instance" - depends on $(dt_nodelabel_exists,i2c21) - select NRFX_TWIM - -config NRFX_TWIM22 - bool "TWIM22 driver instance" - depends on $(dt_nodelabel_exists,i2c22) - select NRFX_TWIM - -config NRFX_TWIM23 - bool "TWIM23 driver instance" - depends on $(dt_nodelabel_exists,i2c23) - select NRFX_TWIM - -config NRFX_TWIM24 - bool "TWIM24 driver instance" - depends on $(dt_nodelabel_exists,i2c24) - select NRFX_TWIM - -config NRFX_TWIM30 - bool "TWIM30 driver instance" - depends on $(dt_nodelabel_exists,i2c30) - select NRFX_TWIM - -config NRFX_TWIM120 - bool "TWIM120 driver instance" - depends on $(dt_nodelabel_exists,i2c120) - select NRFX_TWIM - -config NRFX_TWIM130 - bool "TWIM130 driver instance" - depends on $(dt_nodelabel_exists,i2c130) - select NRFX_TWIM - -config NRFX_TWIM131 - bool "TWIM131 driver instance" - depends on $(dt_nodelabel_exists,i2c131) - select NRFX_TWIM - -config NRFX_TWIM132 - bool "TWIM132 driver instance" - depends on $(dt_nodelabel_exists,i2c132) - select NRFX_TWIM - -config NRFX_TWIM133 - bool "TWIM133 driver instance" - depends on $(dt_nodelabel_exists,i2c133) - select NRFX_TWIM - -config NRFX_TWIM134 - bool "TWIM134 driver instance" - depends on $(dt_nodelabel_exists,i2c134) - select NRFX_TWIM - -config NRFX_TWIM135 - bool "TWIM135 driver instance" - depends on $(dt_nodelabel_exists,i2c135) - select NRFX_TWIM - -config NRFX_TWIM136 - bool "TWIM136 driver instance" - depends on $(dt_nodelabel_exists,i2c136) - select NRFX_TWIM - -config NRFX_TWIM137 - bool "TWIM137 driver instance" - depends on $(dt_nodelabel_exists,i2c137) - select NRFX_TWIM + bool "NRFX driver for TWIM peripheral" config NRFX_TWIS - bool - -config NRFX_TWIS0 - bool "TWIS0 driver instance" - depends on $(dt_nodelabel_exists,i2c0) && !SOC_SERIES_NRF51X - select NRFX_TWIS - -config NRFX_TWIS1 - bool "TWIS1 driver instance" - depends on $(dt_nodelabel_exists,i2c1) && !SOC_SERIES_NRF51X - select NRFX_TWIS - -config NRFX_TWIS2 - bool "TWIS2 driver instance" - depends on $(dt_nodelabel_exists,i2c2) - select NRFX_TWIS - -config NRFX_TWIS3 - bool "TWIS3 driver instance" - depends on $(dt_nodelabel_exists,i2c3) - select NRFX_TWIS - -config NRFX_TWIS20 - bool "TWIS20 driver instance" - depends on $(dt_nodelabel_exists,i2c20) - select NRFX_TWIS - -config NRFX_TWIS21 - bool "TWIS21 driver instance" - depends on $(dt_nodelabel_exists,i2c21) - select NRFX_TWIS - -config NRFX_TWIS22 - bool "TWIS22 driver instance" - depends on $(dt_nodelabel_exists,i2c22) - select NRFX_TWIS - -config NRFX_TWIS23 - bool "TWIS23 driver instance" - depends on $(dt_nodelabel_exists,i2c23) - select NRFX_TWIS - -config NRFX_TWIS24 - bool "TWIS24 driver instance" - depends on $(dt_nodelabel_exists,i2c24) - select NRFX_TWIS - -config NRFX_TWIS30 - bool "TWIS30 driver instance" - depends on $(dt_nodelabel_exists,i2c30) - select NRFX_TWIS - -config NRFX_TWIS130 - bool "TWIS130 driver instance" - depends on $(dt_nodelabel_exists,i2c130) - select NRFX_TWIS - -config NRFX_TWIS131 - bool "TWIS131 driver instance" - depends on $(dt_nodelabel_exists,i2c131) - select NRFX_TWIS - -config NRFX_TWIS132 - bool "TWIS132 driver instance" - depends on $(dt_nodelabel_exists,i2c132) - select NRFX_TWIS - -config NRFX_TWIS133 - bool "TWIS133 driver instance" - depends on $(dt_nodelabel_exists,i2c133) - select NRFX_TWIS - -config NRFX_TWIS134 - bool "TWIS134 driver instance" - depends on $(dt_nodelabel_exists,i2c134) - select NRFX_TWIS - -config NRFX_TWIS135 - bool "TWIS135 driver instance" - depends on $(dt_nodelabel_exists,i2c135) - select NRFX_TWIS - -config NRFX_TWIS136 - bool "TWIS136 driver instance" - depends on $(dt_nodelabel_exists,i2c136) - select NRFX_TWIS - -config NRFX_TWIS137 - bool "TWIS137 driver instance" - depends on $(dt_nodelabel_exists,i2c137) - select NRFX_TWIS + bool "NRFX driver for TWIS peripheral" config NRFX_UART bool diff --git a/modules/hal_nordic/nrfx/nrfx_glue.c b/modules/hal_nordic/nrfx/nrfx_glue.c index 4e7fc94e11d..dd972ee039d 100644 --- a/modules/hal_nordic/nrfx/nrfx_glue.c +++ b/modules/hal_nordic/nrfx/nrfx_glue.c @@ -45,3 +45,25 @@ char const *nrfx_error_string_get(nrfx_err_t code) default: return "unknown"; } } + +char const *nrfx_new_error_string_get(int code) +{ + #define NRFX_NEW_ERROR_STRING_CASE(code) case code: return #code + switch (-code) + { + NRFX_NEW_ERROR_STRING_CASE(0); + NRFX_NEW_ERROR_STRING_CASE(ECANCELED); + NRFX_NEW_ERROR_STRING_CASE(ENOMEM); + NRFX_NEW_ERROR_STRING_CASE(ENOTSUP); + NRFX_NEW_ERROR_STRING_CASE(EINVAL); + NRFX_NEW_ERROR_STRING_CASE(EINPROGRESS); + NRFX_NEW_ERROR_STRING_CASE(E2BIG); + NRFX_NEW_ERROR_STRING_CASE(ETIMEDOUT); + NRFX_NEW_ERROR_STRING_CASE(EPERM); + NRFX_NEW_ERROR_STRING_CASE(EFAULT); + NRFX_NEW_ERROR_STRING_CASE(EACCES); + NRFX_NEW_ERROR_STRING_CASE(EBUSY); + NRFX_NEW_ERROR_STRING_CASE(EALREADY); + default: return "unknown"; + } +} diff --git a/modules/hal_nordic/nrfx/nrfx_kconfig.h b/modules/hal_nordic/nrfx/nrfx_kconfig.h index 8103f041a4a..300b2c3a07d 100644 --- a/modules/hal_nordic/nrfx/nrfx_kconfig.h +++ b/modules/hal_nordic/nrfx/nrfx_kconfig.h @@ -760,63 +760,6 @@ #ifdef CONFIG_NRFX_TWIM_LOG #define NRFX_TWIM_CONFIG_LOG_ENABLED 1 #endif -#ifdef CONFIG_NRFX_TWIM0 -#define NRFX_TWIM0_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM1 -#define NRFX_TWIM1_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM2 -#define NRFX_TWIM2_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM3 -#define NRFX_TWIM3_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM20 -#define NRFX_TWIM20_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM21 -#define NRFX_TWIM21_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM22 -#define NRFX_TWIM22_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM23 -#define NRFX_TWIM23_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM24 -#define NRFX_TWIM24_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM30 -#define NRFX_TWIM30_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM120 -#define NRFX_TWIM120_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM130 -#define NRFX_TWIM130_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM131 -#define NRFX_TWIM131_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM132 -#define NRFX_TWIM132_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM133 -#define NRFX_TWIM133_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM134 -#define NRFX_TWIM134_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM135 -#define NRFX_TWIM135_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM136 -#define NRFX_TWIM136_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIM137 -#define NRFX_TWIM137_ENABLED 1 -#endif #ifdef CONFIG_NRF52_ANOMALY_219_WORKAROUND #define NRF52_ERRATA_219_ENABLE_WORKAROUND 1 #endif @@ -830,60 +773,6 @@ #ifdef CONFIG_NRFX_TWIS_LOG #define NRFX_TWIS_CONFIG_LOG_ENABLED 1 #endif -#ifdef CONFIG_NRFX_TWIS0 -#define NRFX_TWIS0_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS1 -#define NRFX_TWIS1_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS2 -#define NRFX_TWIS2_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS3 -#define NRFX_TWIS3_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS20 -#define NRFX_TWIS20_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS21 -#define NRFX_TWIS21_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS22 -#define NRFX_TWIS22_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS23 -#define NRFX_TWIS23_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS24 -#define NRFX_TWIS24_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS30 -#define NRFX_TWIS30_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS130 -#define NRFX_TWIS130_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS131 -#define NRFX_TWIS131_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS132 -#define NRFX_TWIS132_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS133 -#define NRFX_TWIS133_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS134 -#define NRFX_TWIS134_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS135 -#define NRFX_TWIS135_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS136 -#define NRFX_TWIS136_ENABLED 1 -#endif -#ifdef CONFIG_NRFX_TWIS137 -#define NRFX_TWIS137_ENABLED 1 -#endif #ifdef CONFIG_NRFX_UART #define NRFX_UART_ENABLED 1 diff --git a/modules/hal_nordic/nrfx/nrfx_log.h b/modules/hal_nordic/nrfx/nrfx_log.h index 682388d7dd1..973ca672b53 100644 --- a/modules/hal_nordic/nrfx/nrfx_log.h +++ b/modules/hal_nordic/nrfx/nrfx_log.h @@ -128,6 +128,16 @@ LOG_MODULE_REGISTER(NRFX_MODULE_PREFIX, NRFX_MODULE_LOG_LEVEL); #define NRFX_LOG_ERROR_STRING_GET(error_code) nrfx_error_string_get(error_code) extern char const *nrfx_error_string_get(nrfx_err_t code); +/** + * @brief Macro for getting the textual representation of a given errno error code. + * + * @param[in] error_code Errno error code. + * + * @return String containing the textual representation of the errno error code. + */ +#define NRFX_NEW_LOG_ERROR_STRING_GET(error_code) nrfx_new_error_string_get(error_code) +extern char const *nrfx_new_error_string_get(int code); + /** @} */ #ifdef __cplusplus diff --git a/soc/nordic/common/Kconfig.peripherals b/soc/nordic/common/Kconfig.peripherals index fa7fd2a411a..4177eb99e29 100644 --- a/soc/nordic/common/Kconfig.peripherals +++ b/soc/nordic/common/Kconfig.peripherals @@ -501,117 +501,6 @@ config HAS_HW_NRF_TWI0 config HAS_HW_NRF_TWI1 def_bool $(dt_nodelabel_enabled_with_compat,i2c1,$(DT_COMPAT_NORDIC_NRF_TWI)) -config HAS_HW_NRF_TWIM0 - def_bool $(dt_nodelabel_enabled_with_compat,i2c0,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM1 - def_bool $(dt_nodelabel_enabled_with_compat,i2c1,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM2 - def_bool $(dt_nodelabel_enabled_with_compat,i2c2,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM3 - def_bool $(dt_nodelabel_enabled_with_compat,i2c3,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM20 - def_bool $(dt_nodelabel_enabled_with_compat,i2c20,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM21 - def_bool $(dt_nodelabel_enabled_with_compat,i2c21,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM22 - def_bool $(dt_nodelabel_enabled_with_compat,i2c22,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM23 - def_bool $(dt_nodelabel_enabled_with_compat,i2c23,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM24 - def_bool $(dt_nodelabel_enabled_with_compat,i2c24,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM30 - def_bool $(dt_nodelabel_enabled_with_compat,i2c30,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM120 - def_bool $(dt_nodelabel_enabled_with_compat,i2c120,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM130 - def_bool $(dt_nodelabel_enabled_with_compat,i2c130,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM131 - def_bool $(dt_nodelabel_enabled_with_compat,i2c131,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM132 - def_bool $(dt_nodelabel_enabled_with_compat,i2c132,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM133 - def_bool $(dt_nodelabel_enabled_with_compat,i2c133,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM134 - def_bool $(dt_nodelabel_enabled_with_compat,i2c134,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM135 - def_bool $(dt_nodelabel_enabled_with_compat,i2c135,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM136 - def_bool $(dt_nodelabel_enabled_with_compat,i2c136,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIM137 - def_bool $(dt_nodelabel_enabled_with_compat,i2c137,$(DT_COMPAT_NORDIC_NRF_TWIM)) - -config HAS_HW_NRF_TWIS0 - def_bool $(dt_nodelabel_enabled_with_compat,i2c0,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS1 - def_bool $(dt_nodelabel_enabled_with_compat,i2c1,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS2 - def_bool $(dt_nodelabel_enabled_with_compat,i2c2,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS3 - def_bool $(dt_nodelabel_enabled_with_compat,i2c3,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS20 - def_bool $(dt_nodelabel_enabled_with_compat,i2c20,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS21 - def_bool $(dt_nodelabel_enabled_with_compat,i2c21,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS22 - def_bool $(dt_nodelabel_enabled_with_compat,i2c22,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS23 - def_bool $(dt_nodelabel_enabled_with_compat,i2c23,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS24 - def_bool $(dt_nodelabel_enabled_with_compat,i2c24,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS30 - def_bool $(dt_nodelabel_enabled_with_compat,i2c30,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS130 - def_bool $(dt_nodelabel_enabled_with_compat,i2c130,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS131 - def_bool $(dt_nodelabel_enabled_with_compat,i2c131,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS132 - def_bool $(dt_nodelabel_enabled_with_compat,i2c132,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS133 - def_bool $(dt_nodelabel_enabled_with_compat,i2c133,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS134 - def_bool $(dt_nodelabel_enabled_with_compat,i2c134,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS135 - def_bool $(dt_nodelabel_enabled_with_compat,i2c135,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS136 - def_bool $(dt_nodelabel_enabled_with_compat,i2c136,$(DT_COMPAT_NORDIC_NRF_TWIS)) - -config HAS_HW_NRF_TWIS137 - def_bool $(dt_nodelabel_enabled_with_compat,i2c137,$(DT_COMPAT_NORDIC_NRF_TWIS)) - config HAS_HW_NRF_UART0 def_bool $(dt_nodelabel_enabled_with_compat,uart0,$(DT_COMPAT_NORDIC_NRF_UART)) diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/bl54l15_dvk_nrf54l15_cpuapp.conf b/tests/boards/nrf/i2c/i2c_slave/boards/bl54l15_dvk_nrf54l15_cpuapp.conf deleted file mode 100644 index eae536f3656..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/bl54l15_dvk_nrf54l15_cpuapp.conf +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright 2024 Nordic Semiconductor ASA -# Copyright 2025 Ezurio LLC -# SPDX-License-Identifier: Apache-2.0 - -CONFIG_NRFX_TWIS22=y diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/bl54l15u_dvk_nrf54l15_cpuapp.conf b/tests/boards/nrf/i2c/i2c_slave/boards/bl54l15u_dvk_nrf54l15_cpuapp.conf deleted file mode 100644 index eae536f3656..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/bl54l15u_dvk_nrf54l15_cpuapp.conf +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright 2024 Nordic Semiconductor ASA -# Copyright 2025 Ezurio LLC -# SPDX-License-Identifier: Apache-2.0 - -CONFIG_NRFX_TWIS22=y diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/nrf52840dk_nrf52840.conf b/tests/boards/nrf/i2c/i2c_slave/boards/nrf52840dk_nrf52840.conf deleted file mode 100644 index e79ad7a8126..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/nrf52840dk_nrf52840.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_NRFX_TWIS1=y diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/nrf5340dk_nrf5340_cpuapp.conf b/tests/boards/nrf/i2c/i2c_slave/boards/nrf5340dk_nrf5340_cpuapp.conf deleted file mode 100644 index a7bedf1f04b..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/nrf5340dk_nrf5340_cpuapp.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_NRFX_TWIS2=y diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54h20dk_nrf54h20_cpuapp.conf b/tests/boards/nrf/i2c/i2c_slave/boards/nrf54h20dk_nrf54h20_cpuapp.conf deleted file mode 100644 index 157e0a11f72..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54h20dk_nrf54h20_cpuapp.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_NRFX_TWIS131=y diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54h20dk_nrf54h20_cpuppr.conf b/tests/boards/nrf/i2c/i2c_slave/boards/nrf54h20dk_nrf54h20_cpuppr.conf deleted file mode 100644 index 157e0a11f72..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54h20dk_nrf54h20_cpuppr.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_NRFX_TWIS131=y diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54l15dk_nrf54l15_cpuapp.conf b/tests/boards/nrf/i2c/i2c_slave/boards/nrf54l15dk_nrf54l15_cpuapp.conf deleted file mode 100644 index b01af3b36a7..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54l15dk_nrf54l15_cpuapp.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_NRFX_TWIS22=y diff --git a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54lm20dk_nrf54lm20a_cpuapp.conf b/tests/boards/nrf/i2c/i2c_slave/boards/nrf54lm20dk_nrf54lm20a_cpuapp.conf deleted file mode 100644 index b01af3b36a7..00000000000 --- a/tests/boards/nrf/i2c/i2c_slave/boards/nrf54lm20dk_nrf54lm20a_cpuapp.conf +++ /dev/null @@ -1 +0,0 @@ -CONFIG_NRFX_TWIS22=y diff --git a/tests/boards/nrf/i2c/i2c_slave/prj.conf b/tests/boards/nrf/i2c/i2c_slave/prj.conf index 4b19609ecfb..e96142fe744 100644 --- a/tests/boards/nrf/i2c/i2c_slave/prj.conf +++ b/tests/boards/nrf/i2c/i2c_slave/prj.conf @@ -1,2 +1,3 @@ CONFIG_I2C=y CONFIG_ZTEST=y +CONFIG_NRFX_TWIS=y diff --git a/tests/boards/nrf/i2c/i2c_slave/src/main.c b/tests/boards/nrf/i2c/i2c_slave/src/main.c index 78e6acec880..392753ba2ba 100644 --- a/tests/boards/nrf/i2c/i2c_slave/src/main.c +++ b/tests/boards/nrf/i2c/i2c_slave/src/main.c @@ -17,24 +17,6 @@ #include -#if CONFIG_NRFX_TWIS1 -#define I2C_S_INSTANCE 1 -#elif CONFIG_NRFX_TWIS2 -#define I2C_S_INSTANCE 2 -#elif CONFIG_NRFX_TWIS20 -#define I2C_S_INSTANCE 20 -#elif CONFIG_NRFX_TWIS21 -#define I2C_S_INSTANCE 21 -#elif CONFIG_NRFX_TWIS22 -#define I2C_S_INSTANCE 22 -#elif CONFIG_NRFX_TWIS30 -#define I2C_S_INSTANCE 30 -#elif CONFIG_NRFX_TWIS131 -#define I2C_S_INSTANCE 131 -#else -#error "TWIS instance not enabled or not supported" -#endif - #define NODE_SENSOR DT_NODELABEL(sensor) #define NODE_TWIS DT_ALIAS(i2c_slave) @@ -46,7 +28,9 @@ #define TEST_DATA_SIZE 6 static const uint8_t msg[TEST_DATA_SIZE] = "Nordic"; -static const nrfx_twis_t twis = NRFX_TWIS_INSTANCE(I2C_S_INSTANCE); +static nrfx_twis_t twis = { + .p_reg = (NRF_TWIS_Type *)DT_REG_ADDR(NODE_TWIS) +}; static uint8_t i2c_slave_buffer[TEST_DATA_SIZE] TWIS_MEMORY_SECTION; static uint8_t i2c_master_buffer[TEST_DATA_SIZE]; @@ -104,7 +88,7 @@ static void *test_setup(void) zassert_ok(ret); IRQ_CONNECT(DT_IRQN(NODE_TWIS), DT_IRQ(NODE_TWIS, priority), - NRFX_TWIS_INST_HANDLER_GET(I2C_S_INSTANCE), NULL, 0); + nrfx_twis_irq_handler, &twis, 0); nrfx_twis_enable(&twis);