From fe1016e8b43e7e3d940963693b261eecded298e5 Mon Sep 17 00:00:00 2001 From: frank zago Date: Sun, 7 May 2023 19:11:18 -0500 Subject: [PATCH] try to keep CS up when a next message is coming untested so far --- ch341-spi.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ch341-spi.c b/ch341-spi.c index 432b9b5..a518d03 100644 --- a/ch341-spi.c +++ b/ch341-spi.c @@ -157,6 +157,8 @@ static int ch341_spi_transfer_one_message(struct spi_master *master, unsigned int tx_len = 0; unsigned int buf_idx = 0; int status; + struct spi_transfer *last_xfer; + struct spi_message *next_msg; if (spi->mode & SPI_NO_CS) { cs = NULL; @@ -176,7 +178,14 @@ static int ch341_spi_transfer_one_message(struct spi_master *master, } status = spi_transfer(dev, client->buf, buf_idx, buf_idx - tx_len); - if (cs) { + + last_xfer = list_last_entry(&m->transfers, + struct spi_transfer, transfer_list); + next_msg = spi_get_next_queued_message(master); + if (next_msg && next_msg->spi != m->spi) + next_msg = NULL; + + if (cs && !last_xfer->cs_change && next_msg) { if (spi->mode & SPI_CS_HIGH) gpiod_set_value_cansleep(cs, 0); else