linux/drivers/video/fbdev/sis/oem310.h
<<
>>
Prefs
   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
  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,0x00
  70};
  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,0x02
  90};
  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,0x33
 109};
 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,0x33
 128};
 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,0x02
 147};
 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,0x02
 166};
 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,0x03
 180};
 181
 182static const unsigned char SiS310_TVDelayCompensation_740301B[] =       /* 740 + 30xB (30xLV?) */
 183{
 184        0x05,0x05,
 185        0x05,0x05,
 186        0x05,0x05
 187};
 188
 189static const unsigned char SiS310_TVDelayCompensation_651301LV[] =      /* M650, 651, 301LV */
 190{
 191        0x33,0x33,
 192        0x33,0x33,
 193        0x33,0x33
 194};
 195
 196static const unsigned char SiS310_TVDelayCompensation_651302LV[] =      /* M650, 651, 302LV */
 197{
 198        0x33,0x33,
 199        0x33,0x33,
 200        0x33,0x33
 201};
 202
 203static const unsigned char 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
 213static const unsigned char 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
 223static const unsigned char SiS310_TVDelayCompensation_LVDS[] =          /* LVDS */
 224{
 225        0x0a,0x0a,
 226        0x0a,0x0a,
 227        0x0a,0x0a
 228};
 229
 230static const unsigned char 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
 240static const unsigned char 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
 250static const unsigned char 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
 304static const unsigned char 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
 363static const unsigned char 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
 379static const unsigned char 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/**************************************************************/
 396/* CUSTOM TIMING DATA --------------------------------------- */
 397/**************************************************************/
 398
 399/* Inventec / Compaq Presario 3045US, 3017 */
 400
 401static const struct SiS_LCDData SiS310_ExtCompaq1280x1024Data[] =
 402{
 403        {  211,  60,1024, 501,1688,1066},
 404        {  211,  60,1024, 508,1688,1066},
 405        {  211,  60,1024, 501,1688,1066},
 406        {  211,  60,1024, 508,1688,1066},
 407        {   32,  15,1696, 501,1696,1066},
 408        {  212,  75,1024, 621,1696,1066},
 409        {    4,   3,1696, 810,1696,1066},
 410        {    1,   1,1696,1066,1696,1066}
 411};
 412
 413/* Asus A2xxxH _2 */
 414
 415static const struct SiS_Part2PortTbl SiS310_CRT2Part2_Asus1024x768_3[] =
 416{
 417        {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
 418        {{0x2c,0x13,0x9a,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
 419        {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
 420        {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
 421        {{0x38,0x13,0x13,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}},
 422        {{0x38,0x13,0x16,0x25,0xff,0x5a,0x45,0x0a,0x07,0xfa,0x0a,0x24}},
 423        {{0x36,0x13,0x13,0x25,0xff,0x5a,0x45,0x0a,0x07,0xfa,0x0a,0x24}},
 424        {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
 425        {{0x25,0x13,0xc9,0x25,0xff,0x59,0x45,0x09,0x07,0xf9,0x09,0x24}}
 426};
 427
 428
 429
 430
 431