drivers: i2c_rtio: MCUX 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. Applying c1286a8d8d425805fcceb3b872325fb4c439a572 to RTIO version. Authored-by: Declan Snyder <declan.snyder@nxp.com> Signed-off-by: Luis Ubieda <luisf@croxel.com>
This commit is contained in:
parent
c7a00248a6
commit
d7ebf672bd
1 changed files with 19 additions and 25 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue