433 lines · c
1/* $XFree86$ */2/* $XdotOrg$ */3/*4 * OEM Data for 315/330/340 series5 *6 * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria7 *8 * If distributed as part of the Linux kernel, the following license terms9 * apply:10 *11 * * This program is free software; you can redistribute it and/or modify12 * * it under the terms of the GNU General Public License as published by13 * * 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 of18 * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the19 * * GNU General Public License for more details.20 * *21 * * You should have received a copy of the GNU General Public License22 * * along with this program; if not, write to the Free Software23 * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA24 *25 * Otherwise, the following license terms apply:26 *27 * * Redistribution and use in source and binary forms, with or without28 * * modification, are permitted provided that the following conditions29 * * are met:30 * * 1) Redistributions of source code must retain the above copyright31 * * notice, this list of conditions and the following disclaimer.32 * * 2) Redistributions in binary form must reproduce the above copyright33 * * notice, this list of conditions and the following disclaimer in the34 * * documentation and/or other materials provided with the distribution.35 * * 3) The name of the author may not be used to endorse or promote products36 * * derived from this software without specific prior written permission.37 * *38 * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR39 * * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES40 * * 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, BUT43 * * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,44 * * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY45 * * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT46 * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF47 * * 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,0x0070};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,0x0290};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,0x33109};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,0x33128};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,0x02147};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,0x02166};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,0x03180};181 182static const unsigned char SiS310_TVDelayCompensation_740301B[] = /* 740 + 30xB (30xLV?) */183{184 0x05,0x05,185 0x05,0x05,186 0x05,0x05187};188 189static const unsigned char SiS310_TVDelayCompensation_651301LV[] = /* M650, 651, 301LV */190{191 0x33,0x33,192 0x33,0x33,193 0x33,0x33194};195 196static const unsigned char SiS310_TVDelayCompensation_651302LV[] = /* M650, 651, 302LV */197{198 0x33,0x33,199 0x33,0x33,200 0x33,0x33201};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,0x44212};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,0x44222};223#endif224 225static const unsigned char SiS310_TVDelayCompensation_LVDS[] = /* LVDS */226{227 0x0a,0x0a,228 0x0a,0x0a,229 0x0a,0x0a230};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