1 /* $XFree86$ */
2 /* $XdotOrg$ */
3 /*
4  * OEM Data for 315/330 series
5  *
6  * Copyright (C) 2001-2004 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 EXPRESSED 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 static const UCHAR 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 */
73 static const UCHAR 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 
92 static const UCHAR 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 
111 static const UCHAR 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 
130 static const UCHAR 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 
149 static const UCHAR 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 
168 static const UCHAR SiS310_TVDelayCompensation_301[] = 		/* 301 */
169 {
170 		 0x02,0x02,    /* NTSC Enhanced, Standard */
171                  0x02,0x02,    /* PAL */
172 		 0x08,0x0b     /* HiVision */
173 };
174 
175 static const UCHAR SiS310_TVDelayCompensation_301B[] =		/* 30xB, 30xLV */
176 {
177 		 0x03,0x03,
178 		 0x03,0x03,
179 		 0x03,0x03
180 };
181 
182 static const UCHAR SiS310_TVDelayCompensation_740301B[] =	/* 740 + 30xB (30xLV?) */
183 {
184 		 0x05,0x05,
185 		 0x05,0x05,
186 		 0x05,0x05
187 };
188 
189 static const UCHAR SiS310_TVDelayCompensation_651301LV[] =	/* M650, 651, 301LV */
190 {
191 		 0x33,0x33,
192 		 0x33,0x33,
193 		 0x33,0x33
194 };
195 
196 static const UCHAR SiS310_TVDelayCompensation_651302LV[] =	/* M650, 651, 302LV */
197 {
198 		 0x33,0x33,
199 		 0x33,0x33,
200 		 0x33,0x33
201 };
202 
203 static const UCHAR SiS_TVDelay661_301[] =			/* 661, 301 */
204 {
205 		 0x44,0x44,
206 		 0x44,0x44,
207 		 0x00,0x00,
208 		 0x44,0x44,
209 		 0x44,0x44,
210 		 0x44,0x44
211 };
212 
213 static const UCHAR SiS_TVDelay661_301B[] =			/* 661, 301B et al */
214 {
215 		 0x44,0x44,
216 		 0x44,0x44,
217 		 0x00,0x00,
218 		 0x44,0x44,
219 		 0x44,0x44,
220 		 0x44,0x44
221 };
222 
223 static const UCHAR SiS310_TVDelayCompensation_LVDS[] =		/* LVDS */
224 {
225 		 0x0a,0x0a,
226 		 0x0a,0x0a,
227 		 0x0a,0x0a
228 };
229 
230 static const UCHAR SiS310_TVAntiFlick1[6][2] =
231 {
232             {0x4,0x0},
233 	    {0x4,0x8},
234 	    {0x0,0x0},
235 	    {0x0,0x0},
236 	    {0x0,0x0},
237 	    {0x0,0x0}
238 };
239 
240 static const UCHAR SiS310_TVEdge1[6][2] =
241 {
242             {0x0,0x4},
243 	    {0x0,0x4},
244 	    {0x0,0x0},
245 	    {0x0,0x0},
246 	    {0x0,0x0},
247 	    {0x0,0x0}
248 };
249 
250 static const UCHAR SiS310_TVYFilter1[5][8][4] =
251 {
252  {
253 	{0x00,0xf4,0x10,0x38},	/* NTSC */
254 	{0x00,0xf4,0x10,0x38},
255 	{0xeb,0x04,0x25,0x18},
256 	{0xf1,0x04,0x1f,0x18},
257 	{0x00,0xf4,0x10,0x38},
258 	{0xeb,0x04,0x25,0x18},
259 	{0xee,0x0c,0x22,0x08},
260 	{0xeb,0x15,0x25,0xf6}
261  },
262  {
263 	{0x00,0xf4,0x10,0x38},	/* PAL */
264 	{0x00,0xf4,0x10,0x38},
265 	{0xf1,0xf7,0x1f,0x32},
266 	{0xf3,0x00,0x1d,0x20},
267 	{0x00,0xf4,0x10,0x38},
268 	{0xf1,0xf7,0x1f,0x32},
269 	{0xf3,0x00,0x1d,0x20},
270 	{0xfc,0xfb,0x14,0x2a}
271  },
272  {
273 	{0x00,0x00,0x00,0x00},	/* HiVision */
274 	{0x00,0xf4,0x10,0x38},
275 	{0x00,0xf4,0x10,0x38},
276 	{0xeb,0x04,0x25,0x18},
277 	{0xf7,0x06,0x19,0x14},
278 	{0x00,0xf4,0x10,0x38},
279 	{0xeb,0x04,0x25,0x18},
280 	{0xee,0x0c,0x22,0x08}
281  },
282  {
283  	{0x00,0xf4,0x10,0x38},	/* PAL-M */
284 	{0x00,0xf4,0x10,0x38},
285 	{0xeb,0x04,0x10,0x18},
286 	{0xf7,0x06,0x19,0x14},
287 	{0x00,0xf4,0x10,0x38},
288 	{0xeb,0x04,0x25,0x18},
289 	{0xeb,0x04,0x25,0x18},
290 	{0xeb,0x15,0x25,0xf6}
291  },
292  {
293  	{0x00,0xf4,0x10,0x38},	/* PAL-N */
294 	{0x00,0xf4,0x10,0x38},
295 	{0xeb,0x04,0x10,0x18},
296 	{0xf7,0x06,0x19,0x14},
297 	{0x00,0xf4,0x10,0x38},
298 	{0xeb,0x04,0x25,0x18},
299 	{0xeb,0x04,0x25,0x18},
300 	{0xeb,0x15,0x25,0xf6}
301  }
302 };
303 
304 static const UCHAR SiS310_TVYFilter2[5][9][7] =
305 {
306  {
307 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},	/* NTSC */
308 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
309 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
310 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
311 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
312 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
313 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
314 	{0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
315 	{0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
316  },
317  {
318 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},   /* PAL */
319 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
320 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
321 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
322 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
323 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
324 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
325 	{0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
326 	{0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
327  },
328  {
329 	{0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},	/* HiVision */
330 	{0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
331 	{0x00,0x00,0x00,0xF4,0xFF,0x1C,0x22},
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  },
339  {
340  	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46}, 	/* PAL-M */
341 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
342 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
343 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
344 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
345 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
346 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
347 	{0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
348 	{0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
349  },
350  {
351  	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},	/* PAL-N */
352 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
353 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
354 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
355 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
356 	{0xFF,0x03,0x02,0xF6,0xFC,0x27,0x46},
357 	{0x01,0x02,0xFE,0xF7,0x03,0x27,0x3C},
358 	{0x01,0x01,0xFC,0xF8,0x08,0x26,0x38},
359 	{0xFF,0xFF,0xFC,0x00,0x0F,0x22,0x28}
360  }
361 };
362 
363 static const UCHAR SiS310_TVPhaseIncr1[3][2][4] =
364 {
365  {
366 	{0x21,0xed,0xba,0x08},
367 	{0x21,0xed,0xba,0x08}
368  },
369  {
370 	{0x2a,0x05,0xe3,0x00},
371 	{0x2a,0x05,0xe3,0x00}
372  },
373  {
374 	{0x2a,0x05,0xd3,0x00},
375 	{0x2a,0x05,0xd3,0x00}
376  }
377 };
378 
379 static const UCHAR SiS310_TVPhaseIncr2[3][2][4] =
380 {
381  {
382 	{0x21,0xf0,0x7b,0xd6},
383 	{0x21,0xf0,0x7b,0xd6}
384  },
385  {
386 	{0x2a,0x0a,0x41,0xe9},
387 	{0x2a,0x0a,0x41,0xe9}
388  },
389  {
390 	{0x2a,0x05,0xd3,0x00},
391 	{0x2a,0x05,0xd3,0x00}
392  }
393 };
394 
395 static const UCHAR SiS661_TVPhase[] = {
396     0x21,0xED,0xBA,0x08,
397     0x2A,0x05,0xE3,0x00,
398     0x21,0xE4,0x2E,0x9B,
399     0x21,0xF4,0x3E,0xBA,
400     0x1E,0x8B,0xA2,0xA7,
401     0x1E,0x83,0x0A,0xE0,
402     0x00,0x00,0x00,0x00,
403     0x00,0x00,0x00,0x00,
404     0x21,0xF0,0x7B,0xD6,
405     0x2A,0x09,0x86,0xE9,
406     0x21,0xE6,0xEF,0xA4,
407     0x21,0xF6,0x94,0x46,
408     0x1E,0x8B,0xA2,0xA7,
409     0x1E,0x83,0x0A,0xE0,
410     0x00,0x00,0x00,0x00,
411     0x00,0x00,0x00,0x00
412 };
413 
414 /**************************************************************/
415 /* CUSTOM TIMING DATA --------------------------------------- */
416 /**************************************************************/
417 
418 /* Inventec / Compaq Presario 3045US, 3017 */
419 
420 static const SiS_LCDDataStruct  SiS310_ExtCompaq1280x1024Data[] =
421 {
422 	{  211,  60,1024, 501,1688,1066},
423 	{  211,  60,1024, 508,1688,1066},
424 	{  211,  60,1024, 501,1688,1066},
425 	{  211,  60,1024, 508,1688,1066},
426 	{   32,  15,1696, 501,1696,1066},
427 	{  212,  75,1024, 621,1696,1066},
428 	{    4,   3,1696, 810,1696,1066},
429 	{    1,   1,1696,1066,1696,1066}
430 };
431 
432 /* Asus A2xxxH _2 */
433 
434 static const SiS_Part2PortTblStruct SiS310_CRT2Part2_Asus1024x768_3[] =
435 {
436  {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
437  {{0x2c,0x13,0x9a,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
438  {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
439  {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
440  {{0x38,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
441  {{0x38,0x13,0x16,0x25,0xff,0x5a,0x45,0x0a,0x07,0xfa,0x0a,0x24}},
442  {{0x36,0x13,0x13,0x25,0xff,0x5a,0x45,0x0a,0x07,0xfa,0x0a,0x24}},
443  {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
444  {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}}
445 };
446 
447 
448 
449 
450