summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c')
-rw-r--r--firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c
index 624f2aa444..4b355302fd 100644
--- a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c
+++ b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c
@@ -69,7 +69,7 @@ void lcd_set_flip(bool yesno)
69static void lcd_sleep(uint32_t t) 69static void lcd_sleep(uint32_t t)
70{ 70{
71 volatile uint32_t i; 71 volatile uint32_t i;
72 for(i=0;i<t;++i) t=t; 72 for(i=0;i<t;++i);
73} 73}
74 74
75static uint8_t lcd_readdata() 75static uint8_t lcd_readdata()
@@ -115,6 +115,7 @@ void lcd_off() {
115void lcd_init_device(void) 115void lcd_init_device(void)
116{ 116{
117 uint8_t data[5]; 117 uint8_t data[5];
118 int i;
118 119
119/* init basic things */ 120/* init basic things */
120 PWRCON &= ~0x800; 121 PWRCON &= ~0x800;
@@ -126,25 +127,26 @@ void lcd_init_device(void)
126 LCD_INTCON = 0; 127 LCD_INTCON = 0;
127 LCD_RST_TIME = 0x7ff; 128 LCD_RST_TIME = 0x7ff;
128 129
129/* detect lcd type */ 130/* detect lcd type, it's not detected the first time for some reason */
130 LCD_WCMD = 0x1; 131 for(i=0;i<3;++i) {
131 lcd_sleep(166670); 132 LCD_WCMD = 0x1;
132 LCD_WCMD = 0x11; 133 lcd_sleep(166670);
133 lcd_sleep(2000040); 134 LCD_WCMD = 0x11;
134 lcd_readdata(); 135 lcd_sleep(2000040);
135 LCD_WCMD = 0x4; 136 lcd_readdata();
136 lcd_sleep(100); 137 LCD_WCMD = 0x4;
137 data[0]=lcd_readdata(); 138 lcd_sleep(100);
138 data[1]=lcd_readdata(); 139 data[0]=lcd_readdata();
139 data[2]=lcd_readdata(); 140 data[1]=lcd_readdata();
140 data[3]=lcd_readdata(); 141 data[2]=lcd_readdata();
141 data[4]=lcd_readdata(); 142 data[3]=lcd_readdata();
142 143 data[4]=lcd_readdata();
143 lcd_type=0; 144
144 if (((data[1]==0x38) && ((data[2] & 0xf0) == 0x80)) || 145 lcd_type=0;
145 ((data[2]==0x38) && ((data[3] & 0xf0) == 0x80))) 146 if (((data[1]==0x38) && ((data[2] & 0xf0) == 0x80)) ||
146 lcd_type=1; 147 ((data[2]==0x38) && ((data[3] & 0xf0) == 0x80)))
147 148 lcd_type=1;
149 }
148/* init lcd */ 150/* init lcd */
149 if (lcd_type == 1) { 151 if (lcd_type == 1) {
150 LCD_WCMD = 0x3a; 152 LCD_WCMD = 0x3a;