diff --git a/drivers/spi/spi_nrfx_spis.c b/drivers/spi/spi_nrfx_spis.c index 9ea2f9fb7de..d2448af7a67 100644 --- a/drivers/spi/spi_nrfx_spis.c +++ b/drivers/spi/spi_nrfx_spis.c @@ -106,35 +106,29 @@ static int configure(const struct device *dev, return 0; } -static void prepare_for_transfer(const struct device *dev, - const uint8_t *tx_buf, size_t tx_buf_len, - uint8_t *rx_buf, size_t rx_buf_len) +static int prepare_for_transfer(const struct device *dev, + const uint8_t *tx_buf, size_t tx_buf_len, + uint8_t *rx_buf, size_t rx_buf_len) { - struct spi_nrfx_data *dev_data = dev->data; const struct spi_nrfx_config *dev_config = dev->config; - int status; + nrfx_err_t result; if (tx_buf_len > dev_config->max_buf_len || rx_buf_len > dev_config->max_buf_len) { LOG_ERR("Invalid buffer sizes: Tx %d/Rx %d", tx_buf_len, rx_buf_len); - status = -EINVAL; - } else { - nrfx_err_t result; - - result = nrfx_spis_buffers_set(&dev_config->spis, - tx_buf, tx_buf_len, - rx_buf, rx_buf_len); - if (result == NRFX_SUCCESS) { - return; - } - - status = -EIO; + return -EINVAL; } - spi_context_complete(&dev_data->ctx, dev, status); -} + result = nrfx_spis_buffers_set(&dev_config->spis, + tx_buf, tx_buf_len, + rx_buf, rx_buf_len); + if (result != NRFX_SUCCESS) { + return -EIO; + } + return 0; +} static int transceive(const struct device *dev, const struct spi_config *spi_cfg, @@ -161,13 +155,14 @@ static int transceive(const struct device *dev, LOG_ERR("Only buffers located in RAM are supported"); error = -ENOTSUP; } else { - prepare_for_transfer(dev, - tx_bufs ? tx_bufs->buffers[0].buf : NULL, - tx_bufs ? tx_bufs->buffers[0].len : 0, - rx_bufs ? rx_bufs->buffers[0].buf : NULL, - rx_bufs ? rx_bufs->buffers[0].len : 0); - - error = spi_context_wait_for_completion(&dev_data->ctx); + error = prepare_for_transfer(dev, + tx_bufs ? tx_bufs->buffers[0].buf : NULL, + tx_bufs ? tx_bufs->buffers[0].len : 0, + rx_bufs ? rx_bufs->buffers[0].buf : NULL, + rx_bufs ? rx_bufs->buffers[0].len : 0); + if (error == 0) { + error = spi_context_wait_for_completion(&dev_data->ctx); + } } spi_context_release(&dev_data->ctx, error);