diff --git a/subsys/modbus/modbus_core.c b/subsys/modbus/modbus_core.c index c1a89788fe2..78b1ceebe7d 100644 --- a/subsys/modbus/modbus_core.c +++ b/subsys/modbus/modbus_core.c @@ -15,29 +15,29 @@ LOG_MODULE_REGISTER(modbus, CONFIG_MODBUS_LOG_LEVEL); #define DT_DRV_COMPAT zephyr_modbus_serial -#define MB_RTU_DEFINE_GPIO_CFG(n, d) \ - static struct mb_rtu_gpio_config d##_cfg_##n = { \ - .name = DT_INST_GPIO_LABEL(n, d), \ - .pin = DT_INST_GPIO_PIN(n, d), \ - .flags = DT_INST_GPIO_FLAGS(n, d), \ +#define MB_RTU_DEFINE_GPIO_CFG(inst, prop) \ + static struct gpio_dt_spec prop##_cfg_##inst = { \ + .port = DEVICE_DT_GET(DT_INST_PHANDLE(inst, prop)), \ + .pin = DT_INST_GPIO_PIN(inst, prop), \ + .dt_flags = DT_INST_GPIO_FLAGS(inst, prop), \ }; -#define MB_RTU_DEFINE_GPIO_CFGS(n) \ - COND_CODE_1(DT_INST_NODE_HAS_PROP(n, de_gpios), \ - (MB_RTU_DEFINE_GPIO_CFG(n, de_gpios)), ()) \ - COND_CODE_1(DT_INST_NODE_HAS_PROP(n, re_gpios), \ - (MB_RTU_DEFINE_GPIO_CFG(n, re_gpios)), ()) +#define MB_RTU_DEFINE_GPIO_CFGS(inst) \ + COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, de_gpios), \ + (MB_RTU_DEFINE_GPIO_CFG(inst, de_gpios)), ()) \ + COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, re_gpios), \ + (MB_RTU_DEFINE_GPIO_CFG(inst, re_gpios)), ()) DT_INST_FOREACH_STATUS_OKAY(MB_RTU_DEFINE_GPIO_CFGS) -#define MB_RTU_ASSIGN_GPIO_CFG(n, d) \ - COND_CODE_1(DT_INST_NODE_HAS_PROP(n, d), \ - (&d##_cfg_##n), (NULL)) +#define MB_RTU_ASSIGN_GPIO_CFG(inst, prop) \ + COND_CODE_1(DT_INST_NODE_HAS_PROP(inst, prop), \ + (&prop##_cfg_##inst), (NULL)) -#define MODBUS_DT_GET_SERIAL_DEV(n) { \ - .dev_name = DT_INST_BUS_LABEL(n), \ - .de = MB_RTU_ASSIGN_GPIO_CFG(n, de_gpios), \ - .re = MB_RTU_ASSIGN_GPIO_CFG(n, re_gpios), \ +#define MODBUS_DT_GET_SERIAL_DEV(inst) { \ + .dev_name = DT_INST_BUS_LABEL(inst), \ + .de = MB_RTU_ASSIGN_GPIO_CFG(inst, de_gpios), \ + .re = MB_RTU_ASSIGN_GPIO_CFG(inst, re_gpios), \ }, #ifdef CONFIG_MODBUS_SERIAL @@ -46,9 +46,9 @@ static struct modbus_serial_config modbus_serial_cfg[] = { }; #endif -#define MODBUS_DT_GET_DEV(n) { \ - .iface_name = DT_INST_LABEL(n), \ - .cfg = &modbus_serial_cfg[n], \ +#define MODBUS_DT_GET_DEV(inst) { \ + .iface_name = DT_INST_LABEL(inst), \ + .cfg = &modbus_serial_cfg[inst], \ }, #define DEFINE_MODBUS_RAW_ADU(x, _) { \ diff --git a/subsys/modbus/modbus_internal.h b/subsys/modbus/modbus_internal.h index c6979934cb7..a916d21f38c 100644 --- a/subsys/modbus/modbus_internal.h +++ b/subsys/modbus/modbus_internal.h @@ -80,13 +80,6 @@ /* Modbus ADU constants */ #define MODBUS_ADU_PROTO_ID 0x0000 -struct mb_rtu_gpio_config { - const char *name; - const struct device *dev; - gpio_pin_t pin; - gpio_dt_flags_t flags; -}; - struct modbus_serial_config { /* UART device name */ const char *dev_name; @@ -97,9 +90,9 @@ struct modbus_serial_config { /* Pointer to current position in buffer */ uint8_t *uart_buf_ptr; /* Pointer to driver enable (DE) pin config */ - struct mb_rtu_gpio_config *de; + struct gpio_dt_spec *de; /* Pointer to receiver enable (nRE) pin config */ - struct mb_rtu_gpio_config *re; + struct gpio_dt_spec *re; /* RTU timer to detect frame end point */ struct k_timer rtu_timer; /* Number of bytes received or to send */ diff --git a/subsys/modbus/modbus_serial.c b/subsys/modbus/modbus_serial.c index f713ec27e56..5e748b08beb 100644 --- a/subsys/modbus/modbus_serial.c +++ b/subsys/modbus/modbus_serial.c @@ -33,7 +33,7 @@ static void modbus_serial_tx_on(struct modbus_context *ctx) struct modbus_serial_config *cfg = ctx->cfg; if (cfg->de != NULL) { - gpio_pin_set(cfg->de->dev, cfg->de->pin, 1); + gpio_pin_set(cfg->de->port, cfg->de->pin, 1); } uart_irq_tx_enable(cfg->dev); @@ -45,7 +45,7 @@ static void modbus_serial_tx_off(struct modbus_context *ctx) uart_irq_tx_disable(cfg->dev); if (cfg->de != NULL) { - gpio_pin_set(cfg->de->dev, cfg->de->pin, 0); + gpio_pin_set(cfg->de->port, cfg->de->pin, 0); } } @@ -54,7 +54,7 @@ static void modbus_serial_rx_on(struct modbus_context *ctx) struct modbus_serial_config *cfg = ctx->cfg; if (cfg->re != NULL) { - gpio_pin_set(cfg->re->dev, cfg->re->pin, 1); + gpio_pin_set(cfg->re->port, cfg->re->pin, 1); } uart_irq_rx_enable(cfg->dev); @@ -66,7 +66,7 @@ static void modbus_serial_rx_off(struct modbus_context *ctx) uart_irq_rx_disable(cfg->dev); if (cfg->re != NULL) { - gpio_pin_set(cfg->re->dev, cfg->re->pin, 0); + gpio_pin_set(cfg->re->port, cfg->re->pin, 0); } } @@ -443,26 +443,22 @@ static int configure_gpio(struct modbus_context *ctx) struct modbus_serial_config *cfg = ctx->cfg; if (cfg->de != NULL) { - cfg->de->dev = device_get_binding(cfg->de->name); - if (cfg->de->dev == NULL) { + if (!device_is_ready(cfg->de->port)) { return -ENODEV; } - if (gpio_pin_configure(cfg->de->dev, cfg->de->pin, - GPIO_OUTPUT_INACTIVE | cfg->de->flags)) { + if (gpio_pin_configure_dt(cfg->de, GPIO_OUTPUT_INACTIVE)) { return -EIO; } } if (cfg->re != NULL) { - cfg->re->dev = device_get_binding(cfg->re->name); - if (cfg->re->dev == NULL) { + if (!device_is_ready(cfg->re->port)) { return -ENODEV; } - if (gpio_pin_configure(cfg->re->dev, cfg->re->pin, - GPIO_OUTPUT_INACTIVE | cfg->re->flags)) { + if (gpio_pin_configure_dt(cfg->re, GPIO_OUTPUT_INACTIVE)) { return -EIO; } }