1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2008 by Jens Arnold
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
25 #if CONFIG_CPU == PP5002
26 .section .icode,"ax",%progbits
33 .global lcd_write_data
34 .type lcd_write_data,%function
44 orr r2, r3, r2, lsl #8
48 tst r3, #LCD1_BUSY_MASK
54 tst r3, #LCD1_BUSY_MASK
61 tst r3, #LCD1_BUSY_MASK
70 .size lcd_write_data,.-lcd_write_data
75 .global lcd_write_data_shifted
76 .type lcd_write_data_shifted,%function
78 lcd_write_data_shifted:
86 orr r2, r3, r2, lsl #8
88 orr r2, r3, r2, lsl #8
90 orr r4, r12, r4, lsr #16
93 tst r3, #LCD1_BUSY_MASK
101 .size lcd_write_data_shifted,.-lcd_write_data_shifted
103 #elif defined IPOD_MINI
105 .global lcd_write_data_shifted
106 .type lcd_write_data_shifted,%function
108 lcd_write_data_shifted:
115 orr r2, r3, r2, lsl #8
119 tst r3, #LCD1_BUSY_MASK
124 orr r2, r3, r2, lsl #8
128 tst r3, #LCD1_BUSY_MASK
136 .size lcd_write_data_shifted,.-lcd_write_data_shifted
140 .global lcd_mono_data
141 .type lcd_mono_data,%function
156 orr r4, r3, r4, lsl #8
157 orr r4, r4, #0x760000
160 tst r3, #LCD1_BUSY_MASK
166 tst r3, #LCD1_BUSY_MASK
174 tst r3, #LCD1_BUSY_MASK
185 .byte 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F
186 .byte 0xC0, 0xC3, 0xCC, 0xCF, 0xF0, 0xF3, 0xFC, 0xFF
188 .size lcd_mono_data,.-lcd_mono_data
191 .global lcd_grey_data
192 .type lcd_grey_data,%function
194 /* A high performance function to write grey phase data to the display,
195 * one or multiple pixels.
198 * r0 - pixel value data address
199 * r1 - pixel phase data address
200 * r2 - pixel block count
203 * r3/r4 - current block of phases
204 * r5/r6 - current block of values
205 * r7 - lcd data accumulator
206 * r12 - phase signs mask
207 * lr - lcd bridge address
211 stmfd sp!, {r4-r7, lr}
213 orr r12, r12, r12, lsl #8
214 orr r12, r12, r12, lsl #16
218 ldmia r1, {r3-r4} /* Fetch 8 pixel phases */
219 ldmia r0!, {r5-r6} /* Fetch 8 pixel values */
221 #ifdef IPOD_MINI2G /* Serial bridge mode */
224 orreq r7, r7, #0xc000
226 orreq r7, r7, #0x3000
228 orreq r7, r7, #0x0c00
230 orreq r7, r7, #0x0300
233 #else /* Parallel bridge mode */
248 tst r5, #LCD1_BUSY_MASK
270 tst r5, #LCD1_BUSY_MASK
281 ldmfd sp!, {r4-r7, pc}
282 .size lcd_grey_data,.-lcd_grey_data