Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
init301.h
Go to the documentation of this file.
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 <[email protected]>
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_DisplayOff(struct SiS_Private *SiS_Pr);
432 extern void SiS_DisplayOn(struct SiS_Private *SiS_Pr);
433 extern bool SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
434 extern unsigned short SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
435  unsigned short ModeIdIndex);
436 extern unsigned short SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
437 extern unsigned short SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
438 extern unsigned short SiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
439  unsigned short RefreshRateTableIndex);
440 extern void SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
441  unsigned short ModeIdIndex);
442 extern void SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
443  unsigned short ModeIdIndex);
444 extern void SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
445 extern unsigned short SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
446 extern unsigned short SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
447 #ifdef CONFIG_FB_SIS_300
448 extern void SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *tempbx,
449  unsigned short *tempcl);
450 extern unsigned short SiS_GetFIFOThresholdB300(unsigned short tempbx, unsigned short tempcl);
451 extern unsigned short SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
452 extern unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
453 extern unsigned int sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
454 #endif
455 
456 #endif