~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to drivers/video/sis/init.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $XFree86$ */
 
2
/* $XdotOrg$ */
 
3
/*
 
4
 * Data and prototypes for init.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 _INIT_H_
 
54
#define _INIT_H_
 
55
 
 
56
#include "initdef.h"
 
57
 
 
58
#include "vgatypes.h"
 
59
#include "vstruct.h"
 
60
#ifdef SIS_CP
 
61
#undef SIS_CP
 
62
#endif
 
63
#include <linux/types.h>
 
64
#include <asm/io.h>
 
65
#include <linux/fb.h>
 
66
#include "sis.h"
 
67
#include <video/sisfb.h>
 
68
 
 
69
/* Mode numbers */
 
70
static const unsigned short ModeIndex_320x200[]      = {0x59, 0x41, 0x00, 0x4f};
 
71
static const unsigned short ModeIndex_320x240[]      = {0x50, 0x56, 0x00, 0x53};
 
72
static const unsigned short ModeIndex_320x240_FSTN[] = {0x5a, 0x5b, 0x00, 0x00};  /* FSTN */
 
73
static const unsigned short ModeIndex_400x300[]      = {0x51, 0x57, 0x00, 0x54};
 
74
static const unsigned short ModeIndex_512x384[]      = {0x52, 0x58, 0x00, 0x5c};
 
75
static const unsigned short ModeIndex_640x400[]      = {0x2f, 0x5d, 0x00, 0x5e};
 
76
static const unsigned short ModeIndex_640x480[]      = {0x2e, 0x44, 0x00, 0x62};
 
77
static const unsigned short ModeIndex_720x480[]      = {0x31, 0x33, 0x00, 0x35};
 
78
static const unsigned short ModeIndex_720x576[]      = {0x32, 0x34, 0x00, 0x36};
 
79
static const unsigned short ModeIndex_768x576[]      = {0x5f, 0x60, 0x00, 0x61};
 
80
static const unsigned short ModeIndex_800x480[]      = {0x70, 0x7a, 0x00, 0x76};
 
81
static const unsigned short ModeIndex_800x600[]      = {0x30, 0x47, 0x00, 0x63};
 
82
static const unsigned short ModeIndex_848x480[]      = {0x39, 0x3b, 0x00, 0x3e};
 
83
static const unsigned short ModeIndex_856x480[]      = {0x3f, 0x42, 0x00, 0x45};
 
84
static const unsigned short ModeIndex_960x540[]      = {0x1d, 0x1e, 0x00, 0x1f};  /* 315 series only */
 
85
static const unsigned short ModeIndex_960x600[]      = {0x20, 0x21, 0x00, 0x22};  /* 315 series only */
 
86
static const unsigned short ModeIndex_1024x768[]     = {0x38, 0x4a, 0x00, 0x64};
 
87
static const unsigned short ModeIndex_1024x576[]     = {0x71, 0x74, 0x00, 0x77};
 
88
static const unsigned short ModeIndex_1024x600[]     = {0x20, 0x21, 0x00, 0x22};  /* 300 series only */
 
89
static const unsigned short ModeIndex_1280x1024[]    = {0x3a, 0x4d, 0x00, 0x65};
 
90
static const unsigned short ModeIndex_1280x960[]     = {0x7c, 0x7d, 0x00, 0x7e};
 
91
static const unsigned short ModeIndex_1152x768[]     = {0x23, 0x24, 0x00, 0x25};  /* 300 series only */
 
92
static const unsigned short ModeIndex_1152x864[]     = {0x29, 0x2a, 0x00, 0x2b};
 
93
static const unsigned short ModeIndex_300_1280x768[] = {0x55, 0x5a, 0x00, 0x5b};
 
94
static const unsigned short ModeIndex_310_1280x768[] = {0x23, 0x24, 0x00, 0x25};
 
95
static const unsigned short ModeIndex_1280x720[]     = {0x79, 0x75, 0x00, 0x78};
 
96
static const unsigned short ModeIndex_1280x800[]     = {0x14, 0x15, 0x00, 0x16};
 
97
static const unsigned short ModeIndex_1280x854[]     = {0x1a, 0x1b, 0x00, 0x1c};
 
98
static const unsigned short ModeIndex_1360x768[]     = {0x48, 0x4b, 0x00, 0x4e};
 
99
static const unsigned short ModeIndex_300_1360x1024[]= {0x67, 0x6f, 0x00, 0x72};  /* 300 series, BARCO only */
 
100
static const unsigned short ModeIndex_1400x1050[]    = {0x26, 0x27, 0x00, 0x28};  /* 315 series only */
 
101
static const unsigned short ModeIndex_1680x1050[]    = {0x17, 0x18, 0x00, 0x19};  /* 315 series only */
 
102
static const unsigned short ModeIndex_1600x1200[]    = {0x3c, 0x3d, 0x00, 0x66};
 
103
static const unsigned short ModeIndex_1920x1080[]    = {0x2c, 0x2d, 0x00, 0x73};  /* 315 series only */
 
104
static const unsigned short ModeIndex_1920x1440[]    = {0x68, 0x69, 0x00, 0x6b};
 
105
static const unsigned short ModeIndex_300_2048x1536[]= {0x6c, 0x6d, 0x00, 0x00};
 
106
static const unsigned short ModeIndex_310_2048x1536[]= {0x6c, 0x6d, 0x00, 0x6e};
 
107
 
 
108
static const unsigned short SiS_DRAMType[17][5]={
 
109
        {0x0C,0x0A,0x02,0x40,0x39},
 
110
        {0x0D,0x0A,0x01,0x40,0x48},
 
111
        {0x0C,0x09,0x02,0x20,0x35},
 
112
        {0x0D,0x09,0x01,0x20,0x44},
 
113
        {0x0C,0x08,0x02,0x10,0x31},
 
114
        {0x0D,0x08,0x01,0x10,0x40},
 
115
        {0x0C,0x0A,0x01,0x20,0x34},
 
116
        {0x0C,0x09,0x01,0x08,0x32},
 
117
        {0x0B,0x08,0x02,0x08,0x21},
 
118
        {0x0C,0x08,0x01,0x08,0x30},
 
119
        {0x0A,0x08,0x02,0x04,0x11},
 
120
        {0x0B,0x0A,0x01,0x10,0x28},
 
121
        {0x09,0x08,0x02,0x02,0x01},
 
122
        {0x0B,0x09,0x01,0x08,0x24},
 
123
        {0x0B,0x08,0x01,0x04,0x20},
 
124
        {0x0A,0x08,0x01,0x02,0x10},
 
125
        {0x09,0x08,0x01,0x01,0x00}
 
126
};
 
127
 
 
128
static const unsigned short SiS_SDRDRAM_TYPE[13][5] =
 
129
{
 
130
        { 2,12, 9,64,0x35},
 
131
        { 1,13, 9,64,0x44},
 
132
        { 2,12, 8,32,0x31},
 
133
        { 2,11, 9,32,0x25},
 
134
        { 1,12, 9,32,0x34},
 
135
        { 1,13, 8,32,0x40},
 
136
        { 2,11, 8,16,0x21},
 
137
        { 1,12, 8,16,0x30},
 
138
        { 1,11, 9,16,0x24},
 
139
        { 1,11, 8, 8,0x20},
 
140
        { 2, 9, 8, 4,0x01},
 
141
        { 1,10, 8, 4,0x10},
 
142
        { 1, 9, 8, 2,0x00}
 
143
};
 
144
 
 
145
static const unsigned short SiS_DDRDRAM_TYPE[4][5] =
 
146
{
 
147
        { 2,12, 9,64,0x35},
 
148
        { 2,12, 8,32,0x31},
 
149
        { 2,11, 8,16,0x21},
 
150
        { 2, 9, 8, 4,0x01}
 
151
};
 
152
 
 
153
static const unsigned char SiS_MDA_DAC[] =
 
154
{
 
155
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
156
        0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
 
157
        0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
 
158
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
 
159
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
160
        0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
 
161
        0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
 
162
        0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
 
163
};
 
164
 
 
165
static const unsigned char SiS_CGA_DAC[] =
 
166
{
 
167
        0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
 
168
        0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
 
169
        0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
 
170
        0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
 
171
        0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
 
172
        0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
 
173
        0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
 
174
        0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F
 
175
};
 
176
 
 
177
static const unsigned char SiS_EGA_DAC[] =
 
178
{
 
179
        0x00,0x10,0x04,0x14,0x01,0x11,0x05,0x15,
 
180
        0x20,0x30,0x24,0x34,0x21,0x31,0x25,0x35,
 
181
        0x08,0x18,0x0C,0x1C,0x09,0x19,0x0D,0x1D,
 
182
        0x28,0x38,0x2C,0x3C,0x29,0x39,0x2D,0x3D,
 
183
        0x02,0x12,0x06,0x16,0x03,0x13,0x07,0x17,
 
184
        0x22,0x32,0x26,0x36,0x23,0x33,0x27,0x37,
 
185
        0x0A,0x1A,0x0E,0x1E,0x0B,0x1B,0x0F,0x1F,
 
186
        0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F
 
187
};
 
188
 
 
189
static const unsigned char SiS_VGA_DAC[] =
 
190
{
 
191
        0x00,0x10,0x04,0x14,0x01,0x11,0x09,0x15,
 
192
        0x2A,0x3A,0x2E,0x3E,0x2B,0x3B,0x2F,0x3F,
 
193
        0x00,0x05,0x08,0x0B,0x0E,0x11,0x14,0x18,
 
194
        0x1C,0x20,0x24,0x28,0x2D,0x32,0x38,0x3F,
 
195
        0x00,0x10,0x1F,0x2F,0x3F,0x1F,0x27,0x2F,
 
196
        0x37,0x3F,0x2D,0x31,0x36,0x3A,0x3F,0x00,
 
197
        0x07,0x0E,0x15,0x1C,0x0E,0x11,0x15,0x18,
 
198
        0x1C,0x14,0x16,0x18,0x1A,0x1C,0x00,0x04,
 
199
        0x08,0x0C,0x10,0x08,0x0A,0x0C,0x0E,0x10,
 
200
        0x0B,0x0C,0x0D,0x0F,0x10
 
201
};
 
202
 
 
203
static const struct SiS_St SiS_SModeIDTable[] =
 
204
{
 
205
        {0x01,0x9208,0x01,0x00,0x00,0x00,0x01,0x00,0x40},
 
206
        {0x01,0x1210,0x14,0x01,0x01,0x00,0x01,0x00,0x40},
 
207
        {0x01,0x1010,0x17,0x02,0x02,0x00,0x01,0x01,0x40},
 
208
        {0x03,0x8208,0x03,0x00,0x00,0x00,0x01,0x02,0x40},
 
209
        {0x03,0x0210,0x16,0x01,0x01,0x00,0x01,0x02,0x40},
 
210
        {0x03,0x0010,0x18,0x02,0x02,0x00,0x01,0x03,0x40},
 
211
        {0x05,0x9209,0x05,0x00,0x00,0x00,0x00,0x04,0x40},
 
212
        {0x06,0x8209,0x06,0x00,0x00,0x00,0x00,0x05,0x40},
 
213
        {0x07,0x0000,0x07,0x03,0x03,0x00,0x01,0x03,0x40},
 
214
        {0x07,0x0000,0x19,0x02,0x02,0x00,0x01,0x03,0x40},
 
215
        {0x0d,0x920a,0x0d,0x00,0x00,0x00,0x00,0x04,0x40},
 
216
        {0x0e,0x820a,0x0e,0x00,0x00,0x00,0x00,0x05,0x40},
 
217
        {0x0f,0x0202,0x11,0x01,0x01,0x00,0x00,0x05,0x40},
 
218
        {0x10,0x0212,0x12,0x01,0x01,0x00,0x00,0x05,0x40},
 
219
        {0x11,0x0212,0x1a,0x04,0x04,0x00,0x00,0x05,0x40},
 
220
        {0x12,0x0212,0x1b,0x04,0x04,0x00,0x00,0x05,0x40},
 
221
        {0x13,0x021b,0x1c,0x00,0x00,0x00,0x00,0x04,0x40},
 
222
        {0x12,0x0010,0x18,0x02,0x02,0x00,0x00,0x05,0x40},
 
223
        {0x12,0x0210,0x18,0x01,0x01,0x00,0x00,0x05,0x40},
 
224
        {0xff,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
 
225
};
 
226
 
 
227
static const struct SiS_StResInfo_S SiS_StResInfo[]=
 
228
{
 
229
        { 640,400},
 
230
        { 640,350},
 
231
        { 720,400},
 
232
        { 720,350},
 
233
        { 640,480}
 
234
};
 
235
 
 
236
static const struct SiS_ModeResInfo_S SiS_ModeResInfo[] =
 
237
{
 
238
        {  320, 200, 8, 8},   /* 0x00 */
 
239
        {  320, 240, 8, 8},   /* 0x01 */
 
240
        {  320, 400, 8, 8},   /* 0x02 */
 
241
        {  400, 300, 8, 8},   /* 0x03 */
 
242
        {  512, 384, 8, 8},   /* 0x04 */
 
243
        {  640, 400, 8,16},   /* 0x05 */
 
244
        {  640, 480, 8,16},   /* 0x06 */
 
245
        {  800, 600, 8,16},   /* 0x07 */
 
246
        { 1024, 768, 8,16},   /* 0x08 */
 
247
        { 1280,1024, 8,16},   /* 0x09 */
 
248
        { 1600,1200, 8,16},   /* 0x0a */
 
249
        { 1920,1440, 8,16},   /* 0x0b */
 
250
        { 2048,1536, 8,16},   /* 0x0c */
 
251
        {  720, 480, 8,16},   /* 0x0d */
 
252
        {  720, 576, 8,16},   /* 0x0e */
 
253
        { 1280, 960, 8,16},   /* 0x0f */
 
254
        {  800, 480, 8,16},   /* 0x10 */
 
255
        { 1024, 576, 8,16},   /* 0x11 */
 
256
        { 1280, 720, 8,16},   /* 0x12 */
 
257
        {  856, 480, 8,16},   /* 0x13 */
 
258
        { 1280, 768, 8,16},   /* 0x14 */
 
259
        { 1400,1050, 8,16},   /* 0x15 */
 
260
        { 1152, 864, 8,16},   /* 0x16 */
 
261
        {  848, 480, 8,16},   /* 0x17 */
 
262
        { 1360, 768, 8,16},   /* 0x18 */
 
263
        { 1024, 600, 8,16},   /* 0x19 */
 
264
        { 1152, 768, 8,16},   /* 0x1a */
 
265
        {  768, 576, 8,16},   /* 0x1b */
 
266
        { 1360,1024, 8,16},   /* 0x1c */
 
267
        { 1680,1050, 8,16},   /* 0x1d */
 
268
        { 1280, 800, 8,16},   /* 0x1e */
 
269
        { 1920,1080, 8,16},   /* 0x1f */
 
270
        {  960, 540, 8,16},   /* 0x20 */
 
271
        {  960, 600, 8,16},   /* 0x21 */
 
272
        { 1280, 854, 8,16}    /* 0x22 */
 
273
};
 
274
 
 
275
#if defined(CONFIG_FB_SIS_300) || defined(CONFIG_FB_SIS_315)
 
276
static const struct SiS_StandTable_S SiS_StandTable[]=
 
277
{
 
278
/* 0x00: MD_0_200 */
 
279
 {
 
280
  0x28,0x18,0x08,0x0800,
 
281
  {0x09,0x03,0x00,0x02},
 
282
  0x63,
 
283
  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
 
284
   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
 
285
   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
 
286
   0xff},
 
287
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
288
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
289
   0x08,0x00,0x0f,0x00},
 
290
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
291
   0xff}
 
292
 },
 
293
/* 0x01: MD_1_200 */
 
294
 {
 
295
  0x28,0x18,0x08,0x0800,
 
296
  {0x09,0x03,0x00,0x02},
 
297
  0x63,
 
298
  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
 
299
   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
 
300
   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
 
301
   0xff},
 
302
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
303
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
304
   0x08,0x00,0x0f,0x00},
 
305
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
306
   0xff}
 
307
 },
 
308
/* 0x02: MD_2_200 */
 
309
 {
 
310
  0x50,0x18,0x08,0x1000,
 
311
  {0x01,0x03,0x00,0x02},
 
312
  0x63,
 
313
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
 
314
   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
 
315
   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
 
316
   0xff},
 
317
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
318
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
319
   0x08,0x00,0x0f,0x00},
 
320
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
321
   0xff}
 
322
 },
 
323
/* 0x03: MD_3_200 - mode 0x03 - 0 */
 
324
 {
 
325
  0x50,0x18,0x08,0x1000,
 
326
  {0x01,0x03,0x00,0x02},
 
327
  0x63,
 
328
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
 
329
   0x00,0xc7,0x06,0x07,0x00,0x00,0x00,0x00,
 
330
   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
 
331
   0xff},
 
332
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
333
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
334
   0x08,0x00,0x0f,0x00},
 
335
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
336
   0xff}
 
337
 },
 
338
/* 0x04: MD_4 */
 
339
 {
 
340
  0x28,0x18,0x08,0x4000,
 
341
  {0x09,0x03,0x00,0x02},
 
342
  0x63,
 
343
  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,   /* 0x2c is 2b for 300 */
 
344
   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
 
345
   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
 
346
   0xff},
 
347
  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
 
348
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
349
   0x01,0x00,0x03,0x00},
 
350
  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
 
351
   0xff}
 
352
 },
 
353
/* 0x05: MD_5 */
 
354
 {
 
355
  0x28,0x18,0x08,0x4000,
 
356
  {0x09,0x03,0x00,0x02},
 
357
  0x63,
 
358
  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,   /* 0x2c is 2b for 300 */
 
359
   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
 
360
   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xa2,
 
361
   0xff},
 
362
  {0x00,0x13,0x15,0x17,0x02,0x04,0x06,0x07,
 
363
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
364
   0x01,0x00,0x03,0x00},
 
365
  {0x00,0x00,0x00,0x00,0x00,0x30,0x0f,0x00,
 
366
   0xff}
 
367
 },
 
368
/* 0x06: MD_6 */
 
369
 {
 
370
  0x50,0x18,0x08,0x4000,
 
371
  {0x01,0x01,0x00,0x06},
 
372
  0x63,
 
373
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,   /* 55,81 is 54,80 for 300 */
 
374
   0x00,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,
 
375
   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xc2,
 
376
   0xff},
 
377
  {0x00,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
 
378
   0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,
 
379
   0x01,0x00,0x01,0x00},
 
380
  {0x00,0x00,0x00,0x00,0x00,0x00,0x0d,0x00,
 
381
   0xff}
 
382
 },
 
383
/* 0x07: MD_7 */
 
384
 {
 
385
  0x50,0x18,0x0e,0x1000,
 
386
  {0x00,0x03,0x00,0x03},
 
387
  0xa6,
 
388
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
 
389
   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
 
390
   0x83,0x85,0x5d,0x28,0x0d,0x63,0xba,0xa3,
 
391
   0xff},
 
392
  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
 
393
   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
 
394
   0x0e,0x00,0x0f,0x08},
 
395
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
 
396
   0xff}
 
397
 },
 
398
/* 0x08: MDA_DAC */
 
399
 {
 
400
  0x00,0x00,0x00,0x0000,
 
401
  {0x00,0x00,0x00,0x15},
 
402
  0x15,
 
403
  {0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
 
404
   0x15,0x15,0x15,0x15,0x15,0x15,0x3f,0x3f,
 
405
   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x00,0x00,
 
406
   0x00},
 
407
  {0x00,0x00,0x00,0x00,0x00,0x15,0x15,0x15,
 
408
   0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,
 
409
   0x15,0x15,0x15,0x15},
 
410
  {0x15,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
 
411
   0x3f}
 
412
 },
 
413
/* 0x09: CGA_DAC */
 
414
 {
 
415
  0x00,0x10,0x04,0x0114,
 
416
  {0x11,0x09,0x15,0x00},
 
417
  0x10,
 
418
  {0x04,0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,
 
419
   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x2a,0x3a,
 
420
   0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x10,
 
421
   0x04},
 
422
  {0x14,0x01,0x11,0x09,0x15,0x00,0x10,0x04,
 
423
   0x14,0x01,0x11,0x09,0x15,0x2a,0x3a,0x2e,
 
424
   0x3e,0x2b,0x3b,0x2f},
 
425
  {0x3f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
 
426
   0x3f}
 
427
 },
 
428
/* 0x0a: EGA_DAC */
 
429
 {
 
430
  0x00,0x10,0x04,0x0114,
 
431
  {0x11,0x05,0x15,0x20},
 
432
  0x30,
 
433
  {0x24,0x34,0x21,0x31,0x25,0x35,0x08,0x18,
 
434
   0x0c,0x1c,0x09,0x19,0x0d,0x1d,0x28,0x38,
 
435
   0x2c,0x3c,0x29,0x39,0x2d,0x3d,0x02,0x12,
 
436
   0x06},
 
437
  {0x16,0x03,0x13,0x07,0x17,0x22,0x32,0x26,
 
438
   0x36,0x23,0x33,0x27,0x37,0x0a,0x1a,0x0e,
 
439
   0x1e,0x0b,0x1b,0x0f},
 
440
  {0x1f,0x2a,0x3a,0x2e,0x3e,0x2b,0x3b,0x2f,
 
441
   0x3f}
 
442
 },
 
443
/* 0x0b: VGA_DAC */
 
