Subversion Repositories freemyipod

Rev

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

Rev 738 Rev 748
Line 87... Line 87...
87
    LCDWDATA = (data & 0xff) | ((data & 0x7f00) << 1);
87
    LCDWDATA = (data & 0xff) | ((data & 0x7f00) << 1);
88
}
88
}
89
 
89
 
90
void lcd_shutdown()
90
void lcd_shutdown()
91
{
91
{
-
 
92
    mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
-
 
93
    displaylcd_sync();
-
 
94
    while (!(LCDSTATUS & 0x2));
-
 
95
    LCDCON = 0x41100db8;
92
}
96
}
93
 
97
 
94
bool displaylcd_busy() ICODE_ATTR;
98
bool displaylcd_busy() ICODE_ATTR;
95
bool displaylcd_busy()
99
bool displaylcd_busy()
96
{
100
{
Line 114... Line 118...
114
    {
118
    {
115
        mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
119
        mutex_lock(&lcd_mutex, TIMEOUT_BLOCK);
116
        displaylcd_sync();
120
        displaylcd_sync();
117
    }
121
    }
118
    else while (DMAC0C4CONFIG & 1);
122
    else while (DMAC0C4CONFIG & 1);
-
 
123
    while (!(LCDSTATUS & 0x2));
-
 
124
    LCDCON = 0x41100db8;
119
    lcd_send_cmd(0x2a);
125
    lcd_send_cmd(0x2a);
120
    lcd_send_data(startx);
126
    lcd_send_data(startx);
121
    lcd_send_data(endx);
127
    lcd_send_data(endx);
122
    lcd_send_cmd(0x2b);
128
    lcd_send_cmd(0x2b);
123
    lcd_send_data(starty);
129
    lcd_send_data(starty);
Line 138... Line 144...
138
        lli->srcaddr = data;
144
        lli->srcaddr = data;
139
        lli->dstaddr = (void*)((int)&LCDWDATA);
145
        lli->dstaddr = (void*)((int)&LCDWDATA);
140
        lli->nextlli = last ? NULL : &lcd_lli[i + 1];
146
        lli->nextlli = last ? NULL : &lcd_lli[i + 1];
141
        lli->control = 0x70240000 | (last ? pixels : 0xfff)
147
        lli->control = 0x70240000 | (last ? pixels : 0xfff)
142
                     | (last ? 0x80000000 : 0) | (solid ? 0 : 0x4000000);
148
                     | (last ? 0x80000000 : 0) | (solid ? 0 : 0x4000000);
143
        if (!solid) data = (void*)(((uint32_t)data) + 0x1ffe);
149
        if (!solid) data += 0x1ffe;
144
    }
150
    }
145
    clean_dcache();
151
    clean_dcache();
146
    DMAC0C4CONFIG = 0x88c1;
152
    DMAC0C4CONFIG = 0x88c1;
147
}
153
}
148
 
154
 
Line 155... Line 161...
155
    displaylcd_dma(data, pixels, false);
161
    displaylcd_dma(data, pixels, false);
156
    mutex_unlock(&lcd_mutex);
162
    mutex_unlock(&lcd_mutex);
157
}
163
}
158
 
164
 
159
void displaylcd_safe_native(unsigned int startx, unsigned int endx,
165
void displaylcd_safe_native(unsigned int startx, unsigned int endx,
160
                       unsigned int starty, unsigned int endy, void* data)
166
                            unsigned int starty, unsigned int endy, void* data)
