From 7bc876cc86de08c9ca2e22f0fb37875cb85d1a3d Mon Sep 17 00:00:00 2001 From: bertrik Date: Thu, 30 Jul 2009 18:33:17 +0000 Subject: [PATCH] Meizu M3: check LCD_STATUS in the lcd driver instead of using delay loops git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22090 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c index 2c52faeb8..3420e92d6 100644 --- a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c +++ b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c @@ -29,7 +29,9 @@ #include "s5l8700.h" /*** definitions ***/ - +#define STAT_BUS_IDLE (1<<8) /* Data bus idle */ +#define STAT_FULL (1<<4) /* FIFO full */ +#define STAT_READON (1<<0) /* Read operation done */ /** globals **/ static uint8_t lcd_type; @@ -81,9 +83,13 @@ static uint8_t lcd_readdata(void) static void lcd_writereg(uint32_t reg, uint32_t data) { + while (LCD_STATUS & STAT_FULL); LCD_WCMD = reg >> 8; + while (LCD_STATUS & STAT_FULL); LCD_WCMD = reg & 0xff; + while (LCD_STATUS & STAT_FULL); LCD_WDATA = data >> 8; + while (LCD_STATUS & STAT_FULL); LCD_WDATA = data & 0xff; } @@ -290,10 +296,12 @@ void lcd_update(void) LCD_WCMD = 0x22; } for(p=&lcd_framebuffer[0][0], i=0;i