Skip to content

Commit 305d693

Browse files
andrivetthinkyhead
authored andcommitted
🐛 Fix TFT LVGL UI + Y-DIR conflict (#28291)
Fixes #22967
1 parent 359efbb commit 305d693

2 files changed

Lines changed: 18 additions & 5 deletions

File tree

Marlin/src/HAL/STM32/MarlinSPI.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,16 @@ static void spi_init(spi_t *obj, uint32_t speed, spi_mode_e mode, uint8_t msb, u
3939

4040
void MarlinSPI::setClockDivider(uint8_t _div) {
4141
_speed = spi_getClkFreq(&_spi);// / _div;
42-
_clockDivider = _div;
42+
if (_clockDivider != _div) {
43+
_clockDivider = _div;
44+
_mustInit = true;
45+
}
4346
}
4447

4548
void MarlinSPI::begin(void) {
46-
//TODO: only call spi_init if any parameter changed!!
49+
if (!_mustInit) return;
4750
spi_init(&_spi, _speed, _dataMode, _bitOrder, _dataSize);
51+
_mustInit = false;
4852
}
4953

5054
void MarlinSPI::setupDma(SPI_HandleTypeDef &_spiHandle, DMA_HandleTypeDef &_dmaHandle, uint32_t direction, bool minc) {

Marlin/src/HAL/STM32/MarlinSPI.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,15 +76,23 @@ class MarlinSPI {
7676
/* These methods are deprecated and kept for compatibility.
7777
* Use SPISettings with SPI.beginTransaction() to configure SPI parameters.
7878
*/
79-
void setBitOrder(BitOrder _order) { _bitOrder = _order; }
79+
void setBitOrder(BitOrder order) {
80+
if (_bitOrder == order) return;
81+
_bitOrder = order;
82+
_mustInit = true;
83+
}
8084

81-
void setDataMode(uint8_t _mode) {
82-
switch (_mode) {
85+
void setDataMode(uint8_t mode) {
86+
auto previous_mode = _dataMode;
87+
switch (mode) {
8388
case SPI_MODE0: _dataMode = SPI_MODE_0; break;
8489
case SPI_MODE1: _dataMode = SPI_MODE_1; break;
8590
case SPI_MODE2: _dataMode = SPI_MODE_2; break;
8691
case SPI_MODE3: _dataMode = SPI_MODE_3; break;
92+
default: return;
8793
}
94+
if (previous_mode != _dataMode)
95+
_mustInit = true;
8896
}
8997

9098
void setClockDivider(uint8_t _div);
@@ -104,4 +112,5 @@ class MarlinSPI {
104112
pin_t _misoPin;
105113
pin_t _sckPin;
106114
pin_t _ssPin;
115+
bool _mustInit = true;
107116
};

0 commit comments

Comments
 (0)