1 /* $XFree86$ */
2 /* $XdotOrg$ */
3 /*
4  * Data and prototypes for init.c
5  *
6  * Copyright (C) 2001-2004 by Thomas Winischhofer, Vienna, Austria
7  *
8  * If distributed as part of the Linux kernel, the following license terms
9  * apply:
10  *
11  * * This program is free software; you can redistribute it and/or modify
12  * * it under the terms of the GNU General Public License as published by
13  * * the Free Software Foundation; either version 2 of the named License,
14  * * or any later version.
15  * *
16  * * This program is distributed in the hope that it will be useful,
17  * * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * * GNU General Public License for more details.
20  * *
21  * * You should have received a copy of the GNU General Public License
22  * * along with this program; if not, write to the Free Software
23  * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
24  *
25  * Otherwise, the following license terms apply:
26  *
27  * * Redistribution and use in source and binary forms, with or without
28  * * modification, are permitted provided that the following conditions
29  * * are met:
30  * * 1) Redistributions of source code must retain the above copyright
31  * *    notice, this list of conditions and the following disclaimer.
32  * * 2) Redistributions in binary form must reproduce the above copyright
33  * *    notice, this list of conditions and the following disclaimer in the
34  * *    documentation and/or other materials provided with the distribution.
35  * * 3) The name of the author may not be used to endorse or promote products
36  * *    derived from this software without specific prior written permission.
37  * *
38  * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESSED OR
39  * * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40  * * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
41  * * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
42  * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
43  * * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
44  * * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
45  * * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46  * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
47  * * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48  *
49  * Author: 	Thomas Winischhofer <thomas@winischhofer.net>
50  *
51  */
52 
53 #ifndef _INIT_
54 #define _INIT_
55 
56 #include "osdef.h"
57 
58 #include "initdef.h"
59 #include "vgatypes.h"
60 #include "vstruct.h"
61 
62 #ifdef LINUX_XF86
63 #include "xf86.h"
64 #include "xf86Pci.h"
65 #include "xf86PciInfo.h"
66 #include "xf86_OSproc.h"
67 #include "sis.h"
68 #include "sis_regs.h"
69 #endif
70 
71 #ifdef LINUX_KERNEL
72 #ifdef SIS_CP
73 #undef SIS_CP
74 #endif
75 #include <linux/config.h>
76 #include <linux/version.h>
77 #include <linux/types.h>
78 #include <asm/io.h>
79 #include <linux/fb.h>
80 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
81 #include <linux/sisfb.h>
82 #else
83 #include <video/sisfb.h>
84 #endif
85 #endif
86 
87 /* Mode numbers */
88 const USHORT  ModeIndex_320x200[]      = {0x59, 0x41, 0x00, 0x4f};
89 const USHORT  ModeIndex_320x240[]      = {0x50, 0x56, 0x00, 0x53};
90 const USHORT  ModeIndex_320x240_FSTN[] = {0x5a, 0x5b, 0x00, 0x00};  /* FSTN */
91 const USHORT  ModeIndex_400x300[]      = {0x51, 0x57, 0x00, 0x54};
92 const USHORT  ModeIndex_512x384[]      = {0x52, 0x58, 0x00, 0x5c};
93 const USHORT  ModeIndex_640x400[]      = {0x2f, 0x5d, 0x00, 0x5e};
94 const USHORT  ModeIndex_640x480[]      = {0x2e, 0x44, 0x00, 0x62};
95 const USHORT  ModeIndex_720x480[]      = {0x31, 0x33, 0x00, 0x35};
96 const USHORT  ModeIndex_720x576[]      = {0x32, 0x34, 0x00, 0x36};
97 const USHORT  ModeIndex_768x576[]      = {0x5f, 0x60, 0x00, 0x61};
98 const USHORT  ModeIndex_800x480[]      = {0x70, 0x7a, 0x00, 0x76};
99 const USHORT  ModeIndex_800x600[]      = {0x30, 0x47, 0x00, 0x63};
100 const USHORT  ModeIndex_848x480[]      = {0x39, 0x3b, 0x00, 0x3e};
101 const USHORT  ModeIndex_856x480[]      = {0x3f, 0x42, 0x00, 0x45};
102 const USHORT  ModeIndex_1024x768[]     = {0x38, 0x4a, 0x00, 0x64};
103 const USHORT  ModeIndex_1024x576[]     = {0x71, 0x74, 0x00, 0x77};
104 const USHORT  ModeIndex_1024x600[]     = {0x20, 0x21, 0x00, 0x22};  /* 300 series only */
105 const USHORT  ModeIndex_1280x1024[]    = {0x3a, 0x4d, 0x00, 0x65};
106 const USHORT  ModeIndex_1280x960[]     = {0x7c, 0x7d, 0x00, 0x7e};
107 const USHORT  ModeIndex_1152x768[]     = {0x23, 0x24, 0x00, 0x25};  /* 300 series only */
108 const USHORT  ModeIndex_1152x864[]     = {0x29, 0x2a, 0x00, 0x2b};
109 const USHORT  ModeIndex_300_1280x768[] = {0x55, 0x5a, 0x00, 0x5b};
110 const USHORT  ModeIndex_310_1280x768[] = {0x23, 0x24, 0x00, 0x25};
111 const USHORT  ModeIndex_1280x720[]     = {0x79, 0x75, 0x00, 0x78};
112 const USHORT  ModeIndex_1280x800[]     = {0x14, 0x15, 0x00, 0x16};
113 const USHORT  ModeIndex_1360x768[]     = {0x48, 0x4b, 0x00, 0x4e};
114 const USHORT  ModeIndex_300_1360x1024[]= {0x67, 0x6f, 0x00, 0x72};  /* 300 series, BARCO only */
115 const USHORT  ModeIndex_1400x1050[]    = {0x26, 0x27, 0x00, 0x28};  /* 315 series only */
116 const USHORT  ModeIndex_1680x1050[]    = {0x17, 0x18, 0x00, 0x19};  /* 315 series only */
117 const USHORT  ModeIndex_1600x1200[]    = {0x3c, 0x3d, 0x00, 0x66};
118 const USHORT  ModeIndex_1920x1440[]    = {0x68, 0x69, 0x00, 0x6b};
119 const USHORT  ModeIndex_300_2048x1536[]= {0x6c, 0x6d, 0x00, 0x00};
120 const USHORT  ModeIndex_310_2048x1536[]= {0x6c, 0x6d, 0x00, 0x6e};
121 
122 const USHORT SiS_DRAMType[17][5]={
123 	{0x0C,0x0A,0x02,0x40,0x39},
124 	{0x0D,0x0A,0x01,0x40,0x48},
125 	{0x0C,0x09,0x02,0x20,0x35},
126 	{0x0D,0x09,0x01,0x20,0x44},
127 	{0x0C,0x08,0x02,0x10,0x31},
128 	{0x0D,0x08,0x01,0x10,0x40},
129 	{0x0C,0x0A,0x01,0x20,0x34},
130 	{0x0C,0x09,0x01,0x08,0x32},
131 	{0x0B,0x08,0x02,0x08,0x21},
132 	{0x0C,0x08,0x01,0x08,0x30},
133 	{0x0A,0x08,0x02,0x04,0x11},
134 	{0x0B,0x0A,0x01,0x10,0x28},
135 	{0x09,0x08,0x02,0x02,0x01},
136 	{0x0B,0x09,0x01,0x08,0x24},
137 	{0x0B,0x08,0x01,0x04,0x20},
138 	{0x0A,0x08,0x01,0x02,0x10},
139 	{0x09,0x08,0x01,0x01,0x00}
140 };
141 
142 const USHORT SiS_SDRDRAM_TYPE[13][5] =
143 {
144 	{ 2,12, 9,64,0x35},
145 	{ 1,13, 9,64,0x44},
146 	{ 2,12, 8,32,0x31},
147 	{ 2,11, 9,32,0x25},
148 	{ 1,12, 9,32,0x34},
149 	{ 1,13, 8,32,0x40},
150 	{ 2,11, 8,16,0x21},
151 	{ 1,12, 8,16,0x30},
152 	{ 1,11, 9,16,0x24},
153 	{ 1,11, 8, 8,0x20},
154 	{ 2, 9, 8, 4,0x01},
155 	{ 1,10, 8, 4,0x10},
156 	{ 1, 9, 8, 2,0x00}
157 };
158 
159 const USHORT SiS_DDRDRAM_TYPE[4][5] =
160 {
161 	{ 2,12, 9,64,0x35},
162 	{ 2,12, 8,32,0x31},
163 	{ 2,11, 8,16,0x21},
164 	{ 2, 9, 8, 4,0x01}
165 };
166 
167 const USHORT SiS_MDA_DAC[] =
168 {
169 	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
170         0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
171         0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
172         0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
173         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
174         0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
175         0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
176         0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
177 };
178 
179 const USHORT SiS_CGA_DAC[] =
180 {
181         0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
182         0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
183         0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
184         0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
185         0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
186         0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
187         0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
188         0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F
189 };
190 
191 const USHORT SiS_EGA_DAC[] =
192 {
193         0x00,0x10,0x04,0x14,0x01,0x11,0x05,0x15,
194         0x20,0x30,0x24,0x34,0x21,0x31,0x25,0x35,
195         0x08,0x18,0x0C,0x1C,0x09,0x19,0x0D,0x1D,
196         0x28,0x38,0x2C,0x3C,0x29,0x39,0x2D,0x3D,
197         0x02,0x12,0x06,0x16,0x03,0x13,0x07,0x17,
198         0x22,0x32,0x26,0x36,0x23,0x33,0x27,0x37,
199         0x0A,0x1A,0x0E,0x1E,0x0B,0x1B,0x0F,0x1F,
200         0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F
201 };
202 
203 const USHORT SiS_VGA_DAC[] =
204 {
205 	0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
206 	0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
207 	0x00,0x05,0x08,0x0B,0x0E,0x11,0x14,0x18,
208 	0x1C,0x20,0x24,0x28,0x2D,0x32,0x38,0x3F,
209 	0x00,0x10,0x1F,0x2F,0x3F,0x1F,0x27,0x2F,
210 	0x37,0x3F,0x2D,0x31,0x36,0x3A,0x3F,0x00,
211 	0x07,0x0E,0x15,0x1C,0x0E,0x11,0x15,0x18,
212 	0x1C,0x14,0x16,0x18,0x1A,0x1C,0x00,0x04,
213 	0x08,0x0C,0x10,0x08,0x0A,0x0C,0x0E,0x10,
214 	0x0B,0x0C,0x0D,0x0F,0x10
215 };
216 
217 static const SiS_StResInfoStruct SiS_StResInfo[]=
218 {
219 	{ 640,400},
220 	{ 640,350},
221 	{ 720,400},
222 	{ 720,350},
223 	{ 640,480}
224 };
225 
226 static const SiS_ModeResInfoStruct SiS_ModeResInfo[] =
227 {
228 	{  320, 200, 8, 8},   /* 0x00 */
229 	{  320, 240, 8, 8},   /* 0x01 */
230 	{  320, 400, 8, 8},   /* 0x02 */
231 	{  400, 300, 8, 8},   /* 0x03 */
232 	{  512, 384, 8, 8},   /* 0x04 */
233 	{  640, 400, 8,16},   /* 0x05 */
234 	{  640, 480, 8,16},   /* 0x06 */
235 	{  800, 600, 8,16},   /* 0x07 */
236 	{ 1024, 768, 8,16},   /* 0x08 */
237 	{ 1280,1024, 8,16},   /* 0x09 */
238 	{ 1600,1200, 8,16},   /* 0x0a */
239 	{ 1920,1440, 8,16},   /* 0x0b */
240 	{ 2048,1536, 8,16},   /* 0x0c */
241 	{  720, 480, 8,16},   /* 0x0d */
242 	{  720, 576, 8,16},   /* 0x0e */
243 	{ 1280, 960, 8,16},   /* 0x0f */
244 	{  800, 480, 8,16},   /* 0x10 */
245 	{ 1024, 576, 8,16},   /* 0x11 */
246 	{ 1280, 720, 8,16},   /* 0x12 */
247 	{  856, 480, 8,16},   /* 0x13 */
248 	{ 1280, 768, 8,16},   /* 0x14 */
249 	{ 1400,1050, 8,16},   /* 0x15 */
250 	{ 1152, 864, 8,16},   /* 0x16 */
251 	{  848, 480, 8,16},   /* 0x17 */
252 	{ 1360, 768, 8,16},   /* 0x18 */
253 	{ 1024, 600, 8,16},   /* 0x19 */
254 	{ 1152, 768, 8,16},   /* 0x1a */
255 	{  768, 576, 8,16},   /* 0x1b */
256 	{ 1360,1024, 8,16},   /* 0x1c */
257 	{ 1680,1050, 8,16},   /* 0x1d */
258 	{ 1280, 800, 8,16}    /* 0x1e */
259 };
260 
261 static SiS_StandTableStruct SiS_StandTable[]=
262 {
263 /* 0x00: MD_0_200 */
264  {
265   0x28,0x18,0x08,0x0800,
266   {0x09,0x03,0x00,0x02},
267   0x63,
268   {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
269    0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
270    0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
271    0xff},
272   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
273    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
274    0x08,0x00,0x0f,0x00},
275   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
276    0xff}
277  },
278 /* 0x01: MD_1_200 */
279  {
280   0x28,0x18,0x08,0x0800,
281   {0x09,0x03,0x00,0x02},
282   0x63,
283   {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
284    0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
285    0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
286    0xff},
287   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
288    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
289    0x08,0x00,0x0f,0x00},
290   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
291    0xff}
292  },
293 /* 0x02: MD_2_200 */
294  {
295   0x50,0x18,0x08,0x1000,
296   {0x01,0x03,0x00,0x02},
297   0x63,
298   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
299    0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
300    0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
301    0xff},
302   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
303    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
304    0x08,0x00,0x0f,0x00},
305   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
306    0xff}
307  },
308 /* 0x03: MD_3_200 - mode 0x03 - 0 */
309  {
310   0x50,0x18,0x08,0x1000,
311   {0x01,0x03,0x00,0x02},
312   0x63,
313   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
314    0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
315    0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
316    0xff},
317   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
318    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
319    0x08,0x00,0x0f,0x00},
320   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
321    0xff}
322  },
323 /* 0x04: MD_4 */
324  {
325   0x28,0x18,0x08,0x4000,
326   {0x09,0x03,0x00,0x02},
327   0x63,
328   {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,   /* 0x2c is 2b for 300 */
329    0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
330    0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
331    0xff},
332   {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
333    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
334    0x01,0x00,0x03,0x00},
335   {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
336    0xff}
337  },
338 /* 0x05: MD_5 */
339  {
340   0x28,0x18,0x08,0x4000,
341   {0x09,0x03,0x00,0x02},
342   0x63,
343   {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,   /* 0x2c is 2b for 300 */
344    0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
345    0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
346    0xff},
347   {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
348    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
349    0x01,0x00,0x03,0x00},
350   {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
351    0xff}
352  },
353 /* 0x06: MD_6 */
354  {
355   0x50,0x18,0x08,0x4000,
356   {0x01,0x01,0x00,0x06},
357   0x63,
358   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,   /* 55,81 is 54,80 for 300 */
359    0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
360    0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
361    0xff},
362   {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
363    0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
364    0x01,0x00,0x01,0x00},
365   {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
366    0xff}
367  },
368 /* 0x07: MD_7 */
369  {
370   0x50,0x18,0x0e,0x1000,
371   {0x00,0x03,0x00,0x03},
372   0xa6,
373   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
374    0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
375    0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
376    0xff},
377   {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
378    0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
379    0x0e,0x00,0x0f,0x08},
380   {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
381    0xff}
382  },
383 /* 0x08: MDA_DAC */
384  {
385   0x00,0x00,0x00,0x0000,
386   {0x00,0x00,0x00,0x15},
387   0x15,
388   {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
389    0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
390    0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
391    0x00},
392   {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
393    0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
394    0x15,0x15,0x15,0x15},
395   {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
396    0x3f}
397  },
398 /* 0x09: CGA_DAC */
399  {
400   0x00,0x10,0x04,0x0114,
401   {0x11,0x09,0x15,0x00},
402   0x10,
403   {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
404    0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
405    0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
406    0x04},
407   {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
408    0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
409    0x3e,0x2b,0x3b,0x2f},
410   {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
411    0x3f}
412  },
413 /* 0x0a: EGA_DAC */
414  {
415   0x00,0x10,0x04,0x0114,
416   {0x11,0x05,0x15,0x20},
417   0x30,
418   {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
419    0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
420    0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
421    0x06},
422   {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
423    0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
424    0x1e,0x0b,0x1b,0x0f},
425   {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
426    0x3f}
427  },
428 /* 0x0b: VGA_DAC */
429  {
430   0x00,0x10,0x04,0x0114,
431   {0x11,0x09,0x15,0x2a},
432   0x3a,
433   {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
434    0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
435    0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
436    0x1f},
437   {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
438    0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
439    0x1c,0x0e,0x11,0x15},
440   {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
441    0x04}
442  },
443 /* 0x0c */
444  {
445   0x08,0x0c,0x10,0x0a08,
446   {0x0c,0x0e,0x10,0x0b},
447   0x0c,
448   {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
449    0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
450    0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
451    0x06},
452   {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
453    0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
454    0x00,0x00,0x00,0x00},
455   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
456    0x00}
457  },
458 /* 0x0d: MD_D */
459  {
460   0x28,0x18,0x08,0x2000,
461   {0x09,0x0f,0x00,0x06},
462   0x63,
463   {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,     /* 2c is 2b for 300 */
464    0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
465    0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
466    0xff},
467   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
468    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
469    0x01,0x00,0x0f,0x00},
470   {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
471    0xff}
472  },
473 /* 0x0e: MD_E */
474  {
475   0x50,0x18,0x08,0x4000,
476   {0x01,0x0f,0x00,0x06},
477   0x63,
478   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,     /* 55,81 is 54,80 for 300 */
479    0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
480    0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
481    0xff},
482   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
483    0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
484    0x01,0x00,0x0f,0x00},
485   {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
486    0xff}
487  },
488 /* 0x0f: ExtVGATable - modes > 0x13 */
489  {
490   0x00,0x00,0x00,0x0000,
491   {0x01,0x0f,0x00,0x0e},
492   0x23,
493   {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
494    0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
495    0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
496    0xff},
497   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
498    0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
499    0x01,0x00,0x00,0x00},
500   {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
501    0xff}
502  },
503 /* 0x10: ROM_SAVEPTR - totally different for 300 */
504  {
505   0x9f,0x3b,0x00,0x00c0,
506   {0x00,0x00,0x00,0x00},
507   0x00,
508   {0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0x3f,
509    0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
510    0x00,0x00,0x1a,0x00,0xac,0x3e,0x00,0xc0,
511    0x00},
512   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
513    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
514    0x00,0x00,0x00,0x00},
515   {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
516    0x00}
517  },
518 /* 0x11: MD_F */
519  {
520   0x50,0x18,0x0e,0x8000,
521   {0x01,0x0f,0x00,0x06},
522   0xa2,
523   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
524    0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
525    0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,    /* 82,84 is 83,85 on 300 */
526    0xff},
527   {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
528    0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
529    0x0b,0x00,0x05,0x00},
530   {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
531    0xff}
532  },
533 /* 0x12: MD_10 */
534  {
535   0x50,0x18,0x0e,0x8000,
536   {0x01,0x0f,0x00,0x06},
537   0xa3,
538   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
539    0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
540    0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,    /* 82,84 is 83,85 on 300 */
541    0xff},
542   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
543    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
544    0x01,0x00,0x0f,0x00},
545   {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
546    0xff}
547  },
548 /* 0x13: MD_0_350 */
549  {
550   0x28,0x18,0x0e,0x0800,
551   {0x09,0x03,0x00,0x02},
552   0xa3,
553   {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,    /* b1 is a0 on 300 */
554    0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
555    0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
556    0xff},
557   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
558    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
559    0x08,0x00,0x0f,0x00},
560   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
561    0xff}
562  },
563 /* 0x14: MD_1_350 */
564  {
565   0x28,0x18,0x0e,0x0800,
566   {0x09,0x03,0x00,0x02},
567   0xa3,
568   {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
569    0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
570    0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
571    0xff},
572   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
573    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
574    0x08,0x00,0x0f,0x00},
575   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
576    0xff}
577  },
578 /* 0x15: MD_2_350 */
579  {
580   0x50,0x18,0x0e,0x1000,
581   {0x01,0x03,0x00,0x02},
582   0xa3,
583   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
584    0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
585    0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
586    0xff},
587   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
588    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
589    0x08,0x00,0x0f,0x00},
590   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
591    0xff}
592  },
593 /* 0x16: MD_3_350 - mode 0x03 - 1 */
594  {
595   0x50,0x18,0x0e,0x1000,
596   {0x01,0x03,0x00,0x02},
597   0xa3,
598   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
599    0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
600    0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
601    0xff},
602   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
603    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
604    0x08,0x00,0x0f,0x00},
605   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
606    0xff}
607  },
608 /* 0x17: MD_0_1_400 */
609  {
610   0x28,0x18,0x10,0x0800,
611   {0x08,0x03,0x00,0x02},
612   0x67,
613   {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,    /* b1 is a0 on 300 */
614    0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
615    0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
616    0xff},
617   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
618    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
619    0x0c,0x00,0x0f,0x08},
620   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
621    0xff}
622  },
623 /* 0x18: MD_2_3_400 - mode 0x03 - 2 */
624  {
625   0x50,0x18,0x10,0x1000,
626   {0x00,0x03,0x00,0x02},
627   0x67,
628   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
629    0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
630    0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
631    0xff},
632   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
633    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
634    0x0c,0x00,0x0f,0x08},
635   {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
636    0xff}
637  },
638 /* 0x19: MD_7_400 */
639  {
640   0x50,0x18,0x10,0x1000,
641   {0x00,0x03,0x00,0x02},
642   0x66,
643   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
644    0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
645    0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
646    0xff},
647   {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
648    0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
649    0x0e,0x00,0x0f,0x08},
650   {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
651    0xff}
652  },
653 /* 0x1a: MD_11 */
654  {
655   0x50,0x1d,0x10,0xa000,
656   {0x01,0x0f,0x00,0x06},
657   0xe3,
658   {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,    /* 55,81 is 54,80 on 300 */
659    0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
660    0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xc3,    /* e9,8b is ea,8c on 300 */
661    0xff},
662   {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
663    0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
664    0x01,0x00,0x0f,0x00},
665   {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
666    0xff}
667  },
668 /* 0x1b: ExtEGATable - Modes <= 0x02 */
669  {
670   0x50,0x1d,0x10,0xa000,
671   {0x01,0x0f,0x00,0x06},
672   0xe3,
673   {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,    /* 55,81 is 54,80 on 300 */
674    0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
675    0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xe3,    /* e9,8b is ea,8c on 300 */
676    0xff},
677   {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
678    0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
679    0x01,0x00,0x0f,0x00},
680   {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
681    0xff}
682  },
683 /* 0x1c: MD_13 */
684  {
685   0x28,0x18,0x08,0x2000,
686   {0x01,0x0f,0x00,0x0e},
687   0x63,
688   {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
689    0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
690    0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
691    0xff},
692   {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
693    0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
694    0x41,0x00,0x0f,0x00},
695   {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
696    0xff}
697  }
698 };
699 
700 /**************************************************************/
701 /* SIS VIDEO BRIDGE ----------------------------------------- */
702 /**************************************************************/
703 
704 static const UCHAR SiS_SoftSetting  = 0x30;   /* RAM setting */
705 
706 static const UCHAR SiS_OutputSelect = 0x40;
707 
708 static const UCHAR SiS_NTSCTiming[] = {
709 	0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
710 	0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
711 	0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
712 	0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
713 	0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
714 	0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
715 	0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
716 	0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
717 };
718 
719 static const UCHAR SiS_PALTiming[] = {
720 	0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
721 	0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
722 	0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
723 	0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,
724 	0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,
725 	0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
726 	0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
727 	0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
728 };
729 
730 static const UCHAR SiS_HiTVExtTiming[] = {
731         0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
732 	0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
733 	0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
734 	0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
735 	0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
736 	0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
737 	0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
738 	0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
739 };
740 
741 static const UCHAR SiS_HiTVSt1Timing[] = {
742         0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
743 	0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
744 	0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
745 	0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
746 	0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
747 	0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
748 	0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
749 	0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
750 };
751 
752 static const UCHAR SiS_HiTVSt2Timing[] = {
753         0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
754 	0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
755 	0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
756 	0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
757 	0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
758 	0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
759 	0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
760 	0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
761 };
762 
763 #if 0
764 static const UCHAR SiS_HiTVTextTiming[] = {
765         0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
766 	0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
767 	0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
768 	0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
769 	0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
770 	0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
771         0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
772 	0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
773 };
774 #endif
775 
776 static const UCHAR SiS_HiTVGroup3Data[] = {
777         0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
778 	0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
779 	0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
780 	0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
781 	0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
782 	0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
783 	0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
784 	0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
785 };
786 
787 static const UCHAR SiS_HiTVGroup3Simu[] = {
788         0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
789 	0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
790 	0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
791 	0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
792 	0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
793 	0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
794 	0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
795 	0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
796 };
797 
798 #if 0
799 static const UCHAR SiS_HiTVGroup3Text[] = {
800         0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
801 	0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
802 	0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
803 	0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
804 	0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
805 	0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
806 	0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
807 	0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
808 };
809 #endif
810 
811 static const UCHAR SiS_NTSCPhase[]    = {0x21,0xed,0xba,0x08};
812 static const UCHAR SiS_PALPhase[]     = {0x2a,0x05,0xe3,0x00};
813 static const UCHAR SiS_PALMPhase[]    = {0x21,0xE4,0x2E,0x9B};
814 static const UCHAR SiS_PALNPhase[]    = {0x21,0xF4,0x3E,0xBA};
815 static const UCHAR SiS_NTSCPhase2[]   = {0x21,0xF0,0x7B,0xD6};
816 static const UCHAR SiS_PALPhase2[]    = {0x2a,0x09,0x86,0xe9};
817 static const UCHAR SiS_PALMPhase2[]   = {0x21,0xE6,0xEF,0xA4};
818 static const UCHAR SiS_PALNPhase2[]   = {0x21,0xF6,0x94,0x46};
819 static const UCHAR SiS_SpecialPhase[] = {0x1e,0x8c,0x5c,0x7a};
820 static const UCHAR SiS_SpecialPhaseM[]= {0x1e,0x83,0x0a,0xe0};
821 static const UCHAR SiS_SpecialPhaseJ[]= {0x25,0xd4,0xfd,0x5e};
822 
823 static const SiS_TVDataStruct  SiS_StPALData[] =
824 {
825  {    1,   1, 864, 525,1270, 400, 100,   0, 760,0xf4,0xff,0x1c,0x22},
826  {    1,   1, 864, 525,1270, 350, 100,   0, 760,0xf4,0xff,0x1c,0x22},
827  {    1,   1, 864, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
828  {    1,   1, 864, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
829  {    1,   1, 864, 525,1270, 480,  50,   0, 760,0xf4,0xff,0x1c,0x22},
830  {    1,   1, 864, 525,1270, 600,  50,   0,   0,0xf4,0xff,0x1c,0x22}
831 };
832 
833 static const SiS_TVDataStruct  SiS_ExtPALData[] =
834 {
835  {   27,  10, 848, 448,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},  /* 640x400, 320x200 */
836  {  108,  35, 848, 398,1270, 530,  50,   0,  50,0xf4,0xff,0x1c,0x22},
837  {   12,   5, 954, 448,1270, 530,  50,   0,  50,0xf1,0x04,0x1f,0x18},
838  {    9,   4, 960, 463,1644, 438,  50,   0,  50,0xf4,0x0b,0x1c,0x0a},
839  {    9,   4, 848, 528,1270, 530,   0,   0,  50,0xf5,0xfb,0x1b,0x2a},  /* 640x480, 320x240 */
840 /*{  36,  25,1060, 648,1316, 530, 438,   0, 438,0xeb,0x05,0x25,0x16},*//* 800x600, 400x300 */
841  {   36,  25,1060, 648,1270, 530, 438,   0, 438,0xeb,0x05,0x25,0x16},  /* 800x600, 400x300 - better */
842  {    3,   2,1080, 619,1270, 540, 438,   0, 438,0xf3,0x00,0x1d,0x20},  /* 720x576 */
843  {    1,   1,1170, 821,1270, 520, 686,   0, 686,0xF3,0x00,0x1D,0x20},  /* 1024x768 */
844  {    1,   1,1170, 821,1270, 520, 686,   0, 686,0xF3,0x00,0x1D,0x20},  /* 1024x768 (for NTSC equ) */
845  {    9,   4, 848, 528,1270, 530,   0,   0,  50,0xf5,0xfb,0x1b,0x2a}   /* 720x480 test */
846 };
847 
848 static const SiS_TVDataStruct  SiS_StNTSCData[] =
849 {
850  {    1,   1, 858, 525,1270, 400,  50,   0, 760,0xf1,0x04,0x1f,0x18},
851  {    1,   1, 858, 525,1270, 350,  50,   0, 640,0xf1,0x04,0x1f,0x18},
852  {    1,   1, 858, 525,1270, 400,   0,   0, 720,0xf1,0x04,0x1f,0x18},
853  {    1,   1, 858, 525,1270, 350,   0,   0, 720,0xf4,0x0b,0x1c,0x0a},
854  {    1,   1, 858, 525,1270, 480,   0,   0, 760,0xf1,0x04,0x1f,0x18}
855 };
856 
857 static const SiS_TVDataStruct  SiS_ExtNTSCData[] =
858 {
859  {  143,  65, 858, 443,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},    /* 640x400, 320x200 */
860  {   88,  35, 858, 393,1270, 440, 171,   0, 171,0xf1,0x04,0x1f,0x18},
861  {  143,  70, 924, 443,1270, 440,  92,   0,  92,0xf1,0x04,0x1f,0x18},
862  {  143,  70, 924, 393,1270, 440,  92,   0,  92,0xf4,0x0b,0x1c,0x0a},
863  {  143,  76, 836, 523,1270, 440, 224,   0,   0,0xf1,0x05,0x1f,0x16},    /* 640x480, 320x240 */
864  {  143, 120,1056, 643,1270, 440,   0, 128,   0,0xf4,0x10,0x1c,0x00},    /* 800x600, 400x300  */
865 /*{   2,   1, 858, 503,1270, 480,   0, 128,   0,0xee,0x0c,0x22,0x08},*/  /* 720x480  (old, from 650) */
866  {  143,  76, 836, 523,1270, 440,   0, 128,   0,0xee,0x0c,0x22,0x08},    /* 720x480 - BETTER (from 300 series) */
867 /*{  65,  64,1056, 791,1270, 480, 638,   0,   0,0xEE,0x0C,0x22,0x08} */  /* 1024x768 (525i) */
868  {    1,   1,1100, 811,1412, 440,   0, 128,   0,0xee,0x0c,0x22,0x08},    /* 1024x768 (525i) CORRECTED */
869  {   65,  64,1056, 791,1270, 480, 455,   0,   0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
870 };
871 
872 static const SiS_TVDataStruct  SiS_StHiTVData[] =  /* Slave + TVSimu */
873 {
874  {    1,   1, 0x37c,0x233,0x2b2,0x320,    0,  0, 0, 0x00,0x00,0x00,0x00},
875  {    1,   1, 0x37c,0x233,0x2b2,0x2bc,    0,  0, 0, 0x00,0x00,0x00,0x00},
876  {    1,   1, 0x37c,0x233,0x2b2,0x320,    0,  0, 0, 0x00,0x00,0x00,0x00},
877  {    1,   1, 0x37c,0x233,0x2b2,0x2bc,    0,  0, 0, 0x00,0x00,0x00,0x00},
878  {    1,   1, 0x37c,0x233,0x2b2,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
879  {    8,   5, 0x41a,0x2ab,0x670,0x3c0,0x150,128, 0, 0x00,0x00,0x00,0x00}
880 };
881 
882 static const SiS_TVDataStruct  SiS_St2HiTVData[] = /* Slave */
883 {
884  {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
885  {    1,   1, 0x37c,0x233,0x2b2,0x2bc, 	  0,  0, 0, 0x00,0x00,0x00,0x00},
886  {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},
887  {    1,   1, 0x37c,0x233,0x2b2,0x2bc,    0,  0, 0, 0x00,0x00,0x00,0x00},
888  {    5,   2, 0x348,0x233,0x670,0x3c0,0x08d,128, 0, 0x00,0x00,0x00,0x00},
889  {    8,   5, 0x41a,0x2ab,0x670,0x3c0,0x17c,128, 0, 0x00,0x00,0x00,0x00}
890 };
891 
892 static const SiS_TVDataStruct  SiS_ExtHiTVData[] =
893 {
894  {    6,   1, 0x348,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
895  {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
896  {    6,   1, 0x348,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
897  {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0,  0, 0, 0x00,0x00,0x00,0x00},
898  {    5,   1, 0x348,0x233,0x670,0x3c0,0x166,128, 0, 0x00,0x00,0x00,0x00},  /* 640x480   */
899  {   16,   5, 0x41a,0x2ab,0x670,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},  /* 800x600   */
900  {   25,  12, 0x4ec,0x353,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},  /* 1024x768  */
901  {    5,   4, 0x627,0x464,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00},  /* 1280x1024 */
902  {    4,   1, 0x41a,0x233,0x60c,0x3c0,0x143,128, 0, 0x00,0x00,0x00,0x00},  /* 800x480   */
903  {    5,   2, 0x578,0x293,0x670,0x3c0,0x032,  0, 0, 0x00,0x00,0x00,0x00},  /* 1024x576  */
904  {    8,   5, 0x6d6,0x323,0x670,0x3c0,0x128,  0, 0, 0x00,0x00,0x00,0x00}   /* 1280x720  */
905 };
906 
907 static const SiS_TVDataStruct  SiS_St525pData[] =
908 {
909  {    1,   1, 0x6b4,0x20d,0x4f6,0x190,   50,  0, 0x2f8, 0x00,0x00,0x00,0x00},
910  {    1,   1, 0x6b4,0x20d,0x4f6,0x15e,   50,  0, 0x280, 0x00,0x00,0x00,0x00},
911  {    1,   1, 0x6b4,0x20d,0x4f6,0x190,   50,  0, 0x2f8, 0x00,0x00,0x00,0x00},
912  {    1,   1, 0x6b4,0x20d,0x4f6,0x15e,   50,  0, 0x280, 0x00,0x00,0x00,0x00},
913  {    1,   1, 0x6b4,0x20d,0x4f6,0x1e0,    0,  0, 0x2f8, 0x00,0x00,0x00,0x00}
914 };
915 
916 static const SiS_TVDataStruct  SiS_St750pData[] =
917 {
918  {    1,   1, 0x672,0x2ee,0x500,0x190,   50,  0, 0x2f8, 0x00,0x00,0x00,0x00},
919  {    1,   1, 0x672,0x2ee,0x500,0x15e,   50,  0, 0x280, 0x00,0x00,0x00,0x00},
920  {    1,   1, 0x672,0x2ee,0x500,0x190,    0,  0, 0x2d0, 0x00,0x00,0x00,0x00},
921  {    1,   1, 0x672,0x2ee,0x500,0x15e,    0,  0, 0x2d0, 0x00,0x00,0x00,0x00},
922  {    1,   1, 0x672,0x2ee,0x500,0x1e0,    0,  0, 0x2f8, 0x00,0x00,0x00,0x00}
923 };
924 
925 static const SiS_TVDataStruct  SiS_Ext750pData[] =
926 {
927 #if 1
928  {  143,  65, 0x35a,0x1bb,0x4f6,0x1b8,0x0ab,  0, 0x0ab, 0x00,0x00,0x00,0x00},
929  {   88,  35, 0x35a,0x189,0x4f6,0x1b8,0x0ab,  0, 0x0ab, 0x00,0x00,0x00,0x00},
930  {   18,   5, 0x339,0x1ae,0x500,0x2d0,0x05c,  0, 0x05c, 0x00,0x00,0x00,0x00},
931  {  143,  70, 0x39c,0x189,0x4f6,0x1b8,0x05c,  0, 0x05c, 0x00,0x00,0x00,0x00},
932  {   99,  32, 0x320,0x1fe,0x500,0x2d0,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 640x480  */
933  {    5,   4, 0x5d8,0x29e,0x500,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 800x600  */
934 #if 0
935  {    2,   1, 0x35a,0x1f7,0x4f6,0x1e0,    0,128,     0, 0x00,0x00,0x00,0x00},  /* 720x480  */
936 #endif
937  {   99,  32, 0x320,0x1fe,0x500,0x2d0,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 720x480 test */
938  {   68,  64, 0x55f,0x346,0x500,0x2a8,0x27e,  0,     0, 0x00,0x00,0x00,0x00},  /* 1024x768 */
939  {    5,   2, 0x3a7,0x226,0x500,0x2a8,    0,128,     0, 0x00,0x00,0x00,0x00},  /* 720x576  */
940  {   25,  24, 0x5d8,0x2f3,0x460,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00}   /* 1280x720 */
941 #endif
942 #if 0
943  {    3,   1, 0x3a7,0x1d6,0x500,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},
944  {   24,   7, 0x3a7,0x1a4,0x500,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},
945  {    3,   1, 0x3a7,0x1d6,0x500,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},
946  {   24,   7, 0x3a7,0x1a4,0x500,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},
947  {   99,  32, 0x320,0x1fe,0x500,0x2d0,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 640x480   */
948  {    5,   4, 0x5d8,0x29e,0x500,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 800x600   */
949  {    2,   1, 0x35a,0x1f7,0x4f6,0x1e0,    0,128,     0, 0x00,0x00,0x00,0x00},  /* 720x480   */
950  {   68,  64, 0x55f,0x346,0x500,0x2a8,0x27e,  0,     0, 0x00,0x00,0x00,0x00},  /* 1024x768  */
951  {   25,  24, 0x5d8,0x2f3,0x460,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00}   /* 1280x720  */
952 #endif
953 #if 0
954  {  136,  35, 0x339,0x181,0x460,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* TEST (0.93) */
955  {   17,   6, 0x339,0x203,0x460,0x2a8,   50,  0,    50, 0x00,0x00,0x00,0x00},
956  {  136,  35, 0x339,0x181,0x460,0x2a8,   50,  0,    50, 0x00,0x00,0x00,0x00},
957  {   17,   6, 0x339,0x203,0x460,0x2a8,   50,  0,    50, 0x00,0x00,0x00,0x00},
958  {   85,  46, 0x3f4,0x27b,0x460,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 640x480   */
959  {   17,  16, 0x55f,0x323,0x460,0x2a8,0x2b6,  0,     0, 0x00,0x00,0x00,0x00},  /* 800x600   */
960  {  136,  35, 0x339,0x181,0x460,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 720x480   */
961  {  187,  74, 0x39d,0x203,0x460,0x2a8,   50,  0,     0, 0x00,0x00,0x00,0x00},  /* 1024x768  */
962  {   25,  24, 0x5d8,0x2f3,0x460,0x2a8,   50,  0,    50, 0x00,0x00,0x00,0x00}   /* 1280x720  */
963 #endif
964 };
965 
966 static const SiS_LCDDataStruct  SiS_LCD1280x720Data[] =
967 {
968 	{  14,    5,  864,  432, 1344,  806 }, /* 640x400 */
969 	{  16,    5,  864,  378, 1344,  806 },
970 	{  14,    5,  864,  432, 1344,  806 },
971 	{  16,    5,  864,  378, 1344,  806 },
972 	{  24,   11,  924,  523, 1344,  806 }, /* 640x480 */
973 	{   7,    5, 1152,  664, 1344,  806 }, /* 800x600 */
974 	{   0,    0,    0,    0,    0,    0 },
975 	{   0,    0,    0,    0,    0,    0 },
976 	{   0,    0,    0,    0,    0,    0 },
977 	{   0,    0,    0,    0,    0,    0 },
978 	{   1,    1, 1344,  806, 1344,  806 }  /* 1280x720 */
979 };
980 
981 /* About 1280x768: For TMDS, Panel_1280x768 will only be set if
982  * the panel is a Fujitsu 7911 (VL-17WDX8) (with clock 81, 1688x802)
983  * Other TMDS panels of this resolution will be treated as custom.
984  * For LVDS, we know two types. Data follows:
985  */
986 
987 static const SiS_LCDDataStruct  SiS_StLCD1280x768_2Data[] =
988 {
989 	{  64,   21,  858,  434, 1408,  806 }, /* 640x400 */
990 	{  32,    9,  858,  372, 1408,  806 },
991 	{  64,   21,  858,  434, 1408,  806 },
992 	{  32,    9,  858,  372, 1408,  806 },
993 	{ 143,   68, 1024,  527, 1408,  806 }, /* 640x480 */
994 	{  64,   51, 1364,  663, 1408,  806 }, /* 800x600 */
995 	{  88,   81, 1296,  806, 1408,  806 }, /* 1024x768 */
996 	{   0,    0,    0,    0,    0,    0 },
997 	{   1,    1, 1408,  806, 1408,  806 }  /* 1280x768 */
998 };
999 
1000 static const SiS_LCDDataStruct  SiS_ExtLCD1280x768_2Data[] =
1001 {
1002 	{  64,   25, 1056,  422, 1408,  806 }, /*, 664 */
1003 	{ 128,   39,  884,  396, 1408,  806 }, /*, 640 */
1004 	{  64,   25, 1056,  422, 1408,  806 }, /*, 664 */
1005 	{ 128,   39,  884,  396, 1408,  806 }, /*, 640 */
1006 	{  32,   15, 1056,  513, 1408,  806 }, /*, 664 */
1007 	{ 176,  125, 1280,  640, 1408,  806 }, /*, 768 */
1008 	{  88,   81, 1296,  806, 1408,  806 },
1009 	{   0,    0,    0,    0,    0,    0 },
1010 	{   1,    1, 1408,  806, 1408,  806 }
1011 };
1012 
1013 static const SiS_LCDDataStruct  SiS_LCD1280x768_3Data[] =
1014 {
1015 	{  64,   25, 1056,  422, 1664,  798 },			/* 640x400 */
1016 	{ 128,   39,  884,  396, 1408,  806 }, /* ,640 */
1017 	{  64,   25, 1056,  422, 1664,  798 },			/* 640x400 */
1018 	{ 128,   39,  884,  396, 1408,  806 }, /* ,640 */
1019 	{  32,   15, 1056,  513, 1408,  806 }, /* ,664 */	/* 640x480 */
1020 	{ 176,  125, 1280,  640, 1408,  806 }, /* ,768 */	/* 800x600 */
1021 	{  64,   61, 1342,  806, 1408,  806 },			/* 1024x768 */
1022 	{   0,    0,    0,    0,    0,    0 },
1023 	{   1,    1, 1408,  806, 1408,  806 }			/* 1280x768 */
1024 };
1025 
1026 static const SiS_LCDDataStruct  SiS_LCD1280x800Data[] =
1027 {
1028 	{ 128,   51, 1122,  412, 1408,  816 }, /* 640x400 */
1029 	{ 128,   49, 1232,  361, 1408,  816 },
1030 	{ 128,   51, 1122,  412, 1408,  816 },
1031 	{ 128,   49, 1232,  361, 1408,  816 },
1032 	{   8,    3,  880,  491, 1408,  816 }, /* 640x480 */
1033 	{  11,    6, 1024,  612, 1408,  816 }, /* 800x600 */
1034 	{  22,   21, 1400,  784, 1408,  816 }, /* 1024x768 */
1035 	{   0,    0,    0,    0,    0,    0 },
1036 	{   1,    1, 1408,  816, 1408,  816 }  /* 1280x800 */
1037 };
1038 
1039 static const SiS_LCDDataStruct  SiS_LCD1280x960Data[] =
1040 {
1041 	{    9,   2,  800,  500, 1800, 1000 },
1042 	{    9,   2,  800,  500, 1800, 1000 },
1043 	{    4,   1,  900,  500, 1800, 1000 },
1044 	{    4,   1,  900,  500, 1800, 1000 },
1045 	{    9,   2,  800,  500, 1800, 1000 },
1046 	{   30,  11, 1056,  625, 1800, 1000 },
1047 	{    5,   3, 1350,  800, 1800, 1000 },
1048 	{    1,   1, 1576, 1050, 1576, 1050 },
1049 	{    1,   1, 1800, 1000, 1800, 1000 }
1050 };
1051 
1052 static const SiS_LCDDataStruct  SiS_StLCD1400x1050Data[] =
1053 {
1054 	{ 211,  100, 2100,  408, 1688, 1066 },
1055 	{ 211,   64, 1536,  358, 1688, 1066 },
1056 	{ 211,  100, 2100,  408, 1688, 1066 },
1057 	{ 211,   64, 1536,  358, 1688, 1066 },
1058 	{ 211,   48,  840,  488, 1688, 1066 },
1059 	{ 211,   72, 1008,  609, 1688, 1066 },
1060 	{ 211,  128, 1400,  776, 1688, 1066 },
1061 	{ 211,  205, 1680, 1041, 1688, 1066 },
1062 	{   1,    1, 1688, 1066, 1688, 1066 }
1063 };
1064 
1065 #undef SISUSE6330MODES
1066 
1067 static const SiS_LCDDataStruct  SiS_ExtLCD1400x1050Data[] =
1068 {
1069 #ifdef SISUSE6330MODES
1070 	{ 211,   60, 1260,  410, 1688, 1066 }, /* 640x400 (6330) */
1071 #else
1072 	{ 211,  100, 2100,  408, 1688, 1066 }, /* 640x400 (6325) WORKS */
1073 #endif
1074 	{ 211,   64, 1536,  358, 1688, 1066 },
1075 	{ 211,  100, 2100,  408, 1688, 1066 },
1076 	{ 211,   64, 1536,  358, 1688, 1066 },
1077 #ifdef SISUSE6330MODES
1078 	{ 211,   80, 1400,  490, 1688, 1066 }, /* 640x480 (6330) */
1079 	{ 211,  117, 1638,  613, 1688, 1066 }, /* 800x600 (6330) */
1080 #else
1081 	{ 211,   48,  840,  488, 1688, 1066 }, /* 640x480 (6325) WORKS */
1082 	{ 211,   72, 1008,  609, 1688, 1066 }, /* 800x600 (6325) WORKS */
1083 #endif
1084 	{ 211,  128, 1400,  776, 1688, 1066 }, /* 1024x768 */
1085 	{ 211,  205, 1680, 1041, 1688, 1066 }, /* 1280x1024 - not used (always unscaled) */
1086 	{   1,    1, 1688, 1066, 1688, 1066 }, /* 1400x1050 */
1087 	{   0,    0,    0,    0,    0,    0 }, /* kludge */
1088 	{ 211,  120, 1400,  730, 1688, 1066 }  /* 1280x720 */
1089 };
1090 
1091 static const SiS_LCDDataStruct  SiS_LCD1680x1050Data[] =
1092 {
1093 	{  95,   24, 1260,  410, 1900, 1066 }, /*  0 640x400 */
1094 	{  10,    3, 1710,  362, 1900, 1066 },
1095 	{  95,   24, 1260,  410, 1900, 1066 },
1096 	{  10,    3, 1710,  362, 1900, 1066 },
1097 	{  95,   32, 1400,  490, 1900, 1066 }, /*  4 640x480 */
1098 	{  95,   42, 1470,  610, 1900, 1066 }, /*  5 800x600 */
1099 	{  95,   64, 1750,  784, 1900, 1066 }, /*  6 1024x768 */
1100 	{  95,   94, 1900, 1055, 1900, 1066 }, /*  7 1280x1024 */
1101 	{  41,   31, 1900,  806, 1900, 1066 }, /*  8 1280x768 */
1102 	{  95,   69, 1800,  817, 1900, 1066 }, /*  9 1280x800 patch */
1103 	{  13,    9, 1900,  739, 1900, 1066 }, /* 10 1280x720 */
1104 	{  95,   94, 1880, 1066, 1900, 1066 }, /* 11 1400x1050 patch */
1105 	{   1,    1, 1900, 1066, 1900, 1066 }  /* 12 1680x1050 */
1106 };
1107 
1108 static const SiS_LCDDataStruct  SiS_StLCD1600x1200Data[] =
1109 {
1110 	{27,  4, 800, 500, 2160, 1250 },
1111 	{27,  4, 800, 500, 2160, 1250 },
1112 	{ 6,  1, 900, 500, 2160, 1250 },
1113 	{ 6,  1, 900, 500, 2160, 1250 },
1114 	{27,  1, 800, 500, 2160, 1250 },
1115 	{ 4,  1,1080, 625, 2160, 1250 },
1116 	{ 5,  2,1350, 800, 2160, 1250 },
1117 	{135,88,1600,1100, 2160, 1250 },
1118 	{72, 49,1680,1092, 2160, 1250 },
1119 	{ 1,  1,2160,1250, 2160, 1250 }
1120 };
1121 
1122 static const SiS_LCDDataStruct  SiS_ExtLCD1600x1200Data[] =
1123 {
1124 #ifndef SISUSE6330MODES
1125 	{72,11, 990, 422, 2160, 1250 }, /* 640x400 (6330) */
1126 #else
1127 	{27, 4, 800, 500, 2160, 1250 }, /* 640x400 (6235) */
1128 #endif
1129 	{27, 4, 800, 500, 2160, 1250 },
1130 	{ 6, 1, 900, 500, 2160, 1250 },
1131 	{ 6, 1, 900, 500, 2160, 1250 },
1132 #ifndef SISUSE6330MODES
1133 	{45, 8, 960, 505, 2160, 1250 }, /* 640x480 (6330) */
1134 #else
1135 	{27, 1, 800, 500, 2160, 1250 }, /* 640x480 (6325) */
1136 #endif
1137 	{ 4, 1,1080, 625, 2160, 1250 },
1138 	{ 5, 2,1350, 800, 2160, 1250 },
1139 	{27,16,1500,1064, 2160, 1250 }, /* 1280x1024 */
1140 	{72,49,1680,1092, 2160, 1250 }, /* 1400x1050 (6330, was not supported on 6325) */
1141 	{ 1, 1,2160,1250, 2160, 1250 }
1142 };
1143 
1144 static const SiS_LCDDataStruct  SiS_NoScaleData[] =
1145 {
1146 	{ 1, 1, 800, 449, 800, 449 },  /* 0x00: 320x200, 640x400 */
1147 	{ 1, 1, 800, 449, 800, 449 },
1148 	{ 1, 1, 900, 449, 900, 449 },
1149 	{ 1, 1, 900, 449, 900, 449 },
1150 	{ 1, 1, 800, 525, 800, 525 },  /* 0x04: 320x240, 640x480  */
1151 	{ 1, 1,1056, 628,1056, 628 },  /* 0x05: 400x300, 800x600  */
1152 	{ 1, 1,1344, 806,1344, 806 },  /* 0x06: 512x384, 1024x768 */
1153 	{ 1, 1,1688,1066,1688,1066 },  /* 0x07: 1280x1024 */
1154         { 1, 1,1688, 802,1688, 802 },  /* 0x08: 1280x768: Fujitsu, TMDS only */
1155         { 1, 1,2160,1250,2160,1250 },  /* 0x09: 1600x1200 */
1156 	{ 1, 1,1800,1000,1800,1000 },  /* 0x0a: 1280x960  */
1157 	{ 1, 1,1688,1066,1688,1066 },  /* 0x0b: 1400x1050 */
1158 	{ 1, 1,1650, 750,1650, 750 },  /* 0x0c: 1280x720 (TMDS, projector)  */
1159 	{ 1, 1,1656, 841,1656, 841 },  /* 0x0d: 1280x800 (was: 1408, 816) */
1160 	{ 1, 1,1900,1066,1900,1066 },  /* 0x0e: 1680x1050 (LVDS) */
1161 	{ 1, 1,1408, 806,1408, 806 },  /* 0x0f: 1280x768_2 */
1162 	{ 1, 1,1664, 798,1664, 798 },  /* 0x10: 1280x768_3 */
1163 	{ 1, 1,1688, 802,1688, 802 },  /* 0x11: 1280x768: Std, TMDS only */
1164 	{ 1, 1,1344, 806,1344, 806 },  /* 0x12: 1280x720 (LVDS)  */
1165 	{ 1, 1, 896, 497, 896, 497 },  /* 0x13: 720x480 */
1166 	{ 1, 1, 912, 597, 912, 597 },  /* 0x14: 720x576 */
1167 	{ 1, 1, 912, 597, 912, 597 },  /* 0x15: 768x576 */
1168 	{ 1, 1,1056, 497,1056, 497 },  /* 0x16: 848x480 */
1169 	{ 1, 1,1064, 497,1064, 497 },  /* 0x17: 856x480 */
1170 	{ 1, 1,1056, 497,1056, 497 },  /* 0x18: 800x480 */
1171 	{ 1, 1,1328, 739,1328, 739 },  /* 0x19: 1024x576 */
1172 	{ 1, 1,1680, 892,1680, 892 },  /* 0x1a: 1152x864 */
1173 	{ 1, 1,1808, 808,1808, 808 }   /* 0x1b: 1360x768 */
1174 };
1175 
1176 
1177 /**************************************************************/
1178 /* LVDS ----------------------------------------------------- */
1179 /**************************************************************/
1180 
1181 static const SiS_LVDSDataStruct  SiS_LVDS320x480Data_1[]=
1182 {
1183 	{ 848, 433, 400, 525},
1184 	{ 848, 389, 400, 525},
1185 	{ 848, 433, 400, 525},
1186 	{ 848, 389, 400, 525},
1187 	{ 848, 518, 400, 525},
1188 	{1056, 628, 400, 525},
1189 	{ 400, 525, 400, 525},
1190 	{ 800, 449,1000, 644},
1191 	{ 800, 525,1000, 635}
1192 };
1193 
1194 static const SiS_LVDSDataStruct  SiS_LVDS640x480Data_1[]=
1195 {
1196 	{ 800, 445, 800, 525},   /* 800, 449, 800, 449 */
1197 	{ 800, 395, 800, 525},
1198 	{ 800, 445, 800, 525},
1199 	{ 800, 395, 800, 525},
1200 	{ 800, 525, 800, 525},
1201 	{ 800, 525, 800, 525},   /* pseudo */
1202 	{ 800, 525, 800, 525}    /* pseudo */
1203 };
1204 
1205 /* FSTN 320x240 */
1206 static const SiS_LVDSDataStruct  SiS_LVDS640x480Data_2[]=
1207 {
1208 	{ 800, 445, 800, 525},
1209 	{ 800, 395, 800, 525},
1210 	{ 800, 445, 800, 525},
1211 	{ 800, 395, 800, 525},
1212 	{ 800, 525, 800, 525},
1213         { 800, 525, 800, 525},   /* pseudo */
1214 	{ 800, 525, 800, 525}    /* pseudo */
1215 };
1216 
1217 
1218 static const SiS_LVDSDataStruct  SiS_LVDS800x600Data_1[]=
1219 {
1220 	{ 848, 433,1060, 629},
1221 	{ 848, 389,1060, 629},
1222 	{ 848, 433,1060, 629},
1223 	{ 848, 389,1060, 629},
1224 	{ 848, 518,1060, 629},
1225 	{1056, 628,1056, 628},
1226 	{1056, 628,1056, 628}
1227 };
1228 
1229 static const SiS_LVDSDataStruct  SiS_LVDS800x600Data_2[]=
1230 {
1231 	{1056, 628,1056, 628},
1232 	{1056, 628,1056, 628},
1233 	{1056, 628,1056, 628},
1234 	{1056, 628,1056, 628},
1235 	{1056, 628,1056, 628},
1236 	{1056, 628,1056, 628},
1237 	{1056, 628,1056, 628}
1238 };
1239 
1240 static const SiS_LVDSDataStruct  SiS_LVDS1024x768Data_1[]=
1241 {
1242 	{ 840, 438,1344, 806},
1243 	{ 840, 409,1344, 806},
1244 	{ 840, 438,1344, 806},
1245 	{ 840, 409,1344, 806},
1246 	{ 840, 518,1344, 806},   /* 640x480 */
1247 	{1050, 638,1344, 806},   /* 800x600 */
1248 	{1344, 806,1344, 806},   /* 1024x768 */
1249 };
1250 
1251 static const SiS_LVDSDataStruct  SiS_LVDS1024x768Data_2[]=
1252 {
1253 	{1344, 806,1344, 806},
1254 	{1344, 806,1344, 806},
1255 	{1344, 806,1344, 806},
1256 	{1344, 806,1344, 806},
1257 	{1344, 806,1344, 806},
1258 	{1344, 806,1344, 806},
1259 	{1344, 806,1344, 806},
1260 };
1261 
1262 static const SiS_LVDSDataStruct  SiS_LVDS1280x1024Data_1[]=
1263 {
1264 	{1048, 442,1688,1066},
1265 	{1048, 392,1688,1066},
1266 	{1048, 442,1688,1066},
1267 	{1048, 392,1688,1066},
1268 	{1048, 522,1688,1066},
1269 	{1208, 642,1688,1066},
1270 	{1432, 810,1688,1066},
1271 	{1688,1066,1688,1066}
1272 };
1273 
1274 static const SiS_LVDSDataStruct  SiS_LVDS1280x1024Data_2[]=
1275 {
1276 	{1688,1066,1688,1066},
1277 	{1688,1066,1688,1066},
1278 	{1688,1066,1688,1066},
1279 	{1688,1066,1688,1066},
1280 	{1688,1066,1688,1066},
1281 	{1688,1066,1688,1066},
1282 	{1688,1066,1688,1066},
1283 	{1688,1066,1688,1066}
1284 };
1285 
1286 static const SiS_LVDSDataStruct  SiS_LVDS1400x1050Data_1[]=
1287 {
1288         { 928, 416, 1688,1066},
1289 	{ 928, 366, 1688,1066},
1290 	{ 928, 416, 1688,1066},
1291 	{ 928, 366, 1688,1066},
1292 	{ 928, 496, 1688,1066},
1293 	{1088, 616, 1688,1066},
1294 	{1312, 784, 1688,1066},
1295 	{1568,1040, 1688,1066},
1296 	{1688,1066, 1688,1066}
1297 };
1298 
1299 static const SiS_LVDSDataStruct  SiS_LVDS1400x1050Data_2[]=
1300 {
1301         {1688,1066, 1688,1066},
1302 	{1688,1066, 1688,1066},
1303 	{1688,1066, 1688,1066},
1304 	{1688,1066, 1688,1066},
1305 	{1688,1066, 1688,1066},
1306 	{1688,1066, 1688,1066},
1307 	{1688,1066, 1688,1066},
1308 	{1688,1066, 1688,1066},
1309 	{1688,1066, 1688,1066},
1310 };
1311 
1312 static const SiS_LVDSDataStruct  SiS_LVDS1600x1200Data_1[]=
1313 {
1314    	{1088, 520, 2048,1320},
1315 	{1088, 470, 2048,1320},
1316 	{1088, 520, 2048,1320},
1317 	{1088, 470, 2048,1320},
1318 	{1088, 600, 2048,1320},
1319 	{1248, 720, 2048,1320},
1320 	{1472, 888, 2048,1320},
1321 	{1728,1144, 2048,1320},
1322 	{1848,1170, 2048,1320},
1323 	{2048,1320, 2048,1320}
1324 #if 0
1325         {1088, 450, 2048,1250},
1326 	{1088, 400, 2048,1250},
1327 	{1088, 450, 2048,1250},
1328 	{1088, 400, 2048,1250},
1329 	{1088, 530, 2048,1250},
1330 	{1248, 650, 2048,1250},
1331 	{1472, 818, 2048,1250},
1332 	{1728,1066, 2048,1250},
1333 	{1848,1066, 2048,1250},
1334 	{2048,1250, 2048,1250}
1335 #endif
1336 };
1337 
1338 static const SiS_LVDSDataStruct  SiS_LVDS1600x1200Data_2[]=
1339 {
1340         {2048,1320, 2048,1320},
1341 	{2048,1320, 2048,1320},
1342 	{2048,1320, 2048,1320},
1343 	{2048,1320, 2048,1320},
1344 	{2048,1320, 2048,1320},
1345 	{2048,1320, 2048,1320},
1346 	{2048,1320, 2048,1320},
1347 	{2048,1320, 2048,1320},
1348 	{2048,1320, 2048,1320},
1349 	{2048,1320, 2048,1320}
1350 };
1351 
1352 static const SiS_LVDSDataStruct  SiS_LVDS1280x960Data_1[]=
1353 {
1354 	{ 840, 438,1344, 806},
1355 	{ 840, 409,1344, 806},
1356 	{ 840, 438,1344, 806},
1357 	{ 840, 409,1344, 806},
1358 	{ 840, 518,1344, 806},
1359 	{1050, 638,1344, 806},
1360 	{1344, 806,1344, 806},
1361 	{ 800, 449,1280, 801},
1362 	{ 800, 525,1280, 813}
1363 };
1364 
1365 static const SiS_LVDSDataStruct  SiS_LVDS1280x960Data_2[]=
1366 {
1367 	{1344, 806,1344, 806},
1368 	{1344, 806,1344, 806},
1369 	{1344, 806,1344, 806},
1370 	{1344, 806,1344, 806},
1371 	{1344, 806,1344, 806},
1372 	{1344, 806,1344, 806},
1373 	{1344, 806,1344, 806},
1374 	{ 800, 449,1280, 801},
1375 	{ 800, 525,1280, 813}
1376 };
1377 
1378 static const SiS_LVDSDataStruct  SiS_LVDS1280x768Data_1[]=
1379 {
1380 	{ 768, 438, 1408, 806},
1381 	{ 768, 388, 1408, 806},
1382 	{ 768, 438, 1408, 806},
1383 	{ 768, 388, 1408, 806},
1384 	{ 768, 518, 1408, 806},
1385 	{ 928, 638, 1408, 806},
1386 	{1152, 806, 1408, 806},
1387 	{1408, 806, 1408, 806},
1388 	{1408, 806, 1408, 806}
1389 };
1390 
1391 static const SiS_LVDSDataStruct  SiS_LVDS1280x768Data_2[]=
1392 {
1393 	{1408, 806, 1408, 806},
1394 	{1408, 806, 1408, 806},
1395 	{1408, 806, 1408, 806},
1396 	{1408, 806, 1408, 806},
1397 	{1408, 806, 1408, 806},
1398 	{1408, 806, 1408, 806},
1399 	{1408, 806, 1408, 806},
1400 	{1408, 806, 1408, 806},
1401 	{1408, 806, 1408, 806}
1402 };
1403 
1404 static const SiS_LVDSDataStruct  SiS_LVDS1024x600Data_1[] =
1405 {
1406 	{ 840, 604,1344, 800},
1407 	{ 840, 560,1344, 800},
1408 	{ 840, 604,1344, 800},
1409 	{ 840, 560,1344, 800},
1410 	{ 840, 689,1344, 800},
1411 	{1050, 800,1344, 800},
1412 	{1344, 800,1344, 800}
1413 };
1414 
1415 static const SiS_LVDSDataStruct  SiS_LVDS1024x600Data_2[] =
1416 {
1417 	{1344, 800,1344, 800},
1418 	{1344, 800,1344, 800},
1419 	{1344, 800,1344, 800},
1420 	{1344, 800,1344, 800},
1421 	{1344, 800,1344, 800},
1422 	{1344, 800,1344, 800},
1423 	{1344, 800,1344, 800}
1424 };
1425 
1426 static const SiS_LVDSDataStruct  SiS_LVDS1152x768Data_1[] =
1427 {
1428 	{ 840, 438,1344, 806},
1429 	{ 840, 409,1344, 806},
1430 	{ 840, 438,1344, 806},
1431 	{ 840, 409,1344, 806},
1432 	{ 840, 518,1344, 806},
1433 	{1050, 638,1344, 806},
1434 	{1344, 806,1344, 806}
1435 };
1436 
1437 static const SiS_LVDSDataStruct  SiS_LVDS1152x768Data_2[] =
1438 {
1439 	{1344, 806,1344, 806},
1440 	{1344, 806,1344, 806},
1441 	{1344, 806,1344, 806},
1442 	{1344, 806,1344, 806},
1443 	{1344, 806,1344, 806},
1444 	{1344, 806,1344, 806},
1445 	{1344, 806,1344, 806}
1446 };
1447 
1448 /* Pass 1:1 data */
1449 static const SiS_LVDSDataStruct  SiS_LVDSXXXxXXXData_1[]=
1450 {
1451         { 800, 449,  800, 449},
1452 	{ 800, 449,  800, 449},
1453 	{ 900, 449,  900, 449},
1454 	{ 900, 449,  900, 449},
1455 	{ 800, 525,  800, 525},  /*  640x480   */
1456 	{1056, 628, 1056, 628},  /*  800x600   */
1457 	{1344, 806, 1344, 806},  /* 1024x768   */
1458 	{1688,1066, 1688,1066},  /* 1280x1024  */  /* INSERTED ! */
1459  	{1688, 806, 1688, 806},  /* 1280x768   */
1460 	/* No other panels ! */
1461 };
1462 
1463 /* Custom data for Barco iQ R series */
1464 static const SiS_LVDSDataStruct  SiS_LVDSBARCO1366Data_1[]=
1465 {
1466 	{ 832, 438,1331, 806},
1467 	{ 832, 388,1331, 806},
1468 	{ 832, 438,1331, 806},
1469 	{ 832, 388,1331, 806},
1470 	{ 832, 518,1331, 806},
1471 	{1050, 638,1344, 806},
1472 	{1344, 806,1344, 806},
1473 	{1688,1066,1688,1066},
1474 	{1688,1066,1688,1066}   /* 1360x1024 */
1475 };
1476 
1477 /* Custom data for Barco iQ R series */
1478 static const SiS_LVDSDataStruct  SiS_LVDSBARCO1366Data_2[]=
1479 {
1480 	{1344, 806,1344, 806},
1481 	{1344, 806,1344, 806},
1482 	{1344, 806,1344, 806},
1483 	{1344, 806,1344, 806},
1484 	{1344, 806,1344, 806},
1485 	{1344, 806,1344, 806},
1486 	{1344, 806,1344, 806},
1487 	{1688,1066,1688,1066},
1488 	{1688,1066,1688,1066}   /* 1360x1024 */
1489 };
1490 
1491 /* Custom data for Barco iQ G series */
1492 static const SiS_LVDSDataStruct  SiS_LVDSBARCO1024Data_1[]=
1493 {
1494 	{ 832, 438,1331, 806},
1495 	{ 832, 409,1331, 806},
1496 	{ 832, 438,1331, 806},
1497 	{ 832, 409,1331, 806},
1498 	{ 832, 518,1331, 806},   /* 640x480 */
1499 	{1050, 638,1344, 806},   /* 800x600 */
1500 	{1344, 806,1344, 806},   /* 1024x768 */
1501 };
1502 
1503 /* Custom data for Barco iQ G series */
1504 static const SiS_LVDSDataStruct  SiS_LVDSBARCO1024Data_2[]=
1505 {
1506 	{1344, 806,1344, 806},
1507 	{1344, 806,1344, 806},
1508 	{1344, 806,1344, 806},
1509 	{1344, 806,1344, 806},
1510 	{1344, 806,1344, 806},
1511 	{1344, 806,1344, 806},
1512 	{1344, 806,1344, 806},
1513 };
1514 
1515 /* Custom data for 848x480 parallel panel */
1516 static const SiS_LVDSDataStruct  SiS_LVDS848x480Data_1[]=
1517 {
1518 	{   0,   0,   0,   0},
1519 	{   0,   0,   0,   0},
1520 	{   0,   0,   0,   0},
1521 	{   0,   0,   0,   0},
1522 	{1088, 525,1088, 525},  /* 640x480 TODO */
1523 	{1088, 525,1088, 525},  /* 800x600 TODO */
1524 	{1088, 525,1088, 525},  /* 1024x768 TODO */
1525 	{   0,   0,   0,   0},
1526 	{   0,   0,   0,   0},
1527 	{   0,   0,   0,   0},
1528 	{   0,   0,   0,   0},
1529 	{1088, 525,1088, 525},  /* 848x480 */
1530 	{1088, 525,1088, 525}   /* 1360x768 TODO */
1531 };
1532 
1533 /* Custom data for 848x480 parallel panel */
1534 static const SiS_LVDSDataStruct  SiS_LVDS848x480Data_2[]=
1535 {
1536 	{   0,   0,   0,   0},
1537 	{   0,   0,   0,   0},
1538 	{   0,   0,   0,   0},
1539 	{   0,   0,   0,   0},
1540 	{1088, 525,1088, 525},  /*  640x480 */
1541 	{1088, 525,1088, 525},  /*  800x600 */
1542 	{1088, 525,1088, 525},  /* 1024x768 */
1543 	{   0,   0,   0,   0},
1544 	{   0,   0,   0,   0},
1545 	{   0,   0,   0,   0},
1546 	{   0,   0,   0,   0},
1547 	{1088, 525,1088, 525},  /* 848x480 */
1548 	{1088, 525,1088, 525}	/* 1360x768 TODO */
1549 };
1550 
1551 static const SiS_LVDSDataStruct  SiS_CHTVUNTSCData[]=
1552 {
1553 	{ 840, 600, 840, 600},
1554 	{ 840, 600, 840, 600},
1555 	{ 840, 600, 840, 600},
1556 	{ 840, 600, 840, 600},
1557 	{ 784, 600, 784, 600},
1558 	{1064, 750,1064, 750},
1559         {1160, 945,1160, 945}
1560 };
1561 
1562 static const SiS_LVDSDataStruct  SiS_CHTVONTSCData[]=
1563 {
1564 	{ 840, 525, 840, 525},
1565 	{ 840, 525, 840, 525},
1566 	{ 840, 525, 840, 525},
1567 	{ 840, 525, 840, 525},
1568 	{ 784, 525, 784, 525},
1569 	{1040, 700,1040, 700},
1570         {1160, 840,1160, 840}
1571 };
1572 
1573 /* Chrontel TV Skew */
1574 
1575 static const SiS_LVDSDesStruct  SiS_CHTVUNTSCDesData[]=
1576 {
1577 	{ 0,   0},
1578 	{ 0,   0},
1579 	{ 0,   0},
1580 	{ 0,   0},
1581 	{ 0,   0},
1582 	{ 0,   0},
1583 	{ 0,   0}
1584 };
1585 
1586 static const SiS_LVDSDesStruct  SiS_CHTVONTSCDesData[]=
1587 {
1588 	{ 0,   0},
1589 	{ 0,   0},
1590 	{ 0,   0},
1591 	{ 0,   0},
1592 	{ 0,   0},
1593 	{ 0,   0},
1594 	{ 0,   0}
1595 };
1596 
1597 static const SiS_LVDSDesStruct  SiS_CHTVUPALDesData[]=
1598 {
1599 	{256,   0},
1600 	{256,   0},
1601 	{256,   0},
1602 	{256,   0},
1603 	{ 0,   0},
1604 	{ 0,   0},
1605 	{ 0,   0}
1606 };
1607 
1608 static const SiS_LVDSDesStruct  SiS_CHTVOPALDesData[]=
1609 {
1610 	{256,   0},
1611 	{256,   0},
1612 	{256,   0},
1613 	{256,   0},
1614 	{ 0,   0},
1615 	{ 0,   0},
1616 	{ 0,   0}
1617 };
1618 
1619 /* CRT1 CRTC data for slave modes */
1620 
1621 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1320x480_1[] =
1622 {
1623  {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
1624    0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
1625    0x00 }},
1626  {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
1627    0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
1628    0x00 }},
1629  {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
1630    0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
1631    0x00 }},
1632  {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
1633    0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
1634    0x00 }},
1635  {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
1636    0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
1637    0x00 }},
1638  {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
1639    0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
1640    0x01 }},
1641  {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
1642    0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
1643    0x00 }}
1644 };
1645 
1646 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_1[] =
1647 {
1648  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1649    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1650    0x00}},
1651  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1652    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1653    0x00}},
1654  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1655    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1656    0x00}},
1657  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1658    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1659    0x00}},
1660  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1661    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1662    0x00}},
1663  {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
1664    0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
1665    0x01}}
1666 };
1667 
1668 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_1_H[] =
1669 {
1670  {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
1671    0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
1672    0x00}},
1673  {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
1674    0x83,0x85,0x63,0xba,0x00,0x00,0x00,
1675    0x00}},
1676  {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
1677    0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
1678    0x00}},
1679  {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
1680    0x83,0x85,0x63,0xba,0x00,0x00,0x00,
1681    0x00}},
1682  {{0x2d,0x28,0x90,0x2c,0x80,0x0b,0x3e,
1683    0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
1684    0x00}}
1685 };
1686 
1687 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_2[] =
1688 {
1689  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1690    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1691    0x00}},
1692  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1693    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1694    0x00}},
1695  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1696    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1697    0x00}},
1698  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1699    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1700    0x00}},
1701  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1702    0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
1703    0x00}},
1704  {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
1705    0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
1706    0x01}},
1707  {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
1708    0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
1709    0x00}}
1710 };
1711 
1712 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_2_H[] =
1713 {
1714  {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
1715    0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
1716    0x00}},
1717  {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
1718    0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
1719    0x00}},
1720  {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
1721    0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
1722    0x00}},
1723  {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
1724    0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
1725    0x00}},
1726  {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
1727    0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
1728    0x00}},
1729  {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
1730    0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
1731    0x01}},
1732  {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
1733    0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
1734    0x00}}
1735 };
1736 
1737 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_3[] =
1738 {
1739  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1740    0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
1741    0x00}},
1742  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1743    0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
1744    0x00}},
1745  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1746    0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
1747    0x00}},
1748  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1749    0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
1750    0x00}},
1751  {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
1752    0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
1753    0x00}},
1754  {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
1755    0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
1756    0x01}},
1757  {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
1758    0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
1759    0x00}}
1760 };
1761 
1762 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT1640x480_3_H[] =
1763 {
1764  {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
1765    0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
1766    0x00}},
1767  {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
1768    0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
1769    0x00}},
1770  {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
1771    0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
1772    0x00}},
1773  {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
1774    0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
1775    0x00}},
1776  {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
1777    0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
1778    0x00}},
1779  {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
1780    0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
1781    0x01}},
1782  {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
1783    0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
1784    0x00}}
1785 };
1786 
1787 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_1[] =
1788 {
1789  {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
1790    0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
1791    0x00}},
1792  {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
1793    0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
1794    0x00}},
1795  {{0x64,0x4f,0x88,0x54,0x9f,0x5a,0x3e,
1796    0xe8,0x8f,0x8f,0x5b,0x00,0x00,0x01,
1797    0x00}},
1798  {{0x64,0x4f,0x88,0x54,0x9f,0x2e,0x3e,
1799    0xb9,0x80,0x5d,0x2f,0x00,0x00,0x01,
1800    0x00}},
1801  {{0x64,0x4f,0x88,0x54,0x9f,0xaf,0xba,
1802    0x3b,0x82,0xdf,0xb0,0x00,0x00,0x01,
1803    0x00}},
1804  {{0x7e,0x63,0x82,0x68,0x15,0x1e,0xf1,
1805    0xae,0x85,0x57,0x1f,0x30,0x00,0x26,
1806    0x01}},
1807  {{0xa3,0x7f,0x87,0x86,0x97,0x1e,0xf1,
1808    0xae,0x85,0x57,0x1f,0x30,0x00,0x02,
1809    0x01}}
1810 };
1811 
1812 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_1_H[] =
1813 {
1814  {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
1815    0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
1816    0x00}},
1817  {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
1818    0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
1819    0x00}},
1820  {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
1821    0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
1822    0x00}},
1823  {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
1824    0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
1825    0x00}},
1826  {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
1827    0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
1828    0x00}},
1829  {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
1830    0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
1831    0x01}},
1832  {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
1833    0x02,0x88,0xff,0x25,0x10,0x00,0x01,
1834    0x01}}
1835 };
1836 
1837 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_2[] =
1838 {
1839  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1840    0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
1841    0x00}},
1842  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1843    0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
1844    0x00}},
1845  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1846    0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
1847    0x00}},
1848  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1849    0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
1850    0x00}},
1851  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1852    0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
1853    0x00}},
1854  {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
1855    0xae,0x84,0x57,0x25,0x30,0x00,0x02,
1856    0x01}},
1857  {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
1858    0x02,0x88,0xff,0x25,0x10,0x00,0x02,
1859    0x01}}
1860 };
1861 
1862 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11024x600_2_H[] =
1863 {
1864  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1865    0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
1866    0x00}},
1867  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1868    0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
1869    0x00}},
1870  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1871    0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
1872    0x00}},
1873  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1874    0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
1875    0x00}},
1876  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1877    0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
1878    0x00}},
1879  {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
1880    0xae,0x84,0x57,0x25,0x30,0x00,0x01,
1881    0x01}},
1882  {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
1883    0x02,0x88,0xff,0x25,0x10,0x00,0x01,
1884    0x01}}
1885 };
1886 
1887 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_1[] =
1888 {
1889  {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
1890    0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
1891    0x00}},
1892  {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
1893    0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
1894    0x00}},
1895  {{0x64,0x4f,0x88,0x54,0x9f,0xc4,0x1f,
1896    0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
1897    0x00}},
1898  {{0x64,0x4f,0x88,0x54,0x9f,0x97,0x1f,
1899    0x60,0x87,0x5d,0x83,0x10,0x00,0x01,
1900    0x00}},
1901  {{0x64,0x4f,0x88,0x54,0x9f,0x04,0x3e,
1902    0xe2,0x89,0xdf,0x05,0x00,0x00,0x01,
1903    0x00}},
1904  {{0x7e,0x63,0x82,0x68,0x15,0x7c,0xf0,
1905    0x5a,0x8f,0x57,0x7d,0x20,0x00,0x26,
1906    0x01}},
1907  {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
1908    0x02,0x88,0xff,0x25,0x10,0x00,0x02,
1909    0x01}}
1910 };
1911 
1912 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_1_H[] =
1913 {
1914  {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
1915    0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
1916    0x00}},
1917  {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
1918    0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
1919    0x00}},
1920  {{0x2f,0x27,0x93,0x2b,0x90,0xc4,0x1f,
1921    0x92,0x89,0x8f,0xb5,0x30,0x00,0x44,
1922    0x00}},
1923  {{0x2f,0x27,0x93,0x2b,0x90,0x97,0x1f,
1924    0x60,0x87,0x5d,0x83,0x10,0x00,0x44,
1925    0x00}},
1926  {{0x2f,0x27,0x93,0x2b,0x90,0x04,0x3e,
1927    0xe2,0x89,0xdf,0x05,0x00,0x00,0x44,
1928    0x00}},
1929  {{0x3c,0x31,0x80,0x35,0x1c,0x7c,0xf0,
1930    0x5a,0x8f,0x57,0x7d,0x20,0x00,0x55,
1931    0x01}},
1932  {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
1933    0x02,0x88,0xff,0x25,0x10,0x00,0x01,
1934    0x01}}
1935 };
1936 
1937 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_2[] =
1938 {
1939  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1940    0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
1941    0x00}},
1942  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1943    0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
1944    0x00}},
1945  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1946    0x4a,0x80,0x8f,0x25,0x30,0x00,0x06,
1947    0x00}},
1948  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1949    0x31,0x87,0x5d,0x25,0x30,0x00,0x06,
1950    0x00}},
1951  {{0xa3,0x4f,0x87,0x6e,0x9f,0x24,0xbb,
1952    0x72,0x88,0xdf,0x25,0x30,0x00,0x06,
1953    0x00}},
1954  {{0xa3,0x63,0x87,0x78,0x89,0x24,0xf1,
1955    0xae,0x84,0x57,0x25,0x30,0x00,0x02,
1956    0x01}},
1957  {{0xa3,0x7f,0x87,0x86,0x97,0x24,0xf5,
1958    0x02,0x88,0xff,0x25,0x10,0x00,0x02,
1959    0x01}}
1960 };
1961 
1962 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11152x768_2_H[] =
1963 {
1964  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1965    0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
1966    0x00}},
1967  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1968    0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
1969    0x00}},
1970  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1971    0x4a,0x80,0x8f,0x25,0x30,0x00,0x01,
1972    0x00}},
1973  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1974    0x31,0x87,0x5d,0x25,0x30,0x00,0x01,
1975    0x00}},
1976  {{0x4f,0x27,0x93,0x39,0x01,0x24,0xbb,
1977    0x72,0x88,0xdf,0x25,0x30,0x00,0x01,
1978    0x00}},
1979  {{0x4f,0x31,0x93,0x3e,0x06,0x24,0xf1,
1980    0xae,0x84,0x57,0x25,0x30,0x00,0x01,
1981    0x01}},
1982  {{0x4f,0x3f,0x93,0x45,0x0d,0x24,0xf5,
1983    0x02,0x88,0xff,0x25,0x10,0x00,0x01,
1984    0x01}}
1985 };
1986 
1987 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_1[] =
1988 {
1989  {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
1990    0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
1991    0x00}},
1992  {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
1993    0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
1994    0x00}},
1995  {{0x5b,0x4f,0x9f,0x55,0x19,0xb4,0x1f,
1996    0x9c,0x8e,0x8f,0xb5,0x10,0x00,0x01,
1997    0x00}},
1998  {{0x5b,0x4f,0x9f,0x55,0x19,0x82,0x1f,
1999    0x6a,0x8c,0x5d,0x83,0x30,0x00,0x01,
2000    0x00}},
2001  {{0x5b,0x4f,0x9f,0x55,0x19,0x04,0x3e,
2002    0xec,0x8e,0xdf,0x05,0x20,0x00,0x01,
2003    0x00}},
2004  {{0x6f,0x63,0x93,0x69,0x8d,0x7c,0xf0,
2005    0x64,0x86,0x57,0x7d,0x20,0x00,0x05,
2006    0x01}},
2007  {{0x8b,0x7f,0x8f,0x85,0x09,0x24,0xf5,
2008    0x0c,0x8e,0xff,0x25,0x30,0x00,0x02,
2009    0x01}},
2010  {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
2011    0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
2012    0x01}},
2013  {{0xab,0x9f,0x8f,0xa5,0x89,0x24,0xf5,
2014    0x0c,0x8e,0xff,0x25,0x30,0x00,0x06,
2015    0x01}}
2016 };
2017 
2018 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_1_H[] =
2019 {
2020  {{0x47,0x27,0x8b,0x2c,0x1a,0x9e,0x1f,
2021    0x93,0x86,0x8f,0x9f,0x30,0x00,0x05,
2022    0x00}},
2023  {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
2024    0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
2025    0x00}},
2026  {{0x47,0x27,0x8b,0x30,0x1e,0x9e,0x1f,
2027    0x92,0x86,0x8f,0x9f,0x30,0x00,0x05,
2028    0x00}},
2029  {{0x47,0x27,0x8b,0x2c,0x1a,0x6c,0x1f,
2030    0x60,0x84,0x5d,0x6d,0x10,0x00,0x05,
2031    0x00}},
2032  {{0x47,0x27,0x8b,0x2c,0x1a,0xee,0x1f,
2033    0xe2,0x86,0xdf,0xef,0x10,0x00,0x05,
2034    0x00}},
2035  {{0x51,0x31,0x95,0x36,0x04,0x66,0xf0,
2036    0x5a,0x8e,0x57,0x67,0x20,0x00,0x01,
2037    0x01}},
2038  {{0x5f,0x3f,0x83,0x44,0x92,0x0e,0xf5,
2039    0x02,0x86,0xff,0x0f,0x10,0x00,0x01,
2040    0x01}},
2041  {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
2042    0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
2043    0x01}},
2044  {{0x6f,0x4f,0x93,0x54,0x82,0x0e,0x5a,
2045    0x02,0x86,0xff,0x0f,0x09,0x00,0x05,
2046    0x01}}
2047 };
2048 
2049 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_2[] =
2050 {
2051  {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
2052    0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
2053    0x00}},
2054  {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
2055    0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
2056    0x00}},
2057  {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
2058    0x54,0x86,0xdb,0xda,0x00,0x00,0x02,
2059    0x00}},
2060  {{0xab,0x60,0x9f,0x80,0x04,0x24,0xbb,
2061    0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x02,
2062    0x00}},
2063  {{0xab,0x60,0x9f,0x80,0x04,0x24,0xb3,
2064    0x7c,0x8e,0x03,0x02,0x10,0x00,0x02,
2065    0x01}},
2066  {{0xab,0x63,0x8f,0x8a,0x8e,0x24,0xf1,
2067    0xb6,0x88,0x57,0x25,0x10,0x00,0x02,
2068    0x01}},
2069  {{0xab,0x7f,0x8f,0x98,0x9c,0x24,0xf5,
2070    0x0a,0x8c,0xff,0x25,0x30,0x00,0x02,
2071    0x01}},
2072  {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
2073    0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
2074    0x01}},
2075  {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
2076    0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
2077    0x01}}
2078 };
2079 
2080 static const SiS_LVDSCRT1DataStruct  SiS_LVDSCRT11280x768_2_H[] =
2081 {
2082  {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
2083    0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
2084    0x00}},
2085  {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
2086    0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
2087    0x00}},
2088  {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
2089    0x54,0x86,0xdb,0xda,0x00,0x00,0x01,
2090    0x00}},
2091  {{0x83,0x38,0x97,0x58,0x9c,0x24,0xbb,
2092    0x3b,0x8d,0xc2,0xc1,0x00,0x00,0x01,
2093    0x00}},
2094  {{0x83,0x38,0x97,0x58,0x9c,0x24,0xb3,
2095    0x7c,0x8e,0x03,0x02,0x10,0x00,0x01,
2096    0x01}},
2097  {{0x79,0x31,0x9d,0x58,0x9c,0x24,0xf1,
2098    0xb6,0x88,0x57,0x25,0x10,0x00,0x01,
2099    0x01}},
2100  {{0x6b,0x3f,0x8f,0x58,0x9c,0x24,0xf5,
2101    0x0a,0x8c,0xff,0x25,0x30,0x00,0x01,
2102    0x01}},
2103  {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
2104    0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
2105    0x01}},
2106  {{0xab,0x9f,0x8f,0xa8,0x8c,0x24,0xf5,
2107    0x0a,0x8c,0xff,0x25,0x30,0x00,0x06,
2108    0x01}}
2109 };
2110 
2111 /**************************************************************/
2112 /* COMMON --------------------------------------------------- */
2113 /**************************************************************/
2114 
2115 #define SIS_PL_HSYNCP 0x01
2116 #define SIS_PL_HSYNCN 0x02
2117 #define SIS_PL_VSYNCP 0x04
2118 #define SIS_PL_VSYNCN 0x08
2119 #define SIS_PL_DVI    0x80
2120 
2121 typedef struct _SiS_PlasmaModes
2122 {
2123   const char *name;
2124   ULONG  clock;
2125   USHORT HDisplay, HTotal, HFrontPorch, HSyncWidth;
2126   USHORT VDisplay, VTotal, VFrontPorch, VSyncWidth;
2127   UCHAR  SyncFlags;
2128 } SiS_PlasmaModes;
2129 
2130 typedef struct _SiS_PlasmaTables
2131 {
2132    USHORT vendor;
2133    UCHAR  productnum;
2134    USHORT product[5];
2135    const char *DDCnames[5];
2136    const char *plasmaname;
2137    UCHAR  modenum;
2138    UCHAR  plasmamodes[20];  /* | 0x80 = DVI-capable, | 0x40 = analog */
2139 } SiS_PlasmaTables;
2140 
2141 static const SiS_PlasmaModes SiS_PlasmaMode[] = {
2142    {  "640x400",		/* 00: IBM 400@70 */
2143       25175,
2144        640,  800, 17,  64,
2145        400,  449, 13,   2,
2146       SIS_PL_HSYNCN | SIS_PL_VSYNCN },
2147    {  "640x480",		/* 01: VESA 480@72 */
2148       31500,
2149        640,  832, 24,  40,
2150        480,  520,  9,   3,
2151       SIS_PL_HSYNCN | SIS_PL_VSYNCN },
2152    {  "800x600",		/* 02: VESA 600@72 */
2153       50000,
2154        800, 1040, 56, 120,
2155        600,  666, 37,   6,
2156       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2157    {  "864x480",		/* 03: Cereb wide 1 */
2158       42526,
2159        864, 1134, 22,  86,
2160        480,  500,  1,   3,
2161       SIS_PL_HSYNCP | SIS_PL_VSYNCN },
2162    {  "848x480",		/* 04: VESA wide (NEC1) */
2163       33750,
2164        848, 1088, 16, 112,
2165        480,  517,  6,   8,
2166       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2167    {  "1024x576",		/* 05: VESA wide (NEC2) */
2168       47250,
2169       1024, 1320, 16, 144,
2170        576,  596,  2,   4,
2171       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2172    {  "1280x720",		/* 06: VESA wide (NEC3) */
2173       76500,
2174       1280, 1696, 48, 176,
2175        720,  750,  4,   8,
2176       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2177    {  "1360x765",		/* 07: VESA wide (NEC4) */
2178       85500,
2179       1360, 1792, 64, 176,
2180        765,  795,  4,   8,
2181       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2182    {  "1024x600",		/* 08: CEREB wide 2 */
2183       51200,
2184       1024, 1352, 51, 164,
2185        600,  628,  1,   4,
2186       SIS_PL_HSYNCN | SIS_PL_VSYNCP },
2187    {  "1024x768",		/* 09: VESA 768@75 */
2188       78750,
2189       1024, 1312,  16, 96,
2190        768,  800,   1,  3,
2191       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2192    {  "1152x864",		/* 10: VESA 1152x864@75 */
2193       108000,
2194       1152, 1600, 64, 128,
2195        864,  900,  1,   3,
2196       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2197    {  "1280x1024",		/* 11: VESA 1024@60 */
2198       108000,
2199       1280, 1688, 48, 112,
2200       1024, 1066,  1,   3,
2201       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2202    {  "1280x768",		/* 12: W_XGA */
2203       81000,
2204       1280, 1688, 48, 112,
2205        768,  802,  3,   6,
2206       SIS_PL_HSYNCP | SIS_PL_VSYNCN },
2207    {  "1280x768",		/* 13: I/O Data W_XGA@56Hz */
2208       76064,
2209       1280, 1688, 48, 112,
2210        768,  802,  2,   3,
2211       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2212    {  "1376x768",		/* 14: I/O Wide XGA */
2213       87340,
2214       1376, 1808, 32, 128,
2215        768,  806,  3,   6,
2216       SIS_PL_HSYNCN | SIS_PL_VSYNCP },
2217    {  "1280x960",		/* 15: VESA 960@60 */
2218       108000,
2219       1280, 1800, 96, 112,
2220        960, 1000,  1,   3,
2221       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2222    {  "1400x1050",		/* 16: VESA 1050@60Hz */
2223       108000,
2224       1400, 1688, 48, 112,
2225       1050, 1066,  1,   3,
2226       SIS_PL_HSYNCN | SIS_PL_VSYNCN },
2227    {  "1360x768",		/* 17: VESA wide (NEC4/2) */
2228       85500,
2229       1360, 1792, 64, 112,
2230        765,  795,  3,   6,
2231       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2232    {  "800x600",		/* 18: VESA 600@56 */
2233       36000,
2234        800, 1024, 24,   2,
2235        600,  625,  1,   2,
2236       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2237    {  "1072x600",		/* 19: Panasonic 1072x600 (sync?) */
2238       54100,
2239        1072, 1424, 48, 176,
2240         600,  628, 16,   1,
2241       SIS_PL_HSYNCP | SIS_PL_VSYNCP },
2242    {  "848x480",		/* 20: Panasonic 848x480 (sync?) */
2243       33070,			/* is 852x480, but we can't use 852 */
2244         848, 1068, 20,  40,	/* differs from DDC data, better centered */
2245         480,  516,  3,   5,	/* won't work assumingly, because data is % 8 */
2246       SIS_PL_HSYNCN | SIS_PL_VSYNCN },
2247 };
2248 
2249 static const SiS_PlasmaTables SiS_PlasmaTable[] = {
2250 #if 0  /* Product IDs missing */
2251    { 0x38a3, 4,
2252      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2253      { "", "", "", "", "" },
2254      "NEC PlasmaSync 42VP4/42VP4D/42VP4G/42VP4DG",
2255      11,   /* All DVI, except 0, 7, 13 */
2256      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,13|0x40,14|0xc0,
2257       17|0xc0, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2258    },
2259 #endif
2260 #if 0  /* Product IDs missing */
2261    { 0x38a3, 3,
2262      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2263      { "", "", "", "", "" },
2264      "NEC PlasmaSync 42PD1/50PD1/50PD2",
2265      5,   /* DVI entirely unknown */
2266      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0, 0     , 0     , 0     , 0     , 0     ,
2267        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2268    },
2269    { 0x38a3, 1,
2270      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2271      { "", "", "", "", "" },
2272      "NEC PlasmaSync 42PD3",
2273      10,   /* DVI entirely unknown */
2274      { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 5|0xc0, 6|0xc0, 7|0x40, 8|0xc0, 9|0xc0,
2275        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2276    },
2277    { 0x38a3, 2,
2278      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2279      { "", "", "", "", "" },
2280      "NEC PlasmaSync 42VM3/61XM1",
2281      11,  /* DVI entirely unknown */
2282      { 0|0x40, 1|0xc0, 2|0xc0, 3|0xc0, 4|0xc0, 5|0xc0, 6|0xc0, 8|0xc0, 9|0xc0,11|0xc0,
2283       17|0xc0, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2284    },
2285    { 0x38a3, 2,
2286      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2287      { "", "", "", "", "" },
2288      "NEC PlasmaSync 42MP1/42MP2",
2289      6,   /* DVI entirely unknown */
2290      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0,11|0xc0, 0     , 0     , 0     , 0     ,
2291        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2292    },
2293    { 0x38a3, 1,
2294      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2295      { "", "", "", "", "" },
2296      "NEC PlasmaSync 50MP1",
2297      10,   /* DVI entirely unknown */
2298      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,13|0x40,14|0xc0,
2299        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2300    },
2301 #endif
2302    { 0x38a3, 4,
2303      { 0xa482, 0xa483, 0x0000, 0x0000, 0x0000 },
2304      { "PX-42VM", "", "", "", "" },
2305      "NEC PlasmaSync 42MP3/42MP4/50MP2/61MP1",
2306      11,   /* All DVI except 0, 7, 13, 17 */
2307      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,10|0xc0,11|0xc0,13|0x40,14|0xc0,
2308       17|0x40, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2309    },
2310 #if 0  /* Product IDs missing */
2311    { 0x38a3, 1,
2312      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2313      { "", "", "", "", "" },
2314      "NEC PlasmaSync 3300W",
2315      3,
2316      { 0|0x40, 1|0xc0,18|0xc0, 0     , 0     , 0     , 0     , 0     , 0     , 0     ,
2317        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2318    },
2319    { 0x38a3, 1,
2320      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2321      { "", "", "", "", "" },
2322      "NEC PlasmaSync 4200W",
2323      4,   /* DVI entirely unknown */
2324      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 0     , 0     , 0     , 0     , 0     , 0     ,
2325        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2326    },
2327    { 0x38a3, 1,
2328      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2329      { "", "", "", "", "" },
2330      "NEC PlasmaSync 4210W",
2331      6,   /* DVI entirely unknown */
2332      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 9|0xc0,11|0xc0, 0     , 0     , 0     , 0     ,
2333        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2334    },
2335    { 0x38a3, 1,
2336      { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 },
2337      { "", "", "", "", "" },
2338      "NEC PlasmaSync 5000W",
2339      7,   /* DVI entirely unknown */
2340      { 0|0x40, 1|0xc0, 2|0xc0, 4|0xc0, 7|0x40, 9|0xc0,11|0xc0, 0     , 0     , 0     ,
2341        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2342    },
2343 #endif
2344    { 0x412f, 2,
2345      { 0x000c, 0x000b, 0x0000, 0x0000, 0x0000 },
2346      { "", "", "", "", "" },
2347      "Pioneer 503CMX/PDA-5002",
2348      6,   /* DVI unknown */
2349      { 1|0xc0, 2|0xc0, 9|0xc0,11|0xc0,12|0xc0,15|0xc0, 0     , 0     , 0     , 0     ,
2350        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2351    },
2352    { 0x34a9, 1,
2353      { 0xa00e, 0x0000, 0x0000, 0x0000, 0x0000 },
2354      { "", "", "", "", "" },
2355      "Panasonic TH-42",
2356      5,   /* No DVI output */
2357      { 1|0x40, 2|0x40, 4|0x40, 9|0x40,15|0x40, 0     , 0     , 0     , 0     , 0     ,
2358        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2359    },
2360    { 0x34a9, 1,
2361      { 0xa005, 0x0000, 0x0000, 0x0000, 0x0000 },
2362      { "TH-42PW*4", "", "", "", "" },
2363      "Panasonic TH-42PW5",
2364      1,   /* No special modes otherwise; no DVI. */
2365      {20|0x40,19|0x40, 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     ,
2366        0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0     , 0       }
2367    },
2368    { 0x0000 }
2369 };
2370 
2371 USHORT  SiS_GetModeID(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay,
2372 			  int Depth, BOOLEAN FSTN, int LCDwith, int LCDheight);
2373 USHORT  SiS_GetModeID_LCD(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, int Depth, BOOLEAN FSTN,
2374                           USHORT CustomT, int LCDwith, int LCDheight);
2375 USHORT  SiS_GetModeID_TV(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, int Depth);
2376 USHORT  SiS_GetModeID_VGA2(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, int Depth);
2377 
2378 void 	SiS_SetReg(SISIOADDRESS port, USHORT index, USHORT data);
2379 void 	SiS_SetRegByte(SISIOADDRESS port, USHORT data);
2380 void  	SiS_SetRegShort(SISIOADDRESS port, USHORT data);
2381 void	SiS_SetRegLong(SISIOADDRESS port, ULONG data);
2382 UCHAR	SiS_GetReg(SISIOADDRESS port, USHORT index);
2383 UCHAR 	SiS_GetRegByte(SISIOADDRESS port);
2384 USHORT	SiS_GetRegShort(SISIOADDRESS port);
2385 ULONG	SiS_GetRegLong(SISIOADDRESS port);
2386 void	SiS_SetRegANDOR(SISIOADDRESS Port,USHORT Index,USHORT DataAND,USHORT DataOR);
2387 void 	SiS_SetRegAND(SISIOADDRESS Port,USHORT Index,USHORT DataAND);
2388 void	SiS_SetRegOR(SISIOADDRESS Port,USHORT Index,USHORT DataOR);
2389 void	SiS_DisplayOn(SiS_Private *SiS_Pr);
2390 void	SiS_DisplayOff(SiS_Private *SiS_Pr);
2391 void	SiSRegInit(SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr);
2392 void	SiSSetLVDSetc(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
2393 BOOLEAN SiSDetermineROMLayout661(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
2394 void	SiS_SetEnableDstn(SiS_Private *SiS_Pr, int enable);
2395 void	SiS_SetEnableFstn(SiS_Private *SiS_Pr, int enable);
2396 void	SiS_GetVBType(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
2397 USHORT	SiS_GetMCLK(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
2398 BOOLEAN	SiS_SearchModeID(SiS_Private *SiS_Pr, USHORT *ModeNo, USHORT *ModeIdIndex);
2399 UCHAR	SiS_GetModePtr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex);
2400 USHORT	SiS_GetColorDepth(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex);
2401 USHORT	SiS_GetOffset(SiS_Private *SiS_Pr,USHORT ModeNo,USHORT ModeIdIndex,
2402               USHORT RefreshRateTableIndex,PSIS_HW_INFO HwInfo);
2403 void	SiS_LoadDAC(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, USHORT ModeNo, USHORT ModeIdIndex);
2404 void	SiS_CalcLCDACRT1Timing(SiS_Private *SiS_Pr,USHORT ModeNo,USHORT ModeIdIndex);
2405 #ifdef LINUX_XF86
2406 BOOLEAN	SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,ScrnInfoPtr pScrn,USHORT ModeNo, BOOLEAN dosetpitch);
2407 BOOLEAN	SiSBIOSSetMode(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, ScrnInfoPtr pScrn,
2408                DisplayModePtr mode, BOOLEAN IsCustom);
2409 BOOLEAN	SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, ScrnInfoPtr pScrn,
2410                DisplayModePtr mode, BOOLEAN IsCustom);
2411 BOOLEAN	SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, ScrnInfoPtr pScrn,
2412                DisplayModePtr mode, BOOLEAN IsCustom);
2413 int	SiSTranslateToVESA(ScrnInfoPtr pScrn, int modenumber);
2414 BOOLEAN	SiS_GetPanelID(SiS_Private *SiS_Pr, PSIS_HW_INFO);
2415 USHORT 	SiS_CheckBuildCustomMode(ScrnInfoPtr pScrn, DisplayModePtr mode, int VBFlags);
2416 DisplayModePtr SiSBuildBuiltInModeList(ScrnInfoPtr pScrn, BOOLEAN includelcdmodes, BOOLEAN isfordvi);
2417 #else
2418 BOOLEAN	SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,USHORT ModeNo);
2419 #endif
2420 #ifdef LINUX_KERNEL
2421 int    sisfb_mode_rate_to_dclock(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,
2422 			      unsigned char modeno, unsigned char rateindex);
2423 int    sisfb_mode_rate_to_ddata(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,
2424 			 unsigned char modeno, unsigned char rateindex,
2425 			 struct fb_var_screeninfo *var);
2426 BOOLEAN sisfb_gettotalfrommode(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,
2427 		       unsigned char modeno, int *htotal, int *vtotal, unsigned char rateindex);
2428 #endif
2429 
2430 extern void      SiS_GetVBInfo(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,
2431 			       PSIS_HW_INFO HwInfo, int chkcrt2mode);
2432 extern void      SiS_GetLCDResInfo(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,
2433 			           PSIS_HW_INFO HwInfo);
2434 extern void      SiS_SetYPbPr(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
2435 extern void 	 SiS_SetTVMode(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo);
2436 extern void      SiS_UnLockCRT2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
2437 extern void      SiS_LockCRT2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
2438 extern void      SiS_DisableBridge(SiS_Private *, PSIS_HW_INFO);
2439 extern BOOLEAN   SiS_SetCRT2Group(SiS_Private *, PSIS_HW_INFO, USHORT);
2440 extern USHORT    SiS_GetRatePtr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,
2441                                 PSIS_HW_INFO HwInfo);
2442 extern void      SiS_WaitRetrace1(SiS_Private *SiS_Pr);
2443 extern USHORT    SiS_GetResInfo(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex);
2444 extern USHORT    SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempax);
2445 extern USHORT    SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,
2446                                  USHORT RefreshRateTableIndex, PSIS_HW_INFO HwInfo);
2447 extern BOOLEAN   SiS_IsVAMode(SiS_Private *, PSIS_HW_INFO);
2448 extern BOOLEAN   SiS_IsDualEdge(SiS_Private *, PSIS_HW_INFO);
2449 
2450 #ifdef LINUX_XF86
2451 extern int      SiS_compute_vclk(int Clock, int *out_n, int *out_dn, int *out_div,
2452 	     	 		 int *out_sbit, int *out_scale);
2453 extern void 	SiSCalcClock(ScrnInfoPtr pScrn, int clock, int max_VLD, unsigned int *vclk);
2454 
2455 extern unsigned char SiS_GetSetBIOSScratch(ScrnInfoPtr pScrn, USHORT offset, unsigned char value);
2456 extern unsigned char SiS_GetSetModeID(ScrnInfoPtr pScrn, unsigned char id);
2457 extern USHORT 	     SiS_CalcModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode, unsigned long VBFlags,
2458 					BOOLEAN hcm);
2459 #endif
2460 
2461 #endif
2462 
2463