Linux Audio

Check our new training course

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