161
{
167
{
162
    int pixels = (endx - startx + 1) * (endy - starty + 1);
168
    int pixels = (endx - startx + 1) * (endy - starty + 1);
163
    if (pixels <= 0) return;
169
    if (pixels <= 0) return;
164
    displaylcd_setup(startx, endx, starty, endy, true);
170
    displaylcd_setup(startx, endx, starty, endy, true);
165
    displaylcd_dma(data, pixels, false);
171
    displaylcd_dma(data, pixels, false);
Line 221... Line 227...
221
    __asm__ volatile("    subeq r11, r11, r1           \n");
227
    __asm__ volatile("    subeq r11, r11, r1           \n");
222
    __asm__ volatile("    add r11, r11, r11,lsl#1      \n");
228
    __asm__ volatile("    add r11, r11, r11,lsl#1      \n");
223
    __asm__ volatile("    movne r10, #3                \n");
229
    __asm__ volatile("    movne r10, #3                \n");
224
    __asm__ volatile("    moveq r10, #0                \n");
230
    __asm__ volatile("    moveq r10, #0                \n");
225
    __asm__ volatile("    ldr r9, =0x38300040          \n");
231
    __asm__ volatile("    ldr r9, =0x38300040          \n");
-
 
232
    __asm__ volatile("displaylcd_dither_wait :         \n");
-
 
233
    __asm__ volatile("    ldr r4, [r9,#-0x24]          \n");
-
 
234
    __asm__ volatile("    tst r4, #2                   \n");
-
 
235
    __asm__ volatile("    beq displaylcd_dither_wait   \n");
-
 
236
    __asm__ volatile("    ldr r4, =0x41104eb8          \n");
-
 
237
    __asm__ volatile("    str r4, [r9,#-0x40]          \n");
226
    __asm__ volatile("displaylcd_dither_y:             \n");
238
    __asm__ volatile("displaylcd_dither_y:             \n");
227
    __asm__ volatile("    ldr lr, [sp]                 \n");
239
    __asm__ volatile("    ldr lr, [sp]                 \n");
228
    __asm__ volatile("    mov r4, #0                   \n");
240
    __asm__ volatile("    mov r4, #0                   \n");
229
    __asm__ volatile("    mov r5, #0                   \n");
241
    __asm__ volatile("    mov r5, #0                   \n");
230
    __asm__ volatile("    mov r6, #0                   \n");
242
    __asm__ volatile("    mov r6, #0                   \n");
231
    __asm__ volatile("    mov r7, r8                   \n");
243
    __asm__ volatile("    mov r7, r8                   \n");
232
    __asm__ volatile("displaylcd_dither_x:             \n");
244
    __asm__ volatile("displaylcd_dither_x:             \n");
233
    __asm__ volatile("    mov r2, #0                   \n");
-
 
234
    __asm__ volatile("    ldrb r1, [r3], #1            \n");
245
    __asm__ volatile("    ldrb r1, [r3], #1            \n");
235
    __asm__ volatile("    ldrsb r0, [r7]               \n");
246
    __asm__ volatile("    ldrsb r0, [r7]               \n");
236
    __asm__ volatile("    add r1, r1, r4               \n");
247
    __asm__ volatile("    add r1, r1, r4               \n");
237
    __asm__ volatile("    add r1, r1, r0               \n");
248
    __asm__ volatile("    add r1, r1, r0               \n");
238
    __asm__ volatile("    cmp r1, #0xff                \n");
249
    __asm__ volatile("    cmp r1, #0xff                \n");
239
    __asm__ volatile("    mvnhi r1, r1,asr#31          \n");
250
    __asm__ volatile("    mvnhi r1, r1,asr#31          \n");
240
    __asm__ volatile("    andhi r1, r1, #0xff          \n");
251
    __asm__ volatile("    andhi r1, r1, #0xff          \n");
241
    __asm__ volatile("    mov r0, r1,lsr#3             \n");
252
    __asm__ volatile("    mov r0, r1,lsr#2             \n");
242
    __asm__ volatile("    orr r2, r0,lsl#11            \n");
253
    __asm__ volatile("    mov r2, r0,lsl#18            \n");
243
    __asm__ volatile("    sub r1, r1, r0,lsl#3         \n");
254
    __asm__ volatile("    sub r1, r1, r0,lsl#2         \n");
244
    __asm__ volatile("    sub r1, r1, r0,lsr#2         \n");
255
    __asm__ volatile("    sub r1, r1, r0,lsr#4         \n");
245
    __asm__ volatile("    mov r4, r4,lsr#1             \n");
256
    __asm__ volatile("    mov r4, r4,lsr#1             \n");
246
    __asm__ volatile("    add r4, r4, r1,lsr#2         \n");
257
    __asm__ volatile("    add r4, r4, r1,lsr#2         \n");
247
    __asm__ volatile("    strb r4, [r7], #1            \n");
258
    __asm__ volatile("    strb r4, [r7], #1            \n");
248
    __asm__ volatile("    mov r4, r1,asr#1             \n");
259
    __asm__ volatile("    mov r4, r1,asr#1             \n");
249
    __asm__ volatile("    ldrb r1, [r3], #1            \n");
260
    __asm__ volatile("    ldrb r1, [r3], #1            \n");
Line 252... Line 263...
252
    __asm__ volatile("    add r1, r1, r0               \n");
263
    __asm__ volatile("    add r1, r1, r0               \n");
253
    __asm__ volatile("    cmp r1, #0xff                \n");
264
    __asm__ volatile("    cmp r1, #0xff                \n");
254
    __asm__ volatile("    mvnhi r1, r1,asr#31          \n");
265
    __asm__ volatile("    mvnhi r1, r1,asr#31          \n");
255
    __asm__ volatile("    andhi r1, r1, #0xff          \n");
266
    __asm__ volatile("    andhi r1, r1, #0xff          \n");
256
    __asm__ volatile("    mov r0, r1,lsr#2             \n");
267
    __asm__ volatile("    mov r0, r1,lsr#2             \n");
257
    __asm__ volatile("    orr r2, r0,lsl#5             \n");
268
    __asm__ volatile("    orr r2, r2, r0,lsl#10        \n");
258
    __asm__ volatile("    sub r1, r1, r0,lsl#2         \n");
269
    __asm__ volatile("    sub r1, r1, r0,lsl#2         \n");
259
    __asm__ volatile("    sub r1, r1, r0,lsr#4         \n");
270
    __asm__ volatile("    sub r1, r1, r0,lsr#4         \n");
260
    __asm__ volatile("    mov r5, r5,lsr#1             \n");
271
    __asm__ volatile("    mov r5, r5,lsr#1             \n");
261
    __asm__ volatile("    add r5, r5, r1,lsr#2         \n");
272
    __asm__ volatile("    add r5, r5, r1,lsr#2         \n");
262
    __asm__ volatile("    strb r5, [r7], #1            \n");
273
    __asm__ volatile("    strb r5, [r7], #1            \n");
Line 266... Line 277...
266
    __asm__ volatile("    add r1, r1, r6               \n");
277
    __asm__ volatile("    add r1, r1, r6               \n");
267
    __asm__ volatile("    add r1, r1, r0               \n");
278
    __asm__ volatile("    add r1, r1, r0               \n");
268
    __asm__ volatile("    cmp r1, #0xff                \n");
279
    __asm__ volatile("    cmp r1, #0xff                \n");
269
    __asm__ volatile("    mvnhi r1, r1,asr#31          \n");
280
    __asm__ volatile("    mvnhi r1, r1,asr#31          \n");
270
    __asm__ volatile("    andhi r1, r1, #0xff          \n");
281
    __asm__ volatile("    andhi r1, r1, #0xff          \n");
271
    __asm__ volatile("    mov r0, r1,lsr#3             \n");
282
    __asm__ volatile("    mov r0, r1,lsr#2             \n");
272
    __asm__ volatile("    orr r2, r0                   \n");
283
    __asm__ volatile("    orr r2, r2, r0,lsl#2         \n");
273
    __asm__ volatile("    sub r1, r1, r0,lsl#3         \n");
284
    __asm__ volatile("    sub r1, r1, r0,lsl#2         \n");
274
    __asm__ volatile("    sub r1, r1, r0,lsr#2         \n");
285
    __asm__ volatile("    sub r1, r1, r0,lsr#4         \n");
275
    __asm__ volatile("    mov r6, r6,lsr#1             \n");
286
    __asm__ volatile("    mov r6, r6,lsr#1             \n");
276
    __asm__ volatile("    add r6, r6, r1,lsr#2         \n");
287
    __asm__ volatile("    add r6, r6, r1,lsr#2         \n");
277
    __asm__ volatile("    strb r6, [r7], #1            \n");
288
    __asm__ volatile("    strb r6, [r7], #1            \n");
278
    __asm__ volatile("displaylcd_dither_waitlcd:       \n");
289
    __asm__ volatile("displaylcd_dither_wait2:         \n");
279
    __asm__ volatile("    ldr r0, [r9,#-0x24]          \n");
290
    __asm__ volatile("    ldr r0, [r9,#-0x24]          \n");
280
    __asm__ volatile("    mov r6, r1,asr#1             \n");
291
    __asm__ volatile("    mov r6, r1,asr#1             \n");
281
    __asm__ volatile("    tst r0, #0x10                \n");
292
    __asm__ volatile("    tst r0, #0x10                \n");
282
    __asm__ volatile("    bne displaylcd_dither_waitlcd\n");
293
    __asm__ volatile("    bne displaylcd_dither_wait2  \n");
283
    __asm__ volatile("    str r2, [r9]                 \n");
294
    __asm__ volatile("    str r2, [r9]                 \n");
284
    __asm__ volatile("    sub r3, r3, r10              \n");
295
    __asm__ volatile("    sub r3, r3, r10              \n");
285
    __asm__ volatile("    subs lr, lr, #1              \n");
296
    __asm__ volatile("    subs lr, lr, #1              \n");
286
    __asm__ volatile("    bne displaylcd_dither_x      \n");
297
    __asm__ volatile("    bne displaylcd_dither_x      \n");
287
    __asm__ volatile("    add r3, r3, r11              \n");
298
    __asm__ volatile("    add r3, r3, r11              \n");