444
 {
 
445
  0x00,0x10,0x04,0x0114,
 
446
  {0x11,0x09,0x15,0x2a},
 
447
  0x3a,
 
448
  {0x2e,0x3e,0x2b,0x3b,0x2f,0x3f,0x00,0x05,
 
449
   0x08,0x0b,0x0e,0x11,0x14,0x18,0x1c,0x20,
 
450
   0x24,0x28,0x2d,0x32,0x38,0x3f,0x00,0x10,
 
451
   0x1f},
 
452
  {0x2f,0x3f,0x1f,0x27,0x2f,0x37,0x3f,0x2d,
 
453
   0x31,0x36,0x3a,0x3f,0x00,0x07,0x0e,0x15,
 
454
   0x1c,0x0e,0x11,0x15},
 
455
  {0x18,0x1c,0x14,0x16,0x18,0x1a,0x1c,0x00,
 
456
   0x04}
 
457
 },
 
458
/* 0x0c */
 
459
 {
 
460
  0x08,0x0c,0x10,0x0a08,
 
461
  {0x0c,0x0e,0x10,0x0b},
 
462
  0x0c,
 
463
  {0x0d,0x0f,0x10,0x10,0x01,0x08,0x00,0x00,
 
464
   0x00,0x00,0x01,0x00,0x02,0x02,0x01,0x00,
 
465
   0x04,0x04,0x01,0x00,0x05,0x02,0x05,0x00,
 
466
   0x06},
 
467
  {0x01,0x06,0x05,0x06,0x00,0x08,0x01,0x08,
 
468
   0x00,0x07,0x02,0x07,0x06,0x07,0x00,0x00,
 
469
   0x00,0x00,0x00,0x00},
 
470
  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
471
   0x00}
 
472
 },
 
473
/* 0x0d: MD_D */
 
474
 {
 
475
  0x28,0x18,0x08,0x2000,
 
476
  {0x09,0x0f,0x00,0x06},
 
477
  0x63,
 
478
  {0x2d,0x27,0x28,0x90,0x2c,0x80,0xbf,0x1f,     /* 2c is 2b for 300 */
 
479
   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
 
480
   0x9c,0x8e,0x8f,0x14,0x00,0x96,0xb9,0xe3,
 
481
   0xff},
 
482
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
483
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
484
   0x01,0x00,0x0f,0x00},
 
485
  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
 
486
   0xff}
 
487
 },
 
488
/* 0x0e: MD_E */
 
489
 {
 
490
  0x50,0x18,0x08,0x4000,
 
491
  {0x01,0x0f,0x00,0x06},
 
492
  0x63,
 
493
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,     /* 55,81 is 54,80 for 300 */
 
494
   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
 
495
   0x9c,0x8e,0x8f,0x28,0x00,0x96,0xb9,0xe3,
 
496
   0xff},
 
497
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
498
   0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
 
499
   0x01,0x00,0x0f,0x00},
 
500
  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
 
501
   0xff}
 
502
 },
 
503
/* 0x0f: ExtVGATable - modes > 0x13 */
 
504
 {
 
505
  0x00,0x00,0x00,0x0000,
 
506
  {0x01,0x0f,0x00,0x0e},
 
507
  0x23,
 
508
  {0x5f,0x4f,0x50,0x82,0x54,0x80,0x0b,0x3e,
 
509
   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
 
510
   0xea,0x8c,0xdf,0x28,0x40,0xe7,0x04,0xa3,
 
511
   0xff},
 
512
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
513
   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
 
514
   0x01,0x00,0x00,0x00},
 
515
  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
 
516
   0xff}
 
517
 },
 
518
/* 0x10: ROM_SAVEPTR - totally different for 300 */
 
519
 {
 
520
  0x9f,0x3b,0x00,0x00c0,
 
521
  {0x00,0x00,0x00,0x00},
 
522
  0x00,
 
523
  {0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0x3f,
 
524
   0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,
 
525
   0x00,0x00,0x1a,0x00,0xac,0x3e,0x00,0xc0,
 
526
   0x00},
 
527
  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
528
   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
529
   0x00,0x00,0x00,0x00},
 
530
  {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 
531
   0x00}
 
532
 },
 
533
/* 0x11: MD_F */
 
534
 {
 
535
  0x50,0x18,0x0e,0x8000,
 
536
  {0x01,0x0f,0x00,0x06},
 
537
  0xa2,
 
538
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
 
539
   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
 
540
   0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,    /* 82,84 is 83,85 on 300 */
 
541
   0xff},
 
542
  {0x00,0x08,0x00,0x00,0x18,0x18,0x00,0x00,
 
543
   0x00,0x08,0x00,0x00,0x00,0x18,0x00,0x00,
 
544
   0x0b,0x00,0x05,0x00},
 
545
  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x05,
 
546
   0xff}
 
547
 },
 
548
/* 0x12: MD_10 */
 
549
 {
 
550
  0x50,0x18,0x0e,0x8000,
 
551
  {0x01,0x0f,0x00,0x06},
 
552
  0xa3,
 
553
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
 
554
   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
 
555
   0x82,0x84,0x5d,0x28,0x0f,0x63,0xba,0xe3,    /* 82,84 is 83,85 on 300 */
 
556
   0xff},
 
557
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
558
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
559
   0x01,0x00,0x0f,0x00},
 
560
  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
 
561
   0xff}
 
562
 },
 
563
/* 0x13: MD_0_350 */
 
564
 {
 
565
  0x28,0x18,0x0e,0x0800,
 
566
  {0x09,0x03,0x00,0x02},
 
567
  0xa3,
 
568
  {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,    /* b1 is a0 on 300 */
 
569
   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
 
570
   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
 
571
   0xff},
 
572
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
573
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
574
   0x08,0x00,0x0f,0x00},
 
575
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
576
   0xff}
 
577
 },
 
578
/* 0x14: MD_1_350 */
 
579
 {
 
580
  0x28,0x18,0x0e,0x0800,
 
581
  {0x09,0x03,0x00,0x02},
 
582
  0xa3,
 
583
  {0x2d,0x27,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
 
584
   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
 
585
   0x83,0x85,0x5d,0x14,0x1f,0x63,0xba,0xa3,
 
586
   0xff},
 
587
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
588
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
589
   0x08,0x00,0x0f,0x00},
 
590
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
591
   0xff}
 
592
 },
 
593
/* 0x15: MD_2_350 */
 
594
 {
 
595
  0x50,0x18,0x0e,0x1000,
 
596
  {0x01,0x03,0x00,0x02},
 
597
  0xa3,
 
598
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
 
599
   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
 
600
   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
 
601
   0xff},
 
602
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
603
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
604
   0x08,0x00,0x0f,0x00},
 
605
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
606
   0xff}
 
607
 },
 
608
/* 0x16: MD_3_350 - mode 0x03 - 1 */
 
609
 {
 
610
  0x50,0x18,0x0e,0x1000,
 
611
  {0x01,0x03,0x00,0x02},
 
612
  0xa3,
 
613
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
 
614
   0x00,0x4d,0x0b,0x0c,0x00,0x00,0x00,0x00,
 
615
   0x83,0x85,0x5d,0x28,0x1f,0x63,0xba,0xa3,
 
616
   0xff},
 
617
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
618
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
619
   0x08,0x00,0x0f,0x00},
 
620
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
621
   0xff}
 
622
 },
 
623
/* 0x17: MD_0_1_400 */
 
624
 {
 
625
  0x28,0x18,0x10,0x0800,
 
626
  {0x08,0x03,0x00,0x02},
 
627
  0x67,
 
628
  {0x2d,0x27,0x28,0x90,0x2b,0xb1,0xbf,0x1f,    /* b1 is a0 on 300 */
 
629
   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
 
630
   0x9c,0x8e,0x8f,0x14,0x1f,0x96,0xb9,0xa3,
 
631
   0xff},
 
632
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
633
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
634
   0x0c,0x00,0x0f,0x08},
 
635
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
636
   0xff}
 
637
 },
 
638
/* 0x18: MD_2_3_400 - mode 0x03 - 2 */
 
639
 {
 
640
  0x50,0x18,0x10,0x1000,
 
641
  {0x00,0x03,0x00,0x02},
 
642
  0x67,
 
643
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
 
644
   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
 
645
   0x9c,0x8e,0x8f,0x28,0x1f,0x96,0xb9,0xa3,
 
646
   0xff},
 
647
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
648
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
649
   0x0c,0x00,0x0f,0x08},
 
650
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0e,0x00,
 
651
   0xff}
 
652
 },
 
653
/* 0x19: MD_7_400 */
 
654
 {
 
655
  0x50,0x18,0x10,0x1000,
 
656
  {0x00,0x03,0x00,0x02},
 
657
  0x66,
 
658
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,
 
659
   0x00,0x4f,0x0d,0x0e,0x00,0x00,0x00,0x00,
 
660
   0x9c,0x8e,0x8f,0x28,0x0f,0x96,0xb9,0xa3,
 
661
   0xff},
 
662
  {0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
 
663
   0x10,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
 
664
   0x0e,0x00,0x0f,0x08},
 
665
  {0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,
 
666
   0xff}
 
667
 },
 
668
/* 0x1a: MD_11 */
 
669
 {
 
670
  0x50,0x1d,0x10,0xa000,
 
671
  {0x01,0x0f,0x00,0x06},
 
672
  0xe3,
 
673
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,    /* 55,81 is 54,80 on 300 */
 
674
   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
 
675
   0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xc3,    /* e9,8b is ea,8c on 300 */
 
676
   0xff},
 
677
  {0x00,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
 
678
   0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,
 
679
   0x01,0x00,0x0f,0x00},
 
680
  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x01,
 
681
   0xff}
 
682
 },
 
683
/* 0x1b: ExtEGATable - Modes <= 0x02 */
 
684
 {
 
685
  0x50,0x1d,0x10,0xa000,
 
686
  {0x01,0x0f,0x00,0x06},
 
687
  0xe3,
 
688
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0x0b,0x3e,    /* 55,81 is 54,80 on 300 */
 
689
   0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,
 
690
   0xe9,0x8b,0xdf,0x28,0x00,0xe7,0x04,0xe3,    /* e9,8b is ea,8c on 300 */
 
691
   0xff},
 
692
  {0x00,0x01,0x02,0x03,0x04,0x05,0x14,0x07,
 
693
   0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
 
694
   0x01,0x00,0x0f,0x00},
 
695
  {0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x0f,
 
696
   0xff}
 
697
 },
 
698
/* 0x1c: MD_13 */
 
699
 {
 
700
  0x28,0x18,0x08,0x2000,
 
701
  {0x01,0x0f,0x00,0x0e},
 
702
  0x63,
 
703
  {0x5f,0x4f,0x50,0x82,0x55,0x81,0xbf,0x1f,    /* 55,81 is 54,80 on 300 */
 
704
   0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,
 
705
   0x9c,0x8e,0x8f,0x28,0x40,0x96,0xb9,0xa3,
 
706
   0xff},
 
707
  {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
 
708
   0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
 
709
   0x41,0x00,0x0f,0x00},
 
710
  {0x00,0x00,0x00,0x00,0x00,0x40,0x05,0x0f,
 
711
   0xff}
 
712
 }
 
713
};
 
714
#endif
 
715
 
 
716
/**************************************************************/
 
717
/* SIS VIDEO BRIDGE ----------------------------------------- */
 
718
/**************************************************************/
 
719
 
 
720
static const unsigned char SiS_SoftSetting  = 0x30;   /* RAM setting */
 
721
 
 
722
static const unsigned char SiS_OutputSelect = 0x40;
 
723
 
 
724
static const unsigned char SiS_NTSCTiming[] = {
 
725
        0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
 
726
        0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
 
727
        0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
 
728
        0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
 
729
        0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
 
730
        0x03,0x0a,0x65,0x9d,0x08,0x92,0x8f,0x40,
 
731
        0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x50,
 
732
        0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
 
733
};
 
734
 
 
735
static const unsigned char SiS_PALTiming[] = {
 
736
        0x19,0x52,0x35,0x6e,0x04,0x38,0x3d,0x70,
 
737
        0x94,0x49,0x01,0x12,0x06,0x3e,0x35,0x6d,
 
738
        0x06,0x14,0x3e,0x35,0x6d,0x00,0x45,0x2b,
 
739
        0x70,0x50,0x00,0x9b,0x00,0xd9,0x5d,0x17,
 
740
        0x7d,0x05,0x45,0x00,0x00,0xe8,0x00,0x02,
 
741
        0x0d,0x00,0x68,0xb0,0x0b,0x92,0x8f,0x40,
 
742
        0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x63,
 
743
        0x00,0x40,0x3e,0x00,0xe1,0x02,0x28,0x00
 
744
};
 
745
 
 
746
static const unsigned char SiS_HiTVExtTiming[] = {
 
747
        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
 
748
        0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
 
749
        0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
 
750
        0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
 
751
        0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
 
752
        0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
 
753
        0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
 
754
        0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
 
755
};
 
756
 
 
757
static const unsigned char SiS_HiTVSt1Timing[] = {
 
758
        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
 
759
        0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
 
760
        0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
 
761
        0x65,0x90,0x7b,0xa8,0x03,0xf0,0x87,0x03,
 
762
        0x11,0x15,0x11,0xcf,0x10,0x11,0xcf,0x10,
 
763
        0x35,0x35,0x3b,0x69,0x1d,0x92,0x0f,0x40,
 
764
        0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x86,
 
765
        0xaf,0x5d,0x0e,0x00,0xfc,0xff,0x2d,0x00
 
766
};
 
767
 
 
768
static const unsigned char SiS_HiTVSt2Timing[] = {
 
769
        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x64,
 
770
        0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
 
771
        0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
 
772
        0x64,0x90,0x33,0x8c,0x18,0x36,0x3e,0x13,
 
773
        0x2a,0xde,0x2a,0x44,0x40,0x2a,0x44,0x40,
 
774
        0x8e,0x8e,0x82,0x07,0x0b,0x92,0x0f,0x40,
 
775
        0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x3d,
 
776
        0x63,0x4f,0x27,0x00,0xfc,0xff,0x6a,0x00
 
777
};
 
778
 
 
779
#if 0
 
780
static const unsigned char SiS_HiTVTextTiming[] = {
 
781
        0x32,0x65,0x2c,0x5f,0x08,0x31,0x3a,0x65,
 
782
        0x28,0x02,0x01,0x3d,0x06,0x3e,0x35,0x6d,
 
783
        0x06,0x14,0x3e,0x35,0x6d,0x00,0xc5,0x3f,
 
784
        0x65,0x90,0xe7,0xbc,0x03,0x0c,0x97,0x03,
 
785
        0x14,0x78,0x14,0x08,0x20,0x14,0x08,0x20,
 
786
        0xc8,0xc8,0x3b,0xd2,0x26,0x92,0x0f,0x40,
 
787
        0x60,0x80,0x14,0x90,0x8c,0x60,0x04,0x96,
 
788
        0x72,0x5c,0x11,0x00,0xfc,0xff,0x32,0x00
 
789
};
 
790
#endif
 
791
 
 
792
static const unsigned char SiS_HiTVGroup3Data[] = {
 
793
        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x5f,
 
794
        0x05,0x21,0xb2,0xb2,0x55,0x77,0x2a,0xa6,
 
795
        0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
 
796
        0x8c,0x6e,0x60,0x2e,0x58,0x48,0x72,0x44,
 
797
        0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
 
798
        0x4f,0x7f,0x03,0xa8,0x7d,0x20,0x1a,0xa9,
 
799
        0x14,0x05,0x03,0x7e,0x64,0x31,0x14,0x75,
 
800
        0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
 
801
};
 
802
 
 
803
static const unsigned char SiS_HiTVGroup3Simu[] = {
 
804
        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0x95,
 
805
        0xdb,0x20,0xb8,0xb8,0x55,0x47,0x2a,0xa6,
 
806
        0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
 
807
        0x8c,0x6e,0x60,0x15,0x26,0xd3,0xe4,0x11,
 
808
        0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
 
809
        0x67,0x36,0x01,0x47,0x0e,0x10,0xbe,0xb4,
 
810
        0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
 
811
        0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
 
812
};
 
813
 
 
814
#if 0
 
815
static const unsigned char SiS_HiTVGroup3Text[] = {
 
816
        0x00,0x1a,0x22,0x63,0x62,0x22,0x08,0xa7,
 
817
        0xf5,0x20,0xce,0xce,0x55,0x47,0x2a,0xa6,
 
818
        0x25,0x2f,0x47,0xfa,0xc8,0xff,0x8e,0x20,
 
819
        0x8c,0x6e,0x60,0x18,0x2c,0x0c,0x20,0x22,
 
820
        0x56,0x36,0x4f,0x6e,0x3f,0x80,0x00,0x80,
 
821
        0x93,0x3c,0x01,0x50,0x2f,0x10,0xf4,0xca,
 
822
        0x01,0x05,0x03,0x7e,0x65,0x31,0x14,0x75,
 
823
        0x18,0x05,0x18,0x05,0x4c,0xa8,0x01
 
824
};
 
825
#endif
 
826
 
 
827
static const struct SiS_TVData SiS_StPALData[] =
 
828
{
 
829
 {    1,   1, 864, 525,1270, 400, 100, 0, 760,    0,0xf4,0xff,0x1c,0x22},
 
830
 {    1,   1, 864, 525,1270, 350, 100, 0, 760,    0,0xf4,0xff,0x1c,0x22},
 
831
 {    1,   1, 864, 525,1270, 400,   0, 0, 720,    0,0xf1,0x04,0x1f,0x18},
 
832
 {    1,   1, 864, 525,1270, 350,   0, 0, 720,    0,0xf4,0x0b,0x1c,0x0a},
 
833
 {    1,   1, 864, 525,1270, 480,  50, 0, 760,    0,0xf4,0xff,0x1c,0x22},
 
834
 {    1,   1, 864, 525,1270, 600,  50, 0,   0,0x300,0xf4,0xff,0x1c,0x22}
 
835
};
 
836
 
 
837
static const struct SiS_TVData SiS_ExtPALData[] =
 
838
{
 
839
 {   27,  10, 848, 448,1270, 530,  50, 0,  50,    0,0xf4,0xff,0x1c,0x22},  /* 640x400, 320x200 */
 
840
 {  108,  35, 848, 398,1270, 530,  50, 0,  50,    0,0xf4,0xff,0x1c,0x22},
 
841
 {   12,   5, 954, 448,1270, 530,  50, 0,  50,    0,0xf1,0x04,0x1f,0x18},
 
842
 {    9,   4, 960, 463,1644, 438,  50, 0,  50,    0,0xf4,0x0b,0x1c,0x0a},
 
843
 {    9,   4, 848, 528,1270, 530,   0, 0,  50,    0,0xf5,0xfb,0x1b,0x2a},  /* 640x480, 320x240 */
 
844
 {   36,  25,1060, 648,1270, 530, 438, 0, 438,    0,0xeb,0x05,0x25,0x16},  /* 800x600, 400x300 */
 
845
 {    3,   2,1080, 619,1270, 540, 438, 0, 438,    0,0xf3,0x00,0x1d,0x20},  /* 720x576 */
 
846
 {    1,   1,1170, 821,1270, 520, 686, 0, 686,    0,0xF3,0x00,0x1D,0x20},  /* 1024x768 */
 
847
 {    1,   1,1170, 821,1270, 520, 686, 0, 686,    0,0xF3,0x00,0x1D,0x20},  /* 1024x768 (for NTSC equ) */
 
848
 {    9,   4, 848, 528,1270, 530,   0, 0,  50,    0,0xf5,0xfb,0x1b,0x2a}   /* 720x480 */
 
849
};
 
850
 
 
851
static const struct SiS_TVData SiS_StNTSCData[] =
 
852
{
 
853
 {    1,   1, 858, 525,1270, 400,  50, 0, 760,    0,0xf1,0x04,0x1f,0x18},
 
854
 {    1,   1, 858, 525,1270, 350,  50, 0, 640,    0,0xf1,0x04,0x1f,0x18},
 
855
 {    1,   1, 858, 525,1270, 400,   0, 0, 720,    0,0xf1,0x04,0x1f,0x18},
 
856
 {    1,   1, 858, 525,1270, 350,   0, 0, 720,    0,0xf4,0x0b,0x1c,0x0a},
 
857
 {    1,   1, 858, 525,1270, 480,   0, 0, 760,    0,0xf1,0x04,0x1f,0x18}
 
858
};
 
859
 
 
860
static const struct SiS_TVData SiS_ExtNTSCData[] =
 
