drivers: bluetooth: hci: spi: use spi_dt_spec

Use spi_dt_spec to simplify driver implementation.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
This commit is contained in:
Gerard Marull-Paretas 2022-01-31 10:52:09 +01:00 committed by Anas Nashif
commit cc85c6c518

View file

@ -51,10 +51,6 @@
#define GPIO_IRQ_FLAGS DT_INST_GPIO_FLAGS(0, irq_gpios) #define GPIO_IRQ_FLAGS DT_INST_GPIO_FLAGS(0, irq_gpios)
#define GPIO_RESET_PIN DT_INST_GPIO_PIN(0, reset_gpios) #define GPIO_RESET_PIN DT_INST_GPIO_PIN(0, reset_gpios)
#define GPIO_RESET_FLAGS DT_INST_GPIO_FLAGS(0, reset_gpios) #define GPIO_RESET_FLAGS DT_INST_GPIO_FLAGS(0, reset_gpios)
#if DT_INST_SPI_DEV_HAS_CS_GPIOS(0)
#define GPIO_CS_PIN DT_INST_SPI_DEV_CS_GPIOS_PIN(0)
#define GPIO_CS_FLAGS DT_INST_SPI_DEV_CS_GPIOS_FLAGS(0)
#endif /* DT_INST_SPI_DEV_HAS_CS_GPIOS(0) */
/* Max SPI buffer length for transceive operations. /* Max SPI buffer length for transceive operations.
* *
@ -105,7 +101,6 @@ void spi_dump_message(const uint8_t *pre, uint8_t *buf, uint8_t size) {}
#endif #endif
#if defined(CONFIG_BT_SPI_BLUENRG) #if defined(CONFIG_BT_SPI_BLUENRG)
static const struct device *cs_dev;
/* Define a limit when reading IRQ high */ /* Define a limit when reading IRQ high */
/* It can be required to be increased for */ /* It can be required to be increased for */
/* some particular cases. */ /* some particular cases. */
@ -126,14 +121,9 @@ struct bluenrg_aci_cmd_ll_param {
static int bt_spi_send_aci_config_data_controller_mode(void); static int bt_spi_send_aci_config_data_controller_mode(void);
#endif /* CONFIG_BT_BLUENRG_ACI */ #endif /* CONFIG_BT_BLUENRG_ACI */
static const struct device *spi_dev; static const struct spi_dt_spec bus = SPI_DT_SPEC_INST_GET(
0, SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB | SPI_WORD_SET(8), 0);
static struct spi_config spi_conf = {
.frequency = DT_INST_PROP(0, spi_max_frequency),
.operation = (SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB | SPI_WORD_SET(8)),
.slave = 0,
.cs = NULL,
};
static struct spi_buf spi_tx_buf; static struct spi_buf spi_tx_buf;
static struct spi_buf spi_rx_buf; static struct spi_buf spi_rx_buf;
static const struct spi_buf_set spi_tx = { static const struct spi_buf_set spi_tx = {
@ -152,7 +142,7 @@ static inline int bt_spi_transceive(void *tx, uint32_t tx_len,
spi_tx_buf.len = (size_t)tx_len; spi_tx_buf.len = (size_t)tx_len;
spi_rx_buf.buf = rx; spi_rx_buf.buf = rx;
spi_rx_buf.len = (size_t)rx_len; spi_rx_buf.len = (size_t)rx_len;
return spi_transceive(spi_dev, &spi_conf, &spi_tx, &spi_rx); return spi_transceive_dt(&bus, &spi_tx, &spi_rx);
} }
static inline uint16_t bt_spi_get_cmd(uint8_t *txmsg) static inline uint16_t bt_spi_get_cmd(uint8_t *txmsg)
@ -199,30 +189,19 @@ static void bt_spi_handle_vendor_evt(uint8_t *rxmsg)
*/ */
static int configure_cs(void) static int configure_cs(void)
{ {
cs_dev = device_get_binding(DT_INST_SPI_DEV_CS_GPIOS_LABEL(0));
if (!cs_dev) {
BT_ERR("Failed to initialize GPIO driver: %s",
DT_INST_SPI_DEV_CS_GPIOS_LABEL(0));
return -EIO;
}
/* Configure pin as output and set to active */ /* Configure pin as output and set to active */
gpio_pin_configure(cs_dev, GPIO_CS_PIN, return gpio_pin_configure_dt(&bus.config.cs->gpio, GPIO_OUTPUT_ACTIVE);
GPIO_OUTPUT_ACTIVE | GPIO_CS_FLAGS);
return 0;
} }
static void kick_cs(void) static void kick_cs(void)
{ {
gpio_pin_set(cs_dev, GPIO_CS_PIN, 1); gpio_pin_set_dt(&bus.config.cs->gpio, 1);
gpio_pin_set(cs_dev, GPIO_CS_PIN, 0); gpio_pin_set_dt(&bus.config.cs->gpio, 0);
} }
static void release_cs(void) static void release_cs(void)
{ {
gpio_pin_set(cs_dev, GPIO_CS_PIN, 1); gpio_pin_set_dt(&bus.config.cs->gpio, 1);
} }
static bool irq_pin_high(void) static bool irq_pin_high(void)
@ -253,26 +232,7 @@ static bool exit_irq_high_loop(void)
#else #else
static int configure_cs(void) #define configure_cs(...) 0
{
#ifdef GPIO_CS_PIN
static struct spi_cs_control spi_conf_cs;
spi_conf_cs.gpio_pin = GPIO_CS_PIN;
spi_conf_cs.gpio_dt_flags = GPIO_CS_FLAGS;
spi_conf_cs.gpio_dev = device_get_binding(
DT_INST_SPI_DEV_CS_GPIOS_LABEL(0));
if (!spi_conf_cs.gpio_dev) {
BT_ERR("Failed to initialize GPIO driver: %s",
DT_INST_SPI_DEV_CS_GPIOS_LABEL(0));
return -EIO;
}
spi_conf.cs = &spi_conf_cs;
#endif /* GPIO_CS_PIN */
return 0;
}
#define kick_cs(...) #define kick_cs(...)
#define release_cs(...) #define release_cs(...)
#define irq_pin_high(...) 0 #define irq_pin_high(...) 0
@ -553,11 +513,9 @@ static int bt_spi_init(const struct device *unused)
{ {
ARG_UNUSED(unused); ARG_UNUSED(unused);
spi_dev = device_get_binding(DT_INST_BUS_LABEL(0)); if (!spi_is_ready(&bus)) {
if (!spi_dev) { BT_ERR("SPI device not ready");
BT_ERR("Failed to initialize SPI driver: %s", return -ENODEV;
DT_INST_BUS_LABEL(0));
return -EIO;
} }
if (configure_cs()) { if (configure_cs()) {