Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
[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-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/version.h>
71 #include <linux/types.h>
72 #include <asm/io.h>
73 #include <linux/fb.h>
74 #include "sis.h"
75 #include <video/sisfb.h>
76 #endif
77
78 static const unsigned char SiS_YPbPrTable[3][64] = {
79   {
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
88   },
89   {
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
98   },
99   {
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
109 #endif
110 #if 1 /* Perfect */
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
119 #endif
120   }
121 };
122
123 static const unsigned char SiS_TVPhase[] =
124 {
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 */
129         0x1E,0x8B,0xA2,0xA7,
130         0x1E,0x83,0x0A,0xE0,    /* 0x05 SiS_SpecialPhaseM */
131         0x00,0x00,0x00,0x00,
132         0x00,0x00,0x00,0x00,
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 */
137         0x1E,0x8B,0xA2,0xA7,
138         0x1E,0x83,0x0A,0xE0,    /* 0x0d SiS_SpecialPhaseM */
139         0x00,0x00,0x00,0x00,
140         0x00,0x00,0x00,0x00,
141         0x1e,0x8c,0x5c,0x7a,    /* 0x10 SiS_SpecialPhase */
142         0x25,0xd4,0xfd,0x5e     /* 0x11 SiS_SpecialPhaseJ */
143 };
144
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
154 };
155
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
165 };
166
167 /* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
168
169 static const unsigned char SiS_Part2CLVX_1[] = {
170     0x00,0x00,
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
175 };
176
177 static const unsigned char SiS_Part2CLVX_2[] = {
178     0x00,0x00,
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
183 };
184
185 static const unsigned char SiS_Part2CLVX_3[] = {  /* NTSC, 525i, 525p */
186     0xE0,0x01,
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,
191     0x58,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,
196     0x00,0x03,
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,
201     0xFF,0xFF
202 };
203
204 static const unsigned char SiS_Part2CLVX_4[] = {   /* PAL */
205     0x58,0x02,
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     0x00,0x03,
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,
215     0x40,0x02,
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,
220     0xFF,0xFF
221 };
222
223 static const unsigned char SiS_Part2CLVX_5[] = {   /* 750p */
224     0x00,0x03,
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,
229     0xFF,0xFF
230 };
231
232 static const unsigned char SiS_Part2CLVX_6[] = {   /* 1080i */
233     0x00,0x04,
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,
238     0xFF,0xFF,
239 };
240
241 #ifdef SIS315H
242 /* 661 et al LCD data structure (2.03.00) */
243 static const unsigned char SiS_LCDStruct661[] = {
244     /* 1024x768 */
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 */
250     /* 1280x1024 */
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,
253     /* 1400x1050 */
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,
256     /* 1600x1200 */
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,
259     /* 1280x768 (_2) */
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,
262     /* 1280x720 */
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,
265     /* 1280x800 (_2) */
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,
268     /* 1680x1050 */
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,
271     /* 1280x800_3 */
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,
274     /* 800x600 */
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,
277     /* 1280x854 */
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
280 };
281 #endif
282
283 #ifdef SIS300
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 },
320   /* variant 2 */
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 }
356 };
357 #endif
358
359 void            SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
360 #ifndef SIS_LINUX_KERNEL
361 void            SiS_LockCRT2(struct SiS_Private *SiS_Pr);
362 #endif
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);
381 #endif
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);
385
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);
393 #endif
394 void            SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
395                         unsigned char orval,unsigned short andval);
396 #ifdef SIS315H
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);
403 #endif /* 315 */
404
405 #ifdef SIS300
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);
408 #endif
409
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);
415
416 #ifdef SIS_XORG_XF86
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);
423 #else
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);
430 #endif
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);
444
445 #ifdef SIS300
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);
450 #endif
451 #ifdef SIS315H
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);
457 #endif
458
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);
486 #ifdef SIS300
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);
494 #endif
495 #endif
496
497 #endif