Skip to content

Commit bb9c9df

Browse files
[nrf fromlist] drivers: i2c: clean-up macros used in nrfx_twim
Removed unused macros. Moved common macros to common header. Aligned naming and style to other nrf drivers. Upstream PR #: 93083 Signed-off-by: Michał Stasiak <[email protected]>
1 parent 346e646 commit bb9c9df

File tree

3 files changed

+139
-150
lines changed

3 files changed

+139
-150
lines changed

drivers/i2c/i2c_nrfx_twim.c

Lines changed: 43 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -243,62 +243,49 @@ static DEVICE_API(i2c, i2c_nrfx_twim_driver_api) = {
243243
#define DT_DRV_COMPAT nordic_nrf_twim
244244
#endif
245245

246-
#define CONCAT_BUF_SIZE(idx) \
247-
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_concat_buf_size), \
248-
(DT_INST_PROP(idx, zephyr_concat_buf_size)), (0))
249-
#define FLASH_BUF_MAX_SIZE(idx) \
250-
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_flash_buf_max_size), \
251-
(DT_INST_PROP(idx, zephyr_flash_buf_max_size)), (0))
252-
253-
#define USES_MSG_BUF(idx) \
254-
COND_CODE_0(CONCAT_BUF_SIZE(idx), \
255-
(COND_CODE_0(FLASH_BUF_MAX_SIZE(idx), (0), (1))), \
256-
(1))
257-
#define MSG_BUF_SIZE(idx) MAX(CONCAT_BUF_SIZE(idx), FLASH_BUF_MAX_SIZE(idx))
258-
259-
#define I2C_NRFX_TWIM_DEVICE(idx) \
260-
NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(DT_DRV_INST(idx)); \
261-
NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(idx)); \
262-
BUILD_ASSERT(I2C_FREQUENCY(DT_DRV_INST(idx)) != I2C_NRFX_TWIM_INVALID_FREQUENCY, \
263-
"Wrong I2C " #idx " frequency setting in dts"); \
264-
static struct i2c_nrfx_twim_data twim_##idx##_data; \
265-
static struct i2c_nrfx_twim_common_config twim_##idx##z_config; \
266-
static void pre_init##idx(void) \
267-
{ \
268-
twim_##idx##z_config.twim = &twim_##idx##_data.twim; \
269-
twim_##idx##_data.twim.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(idx); \
270-
IRQ_CONNECT(DT_INST_IRQN(idx), DT_INST_IRQ(idx, priority), nrfx_twim_irq_handler, \
271-
&twim_##idx##_data.twim, 0); \
272-
} \
273-
IF_ENABLED(USES_MSG_BUF(idx), \
274-
(static uint8_t twim_##idx##_msg_buf[MSG_BUF_SIZE(idx)] \
275-
I2C_MEMORY_SECTION(idx);)) \
276-
PINCTRL_DT_INST_DEFINE(idx); \
277-
static struct i2c_nrfx_twim_common_config twim_##idx##z_config = { \
278-
.twim_config = \
279-
{ \
280-
.skip_gpio_cfg = true, \
281-
.skip_psel_cfg = true, \
282-
.frequency = I2C_FREQUENCY(DT_DRV_INST(idx)), \
283-
}, \
284-
.event_handler = event_handler, \
285-
.msg_buf_size = MSG_BUF_SIZE(idx), \
286-
.pre_init = pre_init##idx, \
287-
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \
288-
IF_ENABLED(USES_MSG_BUF(idx), \
289-
(.msg_buf = twim_##idx##_msg_buf,)) .max_transfer_size = \
290-
BIT_MASK(DT_INST_PROP(idx, easydma_maxcnt_bits)), \
291-
}; \
292-
PM_DEVICE_DT_INST_DEFINE(idx, twim_nrfx_pm_action, I2C_PM_ISR_SAFE(idx)); \
293-
I2C_DEVICE_DT_INST_DEINIT_DEFINE(idx, i2c_nrfx_twim_init, i2c_nrfx_twim_deinit, \
294-
PM_DEVICE_DT_INST_GET(idx), &twim_##idx##_data, \
295-
&twim_##idx##z_config, POST_KERNEL, \
296-
CONFIG_I2C_INIT_PRIORITY, &i2c_nrfx_twim_driver_api)
297-
298-
#define I2C_MEMORY_SECTION(idx) \
299-
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), memory_regions), \
300-
(__attribute__((__section__(LINKER_DT_NODE_REGION_NAME( \
301-
DT_PHANDLE(DT_DRV_INST(idx), memory_regions)))))), \
246+
#define I2C_NRFX_TWIM_DEVICE(inst) \
247+
NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(DT_DRV_INST(inst)); \
248+
NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(inst)); \
249+
BUILD_ASSERT(I2C_FREQUENCY(inst) != I2C_NRFX_TWIM_INVALID_FREQUENCY, \
250+
"Wrong I2C " #inst " frequency setting in dts"); \
251+
static struct i2c_nrfx_twim_data twim_##inst##_data; \
252+
static struct i2c_nrfx_twim_common_config twim_##inst##z_config; \
253+
static void pre_init##inst(void) \
254+
{ \
255+
twim_##inst##z_config.twim = &twim_##inst##_data.twim; \
256+
twim_##inst##_data.twim.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(inst); \
257+
IRQ_CONNECT(DT_INST_IRQN(inst), DT_INST_IRQ(inst, priority), \
258+
nrfx_twim_irq_handler, &twim_##inst##_data.twim, 0); \
259+
} \
260+
IF_ENABLED(USES_MSG_BUF(inst), \
261+
(static uint8_t twim_##inst##_msg_buf[MSG_BUF_SIZE(inst)] \
262+
I2C_MEMORY_SECTION(inst);)) \
263+
PINCTRL_DT_INST_DEFINE(inst); \
264+
static struct i2c_nrfx_twim_common_config twim_##inst##z_config = { \
265+
.twim_config = \
266+
{ \
267+
.skip_gpio_cfg = true, \
268+
.skip_psel_cfg = true, \
269+
.frequency = I2C_FREQUENCY(inst), \
270+
}, \
271+
.event_handler = event_handler, \
272+
.msg_buf_size = MSG_BUF_SIZE(inst), \
273+
.pre_init = pre_init##inst, \
274+
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst), \
275+
IF_ENABLED(USES_MSG_BUF(inst), \
276+
(.msg_buf = twim_##inst##_msg_buf,)) \
277+
.max_transfer_size = MAX_TRANSFER_SIZE(inst), \
278+
}; \
279+
PM_DEVICE_DT_INST_DEFINE(inst, twim_nrfx_pm_action, I2C_PM_ISR_SAFE(inst)); \
280+
I2C_DEVICE_DT_INST_DEINIT_DEFINE(inst, i2c_nrfx_twim_init, i2c_nrfx_twim_deinit, \
281+
PM_DEVICE_DT_INST_GET(inst), &twim_##inst##_data, \
282+
&twim_##inst##z_config, POST_KERNEL, \
283+
CONFIG_I2C_INIT_PRIORITY, &i2c_nrfx_twim_driver_api) \
284+
285+
#define I2C_MEMORY_SECTION(inst) \
286+
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(inst), memory_regions), \
287+
(__attribute__((__section__(LINKER_DT_NODE_REGION_NAME( \
288+
DT_PHANDLE(DT_DRV_INST(inst), memory_regions)))))), \
302289
())
303290

