logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git
commit: 90b5c170347e7a46a8f56628a9830ea5a719a326
parent da7811f82aad8997495750c9ef70117f9934f340
Author: Copilot <198982749+Copilot@users.noreply.github.com>
Date:   Sun,  6 Jul 2025 07:20:48 +0100

Fix SPI bus lock issue in spi_start_extended when using mutual exclusion (#25447)


Diffstat:

Mplatforms/chibios/drivers/spi_master.c15+++++++++++++++
1 file changed, 15 insertions(+), 0 deletions(-)

diff --git a/platforms/chibios/drivers/spi_master.c b/platforms/chibios/drivers/spi_master.c @@ -130,10 +130,16 @@ bool spi_start_extended(spi_start_config_t *start_config) { #endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE) if (spiStarted) { +#if (SPI_USE_MUTUAL_EXCLUSION == TRUE) + spiReleaseBus(&SPI_DRIVER); +#endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE) return false; } #if SPI_SELECT_MODE != SPI_SELECT_MODE_NONE if (start_config->slave_pin == NO_PIN) { +# if (SPI_USE_MUTUAL_EXCLUSION == TRUE) + spiReleaseBus(&SPI_DRIVER); +# endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE) return false; } #endif @@ -146,10 +152,16 @@ bool spi_start_extended(spi_start_config_t *start_config) { # if defined(AT32F415) if (roundedDivisor < 2 || roundedDivisor > 1024) { +# if (SPI_USE_MUTUAL_EXCLUSION == TRUE) + spiReleaseBus(&SPI_DRIVER); +# endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE) return false; } # else if (roundedDivisor < 2 || roundedDivisor > 256) { +# if (SPI_USE_MUTUAL_EXCLUSION == TRUE) + spiReleaseBus(&SPI_DRIVER); +# endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE) return false; } # endif @@ -234,6 +246,9 @@ bool spi_start_extended(spi_start_config_t *start_config) { } if (start_config->divisor < 1) { +# if (SPI_USE_MUTUAL_EXCLUSION == TRUE) + spiReleaseBus(&SPI_DRIVER); +# endif // (SPI_USE_MUTUAL_EXCLUSION == TRUE) return false; }