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