From b5497d7d2f62a2f4cca0daf1235e9723a21523c0 Mon Sep 17 00:00:00 2001 From: Bartosz Bilas Date: Sun, 27 Feb 2022 13:53:35 +0100 Subject: [PATCH] drivers: wifi: eswifi: fix spi bus initialization spi_dt_spec structure initialization should not be done in the runtime during spi bus initialization because it caues kernel panic. Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/43046 Signed-off-by: Bartosz Bilas --- drivers/wifi/eswifi/eswifi_bus_spi.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/wifi/eswifi/eswifi_bus_spi.c b/drivers/wifi/eswifi/eswifi_bus_spi.c index e29425ca771..b152637cd94 100644 --- a/drivers/wifi/eswifi/eswifi_bus_spi.c +++ b/drivers/wifi/eswifi/eswifi_bus_spi.c @@ -30,7 +30,11 @@ struct eswifi_spi_data { struct k_thread poll_thread; }; -static struct eswifi_spi_data eswifi_spi0; /* Static instance */ +static struct eswifi_spi_data eswifi_spi0 = { /* Static instance */ + .bus = SPI_DT_SPEC_INST_GET(0, SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB | + SPI_WORD_SET(16) | SPI_HOLD_ON_CS | + SPI_LOCK_ON, 1000U), +}; static bool eswifi_spi_cmddata_ready(struct eswifi_spi_data *spi) { @@ -238,10 +242,11 @@ int eswifi_spi_init(struct eswifi_dev *eswifi) GPIO_INPUT); /* SPI BUS */ - spi->bus = (struct spi_dt_spec) SPI_DT_SPEC_INST_GET(0, - SPI_OP_MODE_MASTER | SPI_TRANSFER_MSB | - SPI_WORD_SET(16) | SPI_HOLD_ON_CS | - SPI_LOCK_ON, 1000U); + if (!spi_is_ready(&spi->bus)) { + LOG_ERR("SPI bus is not ready"); + return -ENODEV; + }; + eswifi->bus_data = spi; LOG_DBG("success");