Subversion Repositories freemyipod

Rev

Rev 738 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 738 Rev 746
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);