diff --git a/drivers/i2c/i2c_mcux_lpi2c_rtio.c b/drivers/i2c/i2c_mcux_lpi2c_rtio.c index 9c2eb106fe7..a4ac9a2f20c 100644 --- a/drivers/i2c/i2c_mcux_lpi2c_rtio.c +++ b/drivers/i2c/i2c_mcux_lpi2c_rtio.c @@ -43,9 +43,6 @@ LOG_MODULE_REGISTER(mcux_lpi2c); struct mcux_lpi2c_config { DEVICE_MMIO_NAMED_ROM(reg_base); -#ifdef CONFIG_NXP_LP_FLEXCOMM - const struct device *parent_dev; -#endif const struct device *clock_dev; clock_control_subsys_t clock_subsys; void (*irq_config_func)(const struct device *dev); @@ -335,15 +332,7 @@ static int mcux_lpi2c_init(const struct device *dev) return error; } -#if CONFIG_NXP_LP_FLEXCOMM - /* When using LP Flexcomm driver, register the interrupt handler - * so we receive notification from the LP Flexcomm interrupt handler. - */ - nxp_lp_flexcomm_setirqhandler(config->parent_dev, dev, - LP_FLEXCOMM_PERIPH_LPI2C, mcux_lpi2c_isr); -#else config->irq_config_func(dev); -#endif i2c_rtio_init(data->ctx, dev); @@ -377,21 +366,31 @@ static DEVICE_API(i2c, mcux_lpi2c_driver_api) = { IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), \ (I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n))) -#ifdef CONFIG_NXP_LP_FLEXCOMM -#define PARENT_DEV(n) \ - .parent_dev = DEVICE_DT_GET(DT_INST_PARENT(n)), -#else -#define PARENT_DEV(n) -#endif /* CONFIG_NXP_LP_FLEXCOMM */ +/* When using LP Flexcomm driver, register the interrupt handler + * so we receive notification from the LP Flexcomm interrupt handler. + */ +#define I2C_MCUX_LPI2C_LPFLEXCOMM_IRQ_FUNC(n) \ + nxp_lp_flexcomm_setirqhandler(DEVICE_DT_GET(DT_INST_PARENT(n)), \ + DEVICE_DT_INST_GET(n), \ + LP_FLEXCOMM_PERIPH_LPI2C, \ + mcux_lpi2c_isr) + +#define I2C_MCUX_LPI2C_IRQ_SETUP_FUNC(n) \ + COND_CODE_1(DT_NODE_HAS_COMPAT(DT_INST_PARENT(n), \ + nxp_lp_flexcomm), \ + (I2C_MCUX_LPI2C_LPFLEXCOMM_IRQ_FUNC(n)), \ + (I2C_MCUX_LPI2C_MODULE_IRQ(n))) #define I2C_MCUX_LPI2C_INIT(n) \ PINCTRL_DT_INST_DEFINE(n); \ \ - static void mcux_lpi2c_config_func_##n(const struct device *dev); \ + static void mcux_lpi2c_config_func_##n(const struct device *dev)\ + { \ + I2C_MCUX_LPI2C_IRQ_SETUP_FUNC(n); \ + } \ \ static const struct mcux_lpi2c_config mcux_lpi2c_config_##n = { \ DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \ - PARENT_DEV(n) \ .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ .clock_subsys = \ (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ @@ -417,11 +416,6 @@ static DEVICE_API(i2c, mcux_lpi2c_driver_api) = { &mcux_lpi2c_data_##n, \ &mcux_lpi2c_config_##n, POST_KERNEL, \ CONFIG_I2C_INIT_PRIORITY, \ - &mcux_lpi2c_driver_api); \ - \ - static void mcux_lpi2c_config_func_##n(const struct device *dev)\ - { \ - I2C_MCUX_LPI2C_MODULE_IRQ(n); \ - } + &mcux_lpi2c_driver_api); DT_INST_FOREACH_STATUS_OKAY(I2C_MCUX_LPI2C_INIT)