| Line 134... |
Line 134... |
| 134 |
{
|
134 |
{
|
| 135 |
mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
|
135 |
mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
|
| 136 |
displaylcd_sync();
|
136 |
displaylcd_sync();
|
| 137 |
}
|
137 |
}
|
| 138 |
else while (DMAC0C4CONFIG & 1);
|
138 |
else while (DMAC0C4CONFIG & 1);
|
| - |
|
139 |
while (!(LCDSTATUS & 0x2));
|
| - |
|
140 |
LCDCON = 0x80100db0;
|
| 139 |
if (lcd_detect() & 2)
|
141 |
if (lcd_detect() & 2)
|
| 140 |
{
|
142 |
{
|
| 141 |
lcd_send_cmd(0x210);
|
143 |
lcd_send_cmd(0x210);
|
| 142 |
lcd_send_data(startx);
|
144 |
lcd_send_data(startx);
|
| 143 |
lcd_send_cmd(0x211);
|
145 |
lcd_send_cmd(0x211);
|
| Line 263... |
Line 265... |
| 263 |
__asm__ volatile(" subeq r11, r11, r1 \n");
|
265 |
__asm__ volatile(" subeq r11, r11, r1 \n");
|
| 264 |
__asm__ volatile(" add r11, r11, r11,lsl#1 \n");
|
266 |
__asm__ volatile(" add r11, r11, r11,lsl#1 \n");
|
| 265 |
__asm__ volatile(" movne r10, #3 \n");
|
267 |
__asm__ volatile(" movne r10, #3 \n");
|
| 266 |
__asm__ volatile(" moveq r10, #0 \n");
|
268 |
__asm__ volatile(" moveq r10, #0 \n");
|
| 267 |
__asm__ volatile(" ldr r9, =0x38300040 \n");
|
269 |
__asm__ volatile(" ldr r9, =0x38300040 \n");
|
| - |
|
270 |
__asm__ volatile("displaylcd_dither_wait : \n");
|
| - |
|
271 |
__asm__ volatile(" ldr r4, [r9,#-0x24] \n");
|
| - |
|
272 |
__asm__ volatile(" tst r4, #2 \n");
|
| - |
|
273 |
__asm__ volatile(" beq displaylcd_dither_wait \n");
|
| - |
|
274 |
__asm__ volatile(" ldr r4, =0x81104eb0 \n");
|
| - |
|
275 |
__asm__ volatile(" str r4, [r9,#-0x40] \n");
|
| 268 |
__asm__ volatile("displaylcd_dither_y: \n");
|
276 |
__asm__ volatile("displaylcd_dither_y: \n");
|
| 269 |
__asm__ volatile(" ldr lr, [sp] \n");
|
277 |
__asm__ volatile(" ldr lr, [sp] \n");
|
| 270 |
__asm__ volatile(" mov r4, #0 \n");
|
278 |
__asm__ volatile(" mov r4, #0 \n");
|
| 271 |
__asm__ volatile(" mov r5, #0 \n");
|
279 |
__asm__ volatile(" mov r5, #0 \n");
|
| 272 |
__asm__ volatile(" mov r6, #0 \n");
|
280 |
__asm__ volatile(" mov r6, #0 \n");
|
| 273 |
__asm__ volatile(" mov r7, r8 \n");
|
281 |
__asm__ volatile(" mov r7, r8 \n");
|
| 274 |
__asm__ volatile("displaylcd_dither_x: \n");
|
282 |
__asm__ volatile("displaylcd_dither_x: \n");
|
| 275 |
__asm__ volatile(" mov r2, #0 \n");
|
- |
|
| 276 |
__asm__ volatile(" ldrb r1, [r3], #1 \n");
|
283 |
__asm__ volatile(" ldrb r1, [r3], #1 \n");
|
| 277 |
__asm__ volatile(" ldrsb r0, [r7] \n");
|
284 |
__asm__ volatile(" ldrsb r0, [r7] \n");
|
| 278 |
__asm__ volatile(" add r1, r1, r4 \n");
|
285 |
__asm__ volatile(" add r1, r1, r4 \n");
|
| 279 |
__asm__ volatile(" add r1, r1, r0 \n");
|
286 |
__asm__ volatile(" add r1, r1, r0 \n");
|
| 280 |
__asm__ volatile(" cmp r1, #0xff \n");
|
287 |
__asm__ volatile(" cmp r1, #0xff \n");
|
| 281 |
__asm__ volatile(" mvnhi r1, r1,asr#31 \n");
|
288 |
__asm__ volatile(" mvnhi r1, r1,asr#31 \n");
|
| 282 |
__asm__ volatile(" andhi r1, r1, #0xff \n");
|
289 |
__asm__ volatile(" andhi r1, r1, #0xff \n");
|
| 283 |
__asm__ volatile(" mov r0, r1,lsr#3 \n");
|
290 |
__asm__ volatile(" mov r0, r1,lsr#2 \n");
|
| 284 |
__asm__ volatile(" orr r2, r0,lsl#11 \n");
|
291 |
__asm__ volatile(" mov r2, r0,lsl#18 \n");
|
| 285 |
__asm__ volatile(" sub r1, r1, r0,lsl#3 \n");
|
292 |
__asm__ volatile(" sub r1, r1, r0,lsl#2 \n");
|
| 286 |
__asm__ volatile(" sub r1, r1, r0,lsr#2 \n");
|
293 |
__asm__ volatile(" sub r1, r1, r0,lsr#4 \n");
|
| 287 |
__asm__ volatile(" mov r4, r4,lsr#1 \n");
|
294 |
__asm__ volatile(" mov r4, r4,lsr#1 \n");
|
| 288 |
__asm__ volatile(" add r4, r4, r1,lsr#2 \n");
|
295 |
__asm__ volatile(" add r4, r4, r1,lsr#2 \n");
|
| 289 |
__asm__ volatile(" strb r4, [r7], #1 \n");
|
296 |
__asm__ volatile(" strb r4, [r7], #1 \n");
|
| 290 |
__asm__ volatile(" mov r4, r1,asr#1 \n");
|
297 |
__asm__ volatile(" mov r4, r1,asr#1 \n");
|
| 291 |
__asm__ volatile(" ldrb r1, [r3], #1 \n");
|
298 |
__asm__ volatile(" ldrb r1, [r3], #1 \n");
|
| Line 294... |
Line 301... |
| 294 |
__asm__ volatile(" add r1, r1, r0 \n");
|
301 |
__asm__ volatile(" add r1, r1, r0 \n");
|
| 295 |
__asm__ volatile(" cmp r1, #0xff \n");
|
302 |
__asm__ volatile(" cmp r1, #0xff \n");
|
| 296 |
__asm__ volatile(" mvnhi r1, r1,asr#31 \n");
|
303 |
__asm__ volatile(" mvnhi r1, r1,asr#31 \n");
|
| 297 |
__asm__ volatile(" andhi r1, r1, #0xff \n");
|
304 |
__asm__ volatile(" andhi r1, r1, #0xff \n");
|
| 298 |
__asm__ volatile(" mov r0, r1,lsr#2 \n");
|
305 |
__asm__ volatile(" mov r0, r1,lsr#2 \n");
|
| 299 |
__asm__ volatile(" orr r2, r0,lsl#5 \n");
|
306 |
__asm__ volatile(" orr r2, r2, r0,lsl#10 \n");
|
| 300 |
__asm__ volatile(" sub r1, r1, r0,lsl#2 \n");
|
307 |
__asm__ volatile(" sub r1, r1, r0,lsl#2 \n");
|
| 301 |
__asm__ volatile(" sub r1, r1, r0,lsr#4 \n");
|
308 |
__asm__ volatile(" sub r1, r1, r0,lsr#4 \n");
|
| 302 |
__asm__ volatile(" mov r5, r5,lsr#1 \n");
|
309 |
__asm__ volatile(" mov r5, r5,lsr#1 \n");
|
| 303 |
__asm__ volatile(" add r5, r5, r1,lsr#2 \n");
|
310 |
__asm__ volatile(" add r5, r5, r1,lsr#2 \n");
|
| 304 |
__asm__ volatile(" strb r5, [r7], #1 \n");
|
311 |
__asm__ volatile(" strb r5, [r7], #1 \n");
|
| Line 308... |
Line 315... |
| 308 |
__asm__ volatile(" add r1, r1, r6 \n");
|
315 |
__asm__ volatile(" add r1, r1, r6 \n");
|
| 309 |
__asm__ volatile(" add r1, r1, r0 \n");
|
316 |
__asm__ volatile(" add r1, r1, r0 \n");
|
| 310 |
__asm__ volatile(" cmp r1, #0xff \n");
|
317 |
__asm__ volatile(" cmp r1, #0xff \n");
|
| 311 |
__asm__ volatile(" mvnhi r1, r1,asr#31 \n");
|
318 |
__asm__ volatile(" mvnhi r1, r1,asr#31 \n");
|
| 312 |
__asm__ volatile(" andhi r1, r1, #0xff \n");
|
319 |
__asm__ volatile(" andhi r1, r1, #0xff \n");
|
| 313 |
__asm__ volatile(" mov r0, r1,lsr#3 \n");
|
320 |
__asm__ volatile(" mov r0, r1,lsr#2 \n");
|
| 314 |
__asm__ volatile(" orr r2, r0 \n");
|
321 |
__asm__ volatile(" orr r2, r2, r0,lsl#2 \n");
|
| 315 |
__asm__ volatile(" sub r1, r1, r0,lsl#3 \n");
|
322 |
__asm__ volatile(" sub r1, r1, r0,lsl#2 \n");
|
| 316 |
__asm__ volatile(" sub r1, r1, r0,lsr#2 \n");
|
323 |
__asm__ volatile(" sub r1, r1, r0,lsr#4 \n");
|
| 317 |
__asm__ volatile(" mov r6, r6,lsr#1 \n");
|
324 |
__asm__ volatile(" mov r6, r6,lsr#1 \n");
|
| 318 |
__asm__ volatile(" add r6, r6, r1,lsr#2 \n");
|
325 |
__asm__ volatile(" add r6, r6, r1,lsr#2 \n");
|
| 319 |
__asm__ volatile(" strb r6, [r7], #1 \n");
|
326 |
__asm__ volatile(" strb r6, [r7], #1 \n");
|
| 320 |
__asm__ volatile(" mov r6, r1,asr#1 \n");
|
327 |
__asm__ volatile(" mov r6, r1,asr#1 \n");
|
| - |
|
328 |
__asm__ volatile("displaylcd_dither_wait2: \n");
|
| - |
|
329 |
__asm__ volatile(" ldr r0, [r9,#-0x24] \n");
|
| - |
|
330 |
__asm__ volatile(" tst r0, #0x10 \n");
|
| - |
|
331 |
__asm__ volatile(" bne displaylcd_dither_wait2 \n");
|
| 321 |
__asm__ volatile(" str r2, [r9] \n");
|
332 |
__asm__ volatile(" str r2, [r9] \n");
|
| 322 |
__asm__ volatile(" sub r3, r3, r10 \n");
|
333 |
__asm__ volatile(" sub r3, r3, r10 \n");
|
| 323 |
__asm__ volatile(" subs lr, lr, #1 \n");
|
334 |
__asm__ volatile(" subs lr, lr, #1 \n");
|
| 324 |
__asm__ volatile(" bne displaylcd_dither_x \n");
|
335 |
__asm__ volatile(" bne displaylcd_dither_x \n");
|
| 325 |
__asm__ volatile(" add r3, r3, r11 \n");
|
336 |
__asm__ volatile(" add r3, r3, r11 \n");
|
| Line 352... |
Line 363... |
| 352 |
|
363 |
|
| 353 |
void lcd_shutdown()
|
364 |
void lcd_shutdown()
|
| 354 |
{
|
365 |
{
|
| 355 |
mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
|
366 |
mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
|
| 356 |
displaylcd_sync();
|
367 |
displaylcd_sync();
|
| - |
|
368 |
while (!(LCDSTATUS & 0x2));
|
| - |
|
369 |
LCDCON = 0x80100db0;
|
| 357 |
uint32_t type = lcd_detect();
|
370 |
uint32_t type = lcd_detect();
|
| 358 |
if (type & 2)
|
371 |
if (type & 2)
|
| 359 |
{
|
372 |
{
|
| 360 |
lcd_send_cmd(0x7);
|
373 |
lcd_send_cmd(0x7);
|
| 361 |
lcd_send_data(0x172);
|
374 |
lcd_send_data(0x172);
|