diff options
Diffstat (limited to 'firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c')
-rw-r--r-- | firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c | 12 |
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 **/ |
35 | static uint8_t lcd_type; | 37 | static uint8_t lcd_type; |
@@ -81,9 +83,13 @@ static uint8_t lcd_readdata(void) | |||
81 | 83 | ||
82 | static void lcd_writereg(uint32_t reg, uint32_t data) | 84 | static 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 | ||