drivers: spi_nrfx_spis: Refactor prepare_for_transfer()
Refactor the function to make the execution flow in transceive() clearer. In particular, return error codes directly, not through spi_context_complete() which is unnecessary in this case. Signed-off-by: Andrzej Głąbek <andrzej.glabek@nordicsemi.no>
This commit is contained in:
parent
e4de669bed
commit
f132f55e32
1 changed files with 21 additions and 26 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue