]> git.karo-electronics.de Git - linux-beck.git/blob - drivers/video/sis/init301.h
sisfb: use CONFIG_FB_SIS_301/315 instead of SIS301/315H
[linux-beck.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 #include "vgatypes.h"
60 #include "vstruct.h"
61 #ifdef SIS_CP
62 #undef SIS_CP
63 #endif
64 #include <linux/types.h>
65 #include <asm/io.h>
66 #include <linux/fb.h>
67 #include "sis.h"
68 #include <video/sisfb.h>
69
70 static const unsigned char SiS_YPbPrTable[3][64] = {
71   {
72     0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
73     0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
74     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
75     0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
76     0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
77     0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40,
78     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/,
79     0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
80   },
81   {
82     0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
83     0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
84     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
85     0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
86     0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
87     0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
88     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
89     0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
90   },
91   {
92 #if 0 /* OK, but sticks to left edge */
93     0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
94     0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
95     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
96     0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
97     0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
98     0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
99     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
100     0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
101 #endif
102 #if 1 /* Perfect */
103     0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
104     0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
105     0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
106     0xed,0x50,0x70,0x9f,0x16,0x59,0x60,0x13,
107     0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
108     0x4b,0x4b,0x6f,0x2f,0x63,0x92,0x0f,0x40,
109     0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x73,
110     0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
111 #endif
112   }
113 };
114
115 static const unsigned char SiS_TVPhase[] =
116 {
117         0x21,0xED,0xBA,0x08,    /* 0x00 SiS_NTSCPhase */
118         0x2A,0x05,0xE3,0x00,    /* 0x01 SiS_PALPhase */
119         0x21,0xE4,0x2E,0x9B,    /* 0x02 SiS_PALMPhase */
120         0x21,0xF4,0x3E,0xBA,    /* 0x03 SiS_PALNPhase */
121         0x1E,0x8B,0xA2,0xA7,
122         0x1E,0x83,0x0A,0xE0,    /* 0x05 SiS_SpecialPhaseM */
123         0x00,0x00,0x00,0x00,
124         0x00,0x00,0x00,0x00,
125         0x21,0xF0,0x7B,0xD6,    /* 0x08 SiS_NTSCPhase2 */
126         0x2A,0x09,0x86,0xE9,    /* 0x09 SiS_PALPhase2 */
127         0x21,0xE6,0xEF,0xA4,    /* 0x0a SiS_PALMPhase2 */
128         0x21,0xF6,0x94,0x46,    /* 0x0b SiS_PALNPhase2 */
129         0x1E,0x8B,0xA2,0xA7,
130         0x1E,0x83,0x0A,0xE0,    /* 0x0d SiS_SpecialPhaseM */
131         0x00,0x00,0x00,0x00,
132         0x00,0x00,0x00,0x00,
133         0x1e,0x8c,0x5c,0x7a,    /* 0x10 SiS_SpecialPhase */
134         0x25,0xd4,0xfd,0x5e     /* 0x11 SiS_SpecialPhaseJ */
135 };
136
137 static const unsigned char SiS_HiTVGroup3_1[] = {
138     0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
139     0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
140     0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
141     0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
142     0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
143     0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
144     0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
145     0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
146 };
147
148 static const unsigned char SiS_HiTVGroup3_2[] = {
149     0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
150     0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
151     0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
152     0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
153     0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
154     0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
155     0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
156     0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
157 };
158
159 /* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
160
161 static const unsigned char SiS_Part2CLVX_1[] = {
162     0x00,0x00,
163     0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
164     0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
165     0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
166     0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
167 };
168
169 static const unsigned char SiS_Part2CLVX_2[] = {
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_3[] = {  /* NTSC, 525i, 525p */
178     0xE0,0x01,
179     0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D,
180     0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C,
181     0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E,
182     0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02,
183     0x58,0x02,
184     0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E,
185     0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F,
186     0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03,
187     0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06,
188     0x00,0x03,
189     0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01,
190     0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03,
191     0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06,
192     0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08,
193     0xFF,0xFF
194 };
195
196 static const unsigned char SiS_Part2CLVX_4[] = {   /* PAL */
197     0x58,0x02,
198     0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
199     0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
200     0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
201     0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
202     0x00,0x03,
203     0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F,
204     0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01,
205     0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04,
206     0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07,
207     0x40,0x02,
208     0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
209     0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
210     0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
211     0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
212     0xFF,0xFF
213 };
214
215 static const unsigned char SiS_Part2CLVX_5[] = {   /* 750p */
216     0x00,0x03,
217     0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
218     0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
219     0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
220     0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
221     0xFF,0xFF
222 };
223
224 static const unsigned char SiS_Part2CLVX_6[] = {   /* 1080i */
225     0x00,0x04,
226     0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
227     0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
228     0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
229     0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
230     0xFF,0xFF,
231 };
232
233 #ifdef CONFIG_FB_SIS_315
234 /* 661 et al LCD data structure (2.03.00) */
235 static const unsigned char SiS_LCDStruct661[] = {
236     /* 1024x768 */
237 /*  type|CR37|   HDE   |   VDE   |    HT   |    VT   |   hss    | hse   */
238     0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
239     0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
240     /*  | vss     |    vse  |clck|  clock  |CRT2DataP|CRT2DataP|idx     */
241     /*                                        VESA    non-VESA  noscale */
242     /* 1280x1024 */
243     0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
244     0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
245     /* 1400x1050 */
246     0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
247     0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
248     /* 1600x1200 */
249     0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
250     0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
251     /* 1280x768 (_2) */
252     0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
253     0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
254     /* 1280x720 */
255     0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
256     0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
257     /* 1280x800 (_2) */
258     0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
259     0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
260     /* 1680x1050 */
261     0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
262     0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
263     /* 1280x800_3 */
264     0x0C,0xE0,0x00,0x05,0x20,0x03,0xAA,0x05,0x2E,0x03,0x30,0x00,0x50,
265     0x00,0x04,0x00,0x03,0x00,0x47,0xA9,0x10,0x00,0x00,0x00,0x00,0x07,
266     /* 800x600 */
267     0x01,0xC0,0x20,0x03,0x58,0x02,0x20,0x04,0x74,0x02,0x2A,0x00,0x80,
268     0x00,0x06,0x00,0x04,0x00,0x28,0x63,0x4B,0x00,0x00,0x00,0x00,0x00,
269     /* 1280x854 */
270     0x08,0xE0,0x00,0x05,0x56,0x03,0x80,0x06,0x5d,0x03,0x10,0x00,0x70,
271     0x00,0x01,0x00,0x03,0x00,0x54,0x75,0x13,0x00,0x00,0x00,0x00,0x08
272 };
273 #endif
274
275 #ifdef CONFIG_FB_SIS_300
276 static unsigned char SiS300_TrumpionData[14][80] = {
277   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
278     0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
279     0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
280     0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
281     0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
282   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
283     0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
284     0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
285     0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
286     0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
287   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
288     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
289     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
290     0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
291     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
292   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
293     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
294     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
295     0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
296     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
297   { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
298     0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
299     0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
300     0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
301     0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
302   { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
303     0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
304     0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
305     0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
306     0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
307   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
308     0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
309     0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
310     0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
311     0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
312   /* variant 2 */
313   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
314     0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
315     0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
316     0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
317     0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
318   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
319     0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
320     0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
321     0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
322     0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
323   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
324     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
325     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
326     0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
327     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
328   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
329     0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
330     0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
331     0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
332     0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
333   { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
334     0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
335     0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
336     0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
337     0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
338   { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
339     0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
340     0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
341     0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
342     0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
343   { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
344     0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
345     0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
346     0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
347     0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 }
348 };
349 #endif
350
351 void            SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
352 void            SiS_EnableCRT2(struct SiS_Private *SiS_Pr);
353 unsigned short  SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
354 void            SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
355 bool            SiS_IsDualEdge(struct SiS_Private *SiS_Pr);
356 bool            SiS_IsVAMode(struct SiS_Private *SiS_Pr);
357 void            SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
358                         unsigned short ModeIdIndex, int checkcrt2mode);
359 void            SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
360 void            SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
361                         unsigned short ModeIdIndex);
362 void            SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
363                 unsigned short ModeIdIndex);
364 unsigned short  SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
365                         unsigned short RefreshRateTableIndex);
366 unsigned short  SiS_GetResInfo(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex);
367 void            SiS_DisableBridge(struct SiS_Private *SiS_Pr);
368 bool            SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
369 void            SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr);
370 void            SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr);
371
372 void            SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
373 unsigned short  SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
374 void            SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
375 unsigned short  SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempax);
376 void            SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
377                         unsigned char orval,unsigned short andval);
378 #ifdef CONFIG_FB_SIS_315
379 static void     SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
380 static void     SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
381 static void     SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
382 static void     SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
383 void            SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
384 void            SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
385 #endif /* 315 */
386
387 #ifdef CONFIG_FB_SIS_300
388 static  bool    SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
389 void            SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
390 #endif
391
392 void            SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
393 unsigned short  SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr);
394 unsigned short  SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
395                         unsigned short adaptnum, unsigned short DDCdatatype,
396                         unsigned char *buffer, unsigned int VBFlags2);
397
398 static unsigned short   SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
399                                 int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
400                                 bool checkcr32, unsigned int VBFlags2);
401 static unsigned short   SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
402 static unsigned short   SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
403                                 unsigned char *buffer);
404 static void             SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
405 static unsigned short   SiS_SetStart(struct SiS_Private *SiS_Pr);
406 static unsigned short   SiS_SetStop(struct SiS_Private *SiS_Pr);
407 static unsigned short   SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
408 static unsigned short   SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
409 static unsigned short   SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
410 static unsigned short   SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
411 static unsigned short   SiS_CheckACK(struct SiS_Private *SiS_Pr);
412 static unsigned short   SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
413 static unsigned short   SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
414 static unsigned short   SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
415 static void             SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
416 static unsigned short   SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
417
418 #ifdef CONFIG_FB_SIS_300
419 static void             SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
420                                 unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
421 static void             SetOEMLCDData2(struct SiS_Private *SiS_Pr,
422                                 unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
423 #endif
424 #ifdef CONFIG_FB_SIS_315
425 static void             SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
426                                 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
427 static void             SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
428                                 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
429 static void             SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
430 #endif
431
432 extern void             SiS_SetReg(SISIOADDRESS, unsigned short, unsigned short);
433 extern void             SiS_SetRegByte(SISIOADDRESS, unsigned short);
434 extern void             SiS_SetRegShort(SISIOADDRESS, unsigned short);
435 extern void             SiS_SetRegLong(SISIOADDRESS, unsigned int);
436 extern unsigned char    SiS_GetReg(SISIOADDRESS, unsigned short);
437 extern unsigned char    SiS_GetRegByte(SISIOADDRESS);
438 extern unsigned short   SiS_GetRegShort(SISIOADDRESS);
439 extern unsigned int     SiS_GetRegLong(SISIOADDRESS);
440 extern void             SiS_SetRegANDOR(SISIOADDRESS, unsigned short, unsigned short, unsigned short);
441 extern void             SiS_SetRegOR(SISIOADDRESS, unsigned short, unsigned short);
442 extern void             SiS_SetRegAND(SISIOADDRESS, unsigned short, unsigned short);
443 extern void             SiS_DisplayOff(struct SiS_Private *SiS_Pr);
444 extern void             SiS_DisplayOn(struct SiS_Private *SiS_Pr);
445 extern bool             SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
446 extern unsigned short   SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
447                                 unsigned short ModeIdIndex);
448 extern unsigned short   SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
449 extern unsigned short   SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
450 extern unsigned short   SiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
451                                 unsigned short RefreshRateTableIndex);
452 extern void             SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
453                                 unsigned short ModeIdIndex);
454 extern void             SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
455                                 unsigned short ModeIdIndex);
456 extern void             SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
457 extern unsigned short   SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
458 extern unsigned short   SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
459 #ifdef CONFIG_FB_SIS_300
460 extern void             SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *tempbx,
461                                 unsigned short *tempcl);
462 extern unsigned short   SiS_GetFIFOThresholdB300(unsigned short tempbx, unsigned short tempcl);
463 extern unsigned short   SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
464 extern unsigned int     sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
465 extern unsigned int     sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
466 #endif
467
468 #endif