diff --git a/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c b/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c index 370104c724..f452ae083e 100644 --- a/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c +++ b/firmware/target/arm/imx233/creative-zenxfi2/lcd-zenxfi2.c @@ -40,6 +40,7 @@ static void setup_parameters(void) imx233_lcdif_set_lcd_databus_width(HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_18_BIT); imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_18_BIT); imx233_lcdif_set_timings(2, 2, 3, 3); + imx233_lcdif_enable_underflow_recover(true); } static void setup_lcd_pins(bool use_lcdif) diff --git a/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c b/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c index ea1ed6bccc..d04271369c 100644 --- a/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c +++ b/firmware/target/arm/imx233/creative-zenxfi3/lcd-zenxfi3.c @@ -40,6 +40,7 @@ static void setup_parameters(void) imx233_lcdif_set_lcd_databus_width(HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_16_BIT); imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_16_BIT); imx233_lcdif_set_timings(2, 2, 3, 3); + imx233_lcdif_enable_underflow_recover(true); } static void setup_lcd_pins(bool use_lcdif) diff --git a/firmware/target/arm/imx233/lcdif-imx233.c b/firmware/target/arm/imx233/lcdif-imx233.c index 285c2801ad..ad0931de40 100644 --- a/firmware/target/arm/imx233/lcdif-imx233.c +++ b/firmware/target/arm/imx233/lcdif-imx233.c @@ -23,6 +23,14 @@ static unsigned lcdif_word_length = 0; static unsigned lcdif_byte_packing = 0; +void imx233_lcdif_enable_underflow_recover(bool enable) +{ + if(enable) + __REG_SET(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RECOVER_ON_UNDERFLOW; + else + __REG_CLR(HW_LCDIF_CTRL1) = HW_LCDIF_CTRL1__RECOVER_ON_UNDERFLOW; +} + void imx233_lcdif_enable_bus_master(bool enable) { if(enable) diff --git a/firmware/target/arm/imx233/lcdif-imx233.h b/firmware/target/arm/imx233/lcdif-imx233.h index 3bce004259..9902aaa80b 100644 --- a/firmware/target/arm/imx233/lcdif-imx233.h +++ b/firmware/target/arm/imx233/lcdif-imx233.h @@ -53,6 +53,7 @@ #define HW_LCDIF_CTRL1__IRQ_BP 8 #define HW_LCDIF_CTRL1__BYTE_PACKING_FORMAT_BM (0xf << 16) #define HW_LCDIF_CTRL1__BYTE_PACKING_FORMAT_BP 16 +#define HW_LCDIF_CTRL1__RECOVER_ON_UNDERFLOW (1 << 24) #define HW_LCDIF__VSYNC_EDGE_IRQ 1 #define HW_LCDIF__CUR_FRAME_DONE_IRQ 2 @@ -84,6 +85,7 @@ #define HW_LCDIF_STAT__TXFIFO_EMPTY (1 << 26) #define HW_LCDIF_STAT__BUSY (1 << 25) +void imx233_lcdif_enable_underflow_recover(bool enable); void imx233_lcdif_enable_bus_master(bool enable); void imx233_lcdif_enable(bool enable); void imx233_lcdif_reset(void);// reset lcdif block diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c index 34afc0478e..5f54c72b5e 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c @@ -54,6 +54,7 @@ static void setup_parameters(void) imx233_lcdif_set_lcd_databus_width(HW_LCDIF_CTRL__LCD_DATABUS_WIDTH_18_BIT); imx233_lcdif_set_word_length(HW_LCDIF_CTRL__WORD_LENGTH_18_BIT); imx233_lcdif_set_timings(1, 2, 2, 2); + imx233_lcdif_enable_underflow_recover(true); } static void setup_lcd_pins(bool use_lcdif)