diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c | 212 |
1 files changed, 106 insertions, 106 deletions
diff --git a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c index 4b355302fd..01f03d3584 100644 --- a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c +++ b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c | |||
@@ -74,30 +74,30 @@ static void lcd_sleep(uint32_t t) | |||
74 | 74 | ||
75 | static uint8_t lcd_readdata() | 75 | static uint8_t lcd_readdata() |
76 | { | 76 | { |
77 | LCD_RDATA = 0; | 77 | LCD_RDATA = 0; |
78 | lcd_sleep(64); | 78 | lcd_sleep(64); |
79 | return (LCD_DBUFF/* & 0xff*/); | 79 | return (LCD_DBUFF/* & 0xff*/); |
80 | } | 80 | } |
81 | 81 | ||
82 | static void lcd_writereg(uint32_t reg, uint32_t data) | 82 | static void lcd_writereg(uint32_t reg, uint32_t data) |
83 | { | 83 | { |
84 | LCD_WCMD = reg >> 8; | 84 | LCD_WCMD = reg >> 8; |
85 | LCD_WCMD = reg & 0xff; | 85 | LCD_WCMD = reg & 0xff; |
86 | LCD_WDATA = data >> 8; | 86 | LCD_WDATA = data >> 8; |
87 | LCD_WDATA = data & 0xff; | 87 | LCD_WDATA = data & 0xff; |
88 | } | 88 | } |
89 | 89 | ||
90 | void lcd_on() { | 90 | void lcd_on() { |
91 | if (lcd_type == 1) { | 91 | if (lcd_type == 1) { |
92 | LCD_WCMD = 0x29; | 92 | LCD_WCMD = 0x29; |
93 | } else { | 93 | } else { |
94 | lcd_writereg(0x7, 0x21); | 94 | lcd_writereg(0x7, 0x21); |
95 | lcd_writereg(0x12, 0x137); | 95 | lcd_writereg(0x12, 0x137); |
96 | lcd_sleep(70000); | 96 | lcd_sleep(70000); |
97 | lcd_writereg(0x7, 0x21); | 97 | lcd_writereg(0x7, 0x21); |
98 | lcd_writereg(0x12, 0x1137); | 98 | lcd_writereg(0x12, 0x1137); |
99 | lcd_sleep(700000); | 99 | lcd_sleep(700000); |
100 | lcd_writereg(0x7, 0x233); | 100 | lcd_writereg(0x7, 0x233); |
101 | } | 101 | } |
102 | } | 102 | } |
103 | 103 | ||
@@ -105,7 +105,7 @@ void lcd_off() { | |||
105 | /* FIXME wait for DMA to finnish */ | 105 | /* FIXME wait for DMA to finnish */ |
106 | if (lcd_type == 1) { | 106 | if (lcd_type == 1) { |
107 | LCD_WCMD = 0x28; | 107 | LCD_WCMD = 0x28; |
108 | LCD_WDATA = 0; | 108 | LCD_WDATA = 0; |
109 | } else { | 109 | } else { |
110 | 110 | ||
111 | } | 111 | } |
@@ -129,23 +129,23 @@ void lcd_init_device(void) | |||
129 | 129 | ||
130 | /* detect lcd type, it's not detected the first time for some reason */ | 130 | /* detect lcd type, it's not detected the first time for some reason */ |
131 | for(i=0;i<3;++i) { | 131 | for(i=0;i<3;++i) { |
132 | LCD_WCMD = 0x1; | 132 | LCD_WCMD = 0x1; |
133 | lcd_sleep(166670); | 133 | lcd_sleep(166670); |
134 | LCD_WCMD = 0x11; | 134 | LCD_WCMD = 0x11; |
135 | lcd_sleep(2000040); | 135 | lcd_sleep(2000040); |
136 | lcd_readdata(); | 136 | lcd_readdata(); |
137 | LCD_WCMD = 0x4; | 137 | LCD_WCMD = 0x4; |
138 | lcd_sleep(100); | 138 | lcd_sleep(100); |
139 | data[0]=lcd_readdata(); | 139 | data[0]=lcd_readdata(); |
140 | data[1]=lcd_readdata(); | 140 | data[1]=lcd_readdata(); |
141 | data[2]=lcd_readdata(); | 141 | data[2]=lcd_readdata(); |
142 | data[3]=lcd_readdata(); | 142 | data[3]=lcd_readdata(); |
143 | data[4]=lcd_readdata(); | 143 | data[4]=lcd_readdata(); |
144 | 144 | ||
145 | lcd_type=0; | 145 | lcd_type=0; |
146 | if (((data[1]==0x38) && ((data[2] & 0xf0) == 0x80)) || | 146 | if (((data[1]==0x38) && ((data[2] & 0xf0) == 0x80)) || |
147 | ((data[2]==0x38) && ((data[3] & 0xf0) == 0x80))) | 147 | ((data[2]==0x38) && ((data[3] & 0xf0) == 0x80))) |
148 | lcd_type=1; | 148 | lcd_type=1; |
149 | } | 149 | } |
150 | /* init lcd */ | 150 | /* init lcd */ |
151 | if (lcd_type == 1) { | 151 | if (lcd_type == 1) { |
@@ -168,69 +168,69 @@ void lcd_init_device(void) | |||
168 | LCD_WCMD = 0x0; | 168 | LCD_WCMD = 0x0; |
169 | LCD_WCMD = 0x0; | 169 | LCD_WCMD = 0x0; |
170 | lcd_sleep(700000); | 170 | lcd_sleep(700000); |
171 | lcd_writereg(0xa4, 0x1); | 171 | lcd_writereg(0xa4, 0x1); |
172 | lcd_sleep(1100000); | 172 | lcd_sleep(1100000); |
173 | lcd_writereg(0x1, 0x100); | 173 | lcd_writereg(0x1, 0x100); |
174 | lcd_writereg(0x2, 0x300); | 174 | lcd_writereg(0x2, 0x300); |
175 | lcd_writereg(0x3, 0x9230); | 175 | lcd_writereg(0x3, 0x9230); |
176 | lcd_writereg(0x8, 0x404); | 176 | lcd_writereg(0x8, 0x404); |
177 | lcd_writereg(0xe, 0x10); | 177 | lcd_writereg(0xe, 0x10); |
178 | lcd_writereg(0x70, 0x1000); | 178 | lcd_writereg(0x70, 0x1000); |
179 | lcd_writereg(0x71, 0x1); | 179 | lcd_writereg(0x71, 0x1); |
180 | lcd_writereg(0x30, 0x2); | 180 | lcd_writereg(0x30, 0x2); |
181 | lcd_writereg(0x31, 0x400); | 181 | lcd_writereg(0x31, 0x400); |
182 | lcd_writereg(0x32, 0x7); | 182 | lcd_writereg(0x32, 0x7); |
183 | lcd_writereg(0x33, 0x500); | 183 | lcd_writereg(0x33, 0x500); |
184 | lcd_writereg(0x34, 0x7); | 184 | lcd_writereg(0x34, 0x7); |
185 | lcd_writereg(0x35, 0x703); | 185 | lcd_writereg(0x35, 0x703); |
186 | lcd_writereg(0x36, 0x507); | 186 | lcd_writereg(0x36, 0x507); |
187 | lcd_writereg(0x37, 0x5); | 187 | lcd_writereg(0x37, 0x5); |
188 | lcd_writereg(0x38, 0x1404); | 188 | lcd_writereg(0x38, 0x1404); |
189 | lcd_writereg(0x39, 0xe); | 189 | lcd_writereg(0x39, 0xe); |
190 | lcd_writereg(0x40, 0x202); | 190 | lcd_writereg(0x40, 0x202); |
191 | lcd_writereg(0x41, 0x3); | 191 | lcd_writereg(0x41, 0x3); |
192 | lcd_writereg(0x42, 0x0); | 192 | lcd_writereg(0x42, 0x0); |
193 | lcd_writereg(0x43, 0x200); | 193 | lcd_writereg(0x43, 0x200); |
194 | lcd_writereg(0x44, 0x707); | 194 | lcd_writereg(0x44, 0x707); |
195 | lcd_writereg(0x45, 0x407); | 195 | lcd_writereg(0x45, 0x407); |
196 | lcd_writereg(0x46, 0x505); | 196 | lcd_writereg(0x46, 0x505); |
197 | lcd_writereg(0x47, 0x2); | 197 | lcd_writereg(0x47, 0x2); |
198 | lcd_writereg(0x48, 0x4); | 198 | lcd_writereg(0x48, 0x4); |
199 | lcd_writereg(0x49, 0x4); | 199 | lcd_writereg(0x49, 0x4); |
200 | lcd_writereg(0x60, 0x202); | 200 | lcd_writereg(0x60, 0x202); |
201 | lcd_writereg(0x61, 0x3); | 201 | lcd_writereg(0x61, 0x3); |
202 | lcd_writereg(0x62, 0x0); | 202 | lcd_writereg(0x62, 0x0); |
203 | lcd_writereg(0x63, 0x200); | 203 | lcd_writereg(0x63, 0x200); |
204 | lcd_writereg(0x64, 0x707); | 204 | lcd_writereg(0x64, 0x707); |
205 | lcd_writereg(0x65, 0x407); | 205 | lcd_writereg(0x65, 0x407); |
206 | lcd_writereg(0x66, 0x505); | 206 | lcd_writereg(0x66, 0x505); |
207 | lcd_writereg(0x67, 0x2); | 207 | lcd_writereg(0x67, 0x2); |
208 | lcd_writereg(0x68, 0x4); | 208 | lcd_writereg(0x68, 0x4); |
209 | lcd_writereg(0x69, 0x4); | 209 | lcd_writereg(0x69, 0x4); |
210 | lcd_writereg(0x7, 0x1); | 210 | lcd_writereg(0x7, 0x1); |
211 | lcd_writereg(0x18, 0x1); | 211 | lcd_writereg(0x18, 0x1); |
212 | lcd_writereg(0x10, 0x1690); | 212 | lcd_writereg(0x10, 0x1690); |
213 | lcd_writereg(0x11, 0x100); | 213 | lcd_writereg(0x11, 0x100); |
214 | lcd_writereg(0x12, 0x117); | 214 | lcd_writereg(0x12, 0x117); |
215 | lcd_writereg(0x13, 0xf80); | 215 | lcd_writereg(0x13, 0xf80); |
216 | lcd_writereg(0x12, 0x137); | 216 | lcd_writereg(0x12, 0x137); |
217 | lcd_writereg(0x20, 0x0); | 217 | lcd_writereg(0x20, 0x0); |
218 | lcd_writereg(0x21, 0x0); | 218 | lcd_writereg(0x21, 0x0); |
219 | lcd_writereg(0x50, 0x0); | 219 | lcd_writereg(0x50, 0x0); |
220 | lcd_writereg(0x51, 0xaf); | 220 | lcd_writereg(0x51, 0xaf); |
221 | lcd_writereg(0x52, 0x0); | 221 | lcd_writereg(0x52, 0x0); |
222 | lcd_writereg(0x53, 0x83); | 222 | lcd_writereg(0x53, 0x83); |
223 | lcd_writereg(0x90, 0x0); | 223 | lcd_writereg(0x90, 0x0); |
224 | lcd_writereg(0x91, 0x0); | 224 | lcd_writereg(0x91, 0x0); |
225 | lcd_writereg(0x92, 0x0); | 225 | lcd_writereg(0x92, 0x0); |
226 | lcd_writereg(0x98, 0x0); | 226 | lcd_writereg(0x98, 0x0); |
227 | lcd_writereg(0x99, 0x903); | 227 | lcd_writereg(0x99, 0x903); |
228 | lcd_writereg(0x9a, 0x502); | 228 | lcd_writereg(0x9a, 0x502); |
229 | lcd_writereg(0x9b, 0x300); | 229 | lcd_writereg(0x9b, 0x300); |
230 | LCD_WCMD = 0x0; | 230 | LCD_WCMD = 0x0; |
231 | LCD_WCMD = 0x22; | 231 | LCD_WCMD = 0x22; |
232 | lcd_sleep(700000); | 232 | lcd_sleep(700000); |
233 | lcd_on(); | 233 | lcd_on(); |
234 | } | 234 | } |
235 | } | 235 | } |
236 | 236 | ||
@@ -273,21 +273,21 @@ void lcd_update(void) | |||
273 | /* Copy display bitmap to hardware */ | 273 | /* Copy display bitmap to hardware */ |
274 | if (lcd_type == 1) { | 274 | if (lcd_type == 1) { |
275 | LCD_WCMD = 0x2a; | 275 | LCD_WCMD = 0x2a; |
276 | LCD_WDATA = 0; | 276 | LCD_WDATA = 0; |
277 | LCD_WDATA = 0; | 277 | LCD_WDATA = 0; |
278 | LCD_WDATA = 0; | 278 | LCD_WDATA = 0; |
279 | LCD_WDATA = 0xaf; | 279 | LCD_WDATA = 0xaf; |
280 | LCD_WCMD = 0x2b; | 280 | LCD_WCMD = 0x2b; |
281 | LCD_WDATA = 0; | 281 | LCD_WDATA = 0; |
282 | LCD_WDATA = 0; | 282 | LCD_WDATA = 0; |
283 | LCD_WDATA = 0; | 283 | LCD_WDATA = 0; |
284 | LCD_WDATA = 0x83; | 284 | LCD_WDATA = 0x83; |
285 | LCD_WCMD = 0x2c; | 285 | LCD_WCMD = 0x2c; |
286 | } else { | 286 | } else { |
287 | lcd_writereg(0x20, 0x0); | 287 | lcd_writereg(0x20, 0x0); |
288 | lcd_writereg(0x21, 0x0); | 288 | lcd_writereg(0x21, 0x0); |
289 | LCD_WCMD = 0; | 289 | LCD_WCMD = 0; |
290 | LCD_WCMD = 0x22; | 290 | LCD_WCMD = 0x22; |
291 | } | 291 | } |
292 | for(p=&lcd_framebuffer[0][0], i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) { | 292 | for(p=&lcd_framebuffer[0][0], i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) { |
293 | LCD_WDATA = RGB_UNPACK_RED(*p); | 293 | LCD_WDATA = RGB_UNPACK_RED(*p); |