summaryrefslogtreecommitdiff
path: root/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi770c.c
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2018-06-29 16:09:28 -0400
committerSolomon Peachy <pizza@shaftnet.org>2019-01-02 08:10:01 -0500
commitd4942cc74c82c465ea395637c77ed06565b8b497 (patch)
tree8c1fa737c93f8a2ade5a1566857dc4dc8f578bd6 /firmware/target/arm/rk27xx/ihifi2/lcd-ihifi770c.c
parentaf9459a7992596e932c6d8cc0a6366ff0f0b0fca (diff)
downloadrockbox-d4942cc74c82c465ea395637c77ed06565b8b497.tar.gz
rockbox-d4942cc74c82c465ea395637c77ed06565b8b497.zip
Add Xuelin iHIFI 770/770C/800 support
Taken from the xvortex fork (Roman Stolyarov) Ported, rebased, and cleaned up by myself. Change-Id: I7b2bca2d29502f2e4544e42f3d122786dd4b7978
Diffstat (limited to 'firmware/target/arm/rk27xx/ihifi2/lcd-ihifi770c.c')
-rw-r--r--firmware/target/arm/rk27xx/ihifi2/lcd-ihifi770c.c248
1 files changed, 248 insertions, 0 deletions
diff --git a/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi770c.c b/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi770c.c
new file mode 100644
index 0000000000..311b8057cb
--- /dev/null
+++ b/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi770c.c
@@ -0,0 +1,248 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2016 by Roman Stolyarov
11 *
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.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23#include "kernel.h"
24#include "lcd.h"
25#include "system.h"
26#include "cpu.h"
27#include "lcdif-rk27xx.h"
28
29static bool display_on = false;
30
31void lcd_display_init(void)
32{
33 unsigned int x, y;
34
35 lcd_cmd(0x13);
36
37 mdelay(120);
38
39 lcd_cmd(0x35);
40 lcd_data(0x00);
41
42 lcd_cmd(0x36);
43 lcd_data(0x48);
44
45 lcd_cmd(0xD0);
46 lcd_data(0x00);
47 lcd_data(0x05);
48
49 lcd_cmd(0xEF);
50 lcd_data(0x07);
51
52 lcd_cmd(0xF2);
53 lcd_data(0x1B);
54 lcd_data(0x16);
55 lcd_data(0x0F);
56 lcd_data(0x08);
57 lcd_data(0x08);
58 lcd_data(0x08);
59 lcd_data(0x08);
60 lcd_data(0x10);
61 lcd_data(0x00);
62 lcd_data(0x1C);
63 lcd_data(0x16);
64
65 lcd_cmd(0xF3);
66 lcd_data(0x01);
67 lcd_data(0x41);
68 lcd_data(0x15);
69 lcd_data(0x0D);
70 lcd_data(0x33);
71 lcd_data(0x63);
72 lcd_data(0x46);
73 lcd_data(0x10);
74
75 lcd_cmd(0xF4);
76 lcd_data(0x5B);
77 lcd_data(0x5B);
78 lcd_data(0x55);
79 lcd_data(0x55);
80 lcd_data(0x44);
81
82 lcd_cmd(0xF5);
83 lcd_data(0x12);
84 lcd_data(0x11);
85 lcd_data(0x06);
86 lcd_data(0xF0);
87 lcd_data(0x00);
88 lcd_data(0x1F);
89
90 lcd_cmd(0xF6);
91 lcd_data(0x80);
92 lcd_data(0x10);
93 lcd_data(0x00);
94
95 lcd_cmd(0xFD);
96 lcd_data(0x11);
97 lcd_data(0x1D);
98 lcd_data(0x00);
99
100 lcd_cmd(0xF8);
101 lcd_data(0x00);
102 lcd_data(0x15);
103 lcd_data(0x01);
104 lcd_data(0x08);
105 lcd_data(0x15);
106 lcd_data(0x22);
107 lcd_data(0x25);
108 lcd_data(0x28);
109 lcd_data(0x14);
110 lcd_data(0x13);
111 lcd_data(0x10);
112 lcd_data(0x11);
113 lcd_data(0x09);
114 lcd_data(0x24);
115 lcd_data(0x28);
116
117 lcd_cmd(0xF9);
118 lcd_data(0x00);
119 lcd_data(0x15);
120 lcd_data(0x01);
121 lcd_data(0x08);
122 lcd_data(0x15);
123 lcd_data(0x22);
124 lcd_data(0x25);
125 lcd_data(0x28);
126 lcd_data(0x14);
127 lcd_data(0x13);
128 lcd_data(0x10);
129 lcd_data(0x11);
130 lcd_data(0x09);
131 lcd_data(0x24);
132 lcd_data(0x28);
133
134 lcd_cmd(0xFC);
135 lcd_data(0x00);
136 lcd_data(0x15);
137 lcd_data(0x01);
138 lcd_data(0x08);
139 lcd_data(0x15);
140 lcd_data(0x22);
141 lcd_data(0x25);
142 lcd_data(0x28);
143 lcd_data(0x14);
144 lcd_data(0x13);
145 lcd_data(0x10);
146 lcd_data(0x11);
147 lcd_data(0x09);
148 lcd_data(0x24);
149 lcd_data(0x28);
150
151 lcd_cmd(0x36);
152 lcd_data(0x48);
153
154 lcd_cmd(0x3A);
155 lcd_data(0x55);
156
157 lcd_cmd(0x2A);
158 lcd_data(0x00);
159 lcd_data(0x00);
160 lcd_data(0x01);
161 lcd_data(0x3F);
162
163 lcd_cmd(0x2B);
164 lcd_data(0x00);
165 lcd_data(0x00);
166 lcd_data(0x00);
167 lcd_data(0xEF);
168
169 lcd_cmd(0x11);
170
171 mdelay(120);
172
173 lcd_cmd(0x29);
174
175 lcd_cmd(0x2C);
176
177 for (x = 0; x < LCD_WIDTH; x++)
178 for(y=0; y < LCD_HEIGHT; y++)
179 lcd_data(0x00);
180
181 display_on = true;
182}
183
184void lcd_enable (bool on)
185{
186 if (on == display_on)
187 return;
188
189 lcdctrl_bypass(1);
190 LCDC_CTRL |= RGB24B;
191
192 if (on) {
193 lcd_cmd(0x11);
194 mdelay(120);
195 lcd_cmd(0x29);
196 lcd_cmd(0x2C);
197 } else {
198 lcd_cmd(0x28);
199 mdelay(120);
200 lcd_cmd(0x10);
201 }
202
203 display_on = on;
204 LCDC_CTRL &= ~RGB24B;
205}
206
207void lcd_set_gram_area(int x_start, int y_start,
208 int x_end, int y_end)
209{
210 lcdctrl_bypass(1);
211 LCDC_CTRL |= RGB24B;
212
213 lcd_cmd(0x2A);
214 lcd_data((x_start&0xff00)>>8);
215 lcd_data(x_start&0x00ff);
216 lcd_data((x_end&0xff00)>>8);
217 lcd_data(x_end&0x00ff);
218
219 lcd_cmd(0x2B);
220 lcd_data((y_start&0xff00)>>8);
221 lcd_data(y_start&0x00ff);
222 lcd_data((y_end&0xff00)>>8);
223 lcd_data(y_end&0x00ff);
224
225 lcd_cmd(0x2C);
226
227 LCDC_CTRL &= ~RGB24B;
228}
229
230bool lcd_active()
231{
232 return display_on;
233}
234
235/* Blit a YUV bitmap directly to the LCD */
236void lcd_blit_yuv(unsigned char * const src[3],
237 int src_x, int src_y, int stride,
238 int x, int y, int width, int height)
239{
240 (void)src;
241 (void)src_x;
242 (void)src_y;
243 (void)stride;
244 (void)x;
245 (void)y;
246 (void)width;
247 (void)height;
248}