Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
sm7xx.h
Go to the documentation of this file.
1 /*
2  * Silicon Motion SM712 frame buffer device
3  *
4  * Copyright (C) 2006 Silicon Motion Technology Corp.
5  * Authors: Ge Wang, [email protected]
6  * Boyod [email protected]
7  *
8  * Copyright (C) 2009 Lemote, Inc.
9  * Author: Wu Zhangjin, [email protected]
10  *
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
13  * more details.
14  */
15 
16 #define NR_PALETTE 256
17 
18 #define FB_ACCEL_SMI_LYNX 88
19 
20 #define SCREEN_X_RES 1024
21 #define SCREEN_Y_RES 600
22 #define SCREEN_BPP 16
23 
24 /*Assume SM712 graphics chip has 4MB VRAM */
25 #define SM712_VIDEOMEMORYSIZE 0x00400000
26 /*Assume SM722 graphics chip has 8MB VRAM */
27 #define SM722_VIDEOMEMORYSIZE 0x00800000
28 
29 #define dac_reg (0x3c8)
30 #define dac_val (0x3c9)
31 
32 extern void __iomem *smtc_RegBaseAddress;
33 #define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg)
34 #define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg)
35 #define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg)
36 
37 #define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg)
38 #define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg)
39 #define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg)
40 
41 #define SIZE_SR00_SR04 (0x04 - 0x00 + 1)
42 #define SIZE_SR10_SR24 (0x24 - 0x10 + 1)
43 #define SIZE_SR30_SR75 (0x75 - 0x30 + 1)
44 #define SIZE_SR80_SR93 (0x93 - 0x80 + 1)
45 #define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1)
46 #define SIZE_GR00_GR08 (0x08 - 0x00 + 1)
47 #define SIZE_AR00_AR14 (0x14 - 0x00 + 1)
48 #define SIZE_CR00_CR18 (0x18 - 0x00 + 1)
49 #define SIZE_CR30_CR4D (0x4D - 0x30 + 1)
50 #define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1)
51 #define SIZE_VPR (0x6C + 1)
52 #define SIZE_DPR (0x44 + 1)
53 
54 static inline void smtc_crtcw(int reg, int val)
55 {
56  smtc_mmiowb(reg, 0x3d4);
57  smtc_mmiowb(val, 0x3d5);
58 }
59 
60 static inline unsigned int smtc_crtcr(int reg)
61 {
62  smtc_mmiowb(reg, 0x3d4);
63  return smtc_mmiorb(0x3d5);
64 }
65 
66 static inline void smtc_grphw(int reg, int val)
67 {
68  smtc_mmiowb(reg, 0x3ce);
69  smtc_mmiowb(val, 0x3cf);
70 }
71 
72 static inline unsigned int smtc_grphr(int reg)
73 {
74  smtc_mmiowb(reg, 0x3ce);
75  return smtc_mmiorb(0x3cf);
76 }
77 
78 static inline void smtc_attrw(int reg, int val)
79 {
80  smtc_mmiorb(0x3da);
81  smtc_mmiowb(reg, 0x3c0);
82  smtc_mmiorb(0x3c1);
83  smtc_mmiowb(val, 0x3c0);
84 }
85 
86 static inline void smtc_seqw(int reg, int val)
87 {
88  smtc_mmiowb(reg, 0x3c4);
89  smtc_mmiowb(val, 0x3c5);
90 }
91 
92 static inline unsigned int smtc_seqr(int reg)
93 {
94  smtc_mmiowb(reg, 0x3c4);
95  return smtc_mmiorb(0x3c5);
96 }
97 
98 /* The next structure holds all information relevant for a specific video mode.
99  */
100 
101 struct ModeInit {
102  int mmSizeX;
103  int mmSizeY;
104  int bpp;
105  int hz;
106  unsigned char Init_MISC;
117 };
118 
119 /**********************************************************************
120  SM712 Mode table.
121  **********************************************************************/
122 struct ModeInit VGAMode[] = {
123  {
124  /* mode#0: 640 x 480 16Bpp 60Hz */
125  640, 480, 16, 60,
126  /* Init_MISC */
127  0xE3,
128  { /* Init_SR0_SR4 */
129  0x03, 0x01, 0x0F, 0x00, 0x0E,
130  },
131  { /* Init_SR10_SR24 */
132  0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
133  0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
134  0xC4, 0x30, 0x02, 0x01, 0x01,
135  },
136  { /* Init_SR30_SR75 */
137  0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
138  0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
139  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
140  0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
141  0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
142  0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
143  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
144  0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
145  0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
146  },
147  { /* Init_SR80_SR93 */
148  0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
149  0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
150  0x00, 0x00, 0x00, 0x00,
151  },
152  { /* Init_SRA0_SRAF */
153  0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
154  0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
155  },
156  { /* Init_GR00_GR08 */
157  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
158  0xFF,
159  },
160  { /* Init_AR00_AR14 */
161  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
162  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
163  0x41, 0x00, 0x0F, 0x00, 0x00,
164  },
165  { /* Init_CR00_CR18 */
166  0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
167  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
168  0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
169  0xFF,
170  },
171  { /* Init_CR30_CR4D */
172  0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
173  0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
174  0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
175  0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
176  },
177  { /* Init_CR90_CRA7 */
178  0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
179  0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
180  0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
181  },
182  },
183  {
184  /* mode#1: 640 x 480 24Bpp 60Hz */
185  640, 480, 24, 60,
186  /* Init_MISC */
187  0xE3,
188  { /* Init_SR0_SR4 */
189  0x03, 0x01, 0x0F, 0x00, 0x0E,
190  },
191  { /* Init_SR10_SR24 */
192  0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
193  0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
194  0xC4, 0x30, 0x02, 0x01, 0x01,
195  },
196  { /* Init_SR30_SR75 */
197  0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
198  0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
199  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
200  0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
201  0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
202  0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
203  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
204  0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
205  0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
206  },
207  { /* Init_SR80_SR93 */
208  0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
209  0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
210  0x00, 0x00, 0x00, 0x00,
211  },
212  { /* Init_SRA0_SRAF */
213  0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
214  0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
215  },
216  { /* Init_GR00_GR08 */
217  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
218  0xFF,
219  },
220  { /* Init_AR00_AR14 */
221  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
222  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
223  0x41, 0x00, 0x0F, 0x00, 0x00,
224  },
225  { /* Init_CR00_CR18 */
226  0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
227  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
228  0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
229  0xFF,
230  },
231  { /* Init_CR30_CR4D */
232  0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
233  0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
234  0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
235  0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
236  },
237  { /* Init_CR90_CRA7 */
238  0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
239  0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
240  0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
241  },
242  },
243  {
244  /* mode#0: 640 x 480 32Bpp 60Hz */
245  640, 480, 32, 60,
246  /* Init_MISC */
247  0xE3,
248  { /* Init_SR0_SR4 */
249  0x03, 0x01, 0x0F, 0x00, 0x0E,
250  },
251  { /* Init_SR10_SR24 */
252  0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
253  0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
254  0xC4, 0x30, 0x02, 0x01, 0x01,
255  },
256  { /* Init_SR30_SR75 */
257  0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
258  0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
259  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
260  0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
261  0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
262  0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
263  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
264  0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
265  0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
266  },
267  { /* Init_SR80_SR93 */
268  0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
269  0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
270  0x00, 0x00, 0x00, 0x00,
271  },
272  { /* Init_SRA0_SRAF */
273  0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
274  0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
275  },
276  { /* Init_GR00_GR08 */
277  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
278  0xFF,
279  },
280  { /* Init_AR00_AR14 */
281  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
282  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
283  0x41, 0x00, 0x0F, 0x00, 0x00,
284  },
285  { /* Init_CR00_CR18 */
286  0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
287  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
288  0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
289  0xFF,
290  },
291  { /* Init_CR30_CR4D */
292  0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
293  0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
294  0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
295  0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
296  },
297  { /* Init_CR90_CRA7 */
298  0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
299  0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
300  0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
301  },
302  },
303 
304  { /* mode#2: 800 x 600 16Bpp 60Hz */
305  800, 600, 16, 60,
306  /* Init_MISC */
307  0x2B,
308  { /* Init_SR0_SR4 */
309  0x03, 0x01, 0x0F, 0x03, 0x0E,
310  },
311  { /* Init_SR10_SR24 */
312  0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
313  0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
314  0xC4, 0x30, 0x02, 0x01, 0x01,
315  },
316  { /* Init_SR30_SR75 */
317  0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
318  0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
319  0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
320  0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
321  0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
322  0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
323  0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
324  0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
325  0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
326  },
327  { /* Init_SR80_SR93 */
328  0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
329  0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
330  0x00, 0x00, 0x00, 0x00,
331  },
332  { /* Init_SRA0_SRAF */
333  0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
334  0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
335  },
336  { /* Init_GR00_GR08 */
337  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
338  0xFF,
339  },
340  { /* Init_AR00_AR14 */
341  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
342  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
343  0x41, 0x00, 0x0F, 0x00, 0x00,
344  },
345  { /* Init_CR00_CR18 */
346  0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
347  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
348  0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
349  0xFF,
350  },
351  { /* Init_CR30_CR4D */
352  0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
353  0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
354  0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
355  0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
356  },
357  { /* Init_CR90_CRA7 */
358  0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
359  0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
360  0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
361  },
362  },
363  { /* mode#3: 800 x 600 24Bpp 60Hz */
364  800, 600, 24, 60,
365  0x2B,
366  { /* Init_SR0_SR4 */
367  0x03, 0x01, 0x0F, 0x03, 0x0E,
368  },
369  { /* Init_SR10_SR24 */
370  0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
371  0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372  0xC4, 0x30, 0x02, 0x01, 0x01,
373  },
374  { /* Init_SR30_SR75 */
375  0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36,
376  0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF,
377  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
378  0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36,
379  0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
380  0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36,
381  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
382  0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
383  0x02, 0x45, 0x30, 0x30, 0x40, 0x20,
384  },
385  { /* Init_SR80_SR93 */
386  0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36,
387  0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36,
388  0x00, 0x00, 0x00, 0x00,
389  },
390  { /* Init_SRA0_SRAF */
391  0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
392  0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
393  },
394  { /* Init_GR00_GR08 */
395  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
396  0xFF,
397  },
398  { /* Init_AR00_AR14 */
399  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
400  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
401  0x41, 0x00, 0x0F, 0x00, 0x00,
402  },
403  { /* Init_CR00_CR18 */
404  0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
405  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
406  0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
407  0xFF,
408  },
409  { /* Init_CR30_CR4D */
410  0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
411  0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
412  0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
413  0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
414  },
415  { /* Init_CR90_CRA7 */
416  0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
417  0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
418  0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
419  },
420  },
421  { /* mode#7: 800 x 600 32Bpp 60Hz */
422  800, 600, 32, 60,
423  /* Init_MISC */
424  0x2B,
425  { /* Init_SR0_SR4 */
426  0x03, 0x01, 0x0F, 0x03, 0x0E,
427  },
428  { /* Init_SR10_SR24 */
429  0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
430  0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
431  0xC4, 0x30, 0x02, 0x01, 0x01,
432  },
433  { /* Init_SR30_SR75 */
434  0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
435  0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
436  0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
437  0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
438  0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
439  0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
440  0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
441  0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
442  0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
443  },
444  { /* Init_SR80_SR93 */
445  0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
446  0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
447  0x00, 0x00, 0x00, 0x00,
448  },
449  { /* Init_SRA0_SRAF */
450  0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
451  0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
452  },
453  { /* Init_GR00_GR08 */
454  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
455  0xFF,
456  },
457  { /* Init_AR00_AR14 */
458  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
459  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
460  0x41, 0x00, 0x0F, 0x00, 0x00,
461  },
462  { /* Init_CR00_CR18 */
463  0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
464  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
465  0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
466  0xFF,
467  },
468  { /* Init_CR30_CR4D */
469  0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
470  0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
471  0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
472  0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
473  },
474  { /* Init_CR90_CRA7 */
475  0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
476  0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
477  0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
478  },
479  },
480  /* We use 1024x768 table to light 1024x600 panel for lemote */
481  { /* mode#4: 1024 x 600 16Bpp 60Hz */
482  1024, 600, 16, 60,
483  /* Init_MISC */
484  0xEB,
485  { /* Init_SR0_SR4 */
486  0x03, 0x01, 0x0F, 0x00, 0x0E,
487  },
488  { /* Init_SR10_SR24 */
489  0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20,
490  0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
491  0xC4, 0x30, 0x02, 0x00, 0x01,
492  },
493  { /* Init_SR30_SR75 */
494  0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22,
495  0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF,
496  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
497  0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22,
498  0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
499  0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22,
500  0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
501  0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02,
502  0x04, 0x45, 0x3F, 0x30, 0x40, 0x20,
503  },
504  { /* Init_SR80_SR93 */
505  0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
506  0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
507  0x00, 0x00, 0x00, 0x00,
508  },
509  { /* Init_SRA0_SRAF */
510  0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
511  0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
512  },
513  { /* Init_GR00_GR08 */
514  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
515  0xFF,
516  },
517  { /* Init_AR00_AR14 */
518  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
519  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
520  0x41, 0x00, 0x0F, 0x00, 0x00,
521  },
522  { /* Init_CR00_CR18 */
523  0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
524  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
525  0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
526  0xFF,
527  },
528  { /* Init_CR30_CR4D */
529  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
530  0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
531  0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00,
532  0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57,
533  },
534  { /* Init_CR90_CRA7 */
535  0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
536  0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
537  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
538  },
539  },
540  { /* mode#5: 1024 x 768 24Bpp 60Hz */
541  1024, 768, 24, 60,
542  /* Init_MISC */
543  0xEB,
544  { /* Init_SR0_SR4 */
545  0x03, 0x01, 0x0F, 0x03, 0x0E,
546  },
547  { /* Init_SR10_SR24 */
548  0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
549  0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
550  0xC4, 0x30, 0x02, 0x01, 0x01,
551  },
552  { /* Init_SR30_SR75 */
553  0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
554  0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
555  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
556  0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
557  0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
558  0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
559  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
560  0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
561  0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
562  },
563  { /* Init_SR80_SR93 */
564  0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
565  0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
566  0x00, 0x00, 0x00, 0x00,
567  },
568  { /* Init_SRA0_SRAF */
569  0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
570  0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
571  },
572  { /* Init_GR00_GR08 */
573  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
574  0xFF,
575  },
576  { /* Init_AR00_AR14 */
577  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
578  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
579  0x41, 0x00, 0x0F, 0x00, 0x00,
580  },
581  { /* Init_CR00_CR18 */
582  0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
583  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
584  0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
585  0xFF,
586  },
587  { /* Init_CR30_CR4D */
588  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
589  0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
590  0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
591  0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
592  },
593  { /* Init_CR90_CRA7 */
594  0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
595  0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
596  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
597  },
598  },
599  { /* mode#4: 1024 x 768 32Bpp 60Hz */
600  1024, 768, 32, 60,
601  /* Init_MISC */
602  0xEB,
603  { /* Init_SR0_SR4 */
604  0x03, 0x01, 0x0F, 0x03, 0x0E,
605  },
606  { /* Init_SR10_SR24 */
607  0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
608  0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
609  0xC4, 0x32, 0x02, 0x01, 0x01,
610  },
611  { /* Init_SR30_SR75 */
612  0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
613  0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
614  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
615  0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
616  0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
617  0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
618  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
619  0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
620  0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
621  },
622  { /* Init_SR80_SR93 */
623  0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
624  0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
625  0x00, 0x00, 0x00, 0x00,
626  },
627  { /* Init_SRA0_SRAF */
628  0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
629  0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
630  },
631  { /* Init_GR00_GR08 */
632  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
633  0xFF,
634  },
635  { /* Init_AR00_AR14 */
636  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
637  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
638  0x41, 0x00, 0x0F, 0x00, 0x00,
639  },
640  { /* Init_CR00_CR18 */
641  0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
642  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
643  0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
644  0xFF,
645  },
646  { /* Init_CR30_CR4D */
647  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
648  0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
649  0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
650  0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
651  },
652  { /* Init_CR90_CRA7 */
653  0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
654  0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
655  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
656  },
657  },
658  { /* mode#6: 320 x 240 16Bpp 60Hz */
659  320, 240, 16, 60,
660  /* Init_MISC */
661  0xEB,
662  { /* Init_SR0_SR4 */
663  0x03, 0x01, 0x0F, 0x03, 0x0E,
664  },
665  { /* Init_SR10_SR24 */
666  0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
667  0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
668  0xC4, 0x32, 0x02, 0x01, 0x01,
669  },
670  { /* Init_SR30_SR75 */
671  0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
672  0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
673  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
674  0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
675  0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
676  0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
677  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
678  0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
679  0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
680  },
681  { /* Init_SR80_SR93 */
682  0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
683  0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
684  0x00, 0x00, 0x00, 0x00,
685  },
686  { /* Init_SRA0_SRAF */
687  0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
688  0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
689  },
690  { /* Init_GR00_GR08 */
691  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
692  0xFF,
693  },
694  { /* Init_AR00_AR14 */
695  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
696  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
697  0x41, 0x00, 0x0F, 0x00, 0x00,
698  },
699  { /* Init_CR00_CR18 */
700  0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
701  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
702  0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
703  0xFF,
704  },
705  { /* Init_CR30_CR4D */
706  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
707  0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
708  0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
709  0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
710  },
711  { /* Init_CR90_CRA7 */
712  0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
713  0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
714  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
715  },
716  },
717 
718  { /* mode#8: 320 x 240 32Bpp 60Hz */
719  320, 240, 32, 60,
720  /* Init_MISC */
721  0xEB,
722  { /* Init_SR0_SR4 */
723  0x03, 0x01, 0x0F, 0x03, 0x0E,
724  },
725  { /* Init_SR10_SR24 */
726  0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
727  0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
728  0xC4, 0x32, 0x02, 0x01, 0x01,
729  },
730  { /* Init_SR30_SR75 */
731  0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
732  0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
733  0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
734  0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
735  0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
736  0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
737  0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
738  0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
739  0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
740  },
741  { /* Init_SR80_SR93 */
742  0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
743  0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
744  0x00, 0x00, 0x00, 0x00,
745  },
746  { /* Init_SRA0_SRAF */
747  0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
748  0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
749  },
750  { /* Init_GR00_GR08 */
751  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
752  0xFF,
753  },
754  { /* Init_AR00_AR14 */
755  0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
756  0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
757  0x41, 0x00, 0x0F, 0x00, 0x00,
758  },
759  { /* Init_CR00_CR18 */
760  0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
761  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
762  0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
763  0xFF,
764  },
765  { /* Init_CR30_CR4D */
766  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
767  0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
768  0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
769  0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
770  },
771  { /* Init_CR90_CRA7 */
772  0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
773  0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
774  0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
775  },
776  },
777 };
778 
779 #define numVGAModes ARRAY_SIZE(VGAMode)