861
{
 
862
 {  143,  65, 858, 443,1270, 440, 171, 0, 171,    0,0xf1,0x04,0x1f,0x18},    /* 640x400, 320x200 */
 
863
 {   88,  35, 858, 393,1270, 440, 171, 0, 171,    0,0xf1,0x04,0x1f,0x18},
 
864
 {  143,  70, 924, 443,1270, 440,  92, 0,  92,    0,0xf1,0x04,0x1f,0x18},
 
865
 {  143,  70, 924, 393,1270, 440,  92, 0,  92,    0,0xf4,0x0b,0x1c,0x0a},
 
866
 {  143,  76, 836, 523,1270, 440, 224, 0,   0,    0,0xf1,0x05,0x1f,0x16},    /* 640x480, 320x240 */
 
867
 {  143, 120,1056, 643,1270, 440,   0, 1,   0,    0,0xf4,0x10,0x1c,0x00},    /* 800x600, 400x300  */
 
868
 {  143,  76, 836, 523,1270, 440,   0, 1,   0,    0,0xee,0x0c,0x22,0x08},    /* 720x480 - BETTER (from 300 series) */
 
869
 {    1,   1,1100, 811,1412, 440,   0, 1,   0,    0,0xee,0x0c,0x22,0x08},    /* 1024x768 (525i) CORRECTED */
 
870
#if 0  /* flimmert und ist unten abgeschnitten (NTSCHT, NTSC clock) */
 
871
 {   65,  64,1056, 791,1270, 480, 455, 0,   0,    0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
 
872
#endif
 
873
#if 0
 
874
 {    1,   1,1100, 811,1412, 440,   0, 1,   0,    0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
 
875
#endif
 
876
#if 0
 
877
 {    1,   1,1120, 821,1516, 420,   0, 1,   0,    0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
 
878
#endif
 
879
#if 0
 
880
 {    1,   1, 938, 821,1516, 420,   0, 1,   0,    0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
 
881
#endif
 
882
#if 0 /* zoom hin, unten abgeschnitten (NTSC2HT, NTSC1024 clock) */
 
883
 {    1,   1,1072, 791,1270, 480, 455, 0,   0,    0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
 
884
#endif
 
885
#if 1 /* zu weit links (squeezed) (NTSC2HT, NTSC1024 clock) */
 
886
 {    1,   1,1100, 846,1270, 440, 455, 0,   0,    0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
 
887
#endif
 
888
#if 0 /* zu weit links, rechts abgeschnitten (NTSC2HT, NTSC1024 clock) */
 
889
 {    1,   1,1100, 846,1412, 440, 455, 0,   0,    0,0x00,0x00,0x00,0x00}     /* 1024x768 (525p) */
 
890
#endif
 
891
};
 
892
 
 
893
static const struct SiS_TVData SiS_StHiTVData[] =  /* Slave + TVSimu */
 
894
{
 
895
 {    1,   1, 0x37c,0x233,0x2b2,0x320,    0, 0, 0, 0, 0, 0, 0, 0},
 
896
 {    1,   1, 0x37c,0x233,0x2b2,0x2bc,    0, 0, 0, 0, 0, 0, 0, 0},
 
897
 {    1,   1, 0x37c,0x233,0x2b2,0x320,    0, 0, 0, 0, 0, 0, 0, 0},
 
898
 {    1,   1, 0x37c,0x233,0x2b2,0x2bc,    0, 0, 0, 0, 0, 0, 0, 0},
 
899
 {    1,   1, 0x37c,0x233,0x2b2,0x3c0,    0, 0, 0, 0, 0, 0, 0, 0},
 
900
 {    8,   5, 0x41a,0x2ab,0x670,0x3c0,0x150, 1, 0, 0, 0, 0, 0, 0}
 
901
};
 
902
 
 
903
static const struct SiS_TVData SiS_St2HiTVData[] = /* Slave */
 
904
{
 
905
 {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0, 0, 0, 0, 0},
 
906
 {    1,   1, 0x37c,0x233,0x2b2,0x2bc,    0, 0, 0, 0, 0, 0, 0, 0},
 
907
 {    3,   1, 0x348,0x1e3,0x670,0x3c0,0x032, 0, 0, 0, 0, 0, 0, 0},
 
908
 {    1,   1, 0x37c,0x233,0x2b2,0x2bc,    0, 0, 0, 0, 0, 0, 0, 0},
 
909
 {    5,   2, 0x348,0x233,0x670,0x3c0,0x08d, 1, 0, 0, 0, 0, 0, 0},
 
910
 {    8,   5, 0x41a,0x2ab,0x670,0x3c0,0x17c, 1, 0, 0, 0, 0, 0, 0}
 
911
};
 
912
 
 
913
static const struct SiS_TVData SiS_ExtHiTVData[] =
 
914
{ /* all ok */
 
915
 {    6,   1, 0x348,0x233,0x660,0x3c0,    0, 0, 0, 0, 0, 0, 0, 0},
 
916
 {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0, 0, 0, 0, 0, 0, 0, 0},
 
917
 {    6,   1, 0x348,0x233,0x660,0x3c0,    0, 0, 0, 0, 0, 0, 0, 0},
 
918
 {    3,   1, 0x3c0,0x233,0x660,0x3c0,    0, 0, 0, 0, 0, 0, 0, 0},
 
919
 {    5,   1, 0x348,0x233,0x670,0x3c0,0x166, 1, 0, 0, 0, 0, 0, 0},  /* 640x480   */
 
920
 {   16,   5, 0x41a,0x2ab,0x670,0x3c0,0x143, 1, 0, 0, 0, 0, 0, 0},  /* 800x600   */
 
921
 {   25,  12, 0x4ec,0x353,0x670,0x3c0,0x032, 0, 0, 0, 0, 0, 0, 0},  /* 1024x768  */
 
922
 {    5,   4, 0x627,0x464,0x670,0x3c0,0x128, 0, 0, 0, 0, 0, 0, 0},  /* 1280x1024 */
 
923
 {    4,   1, 0x41a,0x233,0x60c,0x3c0,0x143, 1, 0, 0, 0, 0, 0, 0},  /* 800x480   */
 
924
 {    5,   2, 0x578,0x293,0x670,0x3c0,0x032, 0, 0, 0, 0, 0, 0, 0},  /* 1024x576  */
 
925
 {    8,   5, 0x6d6,0x323,0x670,0x3c0,0x128, 0, 0, 0, 0, 0, 0, 0},  /* 1280x720  */
 
926
 {    8,   3, 0x4ec,0x353,0x670,0x3c0,0x032, 0, 0, 0, 0, 0, 0, 0},  /* 960x600  */
 
927
};
 
928
 
 
929
static const struct SiS_TVData SiS_St525pData[] =
 
930
{
 
931
 {    1,   1, 0x6b4,0x20d,0x4f6,0x190,   50, 0, 0x2f8, 0, 0, 0, 0, 0},
 
932
 {    1,   1, 0x6b4,0x20d,0x4f6,0x15e,   50, 0, 0x280, 0, 0, 0, 0, 0},
 
933
 {    1,   1, 0x6b4,0x20d,0x4f6,0x190,   50, 0, 0x2f8, 0, 0, 0, 0, 0},
 
934
 {    1,   1, 0x6b4,0x20d,0x4f6,0x15e,   50, 0, 0x280, 0, 0, 0, 0, 0},
 
935
 {    1,   1, 0x6b4,0x20d,0x4f6,0x1e0,    0, 0, 0x2f8, 0, 0, 0, 0, 0}
 
936
};
 
937
 
 
938
static const struct SiS_TVData SiS_St750pData[] =
 
939
{
 
940
 {    1,   1, 0x672,0x2ee,0x500,0x190,   50, 0, 0x2f8, 0, 0, 0, 0, 0},
 
941
 {    1,   1, 0x672,0x2ee,0x500,0x15e,   50, 0, 0x280, 0, 0, 0, 0, 0},
 
942
 {    1,   1, 0x672,0x2ee,0x500,0x190,    0, 0, 0x2d0, 0, 0, 0, 0, 0},
 
943
 {    1,   1, 0x672,0x2ee,0x500,0x15e,    0, 0, 0x2d0, 0, 0, 0, 0, 0},
 
944
 {    1,   1, 0x672,0x2ee,0x500,0x1e0,    0, 0, 0x2f8, 0, 0, 0, 0, 0}
 
945
};
 
946
 
 
947
static const struct SiS_TVData SiS_Ext750pData[] =
 
948
{ /* all ok */
 
949
 {    3,  1,  935, 470, 1130, 680,  50, 0, 0, 0, 0, 0, 0, 0},  /* 320x200/640x400 */
 
950
 {   24,  7,  935, 420, 1130, 680,  50, 0, 0, 0, 0, 0, 0, 0},
 
951
 {    3,  1,  935, 470, 1130, 680,  50, 0, 0, 0, 0, 0, 0, 0},
 
952
 {   24,  7,  935, 420, 1130, 680,  50, 0, 0, 0, 0, 0, 0, 0},
 
953
 {    2,  1, 1100, 590, 1130, 640,  50, 0, 0, 0, 0, 0, 0, 0},  /* 640x480 */
 
954
 {    3,  2, 1210, 690, 1130, 660,  50, 0, 0, 0, 0, 0, 0, 0},  /* 800x600 OK */
 
955
 {    2,  1, 1100, 562, 1130, 640,   0, 1, 0, 0, 0, 0, 0, 0},  /* 720x480 OK */
 
956
 {    1,  1, 1375, 878, 1130, 640, 638, 0, 0, 0, 0, 0, 0, 0},  /* 1024x768 OK */
 
957
 {    5,  3, 1100, 675, 1130, 640,   0, 1, 0, 0, 0, 0, 0, 0},  /* 720/768x576 OK */
 
958
 {   25, 24, 1496, 755, 1120, 680,  50, 0, 0, 0, 0, 0, 0, 0}   /* 1280x720 OK */
 
959
};
 
960
 
 
961
static const struct SiS_LCDData SiS_LCD1280x720Data[] =  /* 2.03.00 */
 
962
{
 
963
        {  44,   15,  864,  430, 1408,  806 }, /* 640x400 */
 
964
        { 128,   35,  792,  385, 1408,  806 },
 
965
        {  44,   15,  864,  430, 1408,  806 },
 
966
        { 128,   35,  792,  385, 1408,  806 },
 
967
        {  22,    9,  864,  516, 1408,  806 }, /* 640x480 */
 
968
        {   8,    5, 1056,  655, 1408,  806 }, /* 800x600 */
 
969
        {   0,    0,    0,    0,    0,    0 }, /* 1024x768 */
 
970
        {   0,    0,    0,    0,    0,    0 }, /* 1280x1024 */
 
971
        {   0,    0,    0,    0,    0,    0 },
 
972
        {   0,    0,    0,    0,    0,    0 },
 
973
        {   1,    1, 1408,  806, 1408,  806 }  /* 1280x720 */
 
974
};
 
975
 
 
976
/* About 1280x768: For TMDS, Panel_1280x768 will only be set if
 
977
 * the panel is a Fujitsu 7911 (VL-17WDX8) (with clock 81, 1688x802)
 
978
 * Other TMDS panels of this resolution will be treated as custom.
 
979
 * For LVDS, we know another type (_2).
 
980
 * (Note: 1280x768_3 is now special for SiS301/NetVista
 
981
 */
 
982
 
 
983
static const struct SiS_LCDData SiS_StLCD1280x768_2Data[] = /* 2.03.00 */
 
984
{
 
985
        {  64,   21,  858,  434, 1408,  806 }, /* 640x400 */
 
986
        {  32,    9,  858,  372, 1408,  806 },
 
987
        {  64,   21,  858,  434, 1408,  806 },
 
988
        {  32,    9,  858,  372, 1408,  806 },
 
989
        { 143,   68, 1024,  527, 1408,  806 }, /* 640x480 */
 
990
        {  64,   51, 1364,  663, 1408,  806 }, /* 800x600 */
 
991
        {  88,   81, 1296,  806, 1408,  806 }, /* 1024x768 */
 
992
        {   0,    0,    0,    0,    0,    0 },
 
993
        {   1,    1, 1408,  806, 1408,  806 }, /* 1280x768 */
 
994
        {   0,    0,    0,    0,    0,    0 },
 
995
        {  16,   15, 1600,  750, 1600,  806 }  /* 1280x720 - from Ext */
 
996
};
 
997
 
 
998
static const struct SiS_LCDData SiS_ExtLCD1280x768_2Data[] = /* 2.03.00 */
 
999
{
 
1000
        {  16,    5,  960,  410, 1600,  806 }, /* 640x400 */
 
1001
        {  64,   21, 1152,  364, 1600,  806 },
 
1002
        {  16,    5,  960,  410, 1600,  806 },
 
1003
        {  64,   21, 1152,  364, 1600,  806 },
 
1004
        {  32,   13, 1040,  493, 1600,  806 }, /* 640x480 */
 
1005
        {  16,    9, 1152,  618, 1600,  806 }, /* 800x600 */
 
1006
        {  25,   21, 1344,  796, 1600,  806 }, /* 1024x768 */
 
1007
        {   0,    0,    0,    0,    0,    0 },
 
1008
        {   1,    1, 1600,  806, 1600,  806 }, /* 1280x768 */
 
1009
        {   0,    0,    0,    0,    0,    0 },
 
1010
        {  16,   15, 1600,  750, 1600,  806 }  /* 1280x720 */
 
1011
};
 
1012
 
 
1013
#if 0  /* Not used; _3 now reserved for NetVista (SiS301) */
 
1014
static const struct SiS_LCDData SiS_LCD1280x768_3Data[] =
 
1015
{
 
1016
        {  64,   25, 1056,  422, 1664,  798 },                  /* 640x400 */
 
1017
        { 128,   39,  884,  396, 1408,  806 }, /* ,640 */
 
1018
        {  64,   25, 1056,  422, 1664,  798 },                  /* 640x400 */
 
1019
        { 128,   39,  884,  396, 1408,  806 }, /* ,640 */
 
1020
        {  32,   15, 1056,  513, 1408,  806 }, /* ,664 */       /* 640x480 */
 
1021
        { 176,  125, 1280,  640, 1408,  806 }, /* ,768 */       /* 800x600 */
 
1022
        {  64,   61, 1342,  806, 1408,  806 },                  /* 1024x768 */
 
1023
        {   0,    0,    0,    0,    0,    0 },
 
1024
        {   1,    1, 1408,  806, 1408,  806 },                  /* 1280x768 */
 
1025
        {   0,    0,    0,    0,    0,    0 },
 
1026
        {  16,   15, 1600,  750, 1600,  806 }  /* 1280x720  from above */
 
1027
};
 
1028
#endif
 
1029
 
 
1030
static const struct SiS_LCDData SiS_LCD1280x800Data[] = /* 0.93.12a (TMDS) */
 
1031
{
 
1032
        { 128,   51, 1122,  412, 1408,  816 },  /* 640x400 */
 
1033
        { 128,   49, 1232,  361, 1408,  816 },
 
1034
        { 128,   51, 1122,  412, 1408,  816 },
 
1035
        { 128,   49, 1232,  361, 1408,  816 },
 
1036
        {   8,    3,  880,  491, 1408,  816 },  /* 640x480 */
 
1037
        {  11,    6, 1024,  612, 1408,  816 },  /* 800x600 */
 
1038
        {  22,   21, 1400,  784, 1408,  816 },  /* 1024x768 */
 
1039
        {   0,    0,    0,    0,    0,    0 },  /* 1280x1024 */
 
1040
        {   1,    1, 1408,  816, 1408,  816 },  /* 1280x800 */
 
1041
        {   0,    0,    0,    0,    0,    0 },  /* 1280x768 (patch index) */
 
1042
        {   0,    0,    0,    0,    0,    0 }   /* 1280x720 */
 
1043
};
 
1044
 
 
1045
static const struct SiS_LCDData SiS_LCD1280x800_2Data[] = /* 2.03.00 (LVDS) */
 
1046
{
 
1047
        {  97,   42, 1344,  409, 1552,  812 }, /* 640x400 */
 
1048
        {  97,   35, 1280,  358, 1552,  812 },
 
1049
        {  97,   42, 1344,  409, 1552,  812 },
 
1050
        {  97,   35, 1280,  358, 1552,  812 },
 
1051
        {  97,   39, 1040,  488, 1552,  812 }, /* 640x480 */
 
1052
        { 194,  105, 1120,  608, 1552,  812 }, /* 800x600 */
 
1053
        {  97,   84, 1400,  780, 1552,  812 }, /* 1024x768 */
 
1054
        {   0,    0,    0,    0,    0,    0 }, /* 1280x1024 */
 
1055
        {   1,    1, 1552,  812, 1552,  812 }, /* 1280x800 */
 
1056
        {  97,   96, 1600,  780, 1552,  812 }, /* 1280x768 - patch index */
 
1057
        {  97,   90, 1600,  730, 1552,  812 }  /* 1280x720 */
 
1058
};
 
1059
 
 
1060
#if 0
 
1061
static const struct SiS_LCDData SiS_LCD1280x800_3Data[] = /* 2.02.05a (LVDS); m250 */
 
1062
{
 
1063
        { 128,   51, 1122,  412, 1408,  816 }, /* 640x400 */
 
1064
        { 128,   49, 1232,  361, 1408,  816 },
 
1065
        { 128,   51, 1122,  412, 1408,  816 },
 
1066
        { 128,   49, 1232,  361, 1408,  816 },
 
1067
        {   8,    3,  880,  491, 1408,  816 }, /* 640x480 */
 
1068
        {  11,    6, 1024,  612, 1408,  816 }, /* 800x600 */
 
1069
        {  22,   21, 1400,  784, 1408,  816 }, /* 1024x768 */
 
1070
        {   0,    0,    0,    0,    0,    0 }, /* 1280x1024 */
 
1071
        {   1,    1, 1408,  816, 1408,  816 }, /* 1280x800 */
 
1072
        {   0,    0,    0,    0,    0,    0 }, /* 1280x768 - patch index */
 
1073
        {   0,    0,    0,    0,    0,    0 }  /* 1280x720 */
 
1074
};
 
1075
#endif
 
1076
 
 
1077
static const struct SiS_LCDData SiS_LCD1280x854Data[] = /* 2.21.00CS (LVDS) */
 
1078
{
 
1079
        {  56,   15,  936,  410, 1664,  861 },  /* 640x400 */
 
1080
        {  64,   25, 1586,  355, 1664,  861 },
 
1081
        {  56,   15,  936,  410, 1664,  861 },
 
1082
        {  64,   25, 1586,  355, 1664,  861 },
 
1083
        {  91,   45, 1464,  485, 1664,  861 },  /* 640x480 */
 
1084
        { 182,   75,  976,  605, 1664,  861 },  /* 800x600 */
 
1085
        {  91,   66, 1342,  774, 1664,  861 },  /* 1024x768 */
 
1086
        {   0,    0,    0,    0,    0,    0 },  /* 1280x1024 */
 
1087
        {  26,   25, 1708,  807, 1664,  861 },  /* 1280x800 */
 
1088
        {  13,   12, 1708,  774, 1664,  861 },  /* 1280x768 - patch index */
 
1089
        {  52,   45, 1708,  725, 1664,  861 },  /* 1280x720 */
 
1090
        {   0,    0,    0,    0,    0,    0 },
 
1091
        {   0,    0,    0,    0,    0,    0 },
 
1092
        {   1,    1, 1664,  861, 1664,  861 }   /* 1280x854 */
 
1093
};
 
1094
 
 
1095
static const struct SiS_LCDData SiS_LCD1280x960Data[] =
 
1096
{
 
1097
        {    9,   2,  800,  500, 1800, 1000 },
 
1098
        {    9,   2,  800,  500, 1800, 1000 },
 
1099
        {    4,   1,  900,  500, 1800, 1000 },
 
1100
        {    4,   1,  900,  500, 1800, 1000 },
 
1101
        {    9,   2,  800,  500, 1800, 1000 },
 
1102
        {   30,  11, 1056,  625, 1800, 1000 },
 
1103
        {    5,   3, 1350,  800, 1800, 1000 },
 
1104
        {    1,   1, 1576, 1050, 1576, 1050 },
 
1105
        {    1,   1, 1800, 1000, 1800, 1000 },
 
1106
        {   0,    0,    0,    0,    0,    0 },
 
1107
        {   0,    0,    0,    0,    0,    0 },
 
1108
        {   0,    0,    0,    0,    0,    0 },
 
1109
        {   0,    0,    0,    0,    0,    0 },
 
1110
        {   0,    0,    0,    0,    0,    0 }
 
1111
};
 
1112
 
 
1113
static const struct SiS_LCDData SiS_StLCD1400x1050Data[] =
 
1114
{
 
1115
        { 211,  100, 2100,  408, 1688, 1066 },
 
1116
        { 211,   64, 1536,  358, 1688, 1066 },
 
1117
        { 211,  100, 2100,  408, 1688, 1066 },
 
1118
        { 211,   64, 1536,  358, 1688, 1066 },
 
1119
        { 211,   48,  840,  488, 1688, 1066 },
 
1120
        { 211,   72, 1008,  609, 1688, 1066 },
 
1121
        { 211,  128, 1400,  776, 1688, 1066 },
 
1122
        { 211,  205, 1680, 1041, 1688, 1066 },
 
1123
        {   1,    1, 1688, 1066, 1688, 1066 },
 
1124
        {   0,    0,    0,    0,    0,    0 },
 
1125
        {   0,    0,    0,    0,    0,    0 },
 
1126
        {   0,    0,    0,    0,    0,    0 },
 
1127
        {   0,    0,    0,    0,    0,    0 },
 
1128
        {   0,    0,    0,    0,    0,    0 }
 
1129
};
 
1130
 
 
1131
static const struct SiS_LCDData SiS_ExtLCD1400x1050Data[] =
 
1132
{
 
1133
/*      { 211,   60, 1260,  410, 1688, 1066 },    640x400 (6330) */
 
1134
        { 211,  100, 2100,  408, 1688, 1066 }, /* 640x400 (6325) WORKS */
 
1135
        { 211,   64, 1536,  358, 1688, 1066 },
 
1136
        { 211,  100, 2100,  408, 1688, 1066 },
 
1137
        { 211,   64, 1536,  358, 1688, 1066 },
 
1138
/*      { 211,   80, 1400,  490, 1688, 1066 },    640x480 (6330) */
 
1139
        { 211,   48,  840,  488, 1688, 1066 }, /* 640x480 (6325) WORKS */
 
1140
/*      { 211,  117, 1638,  613, 1688, 1066 },    800x600 (6330) */
 
1141
        { 211,   72, 1008,  609, 1688, 1066 }, /* 800x600 (6325) WORKS */
 
1142
        { 211,  128, 1400,  776, 1688, 1066 }, /* 1024x768 */
 
1143
        { 211,  205, 1680, 1041, 1688, 1066 }, /* 1280x1024 - not used (always unscaled) */
 
1144
        {   1,    1, 1688, 1066, 1688, 1066 }, /* 1400x1050 */
 
1145
        {   0,    0,    0,    0,    0,    0 }, /* kludge */
 
1146
        { 211,  120, 1400,  730, 1688, 1066 }, /* 1280x720 */
 
1147
        {   0,    0,    0,    0,    0,    0 },
 
1148
        {   0,    0,    0,    0,    0,    0 },
 
1149
        {   0,    0,    0,    0,    0,    0 }
 
1150
};
 
1151
 
 
1152
static const struct SiS_LCDData SiS_LCD1680x1050Data[] =
 
1153
{
 
1154
        {  95,   24, 1260,  410, 1900, 1066 }, /*  0 640x400 */
 
1155
        {  10,    3, 1710,  362, 1900, 1066 },
 
1156
        {  95,   24, 1260,  410, 1900, 1066 },
 
1157
        {  10,    3, 1710,  362, 1900, 1066 },
 
1158
        {  95,   32, 1400,  490, 1900, 1066 }, /*  4 640x480 */
 
1159
        {  95,   42, 1470,  610, 1900, 1066 }, /*  5 800x600 */
 
1160
        {  95,   64, 1750,  784, 1900, 1066 }, /*  6 1024x768 */
 
1161
        {  95,   94, 1900, 1055, 1900, 1066 }, /*  7 1280x1024 */
 
1162
        {  41,   31, 1900,  806, 1900, 1066 }, /*  8 1280x768 */
 
1163
        {  95,   69, 1800,  817, 1900, 1066 }, /*  9 1280x800 patch index */
 
1164
        {  13,    9, 1900,  739, 1900, 1066 }, /* 10 1280x720 */
 
1165
        {  95,   94, 1880, 1066, 1900, 1066 }, /* 11 1400x1050 patch index */
 
1166
        {   1,    1, 1900, 1066, 1900, 1066 }, /* 12 1680x1050 */
 
1167
        {   0,    0,    0,    0,    0,    0 }
 
1168
};
 
1169
 
 
1170
static const struct SiS_LCDData SiS_StLCD1600x1200Data[] =
 
1171
{
 
1172
        {27,  4, 800, 500, 2160, 1250 },
 
1173
        {27,  4, 800, 500, 2160, 1250 },
 
1174
        { 6,  1, 900, 500, 2160, 1250 },
 
1175
        { 6,  1, 900, 500, 2160, 1250 },
 
1176
        {27,  1, 800, 500, 2160, 1250 },
 
1177
        { 4,  1,1080, 625, 2160, 1250 },
 
1178
        { 5,  2,1350, 800, 2160, 1250 },
 
1179
        {135,88,1600,1100, 2160, 1250 },
 
1180
        {72, 49,1680,1092, 2160, 1250 },
 
1181
        { 1,  1,2160,1250, 2160, 1250 },
 
1182
        { 0,  0,   0,   0,    0,    0 },
 
1183
        { 0,  0,   0,   0,    0,    0 },
 
1184
        { 0,  0,   0,   0,    0,    0 },
 
1185
        { 0,  0,   0,   0,    0,    0 }
 
1186
};
 
1187
 
 
1188
static const struct SiS_LCDData SiS_ExtLCD1600x1200Data[] =
 
1189
{
 
1190
        {72,11, 990, 422, 2160, 1250 }, /* 640x400 (6330) WORKS */
 
1191
/*      {27, 4, 800, 500, 2160, 1250 },    640x400 (6235) */
 
1192
        {27, 4, 800, 500, 2160, 1250 },
 
1193
        { 6, 1, 900, 500, 2160, 1250 },
 
1194
        { 6, 1, 900, 500, 2160, 1250 },
 
1195
        {45, 8, 960, 505, 2160, 1250 }, /* 640x480 (6330) WORKS */
 
1196
/*      {27, 1, 800, 500, 2160, 1250 },    640x480 (6325) */
 
1197
        { 4, 1,1080, 625, 2160, 1250 },
 
1198
        { 5, 2,1350, 800, 2160, 1250 },
 
1199
        {27,16,1500,1064, 2160, 1250 }, /* 1280x1024 */
 
1200
        {72,49,1680,1092, 2160, 1250 }, /* 1400x1050 (6330, was not supported on 6325) */
 
1201
        { 1, 1,2160,1250, 2160, 1250 },
 
1202
        { 0, 0,   0,   0,    0,    0 },
 
1203
        { 0, 0,   0,   0,    0,    0 },
 
1204
        { 0, 0,   0,   0,    0,    0 },
 
1205
        { 0, 0,   0,   0,    0,    0 }
 
1206
};
 
1207
 
 
1208
static const struct SiS_LCDData SiS_NoScaleData[] =
 
1209
{
 
1210
        { 1, 1, 800, 449, 800, 449 },  /* 0x00: 320x200, 640x400 */
 
1211
        { 1, 1, 800, 449, 800, 449 },
 
1212
        { 1, 1, 900, 449, 900, 449 },
 
1213
        { 1, 1, 900, 449, 900, 449 },
 
1214
        { 1, 1, 800, 525, 800, 525 },  /* 0x04: 320x240, 640x480  */
 
1215
        { 1, 1,1056, 628,1056, 628 },  /* 0x05: 400x300, 800x600  */
 
1216
        { 1, 1,1344, 806,1344, 806 },  /* 0x06: 512x384, 1024x768 */
 
1217
        { 1, 1,1688,1066,1688,1066 },  /* 0x07: 1280x1024 */
 
1218
        { 1, 1,1688, 802,1688, 802 },  /* 0x08: 1280x768: Fujitsu, TMDS only */
 
1219
        { 1, 1,2160,1250,2160,1250 },  /* 0x09: 1600x1200 */
 
1220
        { 1, 1,1800,1000,1800,1000 },  /* 0x0a: 1280x960  */
 
1221
        { 1, 1,1688,1066,1688,1066 },  /* 0x0b: 1400x1050 */
 
1222
        { 1, 1,1650, 750,1650, 750 },  /* 0x0c: 1280x720 (TMDS, projector)  */
 
1223
        { 1, 1,1552, 812,1552, 812 },  /* 0x0d: 1280x800_2 (LVDS) (was: 1408,816/ 1656,841) */
 
1224
        { 1, 1,1900,1066,1900,1066 },  /* 0x0e: 1680x1050 (LVDS) */
 
1225
        { 1, 1,1660, 806,1660, 806 },  /* 0x0f: 1280x768_2 (LVDS) */
 
1226
        { 1, 1,1664, 798,1664, 798 },  /* 0x10: 1280x768_3 (NetVista SiS 301) - TODO */
 
1227
        { 1, 1,1688, 802,1688, 802 },  /* 0x11: 1280x768   (TMDS Fujitsu) */
 
1228
        { 1, 1,1408, 806,1408, 806 },  /* 0x12: 1280x720 (LVDS) */
 
1229
        { 1, 1, 896, 497, 896, 497 },  /* 0x13: 720x480 */
 
1230
        { 1, 1, 912, 597, 912, 597 },  /* 0x14: 720x576 */
 
1231
        { 1, 1, 912, 597, 912, 597 },  /* 0x15: 768x576 */
 
1232
        { 1, 1,1056, 497,1056, 497 },  /* 0x16: 848x480 */
 
1233
        { 1, 1,1064, 497,1064, 497 },  /* 0x17: 856x480 */
 
1234
        { 1, 1,1056, 497,1056, 497 },  /* 0x18: 800x480 */
 
1235
        { 1, 1,1328, 739,1328, 739 },  /* 0x19: 1024x576 */
 
1236
        { 1, 1,1680, 892,1680, 892 },  /* 0x1a: 1152x864 */
 
1237
        { 1, 1,1808, 808,1808, 808 },  /* 0x1b: 1360x768 */
 
1238
        { 1, 1,1104, 563,1104, 563 },  /* 0x1c: 960x540 */
 
1239
        { 1, 1,1120, 618,1120, 618 },  /* 0x1d: 960x600 */
 
1240
        { 1, 1,1408, 816,1408, 816 },  /* 0x1f: 1280x800 (TMDS special) */
 
1241
        { 1, 1,1760,1235,1760,1235 },  /* 0x20: 1600x1200 for LCDA */
 
1242
        { 1, 1,2048,1320,2048,1320 },  /* 0x21: 1600x1200 for non-SiS LVDS */
 
1243
        { 1, 1,1664, 861,1664, 861 }   /* 0x22: 1280x854 */
 
1244
};
 
1245
 
 
1246
/**************************************************************/
 
1247
/* LVDS ----------------------------------------------------- */
 
1248
/**************************************************************/
 
1249
 
 
1250
/* FSTN/DSTN 320x240, 2 variants */
 
1251
static const struct SiS_LVDSData SiS_LVDS320x240Data_1[]=
 
1252
{
 
1253
        { 848, 433, 400, 525},
 
1254
        { 848, 389, 400, 525},
 
1255
        { 848, 433, 400, 525},
 
1256
        { 848, 389, 400, 525},
 
1257
        { 848, 518, 400, 525},
 
1258
        {1056, 628, 400, 525},
 
1259
        { 400, 525, 400, 525}  /* xSTN */
 
1260
};
 
1261
 
 
1262
static const struct SiS_LVDSData SiS_LVDS320x240Data_2[]=
 
1263
{
 
1264
        { 800, 445, 800, 525},
 
1265
        { 800, 395, 800, 525},
 
1266
        { 800, 445, 800, 525},
 
1267
        { 800, 395, 800, 525},
 
1268
        { 800, 525, 800, 525},
 
1269
        {1056, 628,1056, 628},
 
1270
        { 480, 525, 480, 525} /* xSTN */
 
1271
};
 
1272
 
 
1273
static const struct SiS_LVDSData SiS_LVDS640x480Data_1[]=
 
1274
{
 
1275
        { 800, 445, 800, 525},   /* 800, 449, 800, 449 */
 
1276
        { 800, 395, 800, 525},
 
1277
        { 800, 445, 800, 525},
 
1278
        { 800, 395, 800, 525},
 
1279
        { 800, 525, 800, 525}
 
1280
};
 
1281
 
 
1282
static const struct SiS_LVDSData SiS_LVDS800x600Data_1[]=
 
1283
{
 
1284
        { 848, 433,1060, 629},
 
1285
        { 848, 389,1060, 629},
 
1286
        { 848, 433,1060, 629},
 
1287
        { 848, 389,1060, 629},
 
1288
        { 848, 518,1060, 629},
 
1289
        {1056, 628,1056, 628}
 
1290
};
 
1291
 
 
1292
static const struct SiS_LVDSData SiS_LVDS1024x600Data_1[] =
 
1293
{
 
1294
        { 840, 604,1344, 800},
 
1295
        { 840, 560,1344, 800},
 
1296
        { 840, 604,1344, 800},
 
1297
        { 840, 560,1344, 800},
 
1298
        { 840, 689,1344, 800},
 
1299
        {1050, 800,1344, 800},
 
1300
        {1344, 800,1344, 800}
 
1301
};
 
1302
 
 
1303
static const struct SiS_LVDSData SiS_LVDS1024x768Data_1[]=
 
1304
{
 
1305
        { 840, 438,1344, 806},
 
1306
        { 840, 409,1344, 806},
 
1307
        { 840, 438,1344, 806},
 
1308
        { 840, 409,1344, 806},
 
1309
        { 840, 518,1344, 806},   /* 640x480 */
 
1310
        {1050, 638,1344, 806},   /* 800x600 */
 
1311
        {1344, 806,1344, 806},   /* 1024x768 */
 
1312
};
 
1313
 
 
1314
static const struct SiS_LVDSData SiS_CHTVUNTSCData[]=
 
1315
{
 
1316
        { 840, 600, 840, 600},
 
1317
        { 840, 600, 840, 600},
 
1318
        { 840, 600, 840, 600},
 
1319
        { 840, 600, 840, 600},
 
1320
        { 784, 600, 784, 600},
 
1321
        {1064, 750,1064, 750},
 
1322
        {1160, 945,1160, 945}
 
1323
};
 
1324
 
 
1325
static const struct SiS_LVDSData SiS_CHTVONTSCData[]=
 
1326
{
 
1327
        { 840, 525, 840, 525},
 
1328
        { 840, 525, 840, 525},
 
1329
        { 840, 525, 840, 525},
 
1330
        { 840, 525, 840, 525},
 
1331
        { 784, 525, 784, 525},
 
1332
        {1040, 700,1040, 700},
 
1333
        {1160, 840,1160, 840}
 
1334
};
 
1335
 
 
1336
/* CRT1 CRTC data for slave modes */
 
1337
 
 
1338
static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1320x240_1[] =
 
1339
{
 
1340
 {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
 
1341
   0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
 
1342
   0x00 }},
 
1343
 {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
 
1344
   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
 
1345
   0x00 }},
 
1346
 {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
 
1347
   0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
 
1348
   0x00 }},
 
1349
 {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
 
1350
   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
 
1351
   0x00 }},
 
1352
 {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
 
1353
   0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
 
1354
   0x00 }},
 
1355
 {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
 
1356
   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
 
1357
   0x01 }},
 
1358
 {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
 
1359
   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
 
1360
   0x00 }}
 
