i2c_mcux_lpspi: LPflexcomm determine by inst
Determine if lpflexcomm wrapped lpi2c by instance and connect irq differently dependending on that to support platforms with both flexcomm wrapped and unwrapped lpi2c's. Signed-off-by: Declan Snyder <declan.snyder@nxp.com>
This commit is contained in:
parent
e531c709c0
commit
4f9eda6981
1 changed files with 21 additions and 27 deletions
|
|
@ -42,9 +42,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);
|
||||
|
|
@ -536,16 +533,8 @@ static int mcux_lpi2c_init(const struct device *dev)
|
|||
if (error) {
|
||||
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
|
||||
/* Interrupt is managed by this driver */
|
||||
|
||||
config->irq_config_func(dev);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -583,21 +572,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),\
|
||||
|
|
@ -616,12 +615,7 @@ static DEVICE_API(i2c, mcux_lpi2c_driver_api) = {
|
|||
I2C_DEVICE_DT_INST_DEFINE(n, mcux_lpi2c_init, NULL, \
|
||||
&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); \
|
||||
}
|
||||
CONFIG_I2C_INIT_PRIORITY, \
|
||||
&mcux_lpi2c_driver_api);
|
||||
|
||||
DT_INST_FOREACH_STATUS_OKAY(I2C_MCUX_LPI2C_INIT)
|
||||
|
|
|
|||
Loading…
Reference in a new issue