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