@@ -43,9 +43,6 @@ LOG_MODULE_REGISTER(mcux_lpi2c);
4343
4444struct mcux_lpi2c_config {
4545 DEVICE_MMIO_NAMED_ROM (reg_base );
46- #ifdef CONFIG_NXP_LP_FLEXCOMM
47- const struct device * parent_dev ;
48- #endif
4946 const struct device * clock_dev ;
5047 clock_control_subsys_t clock_subsys ;
5148 void (* irq_config_func )(const struct device * dev );
@@ -335,15 +332,7 @@ static int mcux_lpi2c_init(const struct device *dev)
335332 return error ;
336333 }
337334
338- #if CONFIG_NXP_LP_FLEXCOMM
339- /* When using LP Flexcomm driver, register the interrupt handler
340- * so we receive notification from the LP Flexcomm interrupt handler.
341- */
342- nxp_lp_flexcomm_setirqhandler (config -> parent_dev , dev ,
343- LP_FLEXCOMM_PERIPH_LPI2C , mcux_lpi2c_isr );
344- #else
345335 config -> irq_config_func (dev );
346- #endif
347336
348337 i2c_rtio_init (data -> ctx , dev );
349338
@@ -377,21 +366,31 @@ static const struct i2c_driver_api mcux_lpi2c_driver_api = {
377366 IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), \
378367 (I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n)))
379368
380- #ifdef CONFIG_NXP_LP_FLEXCOMM
381- #define PARENT_DEV (n ) \
382- .parent_dev = DEVICE_DT_GET(DT_INST_PARENT(n)),
383- #else
384- #define PARENT_DEV (n )
385- #endif /* CONFIG_NXP_LP_FLEXCOMM */
369+ /* When using LP Flexcomm driver, register the interrupt handler
370+ * so we receive notification from the LP Flexcomm interrupt handler.
371+ */
372+ #define I2C_MCUX_LPI2C_LPFLEXCOMM_IRQ_FUNC (n ) \
373+ nxp_lp_flexcomm_setirqhandler(DEVICE_DT_GET(DT_INST_PARENT(n)), \
374+ DEVICE_DT_INST_GET(n), \
375+ LP_FLEXCOMM_PERIPH_LPI2C, \
376+ mcux_lpi2c_isr)
377+
378+ #define I2C_MCUX_LPI2C_IRQ_SETUP_FUNC (n ) \
379+ COND_CODE_1(DT_NODE_HAS_COMPAT(DT_INST_PARENT(n), \
380+ nxp_lp_flexcomm), \
381+ (I2C_MCUX_LPI2C_LPFLEXCOMM_IRQ_FUNC(n)), \
382+ (I2C_MCUX_LPI2C_MODULE_IRQ(n)))
386383
387384#define I2C_MCUX_LPI2C_INIT (n ) \
388385 PINCTRL_DT_INST_DEFINE(n); \
389386 \
390- static void mcux_lpi2c_config_func_##n(const struct device *dev); \
387+ static void mcux_lpi2c_config_func_##n(const struct device *dev)\
388+ { \
389+ I2C_MCUX_LPI2C_IRQ_SETUP_FUNC(n); \
390+ } \
391391 \
392392 static const struct mcux_lpi2c_config mcux_lpi2c_config_##n = { \
393393 DEVICE_MMIO_NAMED_ROM_INIT(reg_base, DT_DRV_INST(n)), \
394- PARENT_DEV(n) \
395394 .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \
396395 .clock_subsys = \
397396 (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\
@@ -417,11 +416,6 @@ static const struct i2c_driver_api mcux_lpi2c_driver_api = {
417416 &mcux_lpi2c_data_##n, \
418417 &mcux_lpi2c_config_##n, POST_KERNEL, \
419418 CONFIG_I2C_INIT_PRIORITY, \
420- &mcux_lpi2c_driver_api); \
421- \
422- static void mcux_lpi2c_config_func_##n(const struct device *dev)\
423- { \
424- I2C_MCUX_LPI2C_MODULE_IRQ(n); \
425- }
419+ &mcux_lpi2c_driver_api);
426420
427421DT_INST_FOREACH_STATUS_OKAY (I2C_MCUX_LPI2C_INIT )
0 commit comments