aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCopilot <[email protected]>2025-07-06 07:20:48 +0100
committerGitHub <[email protected]>2025-07-06 07:20:48 +0100
commit90b5c170347e7a46a8f56628a9830ea5a719a326 (patch)
treef2a2a9e2a02e6ad1a23a367445d673bf9de8af17
parentda7811f82aad8997495750c9ef70117f9934f340 (diff)
downloadqmk_firmware-90b5c170347e7a46a8f56628a9830ea5a719a326.tar.gz
qmk_firmware-90b5c170347e7a46a8f56628a9830ea5a719a326.zip
Fix SPI bus lock issue in spi_start_extended when using mutual exclusion (#25447)
-rw-r--r--platforms/chibios/drivers/spi_master.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/platforms/chibios/drivers/spi_master.c b/platforms/chibios/drivers/spi_master.c
index f5e48edfda..84d027bf49 100644
--- 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;
}