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 = 0.......1.......2.......3....... */
221 orr r5, r5, r5, lsr #10 /* r5 = 0.......1.0.....2.1.....3.2..... */
222 orr r5, r5, r5, lsr #10 /* r5 = 0.......1.0.....2.1.0...3.2.1... */
223 orr r5, r5, r5, lsr #10 /* r5 = 0.......1.0.....2.1.0...3.2.1.0. */
224 orr r5, r5, r5, lsr #1 /* r5 = 00......1100....221100..33221100 */
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 = 4.......5.......6.......7....... */
240 orr r6, r6, r6, lsr #10 /* r6 = 4.......5.4.....6.5.....7.6..... */
241 orr r6, r6, r6, lsr #10 /* r6 = 4.......5.4.....6.5.4...7.6.5... */
242 orr r6, r6, r6, lsr #10 /* r6 = 4.......5.4.....6.5.4...7.6.5.4. */
243 orr r6, r6, r6, lsr #1 /* r6 = 44......5544....665544..77665544 */
249 #ifdef IPOD_MINI2G /* 16 bit serial bridge mode */
250 and r5, r5, #0xff /* r5 = ........................33221100 */
251 and r6, r6, #0xff /* r6 = ........................77665544 */
252 orr r5, r5, r6, lsl #8 /* r5 = ................7766554433221100 */
253 orr r5, r5, #0x760000 /* data marker */
258 tst r7, #LCD1_BUSY_MASK
270 ldmfd sp!, {r4-r7, pc}
271 .size lcd_grey_data,.-lcd_grey_data