Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 40 additions & 12 deletions drivers/i2c/i2c_mcux_lpi2c_rtio.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
#include <zephyr/kernel.h>
#include <zephyr/irq.h>
#include <fsl_lpi2c.h>
#if CONFIG_NXP_LP_FLEXCOMM
#include <zephyr/drivers/mfd/nxp_lp_flexcomm.h>
#endif

#include <zephyr/drivers/pinctrl.h>

Expand Down Expand Up @@ -280,7 +283,11 @@
struct mcux_lpi2c_data *data = dev->data;
LPI2C_Type *base = (LPI2C_Type *)DEVICE_MMIO_NAMED_GET(dev, reg_base);

#if CONFIG_HAS_MCUX_FLEXCOMM
LPI2C_MasterTransferHandleIRQ(LPI2C_GetInstance(base), &data->handle);
#else
LPI2C_MasterTransferHandleIRQ(base, &data->handle);
#endif
}

static int mcux_lpi2c_init(const struct device *dev)
Expand Down Expand Up @@ -346,10 +353,41 @@
#define I2C_MCUX_LPI2C_SDA_INIT(n)
#endif /* CONFIG_I2C_MCUX_LPI2C_BUS_RECOVERY */

#define I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n) \
do { \
IRQ_CONNECT(DT_INST_IRQN(n), \
DT_INST_IRQ(n, priority), \
mcux_lpi2c_isr, \
DEVICE_DT_INST_GET(n), 0); \
irq_enable(DT_INST_IRQN(n)); \
} while (false)

#define I2C_MCUX_LPI2C_MODULE_IRQ(n) \
IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), \
(I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n)))

