From 3ac64db2aeded3bca12e8744a74794f6c981c791 Mon Sep 17 00:00:00 2001 From: Andrivet Date: Thu, 22 Jan 2026 17:41:28 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20TFT=20LVGL=20UI=20+=20Y-DI?= =?UTF-8?q?R=20conflict=20(#28291)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #22967 --- Marlin/src/HAL/STM32/MarlinSPI.cpp | 8 ++++++-- Marlin/src/HAL/STM32/MarlinSPI.h | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Marlin/src/HAL/STM32/MarlinSPI.cpp b/Marlin/src/HAL/STM32/MarlinSPI.cpp index f7c603d77e..d109c65619 100644 --- a/Marlin/src/HAL/STM32/MarlinSPI.cpp +++ b/Marlin/src/HAL/STM32/MarlinSPI.cpp @@ -39,12 +39,16 @@ static void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb, u void MarlinSPI::setClockDivider(uint8_t _div) { _speed = spi_getClkFreq(&_spi);// / _div; - _clockDivider = _div; + if (_clockDivider != _div) { + _clockDivider = _div; + _mustInit = true; + } } void MarlinSPI::begin(void) { - //TODO: only call spi_init if any parameter changed!! + if (!_mustInit) return; spi_init(&_spi, _speed, _dataMode, _bitOrder, _dataSize); + _mustInit = false; } void MarlinSPI::setupDma(SPI_HandleTypeDef &_spiHandle, DMA_HandleTypeDef &_dmaHandle, uint32_t direction, bool minc) { diff --git a/Marlin/src/HAL/STM32/MarlinSPI.h b/Marlin/src/HAL/STM32/MarlinSPI.h index fbd3585ff4..1c106de364 100644 --- a/Marlin/src/HAL/STM32/MarlinSPI.h +++ b/Marlin/src/HAL/STM32/MarlinSPI.h @@ -76,15 +76,23 @@ public: /* These methods are deprecated and kept for compatibility. * Use SPISettings with SPI.beginTransaction() to configure SPI parameters. */ - void setBitOrder(BitOrder _order) { _bitOrder = _order; } + void setBitOrder(BitOrder order) { + if (_bitOrder == order) return; + _bitOrder = order; + _mustInit = true; + } - void setDataMode(uint8_t _mode) { - switch (_mode) { + void setDataMode(uint8_t mode) { + auto previous_mode = _dataMode; + switch (mode) { case SPI_MODE0: _dataMode = SPI_MODE_0; break; case SPI_MODE1: _dataMode = SPI_MODE_1; break; case SPI_MODE2: _dataMode = SPI_MODE_2; break; case SPI_MODE3: _dataMode = SPI_MODE_3; break; + default: return; } + if (previous_mode != _dataMode) + _mustInit = true; } void setClockDivider(uint8_t _div); @@ -104,4 +112,5 @@ private: pin_t _misoPin; pin_t _sckPin; pin_t _ssPin; + bool _mustInit = true; };