Linux-2.6.12-rc2
[pandora-kernel.git] / drivers / video / sis / init301.h
1 /* $XFree86$ */
2 /* $XdotOrg$ */
3 /*
4  * Data and prototypes for init301.c
5  *
6  * Copyright (C) 2001-2004 by Thomas Winischhofer, Vienna, Austria
7  *
8  * If distributed as part of the Linux kernel, the following license terms
9  * apply:
10  *
11  * * This program is free software; you can redistribute it and/or modify
12  * * it under the terms of the GNU General Public License as published by
13  * * the Free Software Foundation; either version 2 of the named License,
14  * * or any later version.
15  * *
16  * * This program is distributed in the hope that it will be useful,
17  * * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * * GNU General Public License for more details.
20  * *
21  * * You should have received a copy of the GNU General Public License
22  * * along with this program; if not, write to the Free Software
23  * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
24  *
25  * Otherwise, the following license terms apply:
26  *
27  * * Redistribution and use in source and binary forms, with or without
28  * * modification, are permitted provided that the following conditions
29  * * are met:
30  * * 1) Redistributions of source code must retain the above copyright
31  * *    notice, this list of conditions and the following disclaimer.
32  * * 2) Redistributions in binary form must reproduce the above copyright
33  * *    notice, this list of conditions and the following disclaimer in the
34  * *    documentation and/or other materials provided with the distribution.
35  * * 3) The name of the author may not be used to endorse or promote products
36  * *    derived from this software without specific prior written permission.
37  * *
38  * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY 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  _INIT301_
54 #define  _INIT301_
55
56 #include "osdef.h"
57 #include "initdef.h"
58
59 #ifdef LINUX_XF86
60 #include "sis.h"
61 #include "sis_regs.h"
62 #endif
63
64 #ifdef LINUX_KERNEL
65 #include "vgatypes.h"
66 #include "vstruct.h"
67 #ifdef SIS_CP
68 #undef SIS_CP
69 #endif
70 #include <linux/config.h>
71 #include <linux/version.h>
72 #include <asm/io.h>
73 #include <linux/types.h>
74 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
75 #include <linux/sisfb.h>
76 #else
77 #include <video/sisfb.h>
78 #endif
79 #endif
80
81 static const UCHAR SiS_YPbPrTable[3][64] = {
82   {
83     0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
84     0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
85     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
86     0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
87     0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
88     0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40,
89     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/,
90     0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
91   },
92   {
93     0x1d,0x11,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
94     0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
95     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
96     0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4c /*0x4f*/,0x13,
97     0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
98     0x51,0x5e,0x60,0x57 /*0x49*/,0x7b /*0x7d*/,0x92,0x0f,0x40,
99     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4b,
100     0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
101   },
102   {
103 #if 1
104     0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
105     0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
106     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
107     0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
108     0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
109     0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
110     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
111     0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
112 #endif
113 #if 0
114     0x2a,0x14,0xe8,0x09,0x09,0xed,0x0c,0x0c,  /* TEST (0.93) - BAD */
115     0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
116     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
117     0xed,0x50,0x70,0x9e,0x16,0x57,0x6c,0x13,
118     0x27,0x0b,0x27,0xfb,0x30,0x27,0x15,0xb0,
119     0x3b,0xdb,0x61,0x24,0x78,0x92,0x0f,0xff,
120     0xff,0xff,0xff,0xff,0xff,0xff,0x14,0x6f,
121     0x00,0x52,0xbb,0x00,0xd5,0xf7,0xa2,0x00
122 #endif
123   }
124 };
125
126 static const UCHAR SiS_HiTVGroup3_1[] = {
127     0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
128     0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
129     0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
130     0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
131     0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
132     0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
133     0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
134     0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
135 };
136
137 static const UCHAR SiS_HiTVGroup3_2[] = {
138     0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
139     0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
140     0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
141     0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
142     0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
143     0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
144     0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
145     0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
146 };
147
148 /* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
149
150 static const UCHAR SiS_Part2CLVX_1[] = {
151     0x00,0x00,
152     0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
153     0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
154     0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
155     0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
156 };
157
158 static const UCHAR SiS_Part2CLVX_2[] = {
159     0x00,0x00,
160     0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
161     0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
162     0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
163     0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
164 };
165
166 static const UCHAR SiS_Part2CLVX_3[] = {  /* NTSC, 525i, 525p */
167     0xE0,0x01,
168     0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D,
169     0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C,
170     0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E,
171     0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02,
172     0x58,0x02,
173     0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E,
174     0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F,
175     0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03,
176     0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06,
177     0x00,0x03,
178     0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01,
179     0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03,
180     0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06,
181     0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08,
182     0xFF,0xFF
183 };
184
185 static const UCHAR SiS_Part2CLVX_4[] = {   /* PAL */
186     0x58,0x02,
187     0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
188     0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
189     0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
190     0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
191     0x00,0x03,
192     0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F,
193     0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01,
194     0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04,
195     0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07,
196     0x40,0x02,
197     0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
198     0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
199     0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
200     0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
201     0xFF,0xFF
202 };
203
204 static const UCHAR SiS_Part2CLVX_5[] = {   /* 750p */
205     0x00,0x03,
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,
210     0xFF,0xFF
211 };
212
213 static const UCHAR SiS_Part2CLVX_6[] = {   /* 1080i */
214     0x00,0x04,
215     0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
216     0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
217     0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
218     0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
219     0xFF,0xFF,
220 };
221
222 #ifdef SIS315H
223 /* 661 et al LCD data structure (2.03.00) */
224 static const UCHAR SiS_LCDStruct661[] = {
225     /* 1024x768 */
226 /*  type|CR37|   HDE   |   VDE   |    HT   |    VT   |   hss    | hse   */
227     0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
228     0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
229     /*  | vss     |    vse  |clck|  clock  |CRT2DataP|CRT2DataP|idx     */
230     /*                                        VESA    non-VESA  noscale */
231     /* 1280x1024 */
232     0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
233     0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
234     /* 1400x1050 */
235     0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
236     0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
237     /* 1600x1200 */
238     0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
239     0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
240     /* 1280x768 (_2) */
241     0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
242     0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
243     /* 1280x720 */
244     0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
245     0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
246     /* 1280x800 (_2) */
247     0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
248     0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
249     /* 1680x1050 */
250     0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
251     0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
252 };
253 #endif
254
255 #ifdef SIS300
256 static UCHAR SiS300_TrumpionData[7][80] = {
257   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
258     0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
259     0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
260     0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
261     0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
262   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
263     0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
264     0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
265     0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
266     0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
267   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
268     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
269     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
270     0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
271     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
272   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
273     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
274     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
275     0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
276     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
277   { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
278     0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
279     0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
280     0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
281     0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
282   { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
283     0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
284     0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
285     0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
286     0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
287   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
288     0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
289     0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
290     0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
291     0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 }
292 };
293 #endif
294
295 void    SiS_UnLockCRT2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
296 void    SiS_LockCRT2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
297 void    SiS_EnableCRT2(SiS_Private *SiS_Pr);
298 USHORT  SiS_GetRatePtr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo);
299 void    SiS_WaitRetrace1(SiS_Private *SiS_Pr);
300 BOOLEAN SiS_IsDualEdge(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
301 BOOLEAN SiS_IsVAMode(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
302 void    SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo);
303 void    SiS_GetVBInfo(SiS_Private *SiS_Pr, USHORT ModeNo,
304                 USHORT ModeIdIndex, PSIS_HW_INFO HwInfo,
305                 int checkcrt2mode);
306 void    SiS_SetYPbPr(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
307 void    SiS_SetTVMode(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo);
308 void    SiS_GetLCDResInfo(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo);
309 USHORT  SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,
310                 USHORT RefreshRateTableIndex, PSIS_HW_INFO HwInfo);
311 USHORT  SiS_GetResInfo(SiS_Private *SiS_Pr,USHORT ModeNo,USHORT ModeIdIndex);
312 void    SiS_DisableBridge(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
313 void    SiS_EnableBridge(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
314 BOOLEAN SiS_SetCRT2Group(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, USHORT ModeNo);
315 void    SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
316 void    SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
317
318 void    SiS_SetCH700x(SiS_Private *SiS_Pr, USHORT tempax);
319 USHORT  SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempax);
320 void    SiS_SetCH701x(SiS_Private *SiS_Pr, USHORT tempax);
321 USHORT  SiS_GetCH701x(SiS_Private *SiS_Pr, USHORT tempax);
322 void    SiS_SetCH70xx(SiS_Private *SiS_Pr, USHORT tempax);
323 USHORT  SiS_GetCH70xx(SiS_Private *SiS_Pr, USHORT tempax);
324 void    SiS_SetCH70xxANDOR(SiS_Private *SiS_Pr, USHORT tempax,USHORT tempbh);
325 #ifdef SIS315H
326 static void     SiS_Chrontel701xOn(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
327 static void     SiS_Chrontel701xOff(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
328 static void     SiS_ChrontelInitTVVSync(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
329 static void     SiS_ChrontelDoSomething1(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
330 void    SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo);
331 void    SiS_Chrontel701xBLOff(SiS_Private *SiS_Pr);
332 #endif /* 315 */
333
334 #ifdef SIS300
335 #if 0
336 static  void    SiS_SetTrumpReg(SiS_Private *SiS_Pr, USHORT tempbx);
337 static  USHORT  SiS_GetTrumpReg(SiS_Private *SiS_Pr, USHORT tempbx);
338 #endif
339 static  BOOLEAN SiS_SetTrumpionBlock(SiS_Private *SiS_Pr, UCHAR *dataptr);
340 #endif
341
342 void    SiS_DDC2Delay(SiS_Private *SiS_Pr, USHORT delaytime);
343 USHORT  SiS_ReadDDC1Bit(SiS_Private *SiS_Pr);
344 USHORT  SiS_HandleDDC(SiS_Private *SiS_Pr, ULONG VBFlags, int VGAEngine,
345                       USHORT adaptnum, USHORT DDCdatatype, UCHAR *buffer);
346 #ifdef LINUX_XF86
347 USHORT  SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS);
348 USHORT  SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SISPtr pSiS);
349 #endif
350
351 static void     SiS_SetSwitchDDC2(SiS_Private *SiS_Pr);
352 static USHORT   SiS_SetStart(SiS_Private *SiS_Pr);
353 static USHORT   SiS_SetStop(SiS_Private *SiS_Pr);
354 static USHORT   SiS_SetSCLKLow(SiS_Private *SiS_Pr);
355 static USHORT   SiS_SetSCLKHigh(SiS_Private *SiS_Pr);
356 static USHORT   SiS_ReadDDC2Data(SiS_Private *SiS_Pr, USHORT tempax);
357 static USHORT   SiS_WriteDDC2Data(SiS_Private *SiS_Pr, USHORT tempax);
358 static USHORT   SiS_CheckACK(SiS_Private *SiS_Pr);
359 static USHORT   SiS_InitDDCRegs(SiS_Private *SiS_Pr, ULONG VBFlags, int VGAEngine,
360                         USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32);
361 static USHORT   SiS_WriteDABDDC(SiS_Private *SiS_Pr);
362 static USHORT   SiS_PrepareReadDDC(SiS_Private *SiS_Pr);
363 static USHORT   SiS_PrepareDDC(SiS_Private *SiS_Pr);
364 static void     SiS_SendACK(SiS_Private *SiS_Pr, USHORT yesno);
365 static USHORT   SiS_DoProbeDDC(SiS_Private *SiS_Pr);
366 static USHORT   SiS_ProbeDDC(SiS_Private *SiS_Pr);
367 static USHORT   SiS_ReadDDC(SiS_Private *SiS_Pr, USHORT DDCdatatype, UCHAR *buffer);
368
369 #ifdef SIS315H
370 static void     SiS_OEM310Setting(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,
371                         USHORT ModeNo,USHORT ModeIdIndex, USHORT RRTI);
372 static void     SiS_OEM661Setting(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,
373                         USHORT ModeNo,USHORT ModeIdIndex, USHORT RRTI);
374 static void     SiS_FinalizeLCD(SiS_Private *, USHORT, USHORT, PSIS_HW_INFO);
375 #endif
376 #ifdef SIS300
377 static void     SiS_OEM300Setting(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,
378                         USHORT ModeNo, USHORT ModeIdIndex, USHORT RefTabindex);
379 static void     SetOEMLCDData2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,
380                         USHORT ModeNo, USHORT ModeIdIndex,USHORT RefTableIndex);
381 #endif
382
383 extern void     SiS_SetReg(SISIOADDRESS, USHORT, USHORT);
384 extern void     SiS_SetRegByte(SISIOADDRESS, USHORT);
385 extern void     SiS_SetRegShort(SISIOADDRESS, USHORT);
386 extern void     SiS_SetRegLong(SISIOADDRESS, ULONG);
387 extern UCHAR    SiS_GetReg(SISIOADDRESS, USHORT);
388 extern UCHAR    SiS_GetRegByte(SISIOADDRESS);
389 extern USHORT   SiS_GetRegShort(SISIOADDRESS);
390 extern ULONG    SiS_GetRegLong(SISIOADDRESS);
391 extern void     SiS_SetRegANDOR(SISIOADDRESS, USHORT, USHORT, USHORT);
392 extern void     SiS_SetRegOR(SISIOADDRESS, USHORT, USHORT);
393 extern void     SiS_SetRegAND(SISIOADDRESS, USHORT, USHORT);
394 extern void     SiS_DisplayOff(SiS_Private *SiS_Pr);
395 extern void     SiS_DisplayOn(SiS_Private *SiS_Pr);
396 extern BOOLEAN  SiS_SearchModeID(SiS_Private *, USHORT *, USHORT *);
397 extern UCHAR    SiS_GetModePtr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex);
398 extern USHORT   SiS_GetColorDepth(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex);
399 extern USHORT   SiS_GetOffset(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,
400                         USHORT RefreshRateTableIndex, PSIS_HW_INFO HwInfo);
401 extern void     SiS_LoadDAC(SiS_Private *SiS_Pr, PSIS_HW_INFO, USHORT ModeNo,
402                         USHORT ModeIdIndex);
403 extern void     SiS_CalcLCDACRT1Timing(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex);
404 #ifdef LINUX_XF86
405 extern void     SiS_MakeClockRegs(ScrnInfoPtr pScrn, int clock, UCHAR *p2b, UCHAR *p2c);
406 extern int      SiS_FindPanelFromDB(SISPtr pSiS, USHORT panelvendor, USHORT panelproduct,
407                         int *maxx, int *maxy, int *prefx, int *prefy);
408 #endif
409
410 #endif