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 | |
53 | static 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 */ |
73 | static 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 | |
92 | static 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 | |
111 | static 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 | |
130 | static 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 | |
149 | static 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 | |
168 | static const unsigned char SiS310_TVDelayCompensation_301[] = /* 301 */ |
169 | { |
170 | 0x02,0x02, /* NTSC Enhanced, Standard */ |
171 | 0x02,0x02, /* PAL */ |
172 | 0x08,0x0b /* HiVision */ |
173 | }; |
174 | |
175 | static const unsigned char SiS310_TVDelayCompensation_301B[] = /* 30xB, 30xLV */ |
176 | { |
177 | 0x03,0x03, |
178 | 0x03,0x03, |
179 | 0x03,0x03 |
180 | }; |
181 | |
182 | static const unsigned char SiS310_TVDelayCompensation_740301B[] = /* 740 + 30xB (30xLV?) */ |
183 | { |
184 | 0x05,0x05, |
185 | 0x05,0x05, |
186 | 0x05,0x05 |
187 | }; |
188 | |
189 | static const unsigned char SiS310_TVDelayCompensation_651301LV[] = /* M650, 651, 301LV */ |
190 | { |
191 | 0x33,0x33, |
192 | 0x33,0x33, |
193 | 0x33,0x33 |
194 | }; |
195 | |
196 | static 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 */ |
204 | static 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 | |
214 | static 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 | |
225 | static const unsigned char SiS310_TVDelayCompensation_LVDS[] = /* LVDS */ |
226 | { |
227 | 0x0a,0x0a, |
228 | 0x0a,0x0a, |
229 | 0x0a,0x0a |
230 | }; |
231 | |
232 | static 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 | |
242 | static 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 | |
252 | static 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 | |
306 | static 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 | |
365 | static 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 | |
381 | static 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 | |
403 | static 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 | |
417 | static 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 | |