304291
DT_INST_FOREACH_STATUS_OKAY(I2C_NRFX_TWIM_DEVICE)

drivers/i2c/i2c_nrfx_twim_common.h

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ extern "C" {
2626
(bitrate == I2C_BITRATE_FAST_PLUS ? NRF_TWIM_FREQ_1000K :)) \
2727
I2C_NRFX_TWIM_INVALID_FREQUENCY)
2828

29-
#define I2C(idx) DT_NODELABEL(i2c##idx)
30-
#define I2C_HAS_PROP(idx, prop) DT_NODE_HAS_PROP(I2C(idx), prop)
31-
#define I2C_FREQUENCY(node) \
32-
I2C_NRFX_TWIM_FREQUENCY(DT_PROP_OR(node, clock_frequency, I2C_BITRATE_STANDARD))
29+
#define I2C_FREQUENCY(inst) \
30+
I2C_NRFX_TWIM_FREQUENCY(DT_INST_PROP_OR(inst, clock_frequency, I2C_BITRATE_STANDARD))
3331

3432
/* Macro determines PM actions interrupt safety level.
3533
*
@@ -38,20 +36,36 @@ extern "C" {
3836
* no longer ISR safe. This macro let's us check if we will be requesting/releasing
3937
* power domains and determines PM device ISR safety value.
4038
*/
41-
#define I2C_PM_ISR_SAFE(idx) \
42-
COND_CODE_1( \
43-
UTIL_AND( \
44-
IS_ENABLED(CONFIG_PM_DEVICE_POWER_DOMAIN), \
45-
UTIL_AND( \
46-
DT_NODE_HAS_PROP(DT_DRV_INST(idx), power_domains), \
47-
DT_NODE_HAS_STATUS_OKAY(DT_PHANDLE(DT_DRV_INST(idx), \
48-
power_domains)) \
49-
) \
50-
), \
51-
(0), \
52-
(PM_DEVICE_ISR_SAFE) \
39+
#define I2C_PM_ISR_SAFE(inst) \
40+
COND_CODE_1( \
41+
UTIL_AND( \
42+
IS_ENABLED(CONFIG_PM_DEVICE_POWER_DOMAIN), \
43+
UTIL_AND( \
44+
DT_NODE_INST_HAS_PROP(inst, power_domains), \
45+
DT_NODE_HAS_STATUS_OKAY(DT_INST_PHANDLE(inst, power_domains)) \
46+
) \
47+
), \
48+
(0), \
49+
(PM_DEVICE_ISR_SAFE) \
5350
)
5451

52+
#define CONCAT_BUF_SIZE(inst) \
53+
COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, zephyr_concat_buf_size), \
54+
(DT_INST_PROP(inst, zephyr_concat_buf_size)), (0))
55+
56+
#define FLASH_BUF_MAX_SIZE(inst) \
57+
COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, zephyr_flash_buf_max_size), \
58+
(DT_INST_PROP(inst, zephyr_flash_buf_max_size)), (0))
59+
60+
#define USES_MSG_BUF(inst) \
61+
COND_CODE_0(CONCAT_BUF_SIZE(inst), \
62+
(COND_CODE_0(FLASH_BUF_MAX_SIZE(inst), (0), (1))), \
63+
(1))
64+
65+
#define MSG_BUF_SIZE(inst) MAX(CONCAT_BUF_SIZE(inst), FLASH_BUF_MAX_SIZE(inst))
66+
67+
#define MAX_TRANSFER_SIZE(inst) BIT_MASK(DT_INST_PROP(inst, easydma_maxcnt_bits))
68+
5569
struct i2c_nrfx_twim_common_config {
5670
nrfx_twim_config_t twim_config;
5771
nrfx_twim_event_handler_t event_handler;

drivers/i2c/i2c_nrfx_twim_rtio.c

Lines changed: 66 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -219,85 +219,73 @@ static int i2c_nrfx_twim_rtio_deinit(const struct device *dev)
219219
return i2c_nrfx_twim_common_deinit(dev);
220220
}
221221

