blob: 2112d6d7feda02fb101a3fddf4d99b2c53b23bbb [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/* $XFree86$ */
2/* $XdotOrg$ */
3/*
4 * Data and prototypes for init301.c
5 *
Thomas Winischhofer544393f2005-09-09 13:04:45 -07006 * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
Linus Torvalds1da177e2005-04-16 15:20:36 -07007 *
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
Thomas Winischhofer544393f2005-09-09 13:04:45 -070053#ifndef _INIT301_H_
54#define _INIT301_H_
Linus Torvalds1da177e2005-04-16 15:20:36 -070055
Linus Torvalds1da177e2005-04-16 15:20:36 -070056#include "initdef.h"
57
Linus Torvalds1da177e2005-04-16 15:20:36 -070058#include "vgatypes.h"
59#include "vstruct.h"
60#ifdef SIS_CP
61#undef SIS_CP
62#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -070063#include <linux/types.h>
Thomas Winischhofer544393f2005-09-09 13:04:45 -070064#include <asm/io.h>
65#include <linux/fb.h>
Thomas Winischhofer544393f2005-09-09 13:04:45 -070066#include "sis.h"
Linus Torvalds1da177e2005-04-16 15:20:36 -070067#include <video/sisfb.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070068
Thomas Winischhofer544393f2005-09-09 13:04:45 -070069static const unsigned char SiS_YPbPrTable[3][64] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -070070 {
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 {
Thomas Winischhofer544393f2005-09-09 13:04:45 -070081 0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
Linus Torvalds1da177e2005-04-16 15:20:36 -070082 0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
83 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
Thomas Winischhofer544393f2005-09-09 13:04:45 -070084 0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
Linus Torvalds1da177e2005-04-16 15:20:36 -070085 0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
Thomas Winischhofer544393f2005-09-09 13:04:45 -070086 0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
87 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
Linus Torvalds1da177e2005-04-16 15:20:36 -070088 0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
89 },
90 {
Thomas Winischhofer544393f2005-09-09 13:04:45 -070091#if 0 /* OK, but sticks to left edge */
Linus Torvalds1da177e2005-04-16 15:20:36 -070092 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700101#if 1 /* Perfect */
102 0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
Linus Torvalds1da177e2005-04-16 15:20:36 -0700103 0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
104 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700105 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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700110#endif
111 }
112};
113
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700114static 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
136static const unsigned char SiS_HiTVGroup3_1[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700137 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700147static const unsigned char SiS_HiTVGroup3_2[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700148 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700160static const unsigned char SiS_Part2CLVX_1[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700161 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700168static const unsigned char SiS_Part2CLVX_2[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700169 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700176static const unsigned char SiS_Part2CLVX_3[] = { /* NTSC, 525i, 525p */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700177 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700195static const unsigned char SiS_Part2CLVX_4[] = { /* PAL */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700196 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700214static const unsigned char SiS_Part2CLVX_5[] = { /* 750p */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700215 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
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700223static const unsigned char SiS_Part2CLVX_6[] = { /* 1080i */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700224 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
Aaro Koskinenf7854e52010-11-19 21:58:47 +0000232#ifdef CONFIG_FB_SIS_315
Linus Torvalds1da177e2005-04-16 15:20:36 -0700233/* 661 et al LCD data structure (2.03.00) */
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700234static const unsigned char SiS_LCDStruct661[] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700235 /* 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,
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700262 /* 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
Linus Torvalds1da177e2005-04-16 15:20:36 -0700271};
272#endif
273
Aaro Koskinenf7854e52010-11-19 21:58:47 +0000274#ifdef CONFIG_FB_SIS_300
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700275static unsigned char SiS300_TrumpionData[14][80] = {
Linus Torvalds1da177e2005-04-16 15:20:36 -0700276 { 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,
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700310 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 }
Linus Torvalds1da177e2005-04-16 15:20:36 -0700347};
348#endif
349
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700350void SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700351void 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);
Richard Knutssonc30660ea2007-02-12 00:55:06 -0800354bool SiS_IsDualEdge(struct SiS_Private *SiS_Pr);
355bool SiS_IsVAMode(struct SiS_Private *SiS_Pr);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700356void 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);
Richard Knutssonc30660ea2007-02-12 00:55:06 -0800367bool SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700368void SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr);
369void SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700370
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700371void SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
372unsigned short SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
373void SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
374unsigned short SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempax);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700375void SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
376 unsigned char orval,unsigned short andval);
Aaro Koskinenf7854e52010-11-19 21:58:47 +0000377#ifdef CONFIG_FB_SIS_315
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700378static void SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
379static void SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
380static void SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
381static void SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
382void SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
383void SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700384#endif /* 315 */
385
Aaro Koskinenf7854e52010-11-19 21:58:47 +0000386#ifdef CONFIG_FB_SIS_300
Richard Knutssonc30660ea2007-02-12 00:55:06 -0800387static bool SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700388void SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700389#endif
390
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700391void SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
392unsigned short SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr);
393unsigned 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);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700396
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700397static unsigned short SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
398 int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
Richard Knutssonc30660ea2007-02-12 00:55:06 -0800399 bool checkcr32, unsigned int VBFlags2);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700400static unsigned short SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
401static unsigned short SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
402 unsigned char *buffer);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700403static void SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
404static unsigned short SiS_SetStart(struct SiS_Private *SiS_Pr);
405static unsigned short SiS_SetStop(struct SiS_Private *SiS_Pr);
406static unsigned short SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
407static unsigned short SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
408static unsigned short SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
409static unsigned short SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
410static unsigned short SiS_CheckACK(struct SiS_Private *SiS_Pr);
411static unsigned short SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
412static unsigned short SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
413static unsigned short SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
414static void SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
415static unsigned short SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
416
Aaro Koskinenf7854e52010-11-19 21:58:47 +0000417#ifdef CONFIG_FB_SIS_300
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700418static void SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
419 unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
420static void SetOEMLCDData2(struct SiS_Private *SiS_Pr,
421 unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
422#endif
Aaro Koskinenf7854e52010-11-19 21:58:47 +0000423#ifdef CONFIG_FB_SIS_315
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700424static void SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
425 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
426static void SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
427 unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
428static void SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
Linus Torvalds1da177e2005-04-16 15:20:36 -0700429#endif
430
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700431extern void SiS_DisplayOff(struct SiS_Private *SiS_Pr);
432extern void SiS_DisplayOn(struct SiS_Private *SiS_Pr);
Richard Knutssonc30660ea2007-02-12 00:55:06 -0800433extern bool SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700434extern unsigned short SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
435 unsigned short ModeIdIndex);
436extern unsigned short SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
437extern unsigned short SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
438extern unsigned short SiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
439 unsigned short RefreshRateTableIndex);
440extern void SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
441 unsigned short ModeIdIndex);
442extern void SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
443 unsigned short ModeIdIndex);
444extern void SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
445extern unsigned short SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
446extern unsigned short SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
Aaro Koskinenf7854e52010-11-19 21:58:47 +0000447#ifdef CONFIG_FB_SIS_300
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700448extern void SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *tempbx,
449 unsigned short *tempcl);
450extern unsigned short SiS_GetFIFOThresholdB300(unsigned short tempbx, unsigned short tempcl);
451extern unsigned short SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
Thomas Winischhofer544393f2005-09-09 13:04:45 -0700452extern unsigned int sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
453extern unsigned int sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
454#endif
Linus Torvalds1da177e2005-04-16 15:20:36 -0700455
456#endif