| Index: umsboot/target/ipodclassic/lcd.c | 
| — | — | @@ -91,6 +91,8 @@ | 
| 92 | 92 | unsigned int starty, unsigned int endy, void* data, int color) | 
| 93 | 93 | { | 
| 94 | 94 | displaylcd_sync(); | 
|  | 95 | +    while (!(LCDSTATUS & 0x2)); | 
|  | 96 | +    LCDCON = 0x80100db0; | 
| 95 | 97 | if (lcd_detect() & 2) | 
| 96 | 98 | { | 
| 97 | 99 | lcd_send_cmd(0x210); | 
| Index: umsboot/target/ipodclassic/s5l8702.h | 
| — | — | @@ -528,6 +528,7 @@ | 
| 529 | 529 |  | 
| 530 | 530 |  | 
| 531 | 531 | /////LCD///// | 
|  | 532 | +#define LCDCON    (*((uint32_t volatile*)(0x38300000))) | 
| 532 | 533 | #define LCDWCMD   (*((uint32_t volatile*)(0x38300004))) | 
| 533 | 534 | #define LCDSTATUS (*((uint32_t volatile*)(0x3830001c))) | 
| 534 | 535 | #define LCDWDATA  (*((uint32_t volatile*)(0x38300040))) | 
| Index: emcore/trunk/target/ipodnano3g/lcd.c | 
| — | — | @@ -136,6 +136,8 @@ | 
| 137 | 137 | displaylcd_sync(); | 
| 138 | 138 | } | 
| 139 | 139 | else while (DMAC0C4CONFIG & 1); | 
|  | 140 | +    while (!(LCDSTATUS & 0x2)); | 
|  | 141 | +    LCDCON = 0x80100db0; | 
| 140 | 142 | if (lcd_detect() & 2) | 
| 141 | 143 | { | 
| 142 | 144 | lcd_send_cmd(0x210); | 
| — | — | @@ -265,6 +267,12 @@ | 
| 266 | 268 | __asm__ volatile("    movne r10, #3                \n"); | 
| 267 | 269 | __asm__ volatile("    moveq r10, #0                \n"); | 
| 268 | 270 | __asm__ volatile("    ldr r9, =0x38300040          \n"); | 
|  | 271 | +    __asm__ volatile("displaylcd_dither_wait :         \n"); | 
|  | 272 | +    __asm__ volatile("    ldr r4, [r9,#-0x24]          \n"); | 
|  | 273 | +    __asm__ volatile("    tst r4, #2                   \n"); | 
|  | 274 | +    __asm__ volatile("    beq displaylcd_dither_wait   \n"); | 
|  | 275 | +    __asm__ volatile("    ldr r4, =0x81104eb0          \n"); | 
|  | 276 | +    __asm__ volatile("    str r4, [r9,#-0x40]          \n"); | 
| 269 | 277 | __asm__ volatile("displaylcd_dither_y:             \n"); | 
| 270 | 278 | __asm__ volatile("    ldr lr, [sp]                 \n"); | 
| 271 | 279 | __asm__ volatile("    mov r4, #0                   \n"); | 
| — | — | @@ -272,7 +280,6 @@ | 
| 273 | 281 | __asm__ volatile("    mov r6, #0                   \n"); | 
| 274 | 282 | __asm__ volatile("    mov r7, r8                   \n"); | 
| 275 | 283 | __asm__ volatile("displaylcd_dither_x:             \n"); | 
| 276 |  | -    __asm__ volatile("    mov r2, #0                   \n"); | 
| 277 | 284 | __asm__ volatile("    ldrb r1, [r3], #1            \n"); | 
| 278 | 285 | __asm__ volatile("    ldrsb r0, [r7]               \n"); | 
| 279 | 286 | __asm__ volatile("    add r1, r1, r4               \n"); | 
| — | — | @@ -280,10 +287,10 @@ | 
| 281 | 288 | __asm__ volatile("    cmp r1, #0xff                \n"); | 
| 282 | 289 | __asm__ volatile("    mvnhi r1, r1,asr#31          \n"); | 
| 283 | 290 | __asm__ volatile("    andhi r1, r1, #0xff          \n"); | 
| 284 |  | -    __asm__ volatile("    mov r0, r1,lsr#3             \n"); | 
| 285 |  | -    __asm__ volatile("    orr r2, r0,lsl#11            \n"); | 
| 286 |  | -    __asm__ volatile("    sub r1, r1, r0,lsl#3         \n"); | 
| 287 |  | -    __asm__ volatile("    sub r1, r1, r0,lsr#2         \n"); | 
|  | 291 | +    __asm__ volatile("    mov r0, r1,lsr#2             \n"); | 
|  | 292 | +    __asm__ volatile("    mov r2, r0,lsl#18            \n"); | 
|  | 293 | +    __asm__ volatile("    sub r1, r1, r0,lsl#2         \n"); | 
|  | 294 | +    __asm__ volatile("    sub r1, r1, r0,lsr#4         \n"); | 
| 288 | 295 | __asm__ volatile("    mov r4, r4,lsr#1             \n"); | 
| 289 | 296 | __asm__ volatile("    add r4, r4, r1,lsr#2         \n"); | 
| 290 | 297 | __asm__ volatile("    strb r4, [r7], #1            \n"); | 
| — | — | @@ -296,7 +303,7 @@ | 
| 297 | 304 | __asm__ volatile("    mvnhi r1, r1,asr#31          \n"); | 
| 298 | 305 | __asm__ volatile("    andhi r1, r1, #0xff          \n"); | 
| 299 | 306 | __asm__ volatile("    mov r0, r1,lsr#2             \n"); | 
| 300 |  | -    __asm__ volatile("    orr r2, r0,lsl#5             \n"); | 
|  | 307 | +    __asm__ volatile("    orr r2, r2, r0,lsl#10        \n"); | 
| 301 | 308 | __asm__ volatile("    sub r1, r1, r0,lsl#2         \n"); | 
| 302 | 309 | __asm__ volatile("    sub r1, r1, r0,lsr#4         \n"); | 
| 303 | 310 | __asm__ volatile("    mov r5, r5,lsr#1             \n"); | 
| — | — | @@ -310,14 +317,18 @@ | 
| 311 | 318 | __asm__ volatile("    cmp r1, #0xff                \n"); | 
| 312 | 319 | __asm__ volatile("    mvnhi r1, r1,asr#31          \n"); | 
| 313 | 320 | __asm__ volatile("    andhi r1, r1, #0xff          \n"); | 
| 314 |  | -    __asm__ volatile("    mov r0, r1,lsr#3             \n"); | 
| 315 |  | -    __asm__ volatile("    orr r2, r0                   \n"); | 
| 316 |  | -    __asm__ volatile("    sub r1, r1, r0,lsl#3         \n"); | 
| 317 |  | -    __asm__ volatile("    sub r1, r1, r0,lsr#2         \n"); | 
|  | 321 | +    __asm__ volatile("    mov r0, r1,lsr#2             \n"); | 
|  | 322 | +    __asm__ volatile("    orr r2, r2, r0,lsl#2         \n"); | 
|  | 323 | +    __asm__ volatile("    sub r1, r1, r0,lsl#2         \n"); | 
|  | 324 | +    __asm__ volatile("    sub r1, r1, r0,lsr#4         \n"); | 
| 318 | 325 | __asm__ volatile("    mov r6, r6,lsr#1             \n"); | 
| 319 | 326 | __asm__ volatile("    add r6, r6, r1,lsr#2         \n"); | 
| 320 | 327 | __asm__ volatile("    strb r6, [r7], #1            \n"); | 
| 321 | 328 | __asm__ volatile("    mov r6, r1,asr#1             \n"); | 
|  | 329 | +    __asm__ volatile("displaylcd_dither_wait2:         \n"); | 
|  | 330 | +    __asm__ volatile("    ldr r0, [r9,#-0x24]          \n"); | 
|  | 331 | +    __asm__ volatile("    tst r0, #0x10                \n"); | 
|  | 332 | +    __asm__ volatile("    bne displaylcd_dither_wait2  \n"); | 
| 322 | 333 | __asm__ volatile("    str r2, [r9]                 \n"); | 
| 323 | 334 | __asm__ volatile("    sub r3, r3, r10              \n"); | 
| 324 | 335 | __asm__ volatile("    subs lr, lr, #1              \n"); | 
| — | — | @@ -354,6 +365,8 @@ | 
| 355 | 366 | { | 
| 356 | 367 | mutex_lock(&lcd_mutex, TIMEOUT_BLOCK); | 
| 357 | 368 | displaylcd_sync(); | 
|  | 369 | +    while (!(LCDSTATUS & 0x2)); | 
|  | 370 | +    LCDCON = 0x80100db0; | 
| 358 | 371 | uint32_t type = lcd_detect(); | 
| 359 | 372 | if (type & 2) | 
| 360 | 373 | { | 
| Index: emcore/trunk/target/ipodnano3g/s5l8702.h | 
| — | — | @@ -768,14 +768,14 @@ | 
| 769 | 769 |  | 
| 770 | 770 |  | 
| 771 | 771 | /////UART///// | 
| 772 |  | -#define ULCON  (*((uint32_t volatile*)0x3cc00000))
 | 
| 773 |  | -#define UCON   (*((uint32_t volatile*)0x3cc00004))
 | 
| 774 |  | -#define UFCON  (*((uint32_t volatile*)0x3cc00008))
 | 
| 775 |  | -#define UMCON  (*((uint32_t volatile*)0x3cc0000c))
 | 
| 776 |  | -#define UFSTAT (*((uint32_t volatile*)0x3cc00018))
 | 
| 777 |  | -#define UTXH   (*((uint8_t volatile*)0x3cc00020))
 | 
| 778 |  | -#define URXH   (*((uint8_t volatile*)0x3cc00024))
 | 
| 779 |  | -#define UBRDIV (*((uint32_t volatile*)0x3cc00028))
 | 
|  | 772 | +#define ULCON  (*((uint32_t volatile*)0x3cc00000)) | 
|  | 773 | +#define UCON   (*((uint32_t volatile*)0x3cc00004)) | 
|  | 774 | +#define UFCON  (*((uint32_t volatile*)0x3cc00008)) | 
|  | 775 | +#define UMCON  (*((uint32_t volatile*)0x3cc0000c)) | 
|  | 776 | +#define UFSTAT (*((uint32_t volatile*)0x3cc00018)) | 
|  | 777 | +#define UTXH   (*((uint8_t volatile*)0x3cc00020)) | 
|  | 778 | +#define URXH   (*((uint8_t volatile*)0x3cc00024)) | 
|  | 779 | +#define UBRDIV (*((uint32_t volatile*)0x3cc00028)) | 
| 780 | 780 |  | 
| 781 | 781 |  | 
| 782 | 782 | /////CLOCK GATES///// |