1361
};
 
1362
 
 
1363
static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1320x240_2[] =
 
1364
{
 
1365
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1366
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1367
   0x00}},
 
1368
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1369
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1370
   0x00}},
 
1371
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1372
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1373
   0x00}},
 
1374
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1375
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1376
   0x00}},
 
1377
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1378
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1379
   0x00}},
 
1380
 {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
 
1381
   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
 
1382
   0x01}},
 
1383
#if 0
 
1384
 {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
 
1385
   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
 
1386
   0x00}}
 
1387
#endif
 
1388
 {{0x5f,0x4f,0x83,0x55,0x81,0x0b,0x3e,
 
1389
   0xe9,0x8b,0xe8,0x0c,0x00,0x00,0x05,
 
1390
   0x00}},
 
1391
};
 
1392
 
 
1393
static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1320x240_2_H[] =
 
1394
{
 
1395
 {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
 
1396
   0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
 
1397
   0x00}},
 
1398
 {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
 
1399
   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
 
1400
   0x00}},
 
1401
 {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
 
1402
   0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
 
1403
   0x00}},
 
1404
 {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
 
1405
   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
 
1406
   0x00}},
 
1407
 {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
 
1408
   0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
 
1409
   0x00}},
 
1410
 {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
 
1411
   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
 
1412
   0x01}},
 
