Linux-2.6.12-rc2
[linux-flexiantxendom0-natty.git] / drivers / video / sis / oem310.h
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 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 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