/* 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)), \
Expand Down Expand Up @@ -378,16 +416,6 @@
&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)\
{ \
IRQ_CONNECT(DT_INST_IRQN(n), \
DT_INST_IRQ(n, priority), \
mcux_lpi2c_isr, \
DEVICE_DT_INST_GET(n), 0); \
\
irq_enable(DT_INST_IRQN(n)); \
}
&mcux_lpi2c_driver_api);

Check notice on line 420 in drivers/i2c/i2c_mcux_lpi2c_rtio.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/i2c/i2c_mcux_lpi2c_rtio.c:420 -#define I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n) \ - do { \ - IRQ_CONNECT(DT_INST_IRQN(n), \ - DT_INST_IRQ(n, priority), \ - mcux_lpi2c_isr, \ - DEVICE_DT_INST_GET(n), 0); \ - irq_enable(DT_INST_IRQN(n)); \ +#define I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n) \ + do { \ + IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), mcux_lpi2c_isr, \ + DEVICE_DT_INST_GET(n), 0); \ + irq_enable(DT_INST_IRQN(n)); \ } while (false) -#define I2C_MCUX_LPI2C_MODULE_IRQ(n) \ +#define I2C_MCUX_LPI2C_MODULE_IRQ(n) \ IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), \ (I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n))) /* 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) \ +#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)\ - { \ - 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)), \ - .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ - .irq_config_func = mcux_lpi2c_config_func_##n, \ - .bitrate = DT_INST_PROP(n, clock_frequency), \ - .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ - I2C_MCUX_LPI2C_SCL_INIT(n) \ - I2C_MCUX_LPI2C_SDA_INIT(n) \ - .bus_idle_timeout_ns = \ - UTIL_AND(DT_INST_NODE_HAS_PROP(n, bus_idle_timeout),\ - DT_INST_PROP(n, bus_idle_timeout)), \ - }; \ - \ - I2C_RTIO_DEFINE(_i2c##n##_lpi2c_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)); \ - \ - static struct mcux_lpi2c_data mcux_lpi2c_data_##n = { \ - .ctx = &CONCAT(_i2c, n, _lpi2c_rtio), \ - }; \ - \ - 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); +#define I2C_MCUX_LPI2C_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ + \ + static void mcux_lpi2c_config_func_##n(const struct device *dev) \ + { \ + I2C_MCUX_LPI2C_IRQ_SETUP_FUNC(n); \ + } \ + \ + static const struc

Check notice on line 420 in drivers/i2c/i2c_mcux_lpi2c_rtio.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/i2c/i2c_mcux_lpi2c_rtio.c:420 -#define I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n) \ - do { \ - IRQ_CONNECT(DT_INST_IRQN(n), \ - DT_INST_IRQ(n, priority), \ - mcux_lpi2c_isr, \ - DEVICE_DT_INST_GET(n), 0); \ - irq_enable(DT_INST_IRQN(n)); \ +#define I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n) \ + do { \ + IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), mcux_lpi2c_isr, \ + DEVICE_DT_INST_GET(n), 0); \ + irq_enable(DT_INST_IRQN(n)); \ } while (false) -#define I2C_MCUX_LPI2C_MODULE_IRQ(n) \ +#define I2C_MCUX_LPI2C_MODULE_IRQ(n) \ IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), \ (I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n))) /* 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) \ +#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)\ - { \ - 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)), \ - .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ - .irq_config_func = mcux_lpi2c_config_func_##n, \ - .bitrate = DT_INST_PROP(n, clock_frequency), \ - .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ - I2C_MCUX_LPI2C_SCL_INIT(n) \ - I2C_MCUX_LPI2C_SDA_INIT(n) \ - .bus_idle_timeout_ns = \ - UTIL_AND(DT_INST_NODE_HAS_PROP(n, bus_idle_timeout),\ - DT_INST_PROP(n, bus_idle_timeout)), \ - }; \ - \ - I2C_RTIO_DEFINE(_i2c##n##_lpi2c_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)); \ - \ - static struct mcux_lpi2c_data mcux_lpi2c_data_##n = { \ - .ctx = &CONCAT(_i2c, n, _lpi2c_rtio), \ - }; \ - \ - 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); +#define I2C_MCUX_LPI2C_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ + \ + static void mcux_lpi2c_config_func_##n(const struct device *dev) \ + { \ + I2C_MCUX_LPI2C_IRQ_SETUP_FUNC(n); \ + } \ + \ + static const struc

Check notice on line 420 in drivers/i2c/i2c_mcux_lpi2c_rtio.c

View workflow job for this annotation

GitHub Actions / Run compliance checks on patch series (PR)

You may want to run clang-format on this change

drivers/i2c/i2c_mcux_lpi2c_rtio.c:420 -#define I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n) \ - do { \ - IRQ_CONNECT(DT_INST_IRQN(n), \ - DT_INST_IRQ(n, priority), \ - mcux_lpi2c_isr, \ - DEVICE_DT_INST_GET(n), 0); \ - irq_enable(DT_INST_IRQN(n)); \ +#define I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n) \ + do { \ + IRQ_CONNECT(DT_INST_IRQN(n), DT_INST_IRQ(n, priority), mcux_lpi2c_isr, \ + DEVICE_DT_INST_GET(n), 0); \ + irq_enable(DT_INST_IRQN(n)); \ } while (false) -#define I2C_MCUX_LPI2C_MODULE_IRQ(n) \ +#define I2C_MCUX_LPI2C_MODULE_IRQ(n) \ IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), \ (I2C_MCUX_LPI2C_MODULE_IRQ_CONNECT(n))) /* 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) \ +#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)\ - { \ - 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)), \ - .clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \ - .clock_subsys = \ - (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\ - .irq_config_func = mcux_lpi2c_config_func_##n, \ - .bitrate = DT_INST_PROP(n, clock_frequency), \ - .pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(n), \ - I2C_MCUX_LPI2C_SCL_INIT(n) \ - I2C_MCUX_LPI2C_SDA_INIT(n) \ - .bus_idle_timeout_ns = \ - UTIL_AND(DT_INST_NODE_HAS_PROP(n, bus_idle_timeout),\ - DT_INST_PROP(n, bus_idle_timeout)), \ - }; \ - \ - I2C_RTIO_DEFINE(_i2c##n##_lpi2c_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)); \ - \ - static struct mcux_lpi2c_data mcux_lpi2c_data_##n = { \ - .ctx = &CONCAT(_i2c, n, _lpi2c_rtio), \ - }; \ - \ - 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); +#define I2C_MCUX_LPI2C_INIT(n) \ + PINCTRL_DT_INST_DEFINE(n); \ + \ + static void mcux_lpi2c_config_func_##n(const struct device *dev) \ + { \ + I2C_MCUX_LPI2C_IRQ_SETUP_FUNC(n); \ + } \ + \ + static const struc
DT_INST_FOREACH_STATUS_OKAY(I2C_MCUX_LPI2C_INIT)
Loading