From 3b183b3555eb44ca0a0a8bf04628869db928168b Mon Sep 17 00:00:00 2001 From: Daria Cacic Date: Wed, 4 Mar 2026 09:38:04 +0100 Subject: [PATCH 1/3] added changes to max7456.c to add setting speed and removing spi_mode_0 flag from target.h file --- src/main/drivers/max7456.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/drivers/max7456.c b/src/main/drivers/max7456.c index 4d541d32027..3d75ffcd8e6 100644 --- a/src/main/drivers/max7456.c +++ b/src/main/drivers/max7456.c @@ -293,6 +293,31 @@ static int max7456PrepareBuffer(uint8_t * buf, size_t bufsize, int bufPtr, uint8 return bufPtr; } +void max7456ApplyBusSpeed(void) +{ +#if defined(MAX7456_SPI_SPEED) + busSetSpeed(state.dev, MAX7456_SPI_SPEED); +#else + // Default safe speed for MAX7456 + busSetSpeed(state.dev, BUS_SPEED_STANDARD); +#endif +} + +// Used when standard DEVFLAGS_SPI_MODE_0 is omitted in common_hardware +void max7456SpiModeOverride(void) +{ +#if defined(STM32H7) && defined(MAX7456_MANUAL_SPI_CONFIG) + SPI_TypeDef *maxSpiInstance = spiInstanceByDevice(state.dev->busdev.spi.spiBus); + if (!maxSpiInstance) return; + maxSpiInstance->CR1 &= ~SPI_CR1_SPE; + maxSpiInstance->CFG2 &= ~(SPI_CFG2_CPHA | SPI_CFG2_CPOL); + + maxSpiInstance->CFG2 |= (SPI_CFG2_CPHA | SPI_CFG2_CPOL); + maxSpiInstance->CR1 |= SPI_CR1_SPE; +#endif +} + + uint16_t max7456GetScreenSize(void) { // Default to PAL while the display is not yet initialized. This @@ -386,7 +411,9 @@ void max7456Init(const videoSystem_e videoSystem) return; } - busSetSpeed(state.dev, BUS_SPEED_STANDARD); + max7456ApplyBusSpeed(); + + max7456SpiModeOverride(); // force soft reset on Max7456 busWrite(state.dev, MAX7456ADD_VM0, MAX7456_RESET); From ada5eb9bd334735a8a7e4d8c0bb15e7941784b55 Mon Sep 17 00:00:00 2001 From: Daria Cacic Date: Wed, 4 Mar 2026 10:05:48 +0100 Subject: [PATCH 2/3] changed spacing and added static to function --- src/main/drivers/max7456.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/main/drivers/max7456.c b/src/main/drivers/max7456.c index 3d75ffcd8e6..6914a3ea2bb 100644 --- a/src/main/drivers/max7456.c +++ b/src/main/drivers/max7456.c @@ -293,7 +293,7 @@ static int max7456PrepareBuffer(uint8_t * buf, size_t bufsize, int bufPtr, uint8 return bufPtr; } -void max7456ApplyBusSpeed(void) +static void max7456ApplyBusSpeed(void) { #if defined(MAX7456_SPI_SPEED) busSetSpeed(state.dev, MAX7456_SPI_SPEED); @@ -304,20 +304,21 @@ void max7456ApplyBusSpeed(void) } // Used when standard DEVFLAGS_SPI_MODE_0 is omitted in common_hardware -void max7456SpiModeOverride(void) +static void max7456SpiModeOverride(void) { #if defined(STM32H7) && defined(MAX7456_MANUAL_SPI_CONFIG) - SPI_TypeDef *maxSpiInstance = spiInstanceByDevice(state.dev->busdev.spi.spiBus); - if (!maxSpiInstance) return; - maxSpiInstance->CR1 &= ~SPI_CR1_SPE; - maxSpiInstance->CFG2 &= ~(SPI_CFG2_CPHA | SPI_CFG2_CPOL); - - maxSpiInstance->CFG2 |= (SPI_CFG2_CPHA | SPI_CFG2_CPOL); - maxSpiInstance->CR1 |= SPI_CR1_SPE; + SPI_TypeDef *maxSpiInstance = spiInstanceByDevice(state.dev->busdev.spi.spiBus); + if (!maxSpiInstance){ + return; + } + + maxSpiInstance->CR1 &= ~SPI_CR1_SPE; + maxSpiInstance->CFG2 &= ~(SPI_CFG2_CPHA | SPI_CFG2_CPOL); + maxSpiInstance->CFG2 |= (SPI_CFG2_CPHA | SPI_CFG2_CPOL); + maxSpiInstance->CR1 |= SPI_CR1_SPE; #endif } - uint16_t max7456GetScreenSize(void) { // Default to PAL while the display is not yet initialized. This @@ -412,7 +413,6 @@ void max7456Init(const videoSystem_e videoSystem) } max7456ApplyBusSpeed(); - max7456SpiModeOverride(); // force soft reset on Max7456 From a294302305add795ebde5888d7fea85161c7a81c Mon Sep 17 00:00:00 2001 From: Daria Cacic Date: Thu, 5 Mar 2026 13:10:44 +0100 Subject: [PATCH 3/3] added bounds check for speed and fixed spi re-enable issue --- src/main/drivers/max7456.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/drivers/max7456.c b/src/main/drivers/max7456.c index 6914a3ea2bb..9cb2750de4d 100644 --- a/src/main/drivers/max7456.c +++ b/src/main/drivers/max7456.c @@ -296,7 +296,8 @@ static int max7456PrepareBuffer(uint8_t * buf, size_t bufsize, int bufPtr, uint8 static void max7456ApplyBusSpeed(void) { #if defined(MAX7456_SPI_SPEED) - busSetSpeed(state.dev, MAX7456_SPI_SPEED); + busSpeed_e speed = (MAX7456_SPI_SPEED <= BUS_SPEED_ULTRAFAST) ? MAX7456_SPI_SPEED : BUS_SPEED_STANDARD; + busSetSpeed(state.dev, speed); #else // Default safe speed for MAX7456 busSetSpeed(state.dev, BUS_SPEED_STANDARD); @@ -311,11 +312,9 @@ static void max7456SpiModeOverride(void) if (!maxSpiInstance){ return; } - + maxSpiInstance->CR1 &= ~SPI_CR1_SPE; - maxSpiInstance->CFG2 &= ~(SPI_CFG2_CPHA | SPI_CFG2_CPOL); maxSpiInstance->CFG2 |= (SPI_CFG2_CPHA | SPI_CFG2_CPOL); - maxSpiInstance->CR1 |= SPI_CR1_SPE; #endif }