Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  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 bool            SiS_IsDualEdge(struct SiS_Private *SiS_Pr);
367 bool            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 bool            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  bool    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                                 bool 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                                 bool 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 bool             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
498 
  This page was automatically generated by the LXR engine.