Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions modules/nrf_wifi/bus/spi_if.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ static struct qspi_config *spim_config;
static const struct spi_dt_spec spi_spec =
SPI_DT_SPEC_GET(NRF7002_NODE, SPI_WORD_SET(8) | SPI_TRANSFER_MSB, 0);

static struct spi_dt_spec spi_spec_8mhz =
SPI_DT_SPEC_GET(NRF7002_NODE, SPI_WORD_SET(8) | SPI_TRANSFER_MSB, 0);

static int spim_xfer_tx(unsigned int addr, void *data, unsigned int len)
{
int err;
Expand Down Expand Up @@ -116,15 +119,15 @@ int spim_read_reg(uint32_t reg_addr, uint8_t *reg_value)
return err;
}

int spim_write_reg(uint32_t reg_addr, const uint8_t reg_value)
int spim_write_reg(const struct spi_dt_spec *spi_spec, uint32_t reg_addr, const uint8_t reg_value)
{
int err;
uint8_t tx_buffer[] = { reg_addr, reg_value };

const struct spi_buf tx_buf = { .buf = tx_buffer, .len = sizeof(tx_buffer) };
const struct spi_buf_set tx = { .buffers = &tx_buf, .count = 1 };

err = spi_transceive_dt(&spi_spec, &tx, NULL);
err = spi_transceive_dt(spi_spec, &tx, NULL);

if (err) {
LOG_ERR("SPI error: %d", err);
Expand All @@ -150,7 +153,7 @@ int spim_RDSR2(const struct device *dev, uint8_t *rdsr1)

int spim_WRSR2(const struct device *dev, const uint8_t wrsr2)
{
return spim_write_reg(0x3F, wrsr2);
return spim_write_reg(&spi_spec, 0x3F, wrsr2);
}

int _spim_wait_while_rpu_awake(void)
Expand Down Expand Up @@ -208,7 +211,13 @@ int spim_wait_while_rpu_wake_write(void)

int spim_cmd_rpu_wakeup(uint32_t data)
{
return spim_write_reg(0x3F, data);
struct spi_dt_spec *spi_spec_tmp = (struct spi_dt_spec *)&spi_spec;

if (spi_spec.config.frequency > MHZ(8)) {
spi_spec_tmp = &spi_spec_8mhz;
}
/* Waking RPU works reliably only with lowest frequency (8MHz) */
return spim_write_reg(spi_spec_tmp, 0x3F, data);
}

unsigned int spim_cmd_sleep_rpu(void)
Expand Down Expand Up @@ -243,6 +252,8 @@ int spim_init(struct qspi_config *config)
spim_config->qspi_slave_latency = 1;
}

spi_spec_8mhz.config.frequency = MHZ(8);

LOG_INF("SPIM %s: freq = %d MHz", spi_spec.bus->name,
spi_spec.config.frequency / MHZ(1));
LOG_INF("SPIM %s: latency = %d", spi_spec.bus->name, spim_config->qspi_slave_latency);
Expand Down