diff --git a/firmware/target/arm/as3525/button-e200v2-fuze.c b/firmware/target/arm/as3525/button-e200v2-fuze.c index 6a9f029..9554c61 100644 --- a/firmware/target/arm/as3525/button-e200v2-fuze.c +++ b/firmware/target/arm/as3525/button-e200v2-fuze.c @@ -246,6 +246,8 @@ static int button_gpio(void) int btn = BUTTON_NONE; if(hold_button) return btn; + DBOP_CTRL &= ~(1<<16); /* disable output (1:write enabled) */ + button_delay(); /* set afsel, so that we can read our buttons */ GPIOC_AFSEL &= ~(1<<2|1<<3|1<<4|1<<5|1<<6); /* set dir so we can read our buttons (but reset the C pins first) */ @@ -277,6 +279,7 @@ static int button_gpio(void) GPIOC_DIR |= (1<<2|1<<3|1<<4|1<<5|1<<6); GPIOC_AFSEL |= (1<<2|1<<3|1<<4|1<<5|1<<6); + DBOP_CTRL |= (1<<16); /* disable output (1:write enabled) */ return btn; } diff --git a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c index 7f02a8b..f712fb6 100644 --- a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c +++ b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c @@ -155,10 +155,11 @@ void lcd_write_data(const fb_data* p_bytes, int count) while (count--) { DBOP_DOUT = *p_bytes++; - - /* Wait for fifo to empty */ - while ((DBOP_STAT & (1<<10)) == 0); + /* Wait if push fifo is full */ + while ((DBOP_STAT & (1<<6)) != 0); } + /* While push fifo is not empty */ + while ((DBOP_STAT & (1<<10)) == 0); } static void lcd_write_reg(int reg, int value) diff --git a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c index fc0fdaa..833cdf8 100644 --- a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c +++ b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c @@ -120,8 +120,11 @@ void lcd_write_data(const fb_data* p_bytes, int count) /* TODO: We should normally fill the fifo until it's full * instead of waiting after each word, * but that causes blue lines on the display */ - while ((DBOP_STAT & (1<<10)) == 0); - } + /* Wait if push fifo is full */ + while ((DBOP_STAT & (1<<6)) != 0); + } + /* While push fifo is not empty */ + while ((DBOP_STAT & (1<<10)) == 0); /* due to the 32bit alignment requirement, we possibly need to do a * 16bit transfer at the end also */ if (count > 0)