summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrik Sikken <bertrik@sikken.nl>2009-07-30 18:33:17 +0000
committerBertrik Sikken <bertrik@sikken.nl>2009-07-30 18:33:17 +0000
commit95d043b26dd043e76a4c6050941cdf4faebe7a8b (patch)
treecd24035d5ec28ee68916393ab553582cf8d30738
parenta616f49f04cef85545d8ec54e9297aadf52502e6 (diff)
downloadrockbox-95d043b26dd043e76a4c6050941cdf4faebe7a8b.tar.gz
rockbox-95d043b26dd043e76a4c6050941cdf4faebe7a8b.zip
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
-rw-r--r--firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c12
1 files 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 2c52faeb8c..3420e92d62 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 @@
29#include "s5l8700.h" 29#include "s5l8700.h"
30 30
31/*** definitions ***/ 31/*** definitions ***/
32 32#define STAT_BUS_IDLE (1<<8) /* Data bus idle */
33#define STAT_FULL (1<<4) /* FIFO full */
34#define STAT_READON (1<<0) /* Read operation done */
33 35
34/** globals **/ 36/** globals **/
35static uint8_t lcd_type; 37static uint8_t lcd_type;
@@ -81,9 +83,13 @@ static uint8_t lcd_readdata(void)
81 83
82static void lcd_writereg(uint32_t reg, uint32_t data) 84static void lcd_writereg(uint32_t reg, uint32_t data)
83{ 85{
86 while (LCD_STATUS & STAT_FULL);
84 LCD_WCMD = reg >> 8; 87 LCD_WCMD = reg >> 8;
88 while (LCD_STATUS & STAT_FULL);
85 LCD_WCMD = reg & 0xff; 89 LCD_WCMD = reg & 0xff;
90 while (LCD_STATUS & STAT_FULL);
86 LCD_WDATA = data >> 8; 91 LCD_WDATA = data >> 8;
92 while (LCD_STATUS & STAT_FULL);
87 LCD_WDATA = data & 0xff; 93 LCD_WDATA = data & 0xff;
88} 94}
89 95
@@ -290,10 +296,12 @@ void lcd_update(void)
290 LCD_WCMD = 0x22; 296 LCD_WCMD = 0x22;
291 } 297 }
292 for(p=&lcd_framebuffer[0][0], i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) { 298 for(p=&lcd_framebuffer[0][0], i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) {
299 while (LCD_STATUS & STAT_FULL);
293 LCD_WDATA = RGB_UNPACK_RED(*p); 300 LCD_WDATA = RGB_UNPACK_RED(*p);
301 while (LCD_STATUS & STAT_FULL);
294 LCD_WDATA = RGB_UNPACK_GREEN(*p); 302 LCD_WDATA = RGB_UNPACK_GREEN(*p);
303 while (LCD_STATUS & STAT_FULL);
295 LCD_WDATA = RGB_UNPACK_BLUE(*p); 304 LCD_WDATA = RGB_UNPACK_BLUE(*p);
296 lcd_sleep(3); /* if data is sent too fast to lcdif, machine freezes */
297 } 305 }
298} 306}
299 307