1413
 {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
 
1414
   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
 
1415
   0x00}}
 
1416
};
 
1417
 
 
1418
static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1320x240_3[] =
 
1419
{
 
1420
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1421
   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
 
1422
   0x00}},
 
1423
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1424
   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
 
1425
   0x00}},
 
1426
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1427
   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
 
1428
   0x00}},
 
1429
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1430
   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
 
1431
   0x00}},
 
1432
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1433
   0xe9,0x8b,0xdf,0x04,0x00,0x00,0x05,
 
1434
   0x00}},
 
1435
 {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
 
1436
   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
 
1437
   0x01}},
 
1438
 {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
 
1439
   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
 
1440
   0x00}}
 
1441
};
 
1442
 
 
1443
static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1320x240_3_H[] =
 
1444
{
 
1445
 {{0x65,0x4f,0x89,0x56,0x83,0xaa,0x1f,
 
1446
   0x90,0x85,0x8f,0xab,0x30,0x00,0x05,
 
1447
   0x00}},
 
1448
 {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
 
1449
   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
 
1450
   0x00}},
 
1451
 {{0x65,0x4f,0x89,0x54,0x9f,0xc4,0x1f,
 
1452
   0x92,0x89,0x8f,0xb5,0x30,0x00,0x01,
 
1453
   0x00}},
 
