summaryrefslogtreecommitdiff
path: root/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi800.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/rk27xx/ihifi2/lcd-ihifi800.c')
-rw-r--r--firmware/target/arm/rk27xx/ihifi2/lcd-ihifi800.c228
1 files changed, 228 insertions, 0 deletions
diff --git a/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi800.c b/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi800.c
new file mode 100644
index 0000000000..821b52dcb6
--- /dev/null
+++ b/firmware/target/arm/rk27xx/ihifi2/lcd-ihifi800.c
@@ -0,0 +1,228 @@
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(0xEF);
36 lcd_data(0x03);
37 lcd_data(0x80);
38 lcd_data(0x02);
39
40 lcd_cmd(0xCF);
41 lcd_data(0x00);
42 lcd_data(0xC1);
43 lcd_data(0x30);
44
45 lcd_cmd(0xED);
46 lcd_data(0x67);
47 lcd_data(0x03);
48 lcd_data(0x12);
49 lcd_data(0x81);
50
51 lcd_cmd(0xE8);
52 lcd_data(0x85);
53 lcd_data(0x11);
54 lcd_data(0x79);
55
56 lcd_cmd(0xCB);
57 lcd_data(0x39);
58 lcd_data(0x2C);
59 lcd_data(0x00);
60 lcd_data(0x34);
61 lcd_data(0x06);
62
63 lcd_cmd(0xF7);
64 lcd_data(0x20);
65
66 lcd_cmd(0xEA);
67 lcd_data(0x00);
68 lcd_data(0x00);
69
70 lcd_cmd(0xC0);
71 lcd_data(0x1D);
72
73 lcd_cmd(0xC1);
74 lcd_data(0x12);
75
76 lcd_cmd(0xC5);
77 lcd_data(0x44);
78 lcd_data(0x3C);
79
80 lcd_cmd(0xC7);
81 lcd_data(0x88);
82
83 lcd_cmd(0x3A);
84 lcd_data(0x55);
85
86 lcd_cmd(0x36);
87 lcd_data(0x0C);
88
89 lcd_cmd(0xB1);
90 lcd_data(0x00);
91 lcd_data(0x17);
92
93 lcd_cmd(0xB6);
94 lcd_data(0x0A);
95 lcd_data(0xA2);
96
97 lcd_cmd(0xF2);
98 lcd_data(0x00);
99
100 lcd_cmd(0x26);
101 lcd_data(0x01);
102
103 lcd_cmd(0xE0);
104 lcd_data(0x0F);
105 lcd_data(0x22);
106 lcd_data(0x1C);
107 lcd_data(0x1B);
108 lcd_data(0x08);
109 lcd_data(0x0F);
110 lcd_data(0x48);
111 lcd_data(0xB8);
112 lcd_data(0x34);
113 lcd_data(0x05);
114 lcd_data(0x0C);
115 lcd_data(0x09);
116 lcd_data(0x0F);
117 lcd_data(0x07);
118 lcd_data(0x00);
119
120 lcd_cmd(0xE1);
121 lcd_data(0x00);
122 lcd_data(0x23);
123 lcd_data(0x24);
124 lcd_data(0x07);
125 lcd_data(0x10);
126 lcd_data(0x07);
127 lcd_data(0x38);
128 lcd_data(0x47);
129 lcd_data(0x4B);
130 lcd_data(0x0A);
131 lcd_data(0x13);
132 lcd_data(0x06);
133 lcd_data(0x30);
134 lcd_data(0x38);
135 lcd_data(0x0F);
136
137 lcd_cmd(0x2A);
138 lcd_data(0x00);
139 lcd_data(0x00);
140 lcd_data(0x00);
141 lcd_data(0xEF);
142
143 lcd_cmd(0x2B);
144 lcd_data(0x00);
145 lcd_data(0x00);
146 lcd_data(0x01);
147 lcd_data(0x3F);
148
149 lcd_cmd(0x11);
150
151 mdelay(120);
152
153 lcd_cmd(0x29);
154
155 lcd_cmd(0x2C);
156
157 for (x = 0; x < LCD_WIDTH; x++)
158 for(y=0; y < LCD_HEIGHT; y++)
159 lcd_data(0x00);
160
161 display_on = true;
162}
163
164void lcd_enable (bool on)
165{
166 if (on == display_on)
167 return;
168
169 lcdctrl_bypass(1);
170 LCDC_CTRL |= RGB24B;
171
172 if (on) {
173 lcd_cmd(0x11);
174 mdelay(120);
175 lcd_cmd(0x29);
176 lcd_cmd(0x2C);
177 } else {
178 lcd_cmd(0x28);
179 mdelay(120);
180 lcd_cmd(0x10);
181 }
182
183 display_on = on;
184 LCDC_CTRL &= ~RGB24B;
185}
186
187void lcd_set_gram_area(int x_start, int y_start,
188 int x_end, int y_end)
189{
190 lcdctrl_bypass(1);
191 LCDC_CTRL |= RGB24B;
192
193 lcd_cmd(0x2A);
194 lcd_data((x_start&0xff00)>>8);
195 lcd_data(x_start&0x00ff);
196 lcd_data((x_end&0xff00)>>8);
197 lcd_data(x_end&0x00ff);
198
199 lcd_cmd(0x2B);
200 lcd_data((y_start&0xff00)>>8);
201 lcd_data(y_start&0x00ff);
202 lcd_data((y_end&0xff00)>>8);
203 lcd_data(y_end&0x00ff);
204
205 lcd_cmd(0x2C);
206
207 LCDC_CTRL &= ~RGB24B;
208}
209
210bool lcd_active()
211{
212 return display_on;
213}
214
215/* Blit a YUV bitmap directly to the LCD */
216void lcd_blit_yuv(unsigned char * const src[3],
217 int src_x, int src_y, int stride,
218 int x, int y, int width, int height)
219{
220 (void)src;
221 (void)src_x;
222 (void)src_y;
223 (void)stride;
224 (void)x;
225 (void)y;
226 (void)width;
227 (void)height;
228}