Skip to content

Instantly share code, notes, and snippets.

@tknapstad
Created July 12, 2022 17:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tknapstad/a08466db612971ce7c5c63f5fe683d73 to your computer and use it in GitHub Desktop.
Save tknapstad/a08466db612971ce7c5c63f5fe683d73 to your computer and use it in GitHub Desktop.
--- zephyr/drivers/spi/spi_ll_stm32.c 2022-05-16 14:34:57.051146688 +0200
+++ zephyr/drivers/spi/spi_ll_stm32.c 2022-05-16 14:33:08.026088060 +0200
@@ -204,18 +205,22 @@
static int spi_dma_move_buffers(const struct device *dev, size_t len)
{
struct spi_stm32_data *data = dev->data;
- int ret;
+ int ret = 0;
size_t dma_segment_len;
- dma_segment_len = len / data->dma_rx.dma_cfg.dest_data_size;
- ret = spi_stm32_dma_rx_load(dev, data->ctx.rx_buf, dma_segment_len);
+ if (data->ctx.rx_buf != NULL) {
+ dma_segment_len = len / data->dma_rx.dma_cfg.dest_data_size;
+ ret = spi_stm32_dma_rx_load(dev, data->ctx.rx_buf, dma_segment_len);
+ }
if (ret != 0) {
return ret;
}
- dma_segment_len = len / data->dma_tx.dma_cfg.source_data_size;
- ret = spi_stm32_dma_tx_load(dev, data->ctx.tx_buf, dma_segment_len);
+ if (data->ctx.tx_buf != NULL) {
+ dma_segment_len = len / data->dma_tx.dma_cfg.source_data_size;
+ ret = spi_stm32_dma_tx_load(dev, data->ctx.tx_buf, dma_segment_len);
+ }
return ret;
}
@@ -672,11 +677,17 @@
static int wait_dma_rx_tx_done(const struct device *dev)
{
+ const struct spi_stm32_config *cfg = dev->config;
struct spi_stm32_data *data = dev->data;
+ SPI_TypeDef *spi = cfg->spi;
int res = -1;
while (1) {
- res = k_sem_take(&data->status_sem, K_MSEC(1000));
+ if (LL_SPI_GetMode(spi) == LL_SPI_MODE_MASTER) {
+ res = k_sem_take(&data->status_sem, K_MSEC(1000));
+ } else {
+ res = k_sem_take(&data->status_sem, K_FOREVER);
+ }
if (res != 0) {
return res;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment