diff --git a/drivers/ieee802154/ieee802154_rf2xx.c b/drivers/ieee802154/ieee802154_rf2xx.c index f36edda63bf..ea0eee56757 100644 --- a/drivers/ieee802154/ieee802154_rf2xx.c +++ b/drivers/ieee802154/ieee802154_rf2xx.c @@ -841,44 +841,14 @@ static inline int configure_gpios(const struct device *dev) static inline int configure_spi(const struct device *dev) { - struct rf2xx_context *ctx = dev->data; const struct rf2xx_config *conf = dev->config; - /* Get SPI Driver Instance*/ - ctx->spi = device_get_binding(conf->spi.devname); - if (!ctx->spi) { - LOG_ERR("Failed to get instance of %s device", - conf->spi.devname); - + if (!spi_is_ready(&conf->spi)) { + LOG_ERR("SPI bus %s is not ready", + conf->spi.bus->name); return -ENODEV; } - /* Apply SPI Config: 8-bit, MSB First, MODE-0 */ - ctx->spi_cfg.operation = SPI_WORD_SET(8) | - SPI_TRANSFER_MSB; - ctx->spi_cfg.slave = conf->spi.addr; - ctx->spi_cfg.frequency = conf->spi.freq; - ctx->spi_cfg.cs = NULL; - - /* - * Get SPI Chip Select Instance - * - * This is an optinal feature configured on DTS. Some SPI controllers - * automatically set CS line by device slave address. Check your SPI - * device driver to understand if you need this option enabled. - */ - ctx->spi_cs.gpio_dev = device_get_binding(conf->spi.cs.devname); - if (ctx->spi_cs.gpio_dev) { - ctx->spi_cs.gpio_pin = conf->spi.cs.pin; - ctx->spi_cs.gpio_dt_flags = conf->spi.cs.flags; - ctx->spi_cs.delay = 0U; - - ctx->spi_cfg.cs = &ctx->spi_cs; - - LOG_DBG("SPI GPIO CS configured on %s:%u", - conf->spi.cs.devname, conf->spi.cs.pin); - } - return 0; } @@ -981,18 +951,6 @@ static struct ieee802154_radio_api rf2xx_radio_api = { UTIL_AND(DT_INST_NODE_HAS_PROP(n, gpio_pha), \ DT_INST_GPIO_FLAGS(n, gpio_pha)) -#define DRV_INST_SPI_DEV_CS_GPIOS_LABEL(n) \ - UTIL_AND(DT_INST_SPI_DEV_HAS_CS_GPIOS(n), \ - DT_INST_SPI_DEV_CS_GPIOS_LABEL(n)) - -#define DRV_INST_SPI_DEV_CS_GPIOS_PIN(n) \ - UTIL_AND(DT_INST_SPI_DEV_HAS_CS_GPIOS(n), \ - DT_INST_SPI_DEV_CS_GPIOS_PIN(n)) - -#define DRV_INST_SPI_DEV_CS_GPIOS_FLAGS(n) \ - UTIL_AND(DT_INST_SPI_DEV_HAS_CS_GPIOS(n), \ - DT_INST_SPI_DEV_CS_GPIOS_FLAGS(n)) - #define DRV_INST_LOCAL_MAC_ADDRESS(n) \ UTIL_AND(DT_INST_NODE_HAS_PROP(n, local_mac_address), \ UTIL_AND(DT_INST_PROP_LEN(n, local_mac_address) == 8, \ @@ -1023,12 +981,8 @@ static struct ieee802154_radio_api rf2xx_radio_api = { .clkm.pin = DRV_INST_GPIO_PIN(n, clkm_gpios), \ .clkm.flags = DRV_INST_GPIO_FLAGS(n, clkm_gpios), \ \ - .spi.devname = DT_INST_BUS_LABEL(n), \ - .spi.addr = DT_INST_REG_ADDR(n), \ - .spi.freq = DT_INST_PROP(n, spi_max_frequency), \ - .spi.cs.devname = DRV_INST_SPI_DEV_CS_GPIOS_LABEL(n), \ - .spi.cs.pin = DRV_INST_SPI_DEV_CS_GPIOS_PIN(n), \ - .spi.cs.flags = DRV_INST_SPI_DEV_CS_GPIOS_FLAGS(n), \ + .spi = SPI_DT_SPEC_INST_GET(n, SPI_WORD_SET(8) | \ + SPI_TRANSFER_MSB, 0), \ } #define IEEE802154_RF2XX_DEVICE_DATA(n) \ diff --git a/drivers/ieee802154/ieee802154_rf2xx.h b/drivers/ieee802154/ieee802154_rf2xx.h index 2b7ef666a71..4dfe9a4f9e0 100644 --- a/drivers/ieee802154/ieee802154_rf2xx.h +++ b/drivers/ieee802154/ieee802154_rf2xx.h @@ -80,13 +80,6 @@ struct rf2xx_dt_gpio_t { uint32_t flags; }; -struct rf2xx_dt_spi_t { - const char *devname; - uint32_t freq; - uint32_t addr; - struct rf2xx_dt_gpio_t cs; -}; - struct rf2xx_config { struct rf2xx_dt_gpio_t irq; struct rf2xx_dt_gpio_t reset; @@ -94,7 +87,7 @@ struct rf2xx_config { struct rf2xx_dt_gpio_t dig2; struct rf2xx_dt_gpio_t clkm; - struct rf2xx_dt_spi_t spi; + struct spi_dt_spec spi; uint8_t inst; uint8_t has_mac; @@ -111,10 +104,6 @@ struct rf2xx_context { const struct device *dig2_gpio; const struct device *clkm_gpio; - const struct device *spi; - struct spi_config spi_cfg; - struct spi_cs_control spi_cs; - struct gpio_callback irq_cb; struct k_thread trx_thread; diff --git a/drivers/ieee802154/ieee802154_rf2xx_iface.c b/drivers/ieee802154/ieee802154_rf2xx_iface.c index 2f8ee044d96..a6d7d921b78 100644 --- a/drivers/ieee802154/ieee802154_rf2xx_iface.c +++ b/drivers/ieee802154/ieee802154_rf2xx_iface.c @@ -56,7 +56,7 @@ void rf2xx_iface_phy_tx_start(const struct device *dev) uint8_t rf2xx_iface_reg_read(const struct device *dev, uint8_t addr) { - const struct rf2xx_context *ctx = dev->data; + const struct rf2xx_config *conf = dev->config; uint8_t status; uint8_t regval = 0; @@ -85,7 +85,7 @@ uint8_t rf2xx_iface_reg_read(const struct device *dev, .count = 2 }; - if (spi_transceive(ctx->spi, &ctx->spi_cfg, &tx, &rx) != 0) { + if (spi_transceive_dt(&conf->spi, &tx, &rx) != 0) { LOG_ERR("Failed to exec rf2xx_reg_read CMD at address %d", addr); } @@ -100,7 +100,7 @@ void rf2xx_iface_reg_write(const struct device *dev, uint8_t addr, uint8_t data) { - const struct rf2xx_context *ctx = dev->data; + const struct rf2xx_config *conf = dev->config; uint8_t status; addr |= RF2XX_RF_CMD_REG_W; @@ -128,7 +128,7 @@ void rf2xx_iface_reg_write(const struct device *dev, .count = 1 }; - if (spi_transceive(ctx->spi, &ctx->spi_cfg, &tx, &rx) != 0) { + if (spi_transceive_dt(&conf->spi, &tx, &rx) != 0) { LOG_ERR("Failed to exec rf2xx_reg_write at address %d", addr); } @@ -171,7 +171,7 @@ void rf2xx_iface_frame_read(const struct device *dev, uint8_t *data, uint8_t length) { - const struct rf2xx_context *ctx = dev->data; + const struct rf2xx_config *conf = dev->config; uint8_t cmd = RF2XX_RF_CMD_FRAME_R; const struct spi_buf tx_buf = { @@ -191,7 +191,7 @@ void rf2xx_iface_frame_read(const struct device *dev, .count = 1 }; - if (spi_transceive(ctx->spi, &ctx->spi_cfg, &tx, &rx) != 0) { + if (spi_transceive_dt(&conf->spi, &tx, &rx) != 0) { LOG_ERR("Failed to exec rf2xx_frame_read PHR"); } @@ -203,7 +203,7 @@ void rf2xx_iface_frame_write(const struct device *dev, uint8_t *data, uint8_t length) { - const struct rf2xx_context *ctx = dev->data; + const struct rf2xx_config *conf = dev->config; uint8_t cmd = RF2XX_RF_CMD_FRAME_W; uint8_t status; uint8_t phr; @@ -242,7 +242,7 @@ void rf2xx_iface_frame_write(const struct device *dev, .count = 1 }; - if (spi_transceive(ctx->spi, &ctx->spi_cfg, &tx, &rx) != 0) { + if (spi_transceive_dt(&conf->spi, &tx, &rx) != 0) { LOG_ERR("Failed to exec rf2xx_frame_write"); } @@ -255,7 +255,7 @@ void rf2xx_iface_sram_read(const struct device *dev, uint8_t *data, uint8_t length) { - const struct rf2xx_context *ctx = dev->data; + const struct rf2xx_config *conf = dev->config; uint8_t cmd = RF2XX_RF_CMD_SRAM_R; uint8_t status[2]; @@ -288,7 +288,7 @@ void rf2xx_iface_sram_read(const struct device *dev, .count = 2 }; - if (spi_transceive(ctx->spi, &ctx->spi_cfg, &tx, &rx) != 0) { + if (spi_transceive_dt(&conf->spi, &tx, &rx) != 0) { LOG_ERR("Failed to exec rf2xx_sram_read"); }