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