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 SMTC_LINUX_FB_VERSION "version 0.11.2619.21.01 July 27, 2008"
18 #define NR_PALETTE 256
21 #define FB_ACCEL_SMI_LYNX 88
23 #define SCREEN_X_RES 1024
24 #define SCREEN_Y_RES 600
27 /*Assume SM712 graphics chip has 4MB VRAM */
28 #define SM712_VIDEOMEMORYSIZE 0x00400000
29 /*Assume SM722 graphics chip has 8MB VRAM */
30 #define SM722_VIDEOMEMORYSIZE 0x00800000
32 #define dac_reg (0x3c8)
33 #define dac_val (0x3c9)
35 extern char __iomem *smtc_RegBaseAddress;
36 #define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg)
37 #define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg)
38 #define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg)
40 #define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg)
41 #define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg)
42 #define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg)
44 #define SIZE_SR00_SR04 (0x04 - 0x00 + 1)
45 #define SIZE_SR10_SR24 (0x24 - 0x10 + 1)
46 #define SIZE_SR30_SR75 (0x75 - 0x30 + 1)
47 #define SIZE_SR80_SR93 (0x93 - 0x80 + 1)
48 #define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1)
49 #define SIZE_GR00_GR08 (0x08 - 0x00 + 1)
50 #define SIZE_AR00_AR14 (0x14 - 0x00 + 1)
51 #define SIZE_CR00_CR18 (0x18 - 0x00 + 1)
52 #define SIZE_CR30_CR4D (0x4D - 0x30 + 1)
53 #define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1)
54 #define SIZE_VPR (0x6C + 1)
55 #define SIZE_DPR (0x44 + 1)
57 static inline void smtc_crtcw(int reg, int val)
59 smtc_mmiowb(reg, 0x3d4);
60 smtc_mmiowb(val, 0x3d5);
63 static inline unsigned int smtc_crtcr(int reg)
65 smtc_mmiowb(reg, 0x3d4);
66 return smtc_mmiorb(0x3d5);
69 static inline void smtc_grphw(int reg, int val)
71 smtc_mmiowb(reg, 0x3ce);
72 smtc_mmiowb(val, 0x3cf);
75 static inline unsigned int smtc_grphr(int reg)
77 smtc_mmiowb(reg, 0x3ce);
78 return smtc_mmiorb(0x3cf);
81 static inline void smtc_attrw(int reg, int val)
84 smtc_mmiowb(reg, 0x3c0);
86 smtc_mmiowb(val, 0x3c0);
89 static inline void smtc_seqw(int reg, int val)
91 smtc_mmiowb(reg, 0x3c4);
92 smtc_mmiowb(val, 0x3c5);
95 static inline unsigned int smtc_seqr(int reg)
97 smtc_mmiowb(reg, 0x3c4);
98 return smtc_mmiorb(0x3c5);
101 /* The next structure holds all information relevant for a specific video mode.
109 unsigned char Init_MISC;
110 unsigned char Init_SR00_SR04[SIZE_SR00_SR04];
111 unsigned char Init_SR10_SR24[SIZE_SR10_SR24];
112 unsigned char Init_SR30_SR75[SIZE_SR30_SR75];
113 unsigned char Init_SR80_SR93[SIZE_SR80_SR93];
114 unsigned char Init_SRA0_SRAF[SIZE_SRA0_SRAF];
115 unsigned char Init_GR00_GR08[SIZE_GR00_GR08];
116 unsigned char Init_AR00_AR14[SIZE_AR00_AR14];
117 unsigned char Init_CR00_CR18[SIZE_CR00_CR18];
118 unsigned char Init_CR30_CR4D[SIZE_CR30_CR4D];
119 unsigned char Init_CR90_CRA7[SIZE_CR90_CRA7];
122 /**********************************************************************
124 **********************************************************************/
125 struct ModeInit VGAMode[] = {
127 /* mode#0: 640 x 480 16Bpp 60Hz */
132 0x03, 0x01, 0x0F, 0x00, 0x0E,
134 { /* Init_SR10_SR24 */
135 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
136 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
137 0xC4, 0x30, 0x02, 0x01, 0x01,
139 { /* Init_SR30_SR75 */
140 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
141 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
142 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
143 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
144 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
145 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
146 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
147 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
148 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
150 { /* Init_SR80_SR93 */
151 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
152 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
153 0x00, 0x00, 0x00, 0x00,
155 { /* Init_SRA0_SRAF */
156 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
157 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
159 { /* Init_GR00_GR08 */
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
163 { /* Init_AR00_AR14 */
164 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
165 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
166 0x41, 0x00, 0x0F, 0x00, 0x00,
168 { /* Init_CR00_CR18 */
169 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
170 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
174 { /* Init_CR30_CR4D */
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
176 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
177 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
178 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
180 { /* Init_CR90_CRA7 */
181 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
182 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
183 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
187 /* mode#1: 640 x 480 24Bpp 60Hz */
192 0x03, 0x01, 0x0F, 0x00, 0x0E,
194 { /* Init_SR10_SR24 */
195 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
196 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
197 0xC4, 0x30, 0x02, 0x01, 0x01,
199 { /* Init_SR30_SR75 */
200 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
201 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
202 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
203 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
204 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
205 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
206 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
207 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
208 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
210 { /* Init_SR80_SR93 */
211 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
212 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
213 0x00, 0x00, 0x00, 0x00,
215 { /* Init_SRA0_SRAF */
216 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
217 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
219 { /* Init_GR00_GR08 */
220 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
223 { /* Init_AR00_AR14 */
224 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
225 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
226 0x41, 0x00, 0x0F, 0x00, 0x00,
228 { /* Init_CR00_CR18 */
229 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
230 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
231 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
234 { /* Init_CR30_CR4D */
235 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
236 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
237 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
238 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
240 { /* Init_CR90_CRA7 */
241 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
242 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
243 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
247 /* mode#0: 640 x 480 32Bpp 60Hz */
252 0x03, 0x01, 0x0F, 0x00, 0x0E,
254 { /* Init_SR10_SR24 */
255 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
256 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
257 0xC4, 0x30, 0x02, 0x01, 0x01,
259 { /* Init_SR30_SR75 */
260 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
261 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
262 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
263 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
264 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
265 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
266 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
267 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
268 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
270 { /* Init_SR80_SR93 */
271 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
272 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
273 0x00, 0x00, 0x00, 0x00,
275 { /* Init_SRA0_SRAF */
276 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
277 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
279 { /* Init_GR00_GR08 */
280 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
283 { /* Init_AR00_AR14 */
284 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
285 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
286 0x41, 0x00, 0x0F, 0x00, 0x00,
288 { /* Init_CR00_CR18 */
289 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
290 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
294 { /* Init_CR30_CR4D */
295 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
296 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
297 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
298 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
300 { /* Init_CR90_CRA7 */
301 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
302 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
303 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
307 { /* mode#2: 800 x 600 16Bpp 60Hz */
312 0x03, 0x01, 0x0F, 0x03, 0x0E,
314 { /* Init_SR10_SR24 */
315 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
316 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
317 0xC4, 0x30, 0x02, 0x01, 0x01,
319 { /* Init_SR30_SR75 */
320 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
321 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
322 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
323 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
324 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
325 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
326 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
327 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
328 0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
330 { /* Init_SR80_SR93 */
331 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
332 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
333 0x00, 0x00, 0x00, 0x00,
335 { /* Init_SRA0_SRAF */
336 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
337 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
339 { /* Init_GR00_GR08 */
340 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
343 { /* Init_AR00_AR14 */
344 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
345 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
346 0x41, 0x00, 0x0F, 0x00, 0x00,
348 { /* Init_CR00_CR18 */
349 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
350 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
351 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
354 { /* Init_CR30_CR4D */
355 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
356 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
357 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
358 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
360 { /* Init_CR90_CRA7 */
361 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
362 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
363 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
366 { /* mode#3: 800 x 600 24Bpp 60Hz */
370 0x03, 0x01, 0x0F, 0x03, 0x0E,
372 { /* Init_SR10_SR24 */
373 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
374 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
375 0xC4, 0x30, 0x02, 0x01, 0x01,
377 { /* Init_SR30_SR75 */
378 0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36,
379 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF,
380 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
381 0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36,
382 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
383 0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36,
384 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
385 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
386 0x02, 0x45, 0x30, 0x30, 0x40, 0x20,
388 { /* Init_SR80_SR93 */
389 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36,
390 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36,
391 0x00, 0x00, 0x00, 0x00,
393 { /* Init_SRA0_SRAF */
394 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
395 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
397 { /* Init_GR00_GR08 */
398 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
401 { /* Init_AR00_AR14 */
402 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
403 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
404 0x41, 0x00, 0x0F, 0x00, 0x00,
406 { /* Init_CR00_CR18 */
407 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
408 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
409 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
412 { /* Init_CR30_CR4D */
413 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
414 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
415 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
416 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
418 { /* Init_CR90_CRA7 */
419 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
420 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
421 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
424 { /* mode#7: 800 x 600 32Bpp 60Hz */
429 0x03, 0x01, 0x0F, 0x03, 0x0E,
431 { /* Init_SR10_SR24 */
432 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
433 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
434 0xC4, 0x30, 0x02, 0x01, 0x01,
436 { /* Init_SR30_SR75 */
437 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
438 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
439 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
440 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
441 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
442 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
443 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
444 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
445 0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
447 { /* Init_SR80_SR93 */
448 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
449 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
450 0x00, 0x00, 0x00, 0x00,
452 { /* Init_SRA0_SRAF */
453 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
454 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
456 { /* Init_GR00_GR08 */
457 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
460 { /* Init_AR00_AR14 */
461 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
462 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
463 0x41, 0x00, 0x0F, 0x00, 0x00,
465 { /* Init_CR00_CR18 */
466 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
467 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
468 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
471 { /* Init_CR30_CR4D */
472 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
473 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
474 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
475 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
477 { /* Init_CR90_CRA7 */
478 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
479 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
480 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
483 /* We use 1024x768 table to light 1024x600 panel for lemote */
484 { /* mode#4: 1024 x 600 16Bpp 60Hz */
489 0x03, 0x01, 0x0F, 0x00, 0x0E,
491 { /* Init_SR10_SR24 */
492 0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20,
493 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
494 0xC4, 0x30, 0x02, 0x00, 0x01,
496 { /* Init_SR30_SR75 */
497 0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22,
498 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF,
499 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
500 0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22,
501 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
502 0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22,
503 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
504 0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02,
505 0x04, 0x45, 0x3F, 0x30, 0x40, 0x20,
507 { /* Init_SR80_SR93 */
508 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
509 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
510 0x00, 0x00, 0x00, 0x00,
512 { /* Init_SRA0_SRAF */
513 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
514 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
516 { /* Init_GR00_GR08 */
517 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
520 { /* Init_AR00_AR14 */
521 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
522 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
523 0x41, 0x00, 0x0F, 0x00, 0x00,
525 { /* Init_CR00_CR18 */
526 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
527 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
528 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
531 { /* Init_CR30_CR4D */
532 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
533 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
534 0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00,
535 0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57,
537 { /* Init_CR90_CRA7 */
538 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
539 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
540 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
543 { /* mode#5: 1024 x 768 24Bpp 60Hz */
548 0x03, 0x01, 0x0F, 0x03, 0x0E,
550 { /* Init_SR10_SR24 */
551 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
552 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
553 0xC4, 0x30, 0x02, 0x01, 0x01,
555 { /* Init_SR30_SR75 */
556 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
557 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
558 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
559 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
560 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
561 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
562 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
563 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
564 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
566 { /* Init_SR80_SR93 */
567 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
568 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
569 0x00, 0x00, 0x00, 0x00,
571 { /* Init_SRA0_SRAF */
572 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
573 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
575 { /* Init_GR00_GR08 */
576 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
579 { /* Init_AR00_AR14 */
580 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
581 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
582 0x41, 0x00, 0x0F, 0x00, 0x00,
584 { /* Init_CR00_CR18 */
585 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
586 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
587 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
590 { /* Init_CR30_CR4D */
591 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
592 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
593 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
594 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
596 { /* Init_CR90_CRA7 */
597 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
598 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
599 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
602 { /* mode#4: 1024 x 768 32Bpp 60Hz */
607 0x03, 0x01, 0x0F, 0x03, 0x0E,
609 { /* Init_SR10_SR24 */
610 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
611 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
612 0xC4, 0x32, 0x02, 0x01, 0x01,
614 { /* Init_SR30_SR75 */
615 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
616 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
617 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
618 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
619 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
620 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
621 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
622 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
623 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
625 { /* Init_SR80_SR93 */
626 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
627 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
628 0x00, 0x00, 0x00, 0x00,
630 { /* Init_SRA0_SRAF */
631 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
632 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
634 { /* Init_GR00_GR08 */
635 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
638 { /* Init_AR00_AR14 */
639 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
640 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
641 0x41, 0x00, 0x0F, 0x00, 0x00,
643 { /* Init_CR00_CR18 */
644 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
645 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
646 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
649 { /* Init_CR30_CR4D */
650 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
651 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
652 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
653 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
655 { /* Init_CR90_CRA7 */
656 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
657 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
658 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
661 { /* mode#6: 320 x 240 16Bpp 60Hz */
666 0x03, 0x01, 0x0F, 0x03, 0x0E,
668 { /* Init_SR10_SR24 */
669 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
670 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
671 0xC4, 0x32, 0x02, 0x01, 0x01,
673 { /* Init_SR30_SR75 */
674 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
675 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
676 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
677 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
678 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
679 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
680 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
681 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
682 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
684 { /* Init_SR80_SR93 */
685 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
686 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
687 0x00, 0x00, 0x00, 0x00,
689 { /* Init_SRA0_SRAF */
690 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
691 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
693 { /* Init_GR00_GR08 */
694 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
697 { /* Init_AR00_AR14 */
698 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
699 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
700 0x41, 0x00, 0x0F, 0x00, 0x00,
702 { /* Init_CR00_CR18 */
703 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
704 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
705 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
708 { /* Init_CR30_CR4D */
709 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
710 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
711 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
712 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
714 { /* Init_CR90_CRA7 */
715 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
716 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
717 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
721 { /* mode#8: 320 x 240 32Bpp 60Hz */
726 0x03, 0x01, 0x0F, 0x03, 0x0E,
728 { /* Init_SR10_SR24 */
729 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
730 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
731 0xC4, 0x32, 0x02, 0x01, 0x01,
733 { /* Init_SR30_SR75 */
734 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
735 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
736 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
737 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
738 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
739 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
740 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
741 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
742 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
744 { /* Init_SR80_SR93 */
745 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
746 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
747 0x00, 0x00, 0x00, 0x00,
749 { /* Init_SRA0_SRAF */
750 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
751 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
753 { /* Init_GR00_GR08 */
754 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
757 { /* Init_AR00_AR14 */
758 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
759 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
760 0x41, 0x00, 0x0F, 0x00, 0x00,
762 { /* Init_CR00_CR18 */
763 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
764 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
765 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
768 { /* Init_CR30_CR4D */
769 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
770 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
771 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
772 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
774 { /* Init_CR90_CRA7 */
775 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
776 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
777 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
782 #define numVGAModes ARRAY_SIZE(VGAMode)