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