GNU Linux-libre 4.19.245-gnu1
[releases.git] / drivers / usb / misc / sisusbvga / sisusb_init.h
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, u32 port, u8 data);
816 extern int sisusb_getreg(struct sisusb_usb_data *sisusb, u32 port, u8 * data);
817 extern int sisusb_setidxreg(struct sisusb_usb_data *sisusb, u32 port,
818                             u8 index, u8 data);
819 extern int sisusb_getidxreg(struct sisusb_usb_data *sisusb, u32 port,
820                             u8 index, u8 * data);
821 extern int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, u32 port,
822                                  u8 idx, u8 myand, u8 myor);
823 extern int sisusb_setidxregor(struct sisusb_usb_data *sisusb, u32 port,
824                               u8 index, u8 myor);
825 extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, u32 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