222-
#define CONCAT_BUF_SIZE(idx) \
223-
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_concat_buf_size), \
224-
(DT_INST_PROP(idx, zephyr_concat_buf_size)), (0))
225-
#define FLASH_BUF_MAX_SIZE(idx) \
226-
COND_CODE_1(DT_NODE_HAS_PROP(DT_DRV_INST(idx), zephyr_flash_buf_max_size), \
227-
(DT_INST_PROP(idx, zephyr_flash_buf_max_size)), (0))
228-
229-
#define USES_MSG_BUF(idx) \
230-
COND_CODE_0(CONCAT_BUF_SIZE(idx), (COND_CODE_0(FLASH_BUF_MAX_SIZE(idx), (0), (1))), (1))
231-
#define MSG_BUF_SIZE(idx) MAX(CONCAT_BUF_SIZE(idx), FLASH_BUF_MAX_SIZE(idx))
232-
233-
#define MSG_BUF_HAS_MEMORY_REGIONS(idx) DT_NODE_HAS_PROP(DT_DRV_INST(idx), memory_regions)
234-
235-
#define MSG_BUF_LINKER_REGION_NAME(idx) \
236-
LINKER_DT_NODE_REGION_NAME(DT_PHANDLE(DT_DRV_INST(idx), memory_regions))
237-
238-
#define MSG_BUF_ATTR_SECTION(idx) \
239-
__attribute__((__section__(MSG_BUF_LINKER_REGION_NAME(idx))))
240-
241-
#define MSG_BUF_ATTR(idx) \
242-
COND_CODE_1( \
243-
MSG_BUF_HAS_MEMORY_REGIONS(idx), \
244-
(MSG_BUF_ATTR_SECTION(idx)), \
245-
() \
222+
#define MSG_BUF_HAS_MEMORY_REGIONS(inst) DT_INST_NODE_HAS_PROP(inst, memory_regions)
223+
224+
#define MSG_BUF_LINKER_REGION_NAME(inst) \
225+
LINKER_DT_NODE_REGION_NAME(DT_INST_PHANDLE(inst, memory_regions))
226+
227+
#define MSG_BUF_ATTR_SECTION(inst) \
228+
__attribute__((__section__(MSG_BUF_LINKER_REGION_NAME(inst))))
229+
230+
#define MSG_BUF_ATTR(inst) \
231+
COND_CODE_1( \
232+
MSG_BUF_HAS_MEMORY_REGIONS(inst), \
233+
(MSG_BUF_ATTR_SECTION(inst)), \
234+
() \
246235
)
247236

248-
#define MSG_BUF_SYM(idx) \
249-
_CONCAT_3(twim_, idx, _msg_buf)
250-
251-
#define MSG_BUF_DEFINE(idx) \
252-
static uint8_t MSG_BUF_SYM(idx)[MSG_BUF_SIZE(idx)] MSG_BUF_ATTR(idx)
253-
254-
#define MAX_TRANSFER_SIZE(idx) BIT_MASK(DT_INST_PROP(idx, easydma_maxcnt_bits))
255-
256-
#define I2C_NRFX_TWIM_RTIO_DEVICE(idx) \
257-
NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(DT_DRV_INST(idx)); \
258-
NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(idx)); \
259-
BUILD_ASSERT(I2C_FREQUENCY(DT_DRV_INST(idx)) != I2C_NRFX_TWIM_INVALID_FREQUENCY, \
260-
"Wrong I2C " #idx " frequency setting in dts"); \
261-
static struct i2c_nrfx_twim_rtio_data twim_##idx##z_data = { \
262-
.twim = \
263-
{ \
264-
.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(idx), \
265-
}, \
266-
}; \
267-
static void pre_init##idx(void) \
268-
{ \
269-
twim_##idx##z_data.twim.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(idx); \
270-
IRQ_CONNECT(DT_INST_IRQN(idx), DT_INST_IRQ(idx, priority), nrfx_twim_irq_handler, \
271-
&twim_##idx##z_data.twim, 0); \
272-
} \
273-
IF_ENABLED(USES_MSG_BUF(idx), (MSG_BUF_DEFINE(idx);)) \
274-
I2C_RTIO_DEFINE(_i2c##idx##_twim_rtio, \
275-
DT_INST_PROP_OR(n, sq_size, CONFIG_I2C_RTIO_SQ_SIZE), \
276-
DT_INST_PROP_OR(n, cq_size, CONFIG_I2C_RTIO_CQ_SIZE)); \
277-
PINCTRL_DT_INST_DEFINE(idx); \
278-
static const struct i2c_nrfx_twim_rtio_config twim_##idx##z_config = { \
279-
.common = \
280-
{ \
281-
.twim_config = \
282-
{ \
283-
.skip_gpio_cfg = true, \
284-
.skip_psel_cfg = true, \
285-
.frequency = I2C_FREQUENCY(DT_DRV_INST(idx)), \
286-
}, \
287-
.event_handler = event_handler, \
288-
.msg_buf_size = MSG_BUF_SIZE(idx), \
289-
.pre_init = pre_init##idx, \
290-
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(idx), \
291-
IF_ENABLED(USES_MSG_BUF(idx), (.msg_buf = MSG_BUF_SYM(idx),)) \
292-
.max_transfer_size = MAX_TRANSFER_SIZE(idx), \
293-
.twim = &twim_##idx##z_data.twim, \
294-
}, \
295-
.ctx = &_i2c##idx##_twim_rtio, \
296-
}; \
297-
PM_DEVICE_DT_INST_DEFINE(idx, twim_nrfx_pm_action, I2C_PM_ISR_SAFE(idx)); \
298-
I2C_DEVICE_DT_INST_DEINIT_DEFINE(idx, i2c_nrfx_twim_rtio_init, i2c_nrfx_twim_rtio_deinit, \
299-
PM_DEVICE_DT_INST_GET(idx), &twim_##idx##z_data, \
300-
&twim_##idx##z_config, POST_KERNEL, \
301-
CONFIG_I2C_INIT_PRIORITY, &i2c_nrfx_twim_driver_api);
237+
#define MSG_BUF_SYM(inst) \
238+
_CONCAT_3(twim_, inst, _msg_buf)
239+
240+
#define MSG_BUF_DEFINE(inst) \
241+
static uint8_t MSG_BUF_SYM(inst)[MSG_BUF_SIZE(inst)] MSG_BUF_ATTR(inst)
242+
243+
#define I2C_NRFX_TWIM_RTIO_DEVICE(inst) \
244+
NRF_DT_CHECK_NODE_HAS_PINCTRL_SLEEP(DT_DRV_INST(inst)); \
245+
NRF_DT_CHECK_NODE_HAS_REQUIRED_MEMORY_REGIONS(DT_DRV_INST(inst)); \
246+
BUILD_ASSERT(I2C_FREQUENCY(inst) != I2C_NRFX_TWIM_INVALID_FREQUENCY, \
247+
"Wrong I2C " #inst " frequency setting in dts"); \
248+
static struct i2c_nrfx_twim_rtio_data twim_##inst##z_data = { \
249+
.twim = \
250+
{ \
251+
.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(inst), \
252+
}, \
253+
}; \
254+
static void pre_init##inst(void) \
255+
{ \
256+
twim_##inst##z_data.twim.p_twim = (NRF_TWIM_Type *)DT_INST_REG_ADDR(inst); \
257+
IRQ_CONNECT(DT_INST_IRQN(inst), DT_INST_IRQ(inst, priority), \
258+
nrfx_twim_irq_handler, &twim_##inst##z_data.twim, 0); \
259+
} \
260+
IF_ENABLED(USES_MSG_BUF(inst), (MSG_BUF_DEFINE(inst);)) \
261+
I2C_RTIO_DEFINE(_i2c##inst##_twim_rtio, \
262+
DT_INST_PROP_OR(n, sq_size, CONFIG_I2C_RTIO_SQ_SIZE), \
263+
DT_INST_PROP_OR(n, cq_size, CONFIG_I2C_RTIO_CQ_SIZE)); \
264+
PINCTRL_DT_INST_DEFINE(inst); \
265+
static const struct i2c_nrfx_twim_rtio_config twim_##inst##z_config = { \
266+
.common = \
267+
{ \
268+
.twim_config = \
269+
{ \
270+
.skip_gpio_cfg = true, \
271+
.skip_psel_cfg = true, \
272+
.frequency = I2C_FREQUENCY(inst), \
273+
}, \
274+
.event_handler = event_handler, \
275+
.msg_buf_size = MSG_BUF_SIZE(inst), \
276+
.pre_init = pre_init##inst, \
277+
.pcfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst), \
278+
IF_ENABLED(USES_MSG_BUF(inst), (.msg_buf = MSG_BUF_SYM(inst),)) \
279+
.max_transfer_size = MAX_TRANSFER_SIZE(inst), \
280+
.twim = &twim_##inst##z_data.twim, \
281+
}, \
282+
.ctx = &_i2c##inst##_twim_rtio, \
283+
}; \
284+
PM_DEVICE_DT_INST_DEFINE(inst, twim_nrfx_pm_action, I2C_PM_ISR_SAFE(inst)); \
285+
I2C_DEVICE_DT_INST_DEINIT_DEFINE(inst, i2c_nrfx_twim_rtio_init, \
286+
i2c_nrfx_twim_rtio_deinit, \
287+
PM_DEVICE_DT_INST_GET(inst), &twim_##inst##z_data, \
288+
&twim_##inst##z_config, POST_KERNEL, \
289+
CONFIG_I2C_INIT_PRIORITY, &i2c_nrfx_twim_driver_api); \
302290

303291
DT_INST_FOREACH_STATUS_OKAY(I2C_NRFX_TWIM_RTIO_DEVICE)

0 commit comments

Comments
 (0)