1/* $XFree86$ */
2/* $XdotOrg$ */
3/*
4 * OEM Data for 315/330/340 series
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
53static const unsigned char SiS310_LCDDelayCompensation_301[] = /* 301 */
54{
55 0x00,0x00,0x00, /* 800x600 */
56 0x0b,0x0b,0x0b, /* 1024x768 */
57 0x08,0x08,0x08, /* 1280x1024 */
58 0x00,0x00,0x00, /* 640x480 (unknown) */
59 0x00,0x00,0x00, /* 1024x600 (unknown) */
60 0x00,0x00,0x00, /* 1152x864 (unknown) */
61 0x08,0x08,0x08, /* 1280x960 (guessed) */
62 0x00,0x00,0x00, /* 1152x768 (unknown) */
63 0x08,0x08,0x08, /* 1400x1050 */
64 0x08,0x08,0x08, /* 1280x768 (guessed) */
65 0x00,0x00,0x00, /* 1600x1200 */
66 0x00,0x00,0x00, /* 320x480 (unknown) */
67 0x00,0x00,0x00,
68 0x00,0x00,0x00,
69 0x00,0x00,0x00
70};
71
72/* This is contained in 650+301B BIOSes, but it is wrong - so we don't use it */
73static const unsigned char SiS310_LCDDelayCompensation_650301LV[] = /* 650 + 30xLV */
74{
75 0x01,0x01,0x01, /* 800x600 */
76 0x01,0x01,0x01, /* 1024x768 */
77 0x01,0x01,0x01, /* 1280x1024 */
78 0x01,0x01,0x01, /* 640x480 (unknown) */
79 0x01,0x01,0x01, /* 1024x600 (unknown) */
80 0x01,0x01,0x01, /* 1152x864 (unknown) */
81 0x01,0x01,0x01, /* 1280x960 (guessed) */
82 0x01,0x01,0x01, /* 1152x768 (unknown) */
83 0x01,0x01,0x01, /* 1400x1050 */
84 0x01,0x01,0x01, /* 1280x768 (guessed) */
85 0x01,0x01,0x01, /* 1600x1200 */
86 0x02,0x02,0x02,
87 0x02,0x02,0x02,
88 0x02,0x02,0x02,
89 0x02,0x02,0x02
90};
91
92static const unsigned char SiS310_LCDDelayCompensation_651301LV[] = /* M650/651 301LV */
93{
94 0x33,0x33,0x33, /* 800x600 (guessed) - new: PanelType, not PanelRes ! */
95 0x33,0x33,0x33, /* 1024x768 */
96 0x33,0x33,0x33, /* 1280x1024 */
97 0x33,0x33,0x33, /* 640x480 (unknown) */
98 0x33,0x33,0x33, /* 1024x600 (unknown) */
99 0x33,0x33,0x33, /* 1152x864 (unknown) */
100 0x33,0x33,0x33, /* 1280x960 (guessed) */
101 0x33,0x33,0x33, /* 1152x768 (unknown) */
102 0x33,0x33,0x33, /* 1400x1050 */
103 0x33,0x33,0x33, /* 1280x768 (guessed) */
104 0x33,0x33,0x33, /* 1600x1200 */
105 0x33,0x33,0x33,
106 0x33,0x33,0x33,
107 0x33,0x33,0x33,
108 0x33,0x33,0x33
109};
110
111static const unsigned char SiS310_LCDDelayCompensation_651302LV[] = /* M650/651 302LV */
112{
113 0x33,0x33,0x33, /* 800x600 (guessed) */
114 0x33,0x33,0x33, /* 1024x768 */
115 0x33,0x33,0x33, /* 1280x1024 */
116 0x33,0x33,0x33, /* 640x480 (unknown) */
117 0x33,0x33,0x33, /* 1024x600 (unknown) */
118 0x33,0x33,0x33, /* 1152x864 (unknown) */
119 0x33,0x33,0x33, /* 1280x960 (guessed) */
120 0x33,0x33,0x33, /* 1152x768 (unknown) */
121 0x33,0x33,0x33, /* 1400x1050 */
122 0x33,0x33,0x33, /* 1280x768 (guessed) */
123 0x33,0x33,0x33, /* 1600x1200 */
124 0x33,0x33,0x33,
125 0x33,0x33,0x33,
126 0x33,0x33,0x33,
127 0x33,0x33,0x33
128};
129
130static const unsigned char SiS310_LCDDelayCompensation_3xx301B[] = /* 30xB */
131{
132 0x01,0x01,0x01, /* 800x600 */
133 0x0C,0x0C,0x0C, /* 1024x768 */
134 0x0C,0x0C,0x0C, /* 1280x1024 */
135 0x08,0x08,0x08, /* 640x480 */
136 0x0C,0x0C,0x0C, /* 1024x600 (guessed) */
137 0x0C,0x0C,0x0C, /* 1152x864 (guessed) */
138 0x0C,0x0C,0x0C, /* 1280x960 (guessed) */
139 0x0C,0x0C,0x0C, /* 1152x768 (guessed) */
140 0x0C,0x0C,0x0C, /* 1400x1050 (guessed) */
141 0x0C,0x0C,0x0C, /* 1280x768 (guessed) */
142 0x0C,0x0C,0x0C, /* 1600x1200 (guessed) */
143 0x02,0x02,0x02,
144 0x02,0x02,0x02,
145 0x02,0x02,0x02,
146 0x02,0x02,0x02
147};
148
149static const unsigned char SiS310_LCDDelayCompensation_3xx301LV[] = /* 315+30xLV */
150{
151 0x01,0x01,0x01, /* 800x600 */
152 0x04,0x04,0x04, /* 1024x768 (A531/BIOS 1.14.05f: 4 - works with 6 */
153 0x0C,0x0C,0x0C, /* 1280x1024 */
154 0x08,0x08,0x08, /* 640x480 */
155 0x0C,0x0C,0x0C, /* 1024x600 (guessed) */
156 0x0C,0x0C,0x0C, /* 1152x864 (guessed) */
157 0x0C,0x0C,0x0C, /* 1280x960 (guessed) */
158 0x0C,0x0C,0x0C, /* 1152x768 (guessed) */
159 0x0C,0x0C,0x0C, /* 1400x1050 (guessed) */
160 0x0C,0x0C,0x0C, /* 1280x768 (guessed) */
161 0x0C,0x0C,0x0C, /* 1600x1200 (guessed) */
162 0x02,0x02,0x02,
163 0x02,0x02,0x02,
164 0x02,0x02,0x02,
165 0x02,0x02,0x02
166};
167
168static const unsigned char SiS310_TVDelayCompensation_301[] = /* 301 */
169{
170 0x02,0x02, /* NTSC Enhanced, Standard */
171 0x02,0x02, /* PAL */
172 0x08,0x0b /* HiVision */
173};
174
175static const unsigned char SiS310_TVDelayCompensation_301B[] = /* 30xB, 30xLV */
176{
177 0x03,0x03,
178 0x03,0x03,
179 0x03,0x03
180};
181
182static const unsigned char SiS310_TVDelayCompensation_740301B[] = /* 740 + 30xB (30xLV?) */
183{
184 0x05,0x05,
185 0x05,0x05,
186 0x05,0x05
187};
188
189static const unsigned char SiS310_TVDelayCompensation_651301LV[] = /* M650, 651, 301LV */
190{
191 0x33,0x33,
192 0x33,0x33,
193 0x33,0x33
194};
195
196static const unsigned char SiS310_TVDelayCompensation_651302LV[] = /* M650, 651, 302LV */
197{
198 0x33,0x33,
199 0x33,0x33,
200 0x33,0x33
201};
202
203#if 0 /* Not used */
204static const unsigned char SiS_TVDelay661_301[] = /* 661, 301 */
205{
206 0x44,0x44,
207 0x44,0x44,
208 0x00,0x00,
209 0x44,0x44,
210 0x44,0x44,
211 0x44,0x44
212};
213
214static const unsigned char SiS_TVDelay661_301B[] = /* 661, 301B et al */
215{
216 0x44,0x44,
217 0x44,0x44,
218 0x00,0x00,
219 0x44,0x44,
220 0x44,0x44,
221 0x44,0x44
222};
223#endif
224
225static const unsigned char SiS310_TVDelayCompensation_LVDS[] = /* LVDS */
226{
227 0x0a,0x0a,
228 0x0a,0x0a,
229 0x0a,0x0a
230};
231
232static const unsigned char SiS310_TVAntiFlick1[6][2] =
233{
234 {0x4,0x0},
235 {0x4,0x8},
236 {0x0,0x0},
237 {0x0,0x0},
238 {0x0,0x0},
239 {0x0,0x0}
240};
241
242static const unsigned char SiS310_TVEdge1[6][2] =
243{
244 {0x0,0x4},
245 {0x0,0x4},
246 {0x0,0x0},
247 {0x0,0x0},
248 {0x0,0x0},
249 {0x0,0x0}
250};
251
252static const unsigned char SiS310_TVYFilter1[5][8][4] =
253{
254 {
255 {0x00,0xf4,0x10,0x38}, /* NTSC */
256 {0x00,0xf4,0x10,0x38},
257 {0xeb,0x04,0x25,0x18},
258 {0xf1,0x04,0x1f,0x18},
259 {0x00,0xf4,0x10,0x38},
260 {0xeb,0x04,0x25,0x18},
261 {0xee,0x0c,0x22,0x08},
262 {0xeb,0x15,0x25,0xf6}
263 },
264 {
265 {0x00,0xf4,0x10,0x38}, /* PAL */
266 {0x00,0xf4,0x10,0x38},
267 {0xf1,0xf7,0x1f,0x32},
268 {0xf3,0x00,0x1d,0x20},
269 {0x00,0xf4,0x10,0x38},
270 {0xf1,0xf7,0x1f,0x32},
271 {0xf3,0x00,0x1d,0x20},
272 {0xfc,0xfb,0x14,0x2a}
273 },
274 {
275 {0x00,0x00,0x00,0x00}, /* HiVision */
276 {0x00,0xf4,0x10,0x38},
277 {0x00,0xf4,0x10,0x38},
278 {0xeb,0x04,0x25,0x18},
279 {0xf7,0x06,0x19,0x14},
280 {0x00,0xf4,0x10,0x38},
281 {0xeb,0x04,0x25,0x18},
282 {0xee,0x0c,0x22,0x08}
283 },
284 {
285 {0x00,0xf4,0x10,0x38}, /* PAL-M */
286 {0x00,0xf4,0x10,0x38},
287 {0xeb,0x04,0x10,0x18},
288 {0xf7,0x06,0x19,0x14},
289 {0x00,0xf4,0x10,0x38},
290 {0xeb,0x04,0x25,0x18},
291 {0xeb,0x04,0x25,0x18},
292 {0xeb,0x15,0x25,0xf6}
293 },
294 {
295 {0x00,0xf4,0x10,0x38}, /* PAL-N */
296 {0x00,0xf4,0x10,0x38},
297 {0xeb,0x04,0x10,0x18},
298 {0xf7,0x06,0x19,0x14},
299 {0x00,0xf4,0x10,0x38},
300 {0xeb,0x04,0x25,0x18},
301 {0xeb,0x04,0x25,0x18},
302 {0xeb,0x15,0x25,0xf6}
303 }
304};
305
306static const unsigned char SiS310_TVYFilter2[5][9][7] =
307{
308 {
309 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46}, /* NTSC */
310 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
311 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
312 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
313 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
314 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
315 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
316 {0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
317 {0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
318 },
319 {
320 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46}, /* PAL */
321 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
322 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
323 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
324 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
325 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
326 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
327 {0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
328 {0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
329 },
330 {
331 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22}, /* HiVision */
332 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
333 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
334 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
335 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
336 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
337 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
338 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
339 {0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22}
340 },
341 {
342 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46}, /* PAL-M */
343 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
344 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
345 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
346 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
347 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
348 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
349 {0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
350 {0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
351 },
352 {
353 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46}, /* PAL-N */
354 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
355 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
356 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
357 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
358 {0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
359 {0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
360 {0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
361 {0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
362 }
363};
364
365static const unsigned char SiS310_TVPhaseIncr1[3][2][4] =
366{
367 {
368 {0x21,0xed,0xba,0x08},
369 {0x21,0xed,0xba,0x08}
370 },
371 {
372 {0x2a,0x05,0xe3,0x00},
373 {0x2a,0x05,0xe3,0x00}
374 },
375 {
376 {0x2a,0x05,0xd3,0x00},
377 {0x2a,0x05,0xd3,0x00}
378 }
379};
380
381static const unsigned char SiS310_TVPhaseIncr2[3][2][4] =
382{
383 {
384 {0x21,0xf0,0x7b,0xd6},
385 {0x21,0xf0,0x7b,0xd6}
386 },
387 {
388 {0x2a,0x0a,0x41,0xe9},
389 {0x2a,0x0a,0x41,0xe9}
390 },
391 {
392 {0x2a,0x05,0xd3,0x00},
393 {0x2a,0x05,0xd3,0x00}
394 }
395};
396
397/**************************************************************/
398/* CUSTOM TIMING DATA --------------------------------------- */
399/**************************************************************/
400
401/* Inventec / Compaq Presario 3045US, 3017 */
402
403static const struct SiS_LCDData SiS310_ExtCompaq1280x1024Data[] =
404{
405 { 211, 60,1024, 501,1688,1066},
406 { 211, 60,1024, 508,1688,1066},
407 { 211, 60,1024, 501,1688,1066},
408 { 211, 60,1024, 508,1688,1066},
409 { 32, 15,1696, 501,1696,1066},
410 { 212, 75,1024, 621,1696,1066},
411 { 4, 3,1696, 810,1696,1066},
412 { 1, 1,1696,1066,1696,1066}
413};
414
415/* Asus A2xxxH _2 */
416
417static const struct SiS_Part2PortTbl SiS310_CRT2Part2_Asus1024x768_3[] =
418{
419 {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
420 {{0x2c,0x13,0x9a,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
421 {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
422 {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
423 {{0x38,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
424 {{0x38,0x13,0x16,0x25,0xff,0x5a,0x45,0x0a,0x07,0xfa,0x0a,0x24}},
425 {{0x36,0x13,0x13,0x25,0xff,0x5a,0x45,0x0a,0x07,0xfa,0x0a,0x24}},
426 {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
427 {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}}
428};
429
430
431
432
433

source code of linux/drivers/video/fbdev/sis/oem310.h