2 * Silicon Motion SM712 frame buffer device
4 * Copyright (C) 2006 Silicon Motion Technology Corp.
5 * Authors: Ge Wang, gewang@siliconmotion.com
6 * Boyod boyod.yang@siliconmotion.com.cn
8 * Copyright (C) 2009 Lemote, Inc.
9 * Author: Wu Zhangjin, wuzhangjin@gmail.com
11 * This file is subject to the terms and conditions of the GNU General Public
12 * License. See the file COPYING in the main directory of this archive for
16 #define NR_PALETTE 256
19 #define FB_ACCEL_SMI_LYNX 88
21 #define SCREEN_X_RES 1024
22 #define SCREEN_Y_RES 600
25 /*Assume SM712 graphics chip has 4MB VRAM */
26 #define SM712_VIDEOMEMORYSIZE 0x00400000
27 /*Assume SM722 graphics chip has 8MB VRAM */
28 #define SM722_VIDEOMEMORYSIZE 0x00800000
30 #define dac_reg (0x3c8)
31 #define dac_val (0x3c9)
33 extern char __iomem *smtc_RegBaseAddress;
34 #define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg)
35 #define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg)
36 #define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg)
38 #define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg)
39 #define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg)
40 #define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg)
42 #define SIZE_SR00_SR04 (0x04 - 0x00 + 1)
43 #define SIZE_SR10_SR24 (0x24 - 0x10 + 1)
44 #define SIZE_SR30_SR75 (0x75 - 0x30 + 1)
45 #define SIZE_SR80_SR93 (0x93 - 0x80 + 1)
46 #define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1)
47 #define SIZE_GR00_GR08 (0x08 - 0x00 + 1)
48 #define SIZE_AR00_AR14 (0x14 - 0x00 + 1)
49 #define SIZE_CR00_CR18 (0x18 - 0x00 + 1)
50 #define SIZE_CR30_CR4D (0x4D - 0x30 + 1)
51 #define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1)
52 #define SIZE_VPR (0x6C + 1)
53 #define SIZE_DPR (0x44 + 1)
55 static inline void smtc_crtcw(int reg, int val)
57 smtc_mmiowb(reg, 0x3d4);
58 smtc_mmiowb(val, 0x3d5);
61 static inline unsigned int smtc_crtcr(int reg)
63 smtc_mmiowb(reg, 0x3d4);
64 return smtc_mmiorb(0x3d5);
67 static inline void smtc_grphw(int reg, int val)
69 smtc_mmiowb(reg, 0x3ce);
70 smtc_mmiowb(val, 0x3cf);
73 static inline unsigned int smtc_grphr(int reg)
75 smtc_mmiowb(reg, 0x3ce);
76 return smtc_mmiorb(0x3cf);
79 static inline void smtc_attrw(int reg, int val)
82 smtc_mmiowb(reg, 0x3c0);
84 smtc_mmiowb(val, 0x3c0);
87 static inline void smtc_seqw(int reg, int val)
89 smtc_mmiowb(reg, 0x3c4);
90 smtc_mmiowb(val, 0x3c5);
93 static inline unsigned int smtc_seqr(int reg)
95 smtc_mmiowb(reg, 0x3c4);
96 return smtc_mmiorb(0x3c5);
99 /* The next structure holds all information relevant for a specific video mode.
107 unsigned char Init_MISC;
108 unsigned char Init_SR00_SR04[SIZE_SR00_SR04];
109 unsigned char Init_SR10_SR24[SIZE_SR10_SR24];
110 unsigned char Init_SR30_SR75[SIZE_SR30_SR75];
111 unsigned char Init_SR80_SR93[SIZE_SR80_SR93];
112 unsigned char Init_SRA0_SRAF[SIZE_SRA0_SRAF];
113 unsigned char Init_GR00_GR08[SIZE_GR00_GR08];
114 unsigned char Init_AR00_AR14[SIZE_AR00_AR14];
115 unsigned char Init_CR00_CR18[SIZE_CR00_CR18];
116 unsigned char Init_CR30_CR4D[SIZE_CR30_CR4D];
117 unsigned char Init_CR90_CRA7[SIZE_CR90_CRA7];
120 /**********************************************************************
122 **********************************************************************/
123 struct ModeInit VGAMode[] = {
125 /* mode#0: 640 x 480 16Bpp 60Hz */
130 0x03, 0x01, 0x0F, 0x00, 0x0E,
132 { /* Init_SR10_SR24 */
133 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
134 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
135 0xC4, 0x30, 0x02, 0x01, 0x01,
137 { /* Init_SR30_SR75 */
138 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
139 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
140 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
141 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
142 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
143 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
144 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
145 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
146 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
148 { /* Init_SR80_SR93 */
149 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
150 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
151 0x00, 0x00, 0x00, 0x00,
153 { /* Init_SRA0_SRAF */
154 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
155 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
157 { /* Init_GR00_GR08 */
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
161 { /* Init_AR00_AR14 */
162 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
163 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
164 0x41, 0x00, 0x0F, 0x00, 0x00,
166 { /* Init_CR00_CR18 */
167 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
168 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
169 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
172 { /* Init_CR30_CR4D */
173 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
174 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
175 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
176 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
178 { /* Init_CR90_CRA7 */
179 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
180 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
181 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
185 /* mode#1: 640 x 480 24Bpp 60Hz */
190 0x03, 0x01, 0x0F, 0x00, 0x0E,
192 { /* Init_SR10_SR24 */
193 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
194 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
195 0xC4, 0x30, 0x02, 0x01, 0x01,
197 { /* Init_SR30_SR75 */
198 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
199 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
200 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
201 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
202 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
203 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
204 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
205 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
206 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
208 { /* Init_SR80_SR93 */
209 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
210 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
211 0x00, 0x00, 0x00, 0x00,
213 { /* Init_SRA0_SRAF */
214 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
215 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
217 { /* Init_GR00_GR08 */
218 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
221 { /* Init_AR00_AR14 */
222 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
223 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
224 0x41, 0x00, 0x0F, 0x00, 0x00,
226 { /* Init_CR00_CR18 */
227 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
228 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
229 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
232 { /* Init_CR30_CR4D */
233 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
234 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
235 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
236 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
238 { /* Init_CR90_CRA7 */
239 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
240 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
241 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
245 /* mode#0: 640 x 480 32Bpp 60Hz */
250 0x03, 0x01, 0x0F, 0x00, 0x0E,
252 { /* Init_SR10_SR24 */
253 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
254 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
255 0xC4, 0x30, 0x02, 0x01, 0x01,
257 { /* Init_SR30_SR75 */
258 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
259 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
260 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
261 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
262 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
263 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
264 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
265 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
266 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
268 { /* Init_SR80_SR93 */
269 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
270 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
271 0x00, 0x00, 0x00, 0x00,
273 { /* Init_SRA0_SRAF */
274 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
275 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
277 { /* Init_GR00_GR08 */
278 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
281 { /* Init_AR00_AR14 */
282 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
283 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
284 0x41, 0x00, 0x0F, 0x00, 0x00,
286 { /* Init_CR00_CR18 */
287 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
288 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
289 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
292 { /* Init_CR30_CR4D */
293 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
294 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
295 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
296 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
298 { /* Init_CR90_CRA7 */
299 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
300 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
301 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
305 { /* mode#2: 800 x 600 16Bpp 60Hz */
310 0x03, 0x01, 0x0F, 0x03, 0x0E,
312 { /* Init_SR10_SR24 */
313 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
314 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
315 0xC4, 0x30, 0x02, 0x01, 0x01,
317 { /* Init_SR30_SR75 */
318 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
319 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
320 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
321 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
322 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
323 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
324 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
325 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
326 0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
328 { /* Init_SR80_SR93 */
329 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
330 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
331 0x00, 0x00, 0x00, 0x00,
333 { /* Init_SRA0_SRAF */
334 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
335 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
337 { /* Init_GR00_GR08 */
338 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
341 { /* Init_AR00_AR14 */
342 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
343 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
344 0x41, 0x00, 0x0F, 0x00, 0x00,
346 { /* Init_CR00_CR18 */
347 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
348 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
349 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
352 { /* Init_CR30_CR4D */
353 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
354 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
355 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
356 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
358 { /* Init_CR90_CRA7 */
359 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
360 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
361 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
364 { /* mode#3: 800 x 600 24Bpp 60Hz */
368 0x03, 0x01, 0x0F, 0x03, 0x0E,
370 { /* Init_SR10_SR24 */
371 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
372 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
373 0xC4, 0x30, 0x02, 0x01, 0x01,
375 { /* Init_SR30_SR75 */
376 0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36,
377 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF,
378 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
379 0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36,
380 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
381 0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36,
382 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
383 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
384 0x02, 0x45, 0x30, 0x30, 0x40, 0x20,
386 { /* Init_SR80_SR93 */
387 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36,
388 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36,
389 0x00, 0x00, 0x00, 0x00,
391 { /* Init_SRA0_SRAF */
392 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
393 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
395 { /* Init_GR00_GR08 */
396 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
399 { /* Init_AR00_AR14 */
400 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
401 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
402 0x41, 0x00, 0x0F, 0x00, 0x00,
404 { /* Init_CR00_CR18 */
405 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
406 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
407 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
410 { /* Init_CR30_CR4D */
411 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
412 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
413 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
414 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
416 { /* Init_CR90_CRA7 */
417 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
418 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
419 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
422 { /* mode#7: 800 x 600 32Bpp 60Hz */
427 0x03, 0x01, 0x0F, 0x03, 0x0E,
429 { /* Init_SR10_SR24 */
430 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
431 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
432 0xC4, 0x30, 0x02, 0x01, 0x01,
434 { /* Init_SR30_SR75 */
435 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
436 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
437 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
438 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
439 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
440 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
441 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
442 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
443 0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
445 { /* Init_SR80_SR93 */
446 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
447 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
448 0x00, 0x00, 0x00, 0x00,
450 { /* Init_SRA0_SRAF */
451 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
452 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
454 { /* Init_GR00_GR08 */
455 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
458 { /* Init_AR00_AR14 */
459 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
460 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
461 0x41, 0x00, 0x0F, 0x00, 0x00,
463 { /* Init_CR00_CR18 */
464 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
465 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
466 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
469 { /* Init_CR30_CR4D */
470 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
471 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
472 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
473 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
475 { /* Init_CR90_CRA7 */
476 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
477 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
478 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
481 /* We use 1024x768 table to light 1024x600 panel for lemote */
482 { /* mode#4: 1024 x 600 16Bpp 60Hz */
487 0x03, 0x01, 0x0F, 0x00, 0x0E,
489 { /* Init_SR10_SR24 */
490 0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20,
491 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
492 0xC4, 0x30, 0x02, 0x00, 0x01,
494 { /* Init_SR30_SR75 */
495 0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22,
496 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF,
497 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
498 0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22,
499 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
500 0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22,
501 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
502 0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02,
503 0x04, 0x45, 0x3F, 0x30, 0x40, 0x20,
505 { /* Init_SR80_SR93 */
506 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
507 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
508 0x00, 0x00, 0x00, 0x00,
510 { /* Init_SRA0_SRAF */
511 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
512 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
514 { /* Init_GR00_GR08 */
515 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
518 { /* Init_AR00_AR14 */
519 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
520 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
521 0x41, 0x00, 0x0F, 0x00, 0x00,
523 { /* Init_CR00_CR18 */
524 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
525 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
526 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
529 { /* Init_CR30_CR4D */
530 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
531 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
532 0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00,
533 0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57,
535 { /* Init_CR90_CRA7 */
536 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
537 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
538 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
541 { /* mode#5: 1024 x 768 24Bpp 60Hz */
546 0x03, 0x01, 0x0F, 0x03, 0x0E,
548 { /* Init_SR10_SR24 */
549 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
550 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
551 0xC4, 0x30, 0x02, 0x01, 0x01,
553 { /* Init_SR30_SR75 */
554 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
555 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
556 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
557 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
558 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
559 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
560 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
561 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
562 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
564 { /* Init_SR80_SR93 */
565 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
566 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
567 0x00, 0x00, 0x00, 0x00,
569 { /* Init_SRA0_SRAF */
570 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
571 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
573 { /* Init_GR00_GR08 */
574 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
577 { /* Init_AR00_AR14 */
578 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
579 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
580 0x41, 0x00, 0x0F, 0x00, 0x00,
582 { /* Init_CR00_CR18 */
583 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
584 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
585 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
588 { /* Init_CR30_CR4D */
589 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
590 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
591 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
592 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
594 { /* Init_CR90_CRA7 */
595 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
596 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
597 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
600 { /* mode#4: 1024 x 768 32Bpp 60Hz */
605 0x03, 0x01, 0x0F, 0x03, 0x0E,
607 { /* Init_SR10_SR24 */
608 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
609 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
610 0xC4, 0x32, 0x02, 0x01, 0x01,
612 { /* Init_SR30_SR75 */
613 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
614 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
615 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
616 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
617 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
618 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
619 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
620 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
621 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
623 { /* Init_SR80_SR93 */
624 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
625 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
626 0x00, 0x00, 0x00, 0x00,
628 { /* Init_SRA0_SRAF */
629 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
630 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
632 { /* Init_GR00_GR08 */
633 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
636 { /* Init_AR00_AR14 */
637 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
638 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
639 0x41, 0x00, 0x0F, 0x00, 0x00,
641 { /* Init_CR00_CR18 */
642 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
643 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
644 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
647 { /* Init_CR30_CR4D */
648 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
649 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
650 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
651 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
653 { /* Init_CR90_CRA7 */
654 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
655 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
656 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
659 { /* mode#6: 320 x 240 16Bpp 60Hz */
664 0x03, 0x01, 0x0F, 0x03, 0x0E,
666 { /* Init_SR10_SR24 */
667 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
668 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
669 0xC4, 0x32, 0x02, 0x01, 0x01,
671 { /* Init_SR30_SR75 */
672 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
673 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
674 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
675 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
676 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
677 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
678 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
679 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
680 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
682 { /* Init_SR80_SR93 */
683 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
684 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
685 0x00, 0x00, 0x00, 0x00,
687 { /* Init_SRA0_SRAF */
688 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
689 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
691 { /* Init_GR00_GR08 */
692 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
695 { /* Init_AR00_AR14 */
696 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
697 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
698 0x41, 0x00, 0x0F, 0x00, 0x00,
700 { /* Init_CR00_CR18 */
701 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
702 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
703 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
706 { /* Init_CR30_CR4D */
707 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
708 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
709 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
710 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
712 { /* Init_CR90_CRA7 */
713 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
714 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
715 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
719 { /* mode#8: 320 x 240 32Bpp 60Hz */
724 0x03, 0x01, 0x0F, 0x03, 0x0E,
726 { /* Init_SR10_SR24 */
727 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
728 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
729 0xC4, 0x32, 0x02, 0x01, 0x01,
731 { /* Init_SR30_SR75 */
732 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
733 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
734 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
735 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
736 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
737 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
738 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
739 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
740 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
742 { /* Init_SR80_SR93 */
743 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
744 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
745 0x00, 0x00, 0x00, 0x00,
747 { /* Init_SRA0_SRAF */
748 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
749 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
751 { /* Init_GR00_GR08 */
752 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
755 { /* Init_AR00_AR14 */
756 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
757 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
758 0x41, 0x00, 0x0F, 0x00, 0x00,
760 { /* Init_CR00_CR18 */
761 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
762 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
763 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
766 { /* Init_CR30_CR4D */
767 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
768 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
769 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
770 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
772 { /* Init_CR90_CRA7 */
773 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
774 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
775 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
780 #define numVGAModes ARRAY_SIZE(VGAMode)