1454
 {{0x65,0x4f,0x89,0x56,0x83,0x83,0x1f,
 
1455
   0x5e,0x83,0x5d,0x79,0x10,0x00,0x05,
 
1456
   0x00}},
 
1457
 {{0x65,0x4f,0x89,0x56,0x83,0x04,0x3e,
 
1458
   0xe0,0x85,0xdf,0xfb,0x10,0x00,0x05,
 
1459
   0x00}},
 
1460
 {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
 
1461
   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
 
1462
   0x01}},
 
1463
 {{0x2d,0x27,0x90,0x2c,0x80,0x0b,0x3e,
 
1464
   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
 
1465
   0x00}}
 
1466
};
 
1467
 
 
1468
static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1640x480_1[] =
 
1469
{
 
1470
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1471
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1472
   0x00}},
 
1473
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1474
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1475
   0x00}},
 
1476
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1477
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1478
   0x00}},
 
1479
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1480
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1481
   0x00}},
 
1482
 {{0x5f,0x4f,0x82,0x55,0x81,0x0b,0x3e,
 
1483
   0xe9,0x8b,0xdf,0x04,0x30,0x00,0x05,
 
1484
   0x00}},
 
1485
 {{0x7f,0x63,0x83,0x6c,0x1c,0x72,0xf0,
 
1486
   0x58,0x8c,0x57,0x73,0x20,0x00,0x06,
 
1487
   0x01}}
 
1488
};
 
1489
 
 
1490
static const struct SiS_LVDSCRT1Data SiS_LVDSCRT1640x480_1_H[] =
 
1491
{
 
1492
 {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
 
1493
   0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
 
1494
   0x00}},
 
1495
 {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
 
1496
   0x83,0x85,0x63,0xba,0x00,0x00,0x00,
 
1497
   0x00}},
 
1498
 {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
 
1499
   0x9c,0x8e,0x96,0xb9,0x00,0x00,0x00,
 
1500
   0x00}},
 
1501
 {{0x2d,0x28,0x90,0x2b,0xa0,0xbf,0x1f,
 
1502
   0x83,0x85,0x63,0xba,0x00,0x00,0x00,
 
1503
   0x00}},
 
1504
 {{0x2d,0x28,0x90,0x2c,0x80,0x0b,0x3e,
 
1505
   0xe9,0x8b,0xe7,0x04,0x00,0x00,0x00,
 
1506
   0x00}}
 
1507
};
 
1508
 
 
1509
bool            SiSInitPtr(struct SiS_Private *SiS_Pr);
 
1510
unsigned short  SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay,
 
1511
                                int VDisplay, int Depth, bool FSTN,
 
1512
                                unsigned short CustomT, int LCDwith, int LCDheight,
 
1513
                                unsigned int VBFlags2);
 
1514
unsigned short  SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay,
 
1515
                                int VDisplay, int Depth, unsigned int VBFlags2);
 
1516
unsigned short  SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay,
 
1517
                                int VDisplay, int Depth, unsigned int VBFlags2);
 
1518
 
 
1519
void            SiS_DisplayOn(struct SiS_Private *SiS_Pr);
 
1520
void            SiS_DisplayOff(struct SiS_Private *SiS_Pr);
 
1521
void            SiSRegInit(struct SiS_Private *SiS_Pr, SISIOADDRESS BaseAddr);
 
1522
void            SiS_SetEnableDstn(struct SiS_Private *SiS_Pr, int enable);
 
1523
void            SiS_SetEnableFstn(struct SiS_Private *SiS_Pr, int enable);
 
1524
unsigned short  SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1525
                                unsigned short ModeIdIndex);
 
1526
bool            SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr);
 
1527
 
 
1528
bool            SiS_SearchModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo,
 
1529
                                unsigned short *ModeIdIndex);
 
1530
unsigned short  SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1531
                                unsigned short ModeIdIndex);
 
1532
unsigned short  SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
 
1533
unsigned short  SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
 
1534
unsigned short  SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1535
                                unsigned short ModeIdIndex);
 
1536
unsigned short  SiS_GetOffset(struct SiS_Private *SiS_Pr,unsigned short ModeNo,
 
1537
                                unsigned short ModeIdIndex, unsigned short RRTI);
 
1538
#ifdef CONFIG_FB_SIS_300
 
1539
void            SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *idx1,
 
1540
                                unsigned short *idx2);
 
1541
unsigned short  SiS_GetFIFOThresholdB300(unsigned short idx1, unsigned short idx2);
 
1542
unsigned short  SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
 
1543
#endif
 
1544
void            SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
 
1545
bool            SiSSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
 
1546
void            SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
 
1547
void            SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1548
                                unsigned short ModeIdIndex);
 
1549
void            SiS_Generic_ConvertCRData(struct SiS_Private *SiS_Pr, unsigned char *crdata, int xres,
 
1550
                                int yres, struct fb_var_screeninfo *var, bool writeres);
 
1551
 
 
1552
/* From init301.c: */
 
1553
extern void             SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1554
                                unsigned short ModeIdIndex, int chkcrt2mode);
 
1555
extern void             SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1556
                                unsigned short ModeIdIndex);
 
1557
extern void             SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
 
1558
extern void             SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1559
                                unsigned short ModeIdIndex);
 
1560
extern void             SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
 
1561
extern void             SiS_DisableBridge(struct SiS_Private *);
 
1562
extern bool             SiS_SetCRT2Group(struct SiS_Private *, unsigned short);
 
1563
extern unsigned short   SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1564
                                unsigned short ModeIdIndex);
 
1565
extern void             SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
 
1566
extern unsigned short   SiS_GetResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1567
                                unsigned short ModeIdIndex);
 
1568
extern unsigned short   SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
 
1569
extern unsigned short   SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 
1570
                                unsigned short ModeIdIndex, unsigned short RRTI);
 
1571
extern bool             SiS_IsVAMode(struct SiS_Private *);
 
1572
extern bool             SiS_IsDualEdge(struct SiS_Private *);
 
1573
 
 
1574
#ifdef CONFIG_FB_SIS_300
 
1575
extern unsigned int     sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
 
1576
extern void             sisfb_write_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg,
 
1577
                                unsigned int val);
 
1578
#endif
 
1579
#ifdef CONFIG_FB_SIS_315
 
1580
extern void             sisfb_write_nbridge_pci_byte(struct SiS_Private *SiS_Pr, int reg,
 
1581
                                unsigned char val);
 
1582
extern unsigned int     sisfb_read_mio_pci_word(struct SiS_Private *SiS_Pr, int reg);
 
1583
#endif
 
1584
 
 
1585
#endif
 
1586