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 - lcd data accumulators
205 * r6/r7 - current block of values
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 */
220 bic r5, r12, r3 /* r5 = 3.......2.......1.......0....... */
221 orr r5, r5, r5, lsr #10 /* r5 = 3.......2.3.....1.2.....0.1..... */
222 orr r5, r5, r5, lsr #10 /* r5 = 3.......2.3.....1.2.3...0.1.2... */
223 orr r5, r5, r5, lsr #10 /* r5 = 3.......2.3.....1.2.3...0.1.2.3. */
224 orr r5, r5, r5, lsr #1 /* r5 = 33......2233....112233..00112233 */
227 #ifndef IPOD_MINI2G /* 8 bit parallel bridge mode */
230 tst r6, #LCD1_BUSY_MASK
236 ldmia r0!, {r6-r7} /* Fetch 8 pixel values */
239 bic r6, r12, r4 /* r6 = 7.......6.......5.......4....... */
240 orr r6, r6, r6, lsr #10 /* r6 = 7.......6.7.....5.6.....4.5..... */
241 orr r6, r6, r6, lsr #10 /* r6 = 7.......6.7.....5.6.7...4.5.6... */
242 orr r6, r6, r6, lsr #10 /* r6 = 7.......6.7.....5.6.7...4.5.6.7. */
243 orr r6, r6, r6, lsr #1 /* r6 = 77......6677....556677..44556677 */
249 #ifdef IPOD_MINI2G /* 16 bit serial bridge mode */
250 and r5, r5, #0xff /* r5 = ........................00112233 */
251 and r6, r6, #0xff /* r6 = ........................44556677 */
252 orr r5, r6, r5, lsl #8 /* r5 = ................0011223344556677 */
253 orr r5, r5, #0x760000 /* data marker */
258 tst r7, #LCD1_BUSY_MASK
271 .size lcd_grey_data,.-lcd_grey_data