4 * Data and prototypes for init301.c
6 * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
8 * If distributed as part of the Linux kernel, the following license terms
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.
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.
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
25 * Otherwise, the following license terms apply:
27 * * Redistribution and use in source and binary forms, with or without
28 * * modification, are permitted provided that the following conditions
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.
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.
49 * Author: Thomas Winischhofer <thomas@winischhofer.net>
64 #ifdef SIS_LINUX_KERNEL
70 #include <linux/version.h>
71 #include <linux/types.h>
75 #include <video/sisfb.h>
78 static const unsigned char SiS_YPbPrTable[3][64] = {
80 0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
81 0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
82 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
83 0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
84 0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
85 0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40,
86 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/,
87 0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
90 0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
91 0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
92 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
93 0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
94 0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
95 0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
96 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
97 0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
100 #if 0 /* OK, but sticks to left edge */
101 0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
102 0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
103 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
104 0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
105 0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
106 0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
107 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
108 0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
111 0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
112 0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
113 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
114 0xed,0x50,0x70,0x9f,0x16,0x59,0x60,0x13,
115 0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
116 0x4b,0x4b,0x6f,0x2f,0x63,0x92,0x0f,0x40,
117 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x73,
118 0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
123 static const unsigned char SiS_TVPhase[] =
125 0x21,0xED,0xBA,0x08, /* 0x00 SiS_NTSCPhase */
126 0x2A,0x05,0xE3,0x00, /* 0x01 SiS_PALPhase */
127 0x21,0xE4,0x2E,0x9B, /* 0x02 SiS_PALMPhase */
128 0x21,0xF4,0x3E,0xBA, /* 0x03 SiS_PALNPhase */
130 0x1E,0x83,0x0A,0xE0, /* 0x05 SiS_SpecialPhaseM */
133 0x21,0xF0,0x7B,0xD6, /* 0x08 SiS_NTSCPhase2 */
134 0x2A,0x09,0x86,0xE9, /* 0x09 SiS_PALPhase2 */
135 0x21,0xE6,0xEF,0xA4, /* 0x0a SiS_PALMPhase2 */
136 0x21,0xF6,0x94,0x46, /* 0x0b SiS_PALNPhase2 */
138 0x1E,0x83,0x0A,0xE0, /* 0x0d SiS_SpecialPhaseM */
141 0x1e,0x8c,0x5c,0x7a, /* 0x10 SiS_SpecialPhase */
142 0x25,0xd4,0xfd,0x5e /* 0x11 SiS_SpecialPhaseJ */
145 static const unsigned char SiS_HiTVGroup3_1[] = {
146 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
147 0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
148 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
149 0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
150 0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
151 0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
152 0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
153 0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
156 static const unsigned char SiS_HiTVGroup3_2[] = {
157 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
158 0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
159 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
160 0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
161 0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
162 0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
163 0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
164 0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
167 /* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
169 static const unsigned char SiS_Part2CLVX_1[] = {
171 0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
172 0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
173 0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
174 0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
177 static const unsigned char SiS_Part2CLVX_2[] = {
179 0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
180 0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
181 0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
182 0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
185 static const unsigned char SiS_Part2CLVX_3[] = { /* NTSC, 525i, 525p */
187 0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D,
188 0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C,
189 0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E,
190 0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02,
192 0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E,
193 0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F,
194 0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03,
195 0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06,
197 0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01,
198 0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03,
199 0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06,
200 0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08,
204 static const unsigned char SiS_Part2CLVX_4[] = { /* PAL */
206 0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
207 0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
208 0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
209 0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
211 0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F,
212 0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01,
213 0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04,
214 0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07,
216 0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
217 0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
218 0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
219 0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
223 static const unsigned char SiS_Part2CLVX_5[] = { /* 750p */
225 0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
226 0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
227 0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
228 0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
232 static const unsigned char SiS_Part2CLVX_6[] = { /* 1080i */
234 0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
235 0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
236 0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
237 0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
242 /* 661 et al LCD data structure (2.03.00) */
243 static const unsigned char SiS_LCDStruct661[] = {
245 /* type|CR37| HDE | VDE | HT | VT | hss | hse */
246 0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
247 0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
248 /* | vss | vse |clck| clock |CRT2DataP|CRT2DataP|idx */
249 /* VESA non-VESA noscale */
251 0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
252 0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
254 0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
255 0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
257 0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
258 0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
260 0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
261 0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
263 0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
264 0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
266 0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
267 0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
269 0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
270 0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
272 0x0C,0xE0,0x00,0x05,0x20,0x03,0xAA,0x05,0x2E,0x03,0x30,0x00,0x50,
273 0x00,0x04,0x00,0x03,0x00,0x47,0xA9,0x10,0x00,0x00,0x00,0x00,0x07,
275 0x01,0xC0,0x20,0x03,0x58,0x02,0x20,0x04,0x74,0x02,0x2A,0x00,0x80,
276 0x00,0x06,0x00,0x04,0x00,0x28,0x63,0x4B,0x00,0x00,0x00,0x00,0x00,
278 0x08,0xE0,0x00,0x05,0x56,0x03,0x80,0x06,0x5d,0x03,0x10,0x00,0x70,
279 0x00,0x01,0x00,0x03,0x00,0x54,0x75,0x13,0x00,0x00,0x00,0x00,0x08
284 static unsigned char SiS300_TrumpionData[14][80] = {
285 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
286 0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
287 0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
288 0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
289 0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
290 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
291 0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
292 0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
293 0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
294 0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
295 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
296 0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
297 0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
298 0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
299 0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
300 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
301 0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
302 0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
303 0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
304 0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
305 { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
306 0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
307 0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
308 0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
309 0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
310 { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
311 0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
312 0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
313 0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
314 0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
315 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
316 0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
317 0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
318 0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
319 0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
321 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
322 0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
323 0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
324 0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
325 0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
326 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
327 0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
328 0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
329 0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
330 0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
331 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
332 0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
333 0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
334 0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
335 0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
336 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
337 0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
338 0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
339 0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
340 0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
341 { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
342 0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
343 0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
344 0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
345 0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
346 { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
347 0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
348 0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
349 0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
350 0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
351 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
352 0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
353 0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
354 0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
355 0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 }
359 void SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
360 #ifndef SIS_LINUX_KERNEL
361 void SiS_LockCRT2(struct SiS_Private *SiS_Pr);
363 void SiS_EnableCRT2(struct SiS_Private *SiS_Pr);
364 unsigned short SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
365 void SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
366 BOOLEAN SiS_IsDualEdge(struct SiS_Private *SiS_Pr);
367 BOOLEAN SiS_IsVAMode(struct SiS_Private *SiS_Pr);
368 void SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
369 unsigned short ModeIdIndex, int checkcrt2mode);
370 void SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
371 void SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
372 unsigned short ModeIdIndex);
373 void SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
374 unsigned short ModeIdIndex);
375 unsigned short SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
376 unsigned short RefreshRateTableIndex);
377 unsigned short SiS_GetResInfo(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex);
378 void SiS_DisableBridge(struct SiS_Private *SiS_Pr);
379 #ifndef SIS_LINUX_KERNEL
380 void SiS_EnableBridge(struct SiS_Private *SiS_Pr);
382 BOOLEAN SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
383 void SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr);
384 void SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr);
386 void SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
387 unsigned short SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
388 void SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
389 unsigned short SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempax);
390 #ifndef SIS_LINUX_KERNEL
391 void SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
392 unsigned short SiS_GetCH70xx(struct SiS_Private *SiS_Pr, unsigned short tempax);
394 void SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
395 unsigned char orval,unsigned short andval);
397 static void SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
398 static void SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
399 static void SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
400 static void SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
401 void SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
402 void SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
406 static BOOLEAN SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
407 void SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
410 void SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
411 unsigned short SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr);
412 unsigned short SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
413 unsigned short adaptnum, unsigned short DDCdatatype,
414 unsigned char *buffer, unsigned int VBFlags2);
417 unsigned short SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
418 int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
419 BOOLEAN checkcr32, unsigned int VBFlags2);
420 unsigned short SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
421 unsigned short SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
422 unsigned char *buffer);
424 static unsigned short SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
425 int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
426 BOOLEAN checkcr32, unsigned int VBFlags2);
427 static unsigned short SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
428 static unsigned short SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
429 unsigned char *buffer);
431 static void SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
432 static unsigned short SiS_SetStart(struct SiS_Private *SiS_Pr);
433 static unsigned short SiS_SetStop(struct SiS_Private *SiS_Pr);
434 static unsigned short SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
435 static unsigned short SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
436 static unsigned short SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
437 static unsigned short SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
438 static unsigned short SiS_CheckACK(struct SiS_Private *SiS_Pr);
439 static unsigned short SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
440 static unsigned short SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
441 static unsigned short SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
442 static void SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
443 static unsigned short SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
446 static void SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
447 unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
448 static void SetOEMLCDData2(struct SiS_Private *SiS_Pr,
449 unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
452 static void SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
453 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
454 static void SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
455 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
456 static void SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
459 extern void SiS_SetReg(SISIOADDRESS, unsigned short, unsigned short);
460 extern void SiS_SetRegByte(SISIOADDRESS, unsigned short);
461 extern void SiS_SetRegShort(SISIOADDRESS, unsigned short);
462 extern void SiS_SetRegLong(SISIOADDRESS, unsigned int);
463 extern unsigned char SiS_GetReg(SISIOADDRESS, unsigned short);
464 extern unsigned char SiS_GetRegByte(SISIOADDRESS);
465 extern unsigned short SiS_GetRegShort(SISIOADDRESS);
466 extern unsigned int SiS_GetRegLong(SISIOADDRESS);
467 extern void SiS_SetRegANDOR(SISIOADDRESS, unsigned short, unsigned short, unsigned short);
468 extern void SiS_SetRegOR(SISIOADDRESS, unsigned short, unsigned short);
469 extern void SiS_SetRegAND(SISIOADDRESS, unsigned short, unsigned short);
470 extern void SiS_DisplayOff(struct SiS_Private *SiS_Pr);
471 extern void SiS_DisplayOn(struct SiS_Private *SiS_Pr);
472 extern BOOLEAN SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
473 extern unsigned short SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
474 unsigned short ModeIdIndex);
475 extern unsigned short SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
476 extern unsigned short SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
477 extern unsigned short SiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
478 unsigned short RefreshRateTableIndex);
479 extern void SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
480 unsigned short ModeIdIndex);
481 extern void SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
482 unsigned short ModeIdIndex);
483 extern void SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
484 extern unsigned short SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
485 extern unsigned short SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
487 extern void SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *tempbx,
488 unsigned short *tempcl);
489 extern unsigned short SiS_GetFIFOThresholdB300(unsigned short tempbx, unsigned short tempcl);
490 extern unsigned short SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
491 #ifdef SIS_LINUX_KERNEL
492 extern unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
493 extern unsigned int sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);