1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2 /* $XFree86$ */
3 /* $XdotOrg$ */
4 /*
5  * Data and prototypes for init.c
6  *
7  * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
8  *
9  * If distributed as part of the Linux kernel, the following license terms
10  * apply:
11  *
12  * * This program is free software; you can redistribute it and/or modify
13  * * it under the terms of the GNU General Public License as published by
14  * * the Free Software Foundation; either version 2 of the named License,
15  * * or any later version.
16  * *
17  * * This program is distributed in the hope that it will be useful,
18  * * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * * GNU General Public License for more details.
21  * *
22  * * You should have received a copy of the GNU General Public License
23  * * along with this program; if not, write to the Free Software
24  * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
25  *
26  * Otherwise, the following license terms apply:
27  *
28  * * Redistribution and use in source and binary forms, with or without
29  * * modification, are permitted provided that the following conditions
30  * * are met:
31  * * 1) Redistributions of source code must retain the above copyright
32  * *    notice, this list of conditions and the following disclaimer.
33  * * 2) Redistributions in binary form must reproduce the above copyright
34  * *    notice, this list of conditions and the following disclaimer in the
35  * *    documentation and/or other materials provided with the distribution.
36  * * 3) The name of the author may not be used to endorse or promote products
37  * *    derived from this software without specific prior written permission.
38  * *
39  * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
40  * * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
41  * * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
42  * * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
43  * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
44  * * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
45  * * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
46  * * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
47  * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
48  * * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49  *
50  * Author:	Thomas Winischhofer <thomas@winischhofer.net>
51  *
52  */
53 
54 #ifndef _SISUSB_INIT_H_
55 #define _SISUSB_INIT_H_
56 
57 /* SiS_ModeType */
58 #define ModeText		0x00
59 #define ModeCGA			0x01
60 #define ModeEGA			0x02
61 #define ModeVGA			0x03
62 #define Mode15Bpp		0x04
63 #define Mode16Bpp		0x05
64 #define Mode24Bpp		0x06
65 #define Mode32Bpp		0x07
66 
67 #define ModeTypeMask		0x07
68 #define IsTextMode		0x07
69 
70 #define DACInfoFlag		0x0018
71 #define MemoryInfoFlag		0x01E0
72 #define MemorySizeShift		5
73 
74 /* modeflag */
75 #define Charx8Dot		0x0200
76 #define LineCompareOff		0x0400
77 #define CRT2Mode		0x0800
78 #define HalfDCLK		0x1000
79 #define NoSupportSimuTV		0x2000
80 #define NoSupportLCDScale	0x4000	/* SiS bridge: No scaling possible (no matter what panel) */
81 #define DoubleScanMode		0x8000
82 
83 /* Infoflag */
84 #define SupportTV		0x0008
85 #define SupportTV1024		0x0800
86 #define SupportCHTV		0x0800
87 #define Support64048060Hz	0x0800	/* Special for 640x480 LCD */
88 #define SupportHiVision		0x0010
89 #define SupportYPbPr750p	0x1000
90 #define SupportLCD		0x0020
91 #define SupportRAMDAC2		0x0040	/* All           (<= 100Mhz) */
92 #define SupportRAMDAC2_135	0x0100	/* All except DH (<= 135Mhz) */
93 #define SupportRAMDAC2_162	0x0200	/* B, C          (<= 162Mhz) */
94 #define SupportRAMDAC2_202	0x0400	/* C             (<= 202Mhz) */
95 #define InterlaceMode		0x0080
96 #define SyncPP			0x0000
97 #define SyncPN			0x4000
98 #define SyncNP			0x8000
99 #define SyncNN			0xc000
100 
101 /* SetFlag */
102 #define ProgrammingCRT2		0x0001
103 #define LowModeTests		0x0002
104 #define LCDVESATiming		0x0008
105 #define EnableLVDSDDA		0x0010
106 #define SetDispDevSwitchFlag	0x0020
107 #define CheckWinDos		0x0040
108 #define SetDOSMode		0x0080
109 
110 /* Index in ModeResInfo table */
111 #define SIS_RI_320x200		0
112 #define SIS_RI_320x240		1
113 #define SIS_RI_320x400		2
114 #define SIS_RI_400x300		3
115 #define SIS_RI_512x384		4
116 #define SIS_RI_640x400		5
117 #define SIS_RI_640x480		6
118 #define SIS_RI_800x600		7
119 #define SIS_RI_1024x768		8
120 #define SIS_RI_1280x1024	9
121 #define SIS_RI_1600x1200	10
122 #define SIS_RI_1920x1440	11
123 #define SIS_RI_2048x1536	12
124 #define SIS_RI_720x480		13
125 #define SIS_RI_720x576		14
126 #define SIS_RI_1280x960		15
127 #define SIS_RI_800x480		16
128 #define SIS_RI_1024x576		17
129 #define SIS_RI_1280x720		18
130 #define SIS_RI_856x480		19
131 #define SIS_RI_1280x768		20
132 #define SIS_RI_1400x1050	21
133 #define SIS_RI_1152x864		22	/* Up to here SiS conforming */
134 #define SIS_RI_848x480		23
135 #define SIS_RI_1360x768		24
136 #define SIS_RI_1024x600		25
137 #define SIS_RI_1152x768		26
138 #define SIS_RI_768x576		27
139 #define SIS_RI_1360x1024	28
140 #define SIS_RI_1680x1050	29
141 #define SIS_RI_1280x800		30
142 #define SIS_RI_1920x1080	31
143 #define SIS_RI_960x540		32
144 #define SIS_RI_960x600		33
145 
146 #define SIS_VIDEO_CAPTURE	0x00 - 0x30
147 #define SIS_VIDEO_PLAYBACK	0x02 - 0x30
148 #define SIS_CRT2_PORT_04	0x04 - 0x30
149 
150 /* Mode numbers */
151 static const unsigned short ModeIndex_320x200[] = { 0x59, 0x41, 0x00, 0x4f };
152 static const unsigned short ModeIndex_320x240[] = { 0x50, 0x56, 0x00, 0x53 };
153 static const unsigned short ModeIndex_400x300[] = { 0x51, 0x57, 0x00, 0x54 };
154 static const unsigned short ModeIndex_512x384[] = { 0x52, 0x58, 0x00, 0x5c };
155 static const unsigned short ModeIndex_640x400[] = { 0x2f, 0x5d, 0x00, 0x5e };
156 static const unsigned short ModeIndex_640x480[] = { 0x2e, 0x44, 0x00, 0x62 };
157 static const unsigned short ModeIndex_720x480[] = { 0x31, 0x33, 0x00, 0x35 };
158 static const unsigned short ModeIndex_720x576[] = { 0x32, 0x34, 0x00, 0x36 };
159 static const unsigned short ModeIndex_768x576[] = { 0x5f, 0x60, 0x00, 0x61 };
160 static const unsigned short ModeIndex_800x480[] = { 0x70, 0x7a, 0x00, 0x76 };
161 static const unsigned short ModeIndex_800x600[] = { 0x30, 0x47, 0x00, 0x63 };
162 static const unsigned short ModeIndex_848x480[] = { 0x39, 0x3b, 0x00, 0x3e };
163 static const unsigned short ModeIndex_856x480[] = { 0x3f, 0x42, 0x00, 0x45 };
164 static const unsigned short ModeIndex_960x540[] = { 0x1d, 0x1e, 0x00, 0x1f };
165 static const unsigned short ModeIndex_960x600[] = { 0x20, 0x21, 0x00, 0x22 };
166 static const unsigned short ModeIndex_1024x768[] = { 0x38, 0x4a, 0x00, 0x64 };
167 static const unsigned short ModeIndex_1024x576[] = { 0x71, 0x74, 0x00, 0x77 };
168 static const unsigned short ModeIndex_1152x864[] = { 0x29, 0x2a, 0x00, 0x2b };
169 static const unsigned short ModeIndex_1280x720[] = { 0x79, 0x75, 0x00, 0x78 };
170 static const unsigned short ModeIndex_1280x768[] = { 0x23, 0x24, 0x00, 0x25 };
171 static const unsigned short ModeIndex_1280x1024[] = { 0x3a, 0x4d, 0x00, 0x65 };
172 
173 static const unsigned char SiS_MDA_DAC[] = {
174 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
175 	0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
176 	0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
177 	0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
178 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
179 	0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
180 	0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
181 	0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F
182 };
183 
184 static const unsigned char SiS_CGA_DAC[] = {
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 	0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
190 	0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
191 	0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
192 	0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F
193 };
194 
195 static const unsigned char SiS_EGA_DAC[] = {
196 	0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x05, 0x15,
197 	0x20, 0x30, 0x24, 0x34, 0x21, 0x31, 0x25, 0x35,
198 	0x08, 0x18, 0x0C, 0x1C, 0x09, 0x19, 0x0D, 0x1D,
199 	0x28, 0x38, 0x2C, 0x3C, 0x29, 0x39, 0x2D, 0x3D,
200 	0x02, 0x12, 0x06, 0x16, 0x03, 0x13, 0x07, 0x17,
201 	0x22, 0x32, 0x26, 0x36, 0x23, 0x33, 0x27, 0x37,
202 	0x0A, 0x1A, 0x0E, 0x1E, 0x0B, 0x1B, 0x0F, 0x1F,
203 	0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F
204 };
205 
206 static const unsigned char SiS_VGA_DAC[] = {
207 	0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
208 	0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
209 	0x00, 0x05, 0x08, 0x0B, 0x0E, 0x11, 0x14, 0x18,
210 	0x1C, 0x20, 0x24, 0x28, 0x2D, 0x32, 0x38, 0x3F,
211 	0x00, 0x10, 0x1F, 0x2F, 0x3F, 0x1F, 0x27, 0x2F,
212 	0x37, 0x3F, 0x2D, 0x31, 0x36, 0x3A, 0x3F, 0x00,
213 	0x07, 0x0E, 0x15, 0x1C, 0x0E, 0x11, 0x15, 0x18,
214 	0x1C, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x00, 0x04,
215 	0x08, 0x0C, 0x10, 0x08, 0x0A, 0x0C, 0x0E, 0x10,
216 	0x0B, 0x0C, 0x0D, 0x0F, 0x10
217 };
218 
219 static const struct SiS_St SiSUSB_SModeIDTable[] = {
220 	{0x03, 0x0010, 0x18, 0x02, 0x02, 0x00, 0x01, 0x03, 0x40},
221 	{0xff, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
222 };
223 
224 static const struct SiS_StResInfo_S SiSUSB_StResInfo[] = {
225 	{640, 400},
226 	{640, 350},
227 	{720, 400},
228 	{720, 350},
229 	{640, 480}
230 };
231 
232 static const struct SiS_ModeResInfo SiSUSB_ModeResInfo[] = {
233 	{320, 200, 8, 8},	/* 0x00 */
234 	{320, 240, 8, 8},	/* 0x01 */
235 	{320, 400, 8, 8},	/* 0x02 */
236 	{400, 300, 8, 8},	/* 0x03 */
237 	{512, 384, 8, 8},	/* 0x04 */
238 	{640, 400, 8, 16},	/* 0x05 */
239 	{640, 480, 8, 16},	/* 0x06 */
240 	{800, 600, 8, 16},	/* 0x07 */
241 	{1024, 768, 8, 16},	/* 0x08 */
242 	{1280, 1024, 8, 16},	/* 0x09 */
243 	{1600, 1200, 8, 16},	/* 0x0a */
244 	{1920, 1440, 8, 16},	/* 0x0b */
245 	{2048, 1536, 8, 16},	/* 0x0c */
246 	{720, 480, 8, 16},	/* 0x0d */
247 	{720, 576, 8, 16},	/* 0x0e */
248 	{1280, 960, 8, 16},	/* 0x0f */
249 	{800, 480, 8, 16},	/* 0x10 */
250 	{1024, 576, 8, 16},	/* 0x11 */
251 	{1280, 720, 8, 16},	/* 0x12 */
252 	{856, 480, 8, 16},	/* 0x13 */
253 	{1280, 768, 8, 16},	/* 0x14 */
254 	{1400, 1050, 8, 16},	/* 0x15 */
255 	{1152, 864, 8, 16},	/* 0x16 */
256 	{848, 480, 8, 16},	/* 0x17 */
257 	{1360, 768, 8, 16},	/* 0x18 */
258 	{1024, 600, 8, 16},	/* 0x19 */
259 	{1152, 768, 8, 16},	/* 0x1a */
260 	{768, 576, 8, 16},	/* 0x1b */
261 	{1360, 1024, 8, 16},	/* 0x1c */
262 	{1680, 1050, 8, 16},	/* 0x1d */
263 	{1280, 800, 8, 16},	/* 0x1e */
264 	{1920, 1080, 8, 16},	/* 0x1f */
265 	{960, 540, 8, 16},	/* 0x20 */
266 	{960, 600, 8, 16}	/* 0x21 */
267 };
268 
269 static const struct SiS_StandTable SiSUSB_StandTable[] = {
270 	/* MD_3_400 - mode 0x03 - 400 */
271 	{
272 	 0x50, 0x18, 0x10, 0x1000,
273 	 {0x00, 0x03, 0x00, 0x02},
274 	 0x67,
275 	 {0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
276 	  0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
277 	  0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
278 	  0xff},
279 	 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
280 	  0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
281 	  0x0c, 0x00, 0x0f, 0x08},
282 	 {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff}
283 	 },
284 	/* Generic for VGA and higher */
285 	{
286 	 0x00, 0x00, 0x00, 0x0000,
287 	 {0x01, 0x0f, 0x00, 0x0e},
288 	 0x23,
289 	 {0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
290 	  0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
291 	  0xea, 0x8c, 0xdf, 0x28, 0x40, 0xe7, 0x04, 0xa3,
292 	  0xff},
293 	 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
294 	  0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
295 	  0x01, 0x00, 0x00, 0x00},
296 	 {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff}
297 	 }
298 };
299 
300 static const struct SiS_Ext SiSUSB_EModeIDTable[] = {
301 	{0x2e, 0x0a1b, 0x0101, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},	/* 640x480x8 */
302 	{0x2f, 0x0a1b, 0x0100, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x05, 0x10, 0},	/* 640x400x8 */
303 	{0x30, 0x2a1b, 0x0103, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},	/* 800x600x8 */
304 	{0x31, 0x4a1b, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},	/* 720x480x8 */
305 	{0x32, 0x4a1b, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},	/* 720x576x8 */
306 	{0x33, 0x4a1d, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},	/* 720x480x16 */
307 	{0x34, 0x6a1d, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},	/* 720x576x16 */
308 	{0x35, 0x4a1f, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},	/* 720x480x32 */
309 	{0x36, 0x6a1f, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},	/* 720x576x32 */
310 	{0x38, 0x0a1b, 0x0105, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},	/* 1024x768x8 */
311 	{0x3a, 0x0e3b, 0x0107, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},	/* 1280x1024x8 */
312 	{0x41, 0x9a1d, 0x010e, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},	/* 320x200x16 */
313 	{0x44, 0x0a1d, 0x0111, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},	/* 640x480x16 */
314 	{0x47, 0x2a1d, 0x0114, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},	/* 800x600x16 */
315 	{0x4a, 0x0a3d, 0x0117, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},	/* 1024x768x16 */
316 	{0x4d, 0x0e7d, 0x011a, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},	/* 1280x1024x16 */
317 	{0x50, 0x9a1b, 0x0132, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},	/* 320x240x8  */
318 	{0x51, 0xba1b, 0x0133, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},	/* 400x300x8  */
319 	{0x52, 0xba1b, 0x0134, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},	/* 512x384x8  */
320 	{0x56, 0x9a1d, 0x0135, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},	/* 320x240x16 */
321 	{0x57, 0xba1d, 0x0136, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},	/* 400x300x16 */
322 	{0x58, 0xba1d, 0x0137, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},	/* 512x384x16 */
323 	{0x59, 0x9a1b, 0x0138, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},	/* 320x200x8  */
324 	{0x5c, 0xba1f, 0x0000, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},	/* 512x384x32 */
325 	{0x5d, 0x0a1d, 0x0139, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x07, 0x10, 0},	/* 640x400x16 */
326 	{0x5e, 0x0a1f, 0x0000, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x07, 0x10, 0},	/* 640x400x32 */
327 	{0x62, 0x0a3f, 0x013a, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},	/* 640x480x32 */
328 	{0x63, 0x2a3f, 0x013b, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},	/* 800x600x32 */
329 	{0x64, 0x0a7f, 0x013c, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},	/* 1024x768x32 */
330 	{0x65, 0x0eff, 0x013d, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},	/* 1280x1024x32 */
331 	{0x70, 0x6a1b, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},	/* 800x480x8 */
332 	{0x71, 0x4a1b, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},	/* 1024x576x8 */
333 	{0x74, 0x4a1d, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},	/* 1024x576x16 */
334 	{0x75, 0x0a3d, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},	/* 1280x720x16 */
335 	{0x76, 0x6a1f, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},	/* 800x480x32 */
336 	{0x77, 0x4a1f, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},	/* 1024x576x32 */
337 	{0x78, 0x0a3f, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},	/* 1280x720x32 */
338 	{0x79, 0x0a3b, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},	/* 1280x720x8 */
339 	{0x7a, 0x6a1d, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},	/* 800x480x16 */
340 	{0x23, 0x0e3b, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},	/* 1280x768x8 */
341 	{0x24, 0x0e7d, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},	/* 1280x768x16 */
342 	{0x25, 0x0eff, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},	/* 1280x768x32 */
343 	{0x39, 0x6a1b, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28, -1},	/* 848x480 */
344 	{0x3b, 0x6a3d, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28,
345 	 -1},
346 	{0x3e, 0x6a7f, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28,
347 	 -1},
348 	{0x3f, 0x6a1b, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a, -1},	/* 856x480 */
349 	{0x42, 0x6a3d, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a,
350 	 -1},
351 	{0x45, 0x6a7f, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a,
352 	 -1},
353 	{0x4f, 0x9a1f, 0x0000, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},	/* 320x200x32 */
354 	{0x53, 0x9a1f, 0x0000, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},	/* 320x240x32 */
355 	{0x54, 0xba1f, 0x0000, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},	/* 400x300x32 */
356 	{0x5f, 0x6a1b, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c, -1},	/* 768x576 */
357 	{0x60, 0x6a1d, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c,
358 	 -1},
359 	{0x61, 0x6a3f, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c,
360 	 -1},
361 	{0x1d, 0x6a1b, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d, -1},	/* 960x540 */
362 	{0x1e, 0x6a3d, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d,
363 	 -1},
364 	{0x1f, 0x6a7f, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d,
365 	 -1},
366 	{0x20, 0x6a1b, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e, -1},	/* 960x600 */
367 	{0x21, 0x6a3d, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e,
368 	 -1},
369 	{0x22, 0x6a7f, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e,
370 	 -1},
371 	{0x29, 0x4e1b, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33, -1},	/* 1152x864 */
372 	{0x2a, 0x4e3d, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33,
373 	 -1},
374 	{0x2b, 0x4e7f, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33,
375 	 -1},
376 	{0xff, 0x0000, 0x0000, 0, 0x00, 0x00, 0x00, 0x00, 0x00, -1}
377 };
378 
379 static const struct SiS_Ext2 SiSUSB_RefIndex[] = {
380 	{0x085f, 0x0d, 0x03, 0x05, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},	/* 0x0 */
381 	{0x0067, 0x0e, 0x04, 0x05, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},	/* 0x1 */
382 	{0x0067, 0x0f, 0x08, 0x48, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},	/* 0x2 */
383 	{0x0067, 0x10, 0x07, 0x8b, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},	/* 0x3 */
384 	{0x0047, 0x11, 0x0a, 0x00, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},	/* 0x4 */
385 	{0x0047, 0x12, 0x0d, 0x00, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},	/* 0x5 */
386 	{0x0047, 0x13, 0x13, 0x00, 0x05, 0x30, 800, 600, 0x20, 0x00, 0x00},	/* 0x6 */
387 	{0x0107, 0x14, 0x1c, 0x00, 0x05, 0x30, 800, 600, 0x20, 0x00, 0x00},	/* 0x7 */
388 	{0xc85f, 0x05, 0x00, 0x04, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0x8 */
389 	{0xc067, 0x06, 0x02, 0x04, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0x9 */
390 	{0xc067, 0x07, 0x02, 0x47, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0xa */
391 	{0xc067, 0x08, 0x03, 0x8a, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0xb */
392 	{0xc047, 0x09, 0x05, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0xc */
393 	{0xc047, 0x0a, 0x09, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0xd */
394 	{0xc047, 0x0b, 0x0e, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0xe */
395 	{0xc047, 0x0c, 0x15, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},	/* 0xf */
396 	{0x487f, 0x04, 0x00, 0x00, 0x00, 0x2f, 640, 400, 0x30, 0x55, 0x6e},	/* 0x10 */
397 	{0xc06f, 0x3c, 0x01, 0x06, 0x13, 0x31, 720, 480, 0x30, 0x00, 0x00},	/* 0x11 */
398 	{0x006f, 0x3d, 0x6f, 0x06, 0x14, 0x32, 720, 576, 0x30, 0x00, 0x00},	/* 0x12 (6f was 03) */
399 	{0x0087, 0x15, 0x06, 0x00, 0x06, 0x38, 1024, 768, 0x30, 0x00, 0x00},	/* 0x13 */
400 	{0xc877, 0x16, 0x0b, 0x06, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},	/* 0x14 */
401 	{0xc067, 0x17, 0x0f, 0x49, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},	/* 0x15 */
402 	{0x0067, 0x18, 0x11, 0x00, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},	/* 0x16 */
403 	{0x0047, 0x19, 0x16, 0x8c, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},	/* 0x17 */
404 	{0x0107, 0x1a, 0x1b, 0x00, 0x06, 0x38, 1024, 768, 0x10, 0x00, 0x00},	/* 0x18 */
405 	{0x0107, 0x1b, 0x1f, 0x00, 0x06, 0x38, 1024, 768, 0x10, 0x00, 0x00},	/* 0x19 */
406 	{0x407f, 0x00, 0x00, 0x00, 0x00, 0x41, 320, 200, 0x30, 0x56, 0x4e},	/* 0x1a */
407 	{0xc07f, 0x01, 0x00, 0x04, 0x04, 0x50, 320, 240, 0x30, 0x00, 0x00},	/* 0x1b */
408 	{0x007f, 0x02, 0x04, 0x05, 0x05, 0x51, 400, 300, 0x30, 0x00, 0x00},	/* 0x1c */
409 	{0xc077, 0x03, 0x0b, 0x06, 0x06, 0x52, 512, 384, 0x30, 0x00, 0x00},	/* 0x1d */
410 	{0x0077, 0x32, 0x40, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},	/* 0x1e */
411 	{0x0047, 0x33, 0x07, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},	/* 0x1f */
412 	{0x0047, 0x34, 0x0a, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},	/* 0x20 */
413 	{0x0077, 0x35, 0x0b, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},	/* 0x21 */
414 	{0x0047, 0x36, 0x11, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},	/* 0x22 */
415 	{0x0047, 0x37, 0x16, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},	/* 0x23 */
416 	{0x1137, 0x38, 0x19, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},	/* 0x24 */
417 	{0x1107, 0x39, 0x1e, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},	/* 0x25 */
418 	{0x1307, 0x3a, 0x20, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},	/* 0x26 */
419 	{0x0077, 0x42, 0x5b, 0x08, 0x11, 0x23, 1280, 768, 0x30, 0x00, 0x00},	/* 0x27 */
420 	{0x0087, 0x45, 0x57, 0x00, 0x16, 0x39, 848, 480, 0x30, 0x00, 0x00},	/* 0x28 38Hzi  */
421 	{0xc067, 0x46, 0x55, 0x0b, 0x16, 0x39, 848, 480, 0x30, 0x00, 0x00},	/* 0x29 848x480-60Hz   */
422 	{0x0087, 0x47, 0x57, 0x00, 0x17, 0x3f, 856, 480, 0x30, 0x00, 0x00},	/* 0x2a 856x480-38Hzi  */
423 	{0xc067, 0x48, 0x57, 0x00, 0x17, 0x3f, 856, 480, 0x30, 0x00, 0x00},	/* 0x2b 856x480-60Hz   */
424 	{0x006f, 0x4d, 0x71, 0x06, 0x15, 0x5f, 768, 576, 0x30, 0x00, 0x00},	/* 0x2c 768x576-56Hz   */
425 	{0x0067, 0x52, 0x6a, 0x00, 0x1c, 0x1d, 960, 540, 0x30, 0x00, 0x00},	/* 0x2d 960x540 60Hz */
426 	{0x0077, 0x53, 0x6b, 0x0b, 0x1d, 0x20, 960, 600, 0x30, 0x00, 0x00},	/* 0x2e 960x600 60Hz */
427 	{0x0087, 0x1c, 0x11, 0x00, 0x07, 0x3a, 1280, 1024, 0x30, 0x00, 0x00},	/* 0x2f */
428 	{0x0137, 0x1d, 0x19, 0x07, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},	/* 0x30 */
429 	{0x0107, 0x1e, 0x1e, 0x00, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},	/* 0x31 */
430 	{0x0207, 0x1f, 0x20, 0x00, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},	/* 0x32 */
431 	{0x0127, 0x54, 0x6d, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},	/* 0x33 1152x864-60Hz  */
432 	{0x0127, 0x44, 0x19, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},	/* 0x34 1152x864-75Hz  */
433 	{0x0127, 0x4a, 0x1e, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},	/* 0x35 1152x864-85Hz  */
434 	{0xffff, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0x00, 0x00}
435 };
436 
437 static const struct SiS_CRT1Table SiSUSB_CRT1Table[] = {
438 	{{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0xbf, 0x1f,
439 	  0x9c, 0x8e, 0x8f, 0x96, 0xb9, 0x30, 0x00, 0x00,
440 	  0x00}},		/* 0x0 */
441 	{{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0x0b, 0x3e,
442 	  0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x00,
443 	  0x00}},		/* 0x1 */
444 	{{0x3d, 0x31, 0x31, 0x81, 0x37, 0x1f, 0x72, 0xf0,
445 	  0x58, 0x8c, 0x57, 0x57, 0x73, 0x20, 0x00, 0x05,
446 	  0x01}},		/* 0x2 */
447 	{{0x4f, 0x3f, 0x3f, 0x93, 0x45, 0x0d, 0x24, 0xf5,
448 	  0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x01,
449 	  0x01}},		/* 0x3 */
450 	{{0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
451 	  0x9c, 0x8e, 0x8f, 0x96, 0xb9, 0x30, 0x00, 0x05,
452 	  0x00}},		/* 0x4 */
453 	{{0x5f, 0x4f, 0x4f, 0x83, 0x55, 0x81, 0x0b, 0x3e,
454 	  0xe9, 0x8b, 0xdf, 0xe8, 0x0c, 0x00, 0x00, 0x05,
455 	  0x00}},		/* 0x5 */
456 	{{0x63, 0x4f, 0x4f, 0x87, 0x56, 0x9b, 0x06, 0x3e,
457 	  0xe8, 0x8a, 0xdf, 0xe7, 0x07, 0x00, 0x00, 0x01,
458 	  0x00}},		/* 0x6 */
459 	{{0x64, 0x4f, 0x4f, 0x88, 0x55, 0x9d, 0xf2, 0x1f,
460 	  0xe0, 0x83, 0xdf, 0xdf, 0xf3, 0x10, 0x00, 0x01,
461 	  0x00}},		/* 0x7 */
462 	{{0x63, 0x4f, 0x4f, 0x87, 0x5a, 0x81, 0xfb, 0x1f,
463 	  0xe0, 0x83, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x05,
464 	  0x00}},		/* 0x8 */
465 	{{0x65, 0x4f, 0x4f, 0x89, 0x58, 0x80, 0xfb, 0x1f,
466 	  0xe0, 0x83, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x05,
467 	  0x61}},		/* 0x9 */
468 	{{0x65, 0x4f, 0x4f, 0x89, 0x58, 0x80, 0x01, 0x3e,
469 	  0xe0, 0x83, 0xdf, 0xdf, 0x02, 0x00, 0x00, 0x05,
470 	  0x61}},		/* 0xa */
471 	{{0x67, 0x4f, 0x4f, 0x8b, 0x58, 0x81, 0x0d, 0x3e,
472 	  0xe0, 0x83, 0xdf, 0xdf, 0x0e, 0x00, 0x00, 0x05,
473 	  0x61}},		/* 0xb */
474 	{{0x65, 0x4f, 0x4f, 0x89, 0x57, 0x9f, 0xfb, 0x1f,
475 	  0xe6, 0x8a, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x01,
476 	  0x00}},		/* 0xc */
477 	{{0x7b, 0x63, 0x63, 0x9f, 0x6a, 0x93, 0x6f, 0xf0,
478 	  0x58, 0x8a, 0x57, 0x57, 0x70, 0x20, 0x00, 0x05,
479 	  0x01}},		/* 0xd */
480 	{{0x7f, 0x63, 0x63, 0x83, 0x6c, 0x1c, 0x72, 0xf0,
481 	  0x58, 0x8c, 0x57, 0x57, 0x73, 0x20, 0x00, 0x06,
482 	  0x01}},		/* 0xe */
483 	{{0x7d, 0x63, 0x63, 0x81, 0x6e, 0x1d, 0x98, 0xf0,
484 	  0x7c, 0x82, 0x57, 0x57, 0x99, 0x00, 0x00, 0x06,
485 	  0x01}},		/* 0xf */
486 	{{0x7f, 0x63, 0x63, 0x83, 0x69, 0x13, 0x6f, 0xf0,
487 	  0x58, 0x8b, 0x57, 0x57, 0x70, 0x20, 0x00, 0x06,
488 	  0x01}},		/* 0x10 */
489 	{{0x7e, 0x63, 0x63, 0x82, 0x6b, 0x13, 0x75, 0xf0,
490 	  0x58, 0x8b, 0x57, 0x57, 0x76, 0x20, 0x00, 0x06,
491 	  0x01}},		/* 0x11 */
492 	{{0x81, 0x63, 0x63, 0x85, 0x6d, 0x18, 0x7a, 0xf0,
493 	  0x58, 0x8b, 0x57, 0x57, 0x7b, 0x20, 0x00, 0x06,
494 	  0x61}},		/* 0x12 */
495 	{{0x83, 0x63, 0x63, 0x87, 0x6e, 0x19, 0x81, 0xf0,
496 	  0x58, 0x8b, 0x57, 0x57, 0x82, 0x20, 0x00, 0x06,
497 	  0x61}},		/* 0x13 */
498 	{{0x85, 0x63, 0x63, 0x89, 0x6f, 0x1a, 0x91, 0xf0,
499 	  0x58, 0x8b, 0x57, 0x57, 0x92, 0x20, 0x00, 0x06,
500 	  0x61}},		/* 0x14 */
501 	{{0x99, 0x7f, 0x7f, 0x9d, 0x84, 0x1a, 0x96, 0x1f,
502 	  0x7f, 0x83, 0x7f, 0x7f, 0x97, 0x10, 0x00, 0x02,
503 	  0x00}},		/* 0x15 */
504 	{{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf5,
505 	  0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
506 	  0x01}},		/* 0x16 */
507 	{{0xa1, 0x7f, 0x7f, 0x85, 0x86, 0x97, 0x24, 0xf5,
508 	  0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
509 	  0x01}},		/* 0x17 */
510 	{{0x9f, 0x7f, 0x7f, 0x83, 0x85, 0x91, 0x1e, 0xf5,
511 	  0x00, 0x83, 0xff, 0xff, 0x1f, 0x10, 0x00, 0x02,
512 	  0x01}},		/* 0x18 */
513 	{{0xa7, 0x7f, 0x7f, 0x8b, 0x89, 0x95, 0x26, 0xf5,
514 	  0x00, 0x83, 0xff, 0xff, 0x27, 0x10, 0x00, 0x02,
515 	  0x01}},		/* 0x19 */
516 	{{0xa9, 0x7f, 0x7f, 0x8d, 0x8c, 0x9a, 0x2c, 0xf5,
517 	  0x00, 0x83, 0xff, 0xff, 0x2d, 0x14, 0x00, 0x02,
518 	  0x62}},		/* 0x1a */
519 	{{0xab, 0x7f, 0x7f, 0x8f, 0x8d, 0x9b, 0x35, 0xf5,
520 	  0x00, 0x83, 0xff, 0xff, 0x36, 0x14, 0x00, 0x02,
521 	  0x62}},		/* 0x1b */
522 	{{0xcf, 0x9f, 0x9f, 0x93, 0xb2, 0x01, 0x14, 0xba,
523 	  0x00, 0x83, 0xff, 0xff, 0x15, 0x00, 0x00, 0x03,
524 	  0x00}},		/* 0x1c */
525 	{{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x28, 0x5a,
526 	  0x00, 0x83, 0xff, 0xff, 0x29, 0x09, 0x00, 0x07,
527 	  0x01}},		/* 0x1d */
528 	{{0xce, 0x9f, 0x9f, 0x92, 0xa5, 0x17, 0x28, 0x5a,
529 	  0x00, 0x83, 0xff, 0xff, 0x29, 0x09, 0x00, 0x07,
530 	  0x01}},		/* 0x1e */
531 	{{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0x2e, 0x5a,
532 	  0x00, 0x83, 0xff, 0xff, 0x2f, 0x09, 0x00, 0x07,
533 	  0x01}},		/* 0x1f */
534 	{{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
535 	  0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
536 	  0x00}},		/* 0x20 */
537 	{{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
538 	  0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
539 	  0x00}},		/* 0x21 */
540 	{{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
541 	  0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
542 	  0x00}},		/* 0x22 */
543 	{{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
544 	  0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
545 	  0x00}},		/* 0x23 */
546 	{{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
547 	  0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
548 	  0x00}},		/* 0x24 */
549 	{{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
550 	  0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
551 	  0x00}},		/* 0x25 */
552 	{{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
553 	  0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
554 	  0x00}},		/* 0x26 */
555 	{{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
556 	  0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
557 	  0x00}},		/* 0x27 */
558 	{{0x43, 0xef, 0xef, 0x87, 0x06, 0x00, 0xd4, 0x1f,
559 	  0xa0, 0x83, 0x9f, 0x9f, 0xd5, 0x1f, 0x41, 0x05,
560 	  0x63}},		/* 0x28 */
561 	{{0x45, 0xef, 0xef, 0x89, 0x07, 0x01, 0xd9, 0x1f,
562 	  0xa0, 0x83, 0x9f, 0x9f, 0xda, 0x1f, 0x41, 0x05,
563 	  0x63}},		/* 0x29 */
564 	{{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
565 	  0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
566 	  0x00}},		/* 0x2a */
567 	{{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
568 	  0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
569 	  0x00}},		/* 0x2b */
570 	{{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
571 	  0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
572 	  0x00}},		/* 0x2c */
573 	{{0x59, 0xff, 0xff, 0x9d, 0x17, 0x13, 0x33, 0xba,
574 	  0x00, 0x83, 0xff, 0xff, 0x34, 0x0f, 0x41, 0x05,
575 	  0x44}},		/* 0x2d */
576 	{{0x5b, 0xff, 0xff, 0x9f, 0x18, 0x14, 0x38, 0xba,
577 	  0x00, 0x83, 0xff, 0xff, 0x39, 0x0f, 0x41, 0x05,
578 	  0x44}},		/* 0x2e */
579 	{{0x5b, 0xff, 0xff, 0x9f, 0x18, 0x14, 0x3d, 0xba,
580 	  0x00, 0x83, 0xff, 0xff, 0x3e, 0x0f, 0x41, 0x05,
581 	  0x44}},		/* 0x2f */
582 	{{0x5d, 0xff, 0xff, 0x81, 0x19, 0x95, 0x41, 0xba,
583 	  0x00, 0x84, 0xff, 0xff, 0x42, 0x0f, 0x41, 0x05,
584 	  0x44}},		/* 0x30 */
585 	{{0x55, 0xff, 0xff, 0x99, 0x0d, 0x0c, 0x3e, 0xba,
586 	  0x00, 0x84, 0xff, 0xff, 0x3f, 0x0f, 0x41, 0x05,
587 	  0x00}},		/* 0x31 */
588 	{{0x7f, 0x63, 0x63, 0x83, 0x6c, 0x1c, 0x72, 0xba,
589 	  0x27, 0x8b, 0xdf, 0xdf, 0x73, 0x00, 0x00, 0x06,
590 	  0x01}},		/* 0x32 */
591 	{{0x7f, 0x63, 0x63, 0x83, 0x69, 0x13, 0x6f, 0xba,
592 	  0x26, 0x89, 0xdf, 0xdf, 0x6f, 0x00, 0x00, 0x06,
593 	  0x01}},		/* 0x33 */
594 	{{0x7f, 0x63, 0x63, 0x82, 0x6b, 0x13, 0x75, 0xba,
595 	  0x29, 0x8c, 0xdf, 0xdf, 0x75, 0x00, 0x00, 0x06,
596 	  0x01}},		/* 0x34 */
597 	{{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf1,
598 	  0xaf, 0x85, 0x3f, 0x3f, 0x25, 0x30, 0x00, 0x02,
599 	  0x01}},		/* 0x35 */
600 	{{0x9f, 0x7f, 0x7f, 0x83, 0x85, 0x91, 0x1e, 0xf1,
601 	  0xad, 0x81, 0x3f, 0x3f, 0x1f, 0x30, 0x00, 0x02,
602 	  0x01}},		/* 0x36 */
603 	{{0xa7, 0x7f, 0x7f, 0x88, 0x89, 0x95, 0x26, 0xf1,
604 	  0xb1, 0x85, 0x3f, 0x3f, 0x27, 0x30, 0x00, 0x02,
605 	  0x01}},		/* 0x37 */
606 	{{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x28, 0xc4,
607 	  0x7a, 0x8e, 0xcf, 0xcf, 0x29, 0x21, 0x00, 0x07,
608 	  0x01}},		/* 0x38 */
609 	{{0xce, 0x9f, 0x9f, 0x92, 0xa5, 0x17, 0x28, 0xd4,
610 	  0x7a, 0x8e, 0xcf, 0xcf, 0x29, 0x21, 0x00, 0x07,
611 	  0x01}},		/* 0x39 */
612 	{{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0x2e, 0xd4,
613 	  0x7d, 0x81, 0xcf, 0xcf, 0x2f, 0x21, 0x00, 0x07,
614 	  0x01}},		/* 0x3a */
615 	{{0xdc, 0x9f, 0x9f, 0x80, 0xaf, 0x9d, 0xe6, 0xff,
616 	  0xc0, 0x83, 0xbf, 0xbf, 0xe7, 0x10, 0x00, 0x07,
617 	  0x01}},		/* 0x3b */
618 	{{0x6b, 0x59, 0x59, 0x8f, 0x5e, 0x8c, 0x0b, 0x3e,
619 	  0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x05,
620 	  0x00}},		/* 0x3c */
621 	{{0x6d, 0x59, 0x59, 0x91, 0x60, 0x89, 0x53, 0xf0,
622 	  0x41, 0x84, 0x3f, 0x3f, 0x54, 0x00, 0x00, 0x05,
623 	  0x41}},		/* 0x3d */
624 	{{0x86, 0x6a, 0x6a, 0x8a, 0x74, 0x06, 0x8c, 0x15,
625 	  0x4f, 0x83, 0xef, 0xef, 0x8d, 0x30, 0x00, 0x02,
626 	  0x00}},		/* 0x3e */
627 	{{0x81, 0x6a, 0x6a, 0x85, 0x70, 0x00, 0x0f, 0x3e,
628 	  0xeb, 0x8e, 0xdf, 0xdf, 0x10, 0x00, 0x00, 0x02,
629 	  0x00}},		/* 0x3f */
630 	{{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x1e, 0xf1,
631 	  0xae, 0x85, 0x57, 0x57, 0x1f, 0x30, 0x00, 0x02,
632 	  0x01}},		/* 0x40 */
633 	{{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf5,
634 	  0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
635 	  0x01}},		/* 0x41 */
636 	{{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x20, 0xf5,
637 	  0x03, 0x88, 0xff, 0xff, 0x21, 0x10, 0x00, 0x07,
638 	  0x01}},		/* 0x42 */
639 	{{0xe6, 0xae, 0xae, 0x8a, 0xbd, 0x90, 0x3d, 0x10,
640 	  0x1a, 0x8d, 0x19, 0x19, 0x3e, 0x2f, 0x00, 0x03,
641 	  0x00}},		/* 0x43 */
642 	{{0xc3, 0x8f, 0x8f, 0x87, 0x9b, 0x0b, 0x82, 0xef,
643 	  0x60, 0x83, 0x5f, 0x5f, 0x83, 0x10, 0x00, 0x07,
644 	  0x01}},		/* 0x44 */
645 	{{0x86, 0x69, 0x69, 0x8A, 0x74, 0x06, 0x8C, 0x15,
646 	  0x4F, 0x83, 0xEF, 0xEF, 0x8D, 0x30, 0x00, 0x02,
647 	  0x00}},		/* 0x45 */
648 	{{0x83, 0x69, 0x69, 0x87, 0x6f, 0x1d, 0x03, 0x3E,
649 	  0xE5, 0x8d, 0xDF, 0xe4, 0x04, 0x00, 0x00, 0x06,
650 	  0x00}},		/* 0x46 */
651 	{{0x86, 0x6A, 0x6A, 0x8A, 0x74, 0x06, 0x8C, 0x15,
652 	  0x4F, 0x83, 0xEF, 0xEF, 0x8D, 0x30, 0x00, 0x02,
653 	  0x00}},		/* 0x47 */
654 	{{0x81, 0x6A, 0x6A, 0x85, 0x70, 0x00, 0x0F, 0x3E,
655 	  0xEB, 0x8E, 0xDF, 0xDF, 0x10, 0x00, 0x00, 0x02,
656 	  0x00}},		/* 0x48 */
657 	{{0xdd, 0xa9, 0xa9, 0x81, 0xb4, 0x97, 0x26, 0xfd,
658 	  0x01, 0x8d, 0xff, 0x00, 0x27, 0x10, 0x00, 0x03,
659 	  0x01}},		/* 0x49 */
660 	{{0xd9, 0x8f, 0x8f, 0x9d, 0xba, 0x0a, 0x8a, 0xff,
661 	  0x60, 0x8b, 0x5f, 0x5f, 0x8b, 0x10, 0x00, 0x03,
662 	  0x01}},		/* 0x4a */
663 	{{0xea, 0xae, 0xae, 0x8e, 0xba, 0x82, 0x40, 0x10,
664 	  0x1b, 0x87, 0x19, 0x1a, 0x41, 0x0f, 0x00, 0x03,
665 	  0x00}},		/* 0x4b */
666 	{{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0xf1, 0xff,
667 	  0xc0, 0x83, 0xbf, 0xbf, 0xf2, 0x10, 0x00, 0x07,
668 	  0x01}},		/* 0x4c */
669 	{{0x75, 0x5f, 0x5f, 0x99, 0x66, 0x90, 0x53, 0xf0,
670 	  0x41, 0x84, 0x3f, 0x3f, 0x54, 0x00, 0x00, 0x05,
671 	  0x41}},
672 	{{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0x0b, 0x3e,
673 	  0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x00,
674 	  0x00}},		/* 0x4e */
675 	{{0xcd, 0x9f, 0x9f, 0x91, 0xab, 0x1c, 0x3a, 0xff,
676 	  0x20, 0x83, 0x1f, 0x1f, 0x3b, 0x10, 0x00, 0x07,
677 	  0x21}},		/* 0x4f */
678 	{{0x15, 0xd1, 0xd1, 0x99, 0xe2, 0x19, 0x3d, 0x10,
679 	  0x1a, 0x8d, 0x19, 0x19, 0x3e, 0x2f, 0x01, 0x0c,
680 	  0x20}},		/* 0x50 */
681 	{{0x0e, 0xef, 0xef, 0x92, 0xfe, 0x03, 0x30, 0xf0,
682 	  0x1e, 0x83, 0x1b, 0x1c, 0x31, 0x00, 0x01, 0x00,
683 	  0x61}},		/* 0x51 */
684 	{{0x85, 0x77, 0x77, 0x89, 0x7d, 0x01, 0x31, 0xf0,
685 	  0x1e, 0x84, 0x1b, 0x1c, 0x32, 0x00, 0x00, 0x02,
686 	  0x41}},		/* 0x52 */
687 	{{0x87, 0x77, 0x77, 0x8b, 0x81, 0x0b, 0x68, 0xf0,
688 	  0x5a, 0x80, 0x57, 0x57, 0x69, 0x00, 0x00, 0x02,
689 	  0x01}},		/* 0x53 */
690 	{{0xcd, 0x8f, 0x8f, 0x91, 0x9b, 0x1b, 0x7a, 0xff,
691 	  0x64, 0x8c, 0x5f, 0x62, 0x7b, 0x10, 0x00, 0x07,
692 	  0x41}}		/* 0x54 */
693 };
694 
695 static const struct SiS_VCLKData SiSUSB_VCLKData[] = {
696 	{0x1b, 0xe1, 25},	/* 0x00 */
697 	{0x4e, 0xe4, 28},	/* 0x01 */
698 	{0x57, 0xe4, 31},	/* 0x02 */
699 	{0xc3, 0xc8, 36},	/* 0x03 */
700 	{0x42, 0xe2, 40},	/* 0x04 */
701 	{0xfe, 0xcd, 43},	/* 0x05 */
702 	{0x5d, 0xc4, 44},	/* 0x06 */
703 	{0x52, 0xe2, 49},	/* 0x07 */
704 	{0x53, 0xe2, 50},	/* 0x08 */
705 	{0x74, 0x67, 52},	/* 0x09 */
706 	{0x6d, 0x66, 56},	/* 0x0a */
707 	{0x5a, 0x64, 65},	/* 0x0b */
708 	{0x46, 0x44, 67},	/* 0x0c */
709 	{0xb1, 0x46, 68},	/* 0x0d */
710 	{0xd3, 0x4a, 72},	/* 0x0e */
711 	{0x29, 0x61, 75},	/* 0x0f */
712 	{0x6e, 0x46, 76},	/* 0x10 */
713 	{0x2b, 0x61, 78},	/* 0x11 */
714 	{0x31, 0x42, 79},	/* 0x12 */
715 	{0xab, 0x44, 83},	/* 0x13 */
716 	{0x46, 0x25, 84},	/* 0x14 */
717 	{0x78, 0x29, 86},	/* 0x15 */
718 	{0x62, 0x44, 94},	/* 0x16 */
719 	{0x2b, 0x41, 104},	/* 0x17 */
720 	{0x3a, 0x23, 105},	/* 0x18 */
721 	{0x70, 0x44, 108},	/* 0x19 */
722 	{0x3c, 0x23, 109},	/* 0x1a */
723 	{0x5e, 0x43, 113},	/* 0x1b */
724 	{0xbc, 0x44, 116},	/* 0x1c */
725 	{0xe0, 0x46, 132},	/* 0x1d */
726 	{0x54, 0x42, 135},	/* 0x1e */
727 	{0xea, 0x2a, 139},	/* 0x1f */
728 	{0x41, 0x22, 157},	/* 0x20 */
729 	{0x70, 0x24, 162},	/* 0x21 */
730 	{0x30, 0x21, 175},	/* 0x22 */
731 	{0x4e, 0x22, 189},	/* 0x23 */
732 	{0xde, 0x26, 194},	/* 0x24 */
733 	{0x62, 0x06, 202},	/* 0x25 */
734 	{0x3f, 0x03, 229},	/* 0x26 */
735 	{0xb8, 0x06, 234},	/* 0x27 */
736 	{0x34, 0x02, 253},	/* 0x28 */
737 	{0x58, 0x04, 255},	/* 0x29 */
738 	{0x24, 0x01, 265},	/* 0x2a */
739 	{0x9b, 0x02, 267},	/* 0x2b */
740 	{0x70, 0x05, 270},	/* 0x2c */
741 	{0x25, 0x01, 272},	/* 0x2d */
742 	{0x9c, 0x02, 277},	/* 0x2e */
743 	{0x27, 0x01, 286},	/* 0x2f */
744 	{0x3c, 0x02, 291},	/* 0x30 */
745 	{0xef, 0x0a, 292},	/* 0x31 */
746 	{0xf6, 0x0a, 310},	/* 0x32 */
747 	{0x95, 0x01, 315},	/* 0x33 */
748 	{0xf0, 0x09, 324},	/* 0x34 */
749 	{0xfe, 0x0a, 331},	/* 0x35 */
750 	{0xf3, 0x09, 332},	/* 0x36 */
751 	{0xea, 0x08, 340},	/* 0x37 */
752 	{0xe8, 0x07, 376},	/* 0x38 */
753 	{0xde, 0x06, 389},	/* 0x39 */
754 	{0x52, 0x2a, 54},	/* 0x3a 301 TV */
755 	{0x52, 0x6a, 27},	/* 0x3b 301 TV */
756 	{0x62, 0x24, 70},	/* 0x3c 301 TV */
757 	{0x62, 0x64, 70},	/* 0x3d 301 TV */
758 	{0xa8, 0x4c, 30},	/* 0x3e 301 TV */
759 	{0x20, 0x26, 33},	/* 0x3f 301 TV */
760 	{0x31, 0xc2, 39},	/* 0x40 */
761 	{0x60, 0x36, 30},	/* 0x41 Chrontel */
762 	{0x40, 0x4a, 28},	/* 0x42 Chrontel */
763 	{0x9f, 0x46, 44},	/* 0x43 Chrontel */
764 	{0x97, 0x2c, 26},	/* 0x44 */
765 	{0x44, 0xe4, 25},	/* 0x45 Chrontel */
766 	{0x7e, 0x32, 47},	/* 0x46 Chrontel */
767 	{0x8a, 0x24, 31},	/* 0x47 Chrontel */
768 	{0x97, 0x2c, 26},	/* 0x48 Chrontel */
769 	{0xce, 0x3c, 39},	/* 0x49 */
770 	{0x52, 0x4a, 36},	/* 0x4a Chrontel */
771 	{0x34, 0x61, 95},	/* 0x4b */
772 	{0x78, 0x27, 108},	/* 0x4c - was 102 */
773 	{0x66, 0x43, 123},	/* 0x4d Modes 0x26-0x28 (1400x1050) */
774 	{0x41, 0x4e, 21},	/* 0x4e */
775 	{0xa1, 0x4a, 29},	/* 0x4f Chrontel */
776 	{0x19, 0x42, 42},	/* 0x50 */
777 	{0x54, 0x46, 58},	/* 0x51 Chrontel */
778 	{0x25, 0x42, 61},	/* 0x52 */
779 	{0x44, 0x44, 66},	/* 0x53 Chrontel */
780 	{0x3a, 0x62, 70},	/* 0x54 Chrontel */
781 	{0x62, 0xc6, 34},	/* 0x55 848x480-60 */
782 	{0x6a, 0xc6, 37},	/* 0x56 848x480-75 - TEMP */
783 	{0xbf, 0xc8, 35},	/* 0x57 856x480-38i,60 */
784 	{0x30, 0x23, 88},	/* 0x58 1360x768-62 (is 60Hz!) */
785 	{0x52, 0x07, 149},	/* 0x59 1280x960-85 */
786 	{0x56, 0x07, 156},	/* 0x5a 1400x1050-75 */
787 	{0x70, 0x29, 81},	/* 0x5b 1280x768 LCD */
788 	{0x45, 0x25, 83},	/* 0x5c 1280x800  */
789 	{0x70, 0x0a, 147},	/* 0x5d 1680x1050 */
790 	{0x70, 0x24, 162},	/* 0x5e 1600x1200 */
791 	{0x5a, 0x64, 65},	/* 0x5f 1280x720 - temp */
792 	{0x63, 0x46, 68},	/* 0x60 1280x768_2 */
793 	{0x31, 0x42, 79},	/* 0x61 1280x768_3 - temp */
794 	{0, 0, 0},		/* 0x62 - custom (will be filled out at run-time) */
795 	{0x5a, 0x64, 65},	/* 0x63 1280x720 (LCD LVDS) */
796 	{0x70, 0x28, 90},	/* 0x64 1152x864@60 */
797 	{0x41, 0xc4, 32},	/* 0x65 848x480@60 */
798 	{0x5c, 0xc6, 32},	/* 0x66 856x480@60 */
799 	{0x76, 0xe7, 27},	/* 0x67 720x480@60 */
800 	{0x5f, 0xc6, 33},	/* 0x68 720/768x576@60 */
801 	{0x52, 0x27, 75},	/* 0x69 1920x1080i 60Hz interlaced */
802 	{0x7c, 0x6b, 38},	/* 0x6a 960x540@60 */
803 	{0xe3, 0x56, 41},	/* 0x6b 960x600@60 */
804 	{0x45, 0x25, 83},	/* 0x6c 1280x800 */
805 	{0x70, 0x28, 90},	/* 0x6d 1152x864@60 */
806 	{0x15, 0xe1, 20},	/* 0x6e 640x400@60 (fake, not actually used) */
807 	{0x5f, 0xc6, 33},	/* 0x6f 720x576@60 */
808 	{0x37, 0x5a, 10},	/* 0x70 320x200@60 (fake, not actually used) */
809 	{0x2b, 0xc2, 35}	/* 0x71 768@576@60 */
810 };
811 
812 int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
813 int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo);
814 
815 extern int sisusb_setreg(struct sisusb_usb_data *sisusb, int port, u8 data);
816 extern int sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 * data);
817 extern int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port,
818 			    u8 index, u8 data);
819 extern int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port,
820 			    u8 index, u8 * data);
821 extern int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port,
822 				 u8 idx, u8 myand, u8 myor);
823 extern int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port,
824 			      u8 index, u8 myor);
825 extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port,
826 			       u8 idx, u8 myand);
827 
828 void sisusb_delete(struct kref *kref);
829 int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data);
830 int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 * data);
831 int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src,
832 		       u32 dest, int length);
833 int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init);
834 int sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
835 			 u8 * arg, int cmapsz, int ch512, int dorecalc,
836 			 struct vc_data *c, int fh, int uplock);
837 void sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location);
838 int sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last);
839 void sisusb_console_exit(struct sisusb_usb_data *sisusb);
840 void sisusb_init_concode(void);
841 
842 #endif
843