upload tizen1.0 source
[kernel/linux-2.6.36.git] / drivers / video / sis / init301.h
1 /* $XFree86$ */
2 /* $XdotOrg$ */
3 /*
4  * Data and prototypes for init301.c
5  *
6  * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
7  *
8  * If distributed as part of the Linux kernel, the following license terms
9  * apply:
10  *
11  * * This program is free software; you can redistribute it and/or modify
12  * * it under the terms of the GNU General Public License as published by
13  * * the Free Software Foundation; either version 2 of the named License,
14  * * or any later version.
15  * *
16  * * This program is distributed in the hope that it will be useful,
17  * * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * * GNU General Public License for more details.
20  * *
21  * * You should have received a copy of the GNU General Public License
22  * * along with this program; if not, write to the Free Software
23  * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
24  *
25  * Otherwise, the following license terms apply:
26  *
27  * * Redistribution and use in source and binary forms, with or without
28  * * modification, are permitted provided that the following conditions
29  * * are met:
30  * * 1) Redistributions of source code must retain the above copyright
31  * *    notice, this list of conditions and the following disclaimer.
32  * * 2) Redistributions in binary form must reproduce the above copyright
33  * *    notice, this list of conditions and the following disclaimer in the
34  * *    documentation and/or other materials provided with the distribution.
35  * * 3) The name of the author may not be used to endorse or promote products
36  * *    derived from this software without specific prior written permission.
37  * *
38  * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
39  * * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40  * * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
41  * * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
42  * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
43  * * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
44  * * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
45  * * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46  * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
47  * * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48  *
49  * Author:      Thomas Winischhofer <thomas@winischhofer.net>
50  *
51  */
52
53 #ifndef  _INIT301_H_
54 #define  _INIT301_H_
55
56 #include "osdef.h"
57 #include "initdef.h"
58
59 #ifdef SIS_XORG_XF86
60 #include "sis.h"
61 #include "sis_regs.h"
62 #endif
63
64 #ifdef SIS_LINUX_KERNEL
65 #include "vgatypes.h"
66 #include "vstruct.h"
67 #ifdef SIS_CP
68 #undef SIS_CP
69 #endif
70 #include <linux/types.h>
71 #include <asm/io.h>
72 #include <linux/fb.h>
73 #include "sis.h"
74 #include <video/sisfb.h>
75 #endif
76
77 static const unsigned char SiS_YPbPrTable[3][64] = {
78   {
79     0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
80     0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
81     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
82     0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
83     0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
84     0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40,
85     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/,
86     0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
87   },
88   {
89     0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
90     0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
91     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
92     0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
93     0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
94     0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
95     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
96     0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
97   },
98   {
99 #if 0 /* OK, but sticks to left edge */
100     0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
101     0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
102     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
103     0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
104     0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
105     0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
106     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
107     0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
108 #endif
109 #if 1 /* Perfect */
110     0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
111     0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
112     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
113     0xed,0x50,0x70,0x9f,0x16,0x59,0x60,0x13,
114     0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
115     0x4b,0x4b,0x6f,0x2f,0x63,0x92,0x0f,0x40,
116     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x73,
117     0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
118 #endif
119   }
120 };
121
122 static const unsigned char SiS_TVPhase[] =
123 {
124         0x21,0xED,0xBA,0x08,    /* 0x00 SiS_NTSCPhase */
125         0x2A,0x05,0xE3,0x00,    /* 0x01 SiS_PALPhase */
126         0x21,0xE4,0x2E,0x9B,    /* 0x02 SiS_PALMPhase */
127         0x21,0xF4,0x3E,0xBA,    /* 0x03 SiS_PALNPhase */
128         0x1E,0x8B,0xA2,0xA7,
129         0x1E,0x83,0x0A,0xE0,    /* 0x05 SiS_SpecialPhaseM */
130         0x00,0x00,0x00,0x00,
131         0x00,0x00,0x00,0x00,
132         0x21,0xF0,0x7B,0xD6,    /* 0x08 SiS_NTSCPhase2 */
133         0x2A,0x09,0x86,0xE9,    /* 0x09 SiS_PALPhase2 */
134         0x21,0xE6,0xEF,0xA4,    /* 0x0a SiS_PALMPhase2 */
135         0x21,0xF6,0x94,0x46,    /* 0x0b SiS_PALNPhase2 */
136         0x1E,0x8B,0xA2,0xA7,
137         0x1E,0x83,0x0A,0xE0,    /* 0x0d SiS_SpecialPhaseM */
138         0x00,0x00,0x00,0x00,
139         0x00,0x00,0x00,0x00,
140         0x1e,0x8c,0x5c,0x7a,    /* 0x10 SiS_SpecialPhase */
141         0x25,0xd4,0xfd,0x5e     /* 0x11 SiS_SpecialPhaseJ */
142 };
143
144 static const unsigned char SiS_HiTVGroup3_1[] = {
145     0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
146     0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
147     0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
148     0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
149     0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
150     0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
151     0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
152     0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
153 };
154
155 static const unsigned char SiS_HiTVGroup3_2[] = {
156     0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
157     0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
158     0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
159     0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
160     0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
161     0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
162     0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
163     0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
164 };
165
166 /* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
167
168 static const unsigned char SiS_Part2CLVX_1[] = {
169     0x00,0x00,
170     0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
171     0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
172     0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
173     0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
174 };
175
176 static const unsigned char SiS_Part2CLVX_2[] = {
177     0x00,0x00,
178     0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
179     0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
180     0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
181     0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
182 };
183
184 static const unsigned char SiS_Part2CLVX_3[] = {  /* NTSC, 525i, 525p */
185     0xE0,0x01,
186     0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D,
187     0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C,
188     0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E,
189     0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02,
190     0x58,0x02,
191     0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E,
192     0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F,
193     0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03,
194     0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06,
195     0x00,0x03,
196     0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01,
197     0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03,
198     0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06,
199     0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08,
200     0xFF,0xFF
201 };
202
203 static const unsigned char SiS_Part2CLVX_4[] = {   /* PAL */
204     0x58,0x02,
205     0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
206     0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
207     0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
208     0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
209     0x00,0x03,
210     0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F,
211     0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01,
212     0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04,
213     0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07,
214     0x40,0x02,
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 static const unsigned char SiS_Part2CLVX_5[] = {   /* 750p */
223     0x00,0x03,
224     0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
225     0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
226     0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
227     0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
228     0xFF,0xFF
229 };
230
231 static const unsigned char SiS_Part2CLVX_6[] = {   /* 1080i */
232     0x00,0x04,
233     0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
234     0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
235     0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
236     0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
237     0xFF,0xFF,
238 };
239
240 #ifdef SIS315H
241 /* 661 et al LCD data structure (2.03.00) */
242 static const unsigned char SiS_LCDStruct661[] = {
243     /* 1024x768 */
244 /*  type|CR37|   HDE   |   VDE   |    HT   |    VT   |   hss    | hse   */
245     0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
246     0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
247     /*  | vss     |    vse  |clck|  clock  |CRT2DataP|CRT2DataP|idx     */
248     /*                                        VESA    non-VESA  noscale */
249     /* 1280x1024 */
250     0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
251     0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
252     /* 1400x1050 */
253     0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
254     0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
255     /* 1600x1200 */
256     0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
257     0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
258     /* 1280x768 (_2) */
259     0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
260     0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
261     /* 1280x720 */
262     0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
263     0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
264     /* 1280x800 (_2) */
265     0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
266     0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
267     /* 1680x1050 */
268     0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
269     0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
270     /* 1280x800_3 */
271     0x0C,0xE0,0x00,0x05,0x20,0x03,0xAA,0x05,0x2E,0x03,0x30,0x00,0x50,
272     0x00,0x04,0x00,0x03,0x00,0x47,0xA9,0x10,0x00,0x00,0x00,0x00,0x07,
273     /* 800x600 */
274     0x01,0xC0,0x20,0x03,0x58,0x02,0x20,0x04,0x74,0x02,0x2A,0x00,0x80,
275     0x00,0x06,0x00,0x04,0x00,0x28,0x63,0x4B,0x00,0x00,0x00,0x00,0x00,
276     /* 1280x854 */
277     0x08,0xE0,0x00,0x05,0x56,0x03,0x80,0x06,0x5d,0x03,0x10,0x00,0x70,
278     0x00,0x01,0x00,0x03,0x00,0x54,0x75,0x13,0x00,0x00,0x00,0x00,0x08
279 };
280 #endif
281
282 #ifdef SIS300
283 static unsigned char SiS300_TrumpionData[14][80] = {
284   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
285     0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
286     0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
287     0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
288     0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
289   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
290     0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
291     0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
292     0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
293     0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
294   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
295     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
296     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
297     0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
298     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
299   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
300     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
301     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
302     0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
303     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
304   { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
305     0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
306     0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
307     0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
308     0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
309   { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
310     0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
311     0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
312     0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
313     0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
314   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
315     0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
316     0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
317     0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
318     0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
319   /* variant 2 */
320   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
321     0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
322     0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
323     0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
324     0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
325   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
326     0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
327     0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
328     0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
329     0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
330   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
331     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
332     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
333     0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
334     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
335   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
336     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
337     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
338     0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
339     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
340   { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
341     0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
342     0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
343     0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
344     0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
345   { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
346     0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
347     0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
348     0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
349     0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
350   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
351     0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
352     0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
353     0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
354     0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 }
355 };
356 #endif
357
358 void            SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
359 #ifndef SIS_LINUX_KERNEL
360 void            SiS_LockCRT2(struct SiS_Private *SiS_Pr);
361 #endif
362 void            SiS_EnableCRT2(struct SiS_Private *SiS_Pr);
363 unsigned short  SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
364 void            SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
365 bool            SiS_IsDualEdge(struct SiS_Private *SiS_Pr);
366 bool            SiS_IsVAMode(struct SiS_Private *SiS_Pr);
367 void            SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
368                         unsigned short ModeIdIndex, int checkcrt2mode);
369 void            SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
370 void            SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
371                         unsigned short ModeIdIndex);
372 void            SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
373                 unsigned short ModeIdIndex);
374 unsigned short  SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
375                         unsigned short RefreshRateTableIndex);
376 unsigned short  SiS_GetResInfo(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex);
377 void            SiS_DisableBridge(struct SiS_Private *SiS_Pr);
378 #ifndef SIS_LINUX_KERNEL
379 void            SiS_EnableBridge(struct SiS_Private *SiS_Pr);
380 #endif
381 bool            SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
382 void            SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr);
383 void            SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr);
384
385 void            SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
386 unsigned short  SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
387 void            SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
388 unsigned short  SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempax);
389 #ifndef SIS_LINUX_KERNEL
390 void            SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
391 unsigned short  SiS_GetCH70xx(struct SiS_Private *SiS_Pr, unsigned short tempax);
392 #endif
393 void            SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
394                         unsigned char orval,unsigned short andval);
395 #ifdef SIS315H
396 static void     SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
397 static void     SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
398 static void     SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
399 static void     SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
400 void            SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
401 void            SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
402 #endif /* 315 */
403
404 #ifdef SIS300
405 static  bool    SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
406 void            SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
407 #endif
408
409 void            SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
410 unsigned short  SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr);
411 unsigned short  SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
412                         unsigned short adaptnum, unsigned short DDCdatatype,
413                         unsigned char *buffer, unsigned int VBFlags2);
414
415 #ifdef SIS_XORG_XF86
416 unsigned short          SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
417                                 int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
418                                 bool checkcr32, unsigned int VBFlags2);
419 unsigned short          SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
420 unsigned short          SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
421                                 unsigned char *buffer);
422 #else
423 static unsigned short   SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
424                                 int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
425                                 bool checkcr32, unsigned int VBFlags2);
426 static unsigned short   SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
427 static unsigned short   SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
428                                 unsigned char *buffer);
429 #endif
430 static void             SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
431 static unsigned short   SiS_SetStart(struct SiS_Private *SiS_Pr);
432 static unsigned short   SiS_SetStop(struct SiS_Private *SiS_Pr);
433 static unsigned short   SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
434 static unsigned short   SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
435 static unsigned short   SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
436 static unsigned short   SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
437 static unsigned short   SiS_CheckACK(struct SiS_Private *SiS_Pr);
438 static unsigned short   SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
439 static unsigned short   SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
440 static unsigned short   SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
441 static void             SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
442 static unsigned short   SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
443
444 #ifdef SIS300
445 static void             SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
446                                 unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
447 static void             SetOEMLCDData2(struct SiS_Private *SiS_Pr,
448                                 unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
449 #endif
450 #ifdef SIS315H
451 static void             SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
452                                 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
453 static void             SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
454                                 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
455 static void             SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
456 #endif
457
458 extern void             SiS_SetReg(SISIOADDRESS, unsigned short, unsigned short);
459 extern void             SiS_SetRegByte(SISIOADDRESS, unsigned short);
460 extern void             SiS_SetRegShort(SISIOADDRESS, unsigned short);
461 extern void             SiS_SetRegLong(SISIOADDRESS, unsigned int);
462 extern unsigned char    SiS_GetReg(SISIOADDRESS, unsigned short);
463 extern unsigned char    SiS_GetRegByte(SISIOADDRESS);
464 extern unsigned short   SiS_GetRegShort(SISIOADDRESS);
465 extern unsigned int     SiS_GetRegLong(SISIOADDRESS);
466 extern void             SiS_SetRegANDOR(SISIOADDRESS, unsigned short, unsigned short, unsigned short);
467 extern void             SiS_SetRegOR(SISIOADDRESS, unsigned short, unsigned short);
468 extern void             SiS_SetRegAND(SISIOADDRESS, unsigned short, unsigned short);
469 extern void             SiS_DisplayOff(struct SiS_Private *SiS_Pr);
470 extern void             SiS_DisplayOn(struct SiS_Private *SiS_Pr);
471 extern bool             SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
472 extern unsigned short   SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
473                                 unsigned short ModeIdIndex);
474 extern unsigned short   SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
475 extern unsigned short   SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
476 extern unsigned short   SiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
477                                 unsigned short RefreshRateTableIndex);
478 extern void             SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
479                                 unsigned short ModeIdIndex);
480 extern void             SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
481                                 unsigned short ModeIdIndex);
482 extern void             SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
483 extern unsigned short   SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
484 extern unsigned short   SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
485 #ifdef SIS300
486 extern void             SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *tempbx,
487                                 unsigned short *tempcl);
488 extern unsigned short   SiS_GetFIFOThresholdB300(unsigned short tempbx, unsigned short tempcl);
489 extern unsigned short   SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
490 #ifdef SIS_LINUX_KERNEL
491 extern unsigned int     sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
492 extern unsigned int     sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
493 #endif
494 #endif
495
496 #endif