linux/drivers/video/fbdev/sis/init301.h
<<
>>
Prefs
   1/* $XFree86$ */
   2/* $XdotOrg$ */
   3/*
   4 * Data and prototypes for init301.c
   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#ifndef  _INIT301_H_
  54#define  _INIT301_H_
  55
  56#include "initdef.h"
  57
  58#include "vgatypes.h"
  59#include "vstruct.h"
  60#ifdef SIS_CP
  61#undef SIS_CP
  62#endif
  63#include <linux/types.h>
  64#include <asm/io.h>
  65#include <linux/fb.h>
  66#include "sis.h"
  67#include <video/sisfb.h>
  68
  69static const unsigned char SiS_YPbPrTable[3][64] = {
  70  {
  71    0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c,
  72    0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a,
  73    0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b,
  74    0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17,
  75    0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02,
  76    0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40,
  77    0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/,
  78    0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00
  79  },
  80  {
  81    0x33,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0c,
  82    0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a,
  83    0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
  84    0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4f,0x13,
  85    0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8,
  86    0x51,0x5e,0x60,0x49,0x7d,0x92,0x0f,0x40,
  87    0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4e,
  88    0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00
  89  },
  90  {
  91#if 0 /* OK, but sticks to left edge */
  92    0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
  93    0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
  94    0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
  95    0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13,
  96    0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
  97    0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40,
  98    0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27,
  99    0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
 100#endif
 101#if 1 /* Perfect */
 102    0x23,0x2d,0xe8,0x09,0x09,0xed,0x0c,0x0c,
 103    0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a,
 104    0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f,
 105    0xed,0x50,0x70,0x9f,0x16,0x59,0x60,0x13,
 106    0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0,
 107    0x4b,0x4b,0x6f,0x2f,0x63,0x92,0x0f,0x40,
 108    0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x73,
 109    0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00
 110#endif
 111  }
 112};
 113
 114static const unsigned char SiS_TVPhase[] =
 115{
 116        0x21,0xED,0xBA,0x08,    /* 0x00 SiS_NTSCPhase */
 117        0x2A,0x05,0xE3,0x00,    /* 0x01 SiS_PALPhase */
 118        0x21,0xE4,0x2E,0x9B,    /* 0x02 SiS_PALMPhase */
 119        0x21,0xF4,0x3E,0xBA,    /* 0x03 SiS_PALNPhase */
 120        0x1E,0x8B,0xA2,0xA7,
 121        0x1E,0x83,0x0A,0xE0,    /* 0x05 SiS_SpecialPhaseM */
 122        0x00,0x00,0x00,0x00,
 123        0x00,0x00,0x00,0x00,
 124        0x21,0xF0,0x7B,0xD6,    /* 0x08 SiS_NTSCPhase2 */
 125        0x2A,0x09,0x86,0xE9,    /* 0x09 SiS_PALPhase2 */
 126        0x21,0xE6,0xEF,0xA4,    /* 0x0a SiS_PALMPhase2 */
 127        0x21,0xF6,0x94,0x46,    /* 0x0b SiS_PALNPhase2 */
 128        0x1E,0x8B,0xA2,0xA7,
 129        0x1E,0x83,0x0A,0xE0,    /* 0x0d SiS_SpecialPhaseM */
 130        0x00,0x00,0x00,0x00,
 131        0x00,0x00,0x00,0x00,
 132        0x1e,0x8c,0x5c,0x7a,    /* 0x10 SiS_SpecialPhase */
 133        0x25,0xd4,0xfd,0x5e     /* 0x11 SiS_SpecialPhaseJ */
 134};
 135
 136static const unsigned char SiS_HiTVGroup3_1[] = {
 137    0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
 138    0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6,
 139    0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
 140    0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10,
 141    0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80,
 142    0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0,
 143    0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e,
 144    0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01
 145};
 146
 147static const unsigned char SiS_HiTVGroup3_2[] = {
 148    0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
 149    0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6,
 150    0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20,
 151    0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10,
 152    0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80,
 153    0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94,
 154    0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64,
 155    0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01
 156};
 157
 158/* 301C / 302ELV extended Part2 TV registers (4 tap scaler) */
 159
 160static const unsigned char SiS_Part2CLVX_1[] = {
 161    0x00,0x00,
 162    0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
 163    0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
 164    0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
 165    0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
 166};
 167
 168static const unsigned char SiS_Part2CLVX_2[] = {
 169    0x00,0x00,
 170    0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E,
 171    0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C,
 172    0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C,
 173    0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E
 174};
 175
 176static const unsigned char SiS_Part2CLVX_3[] = {  /* NTSC, 525i, 525p */
 177    0xE0,0x01,
 178    0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D,
 179    0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C,
 180    0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E,
 181    0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02,
 182    0x58,0x02,
 183    0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E,
 184    0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F,
 185    0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03,
 186    0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06,
 187    0x00,0x03,
 188    0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01,
 189    0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03,
 190    0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06,
 191    0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08,
 192    0xFF,0xFF
 193};
 194
 195static const unsigned char SiS_Part2CLVX_4[] = {   /* PAL */
 196    0x58,0x02,
 197    0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
 198    0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
 199    0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
 200    0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
 201    0x00,0x03,
 202    0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F,
 203    0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01,
 204    0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04,
 205    0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07,
 206    0x40,0x02,
 207    0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
 208    0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
 209    0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
 210    0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
 211    0xFF,0xFF
 212};
 213
 214static const unsigned char SiS_Part2CLVX_5[] = {   /* 750p */
 215    0x00,0x03,
 216    0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D,
 217    0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D,
 218    0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E,
 219    0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04,
 220    0xFF,0xFF
 221};
 222
 223static const unsigned char SiS_Part2CLVX_6[] = {   /* 1080i */
 224    0x00,0x04,
 225    0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D,
 226    0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C,
 227    0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F,
 228    0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02,
 229    0xFF,0xFF,
 230};
 231
 232#ifdef CONFIG_FB_SIS_315
 233/* 661 et al LCD data structure (2.03.00) */
 234static const unsigned char SiS_LCDStruct661[] = {
 235    /* 1024x768 */
 236/*  type|CR37|   HDE   |   VDE   |    HT   |    VT   |   hss    | hse   */
 237    0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88,
 238    0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04,
 239    /*  | vss     |    vse  |clck|  clock  |CRT2DataP|CRT2DataP|idx     */
 240    /*                                        VESA    non-VESA  noscale */
 241    /* 1280x1024 */
 242    0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70,
 243    0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08,
 244    /* 1400x1050 */
 245    0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38,
 246    0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09,
 247    /* 1600x1200 */
 248    0x0B,0xE0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0,
 249    0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0A,
 250    /* 1280x768 (_2) */
 251    0x0A,0xE0,0x00,0x05,0x00,0x03,0x7C,0x06,0x26,0x03,0x30,0x00,0x70,
 252    0x00,0x03,0x00,0x06,0x00,0x4D,0xC8,0x48,0x00,0x00,0x00,0x00,0x06,
 253    /* 1280x720 */
 254    0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x20,
 255    0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05,
 256    /* 1280x800 (_2) */
 257    0x0C,0xE0,0x00,0x05,0x20,0x03,0x10,0x06,0x2C,0x03,0x30,0x00,0x70,
 258    0x00,0x04,0x00,0x03,0x00,0x49,0xCE,0x1E,0x00,0x00,0x00,0x00,0x09,
 259    /* 1680x1050 */
 260    0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C,
 261    0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06,
 262    /* 1280x800_3 */
 263    0x0C,0xE0,0x00,0x05,0x20,0x03,0xAA,0x05,0x2E,0x03,0x30,0x00,0x50,
 264    0x00,0x04,0x00,0x03,0x00,0x47,0xA9,0x10,0x00,0x00,0x00,0x00,0x07,
 265    /* 800x600 */
 266    0x01,0xC0,0x20,0x03,0x58,0x02,0x20,0x04,0x74,0x02,0x2A,0x00,0x80,
 267    0x00,0x06,0x00,0x04,0x00,0x28,0x63,0x4B,0x00,0x00,0x00,0x00,0x00,
 268    /* 1280x854 */
 269    0x08,0xE0,0x00,0x05,0x56,0x03,0x80,0x06,0x5d,0x03,0x10,0x00,0x70,
 270    0x00,0x01,0x00,0x03,0x00,0x54,0x75,0x13,0x00,0x00,0x00,0x00,0x08
 271};
 272#endif
 273
 274#ifdef CONFIG_FB_SIS_300
 275static unsigned char SiS300_TrumpionData[14][80] = {
 276  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
 277    0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23,
 278    0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23,
 279    0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05,
 280    0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 },
 281  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02,
 282    0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23,
 283    0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23,
 284    0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05,
 285    0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 },
 286  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
 287    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
 288    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
 289    0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
 290    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 },
 291  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
 292    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
 293    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
 294    0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
 295    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
 296  { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
 297    0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
 298    0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
 299    0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
 300    0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
 301  { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
 302    0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
 303    0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
 304    0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
 305    0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
 306  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
 307    0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
 308    0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
 309    0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
 310    0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 },
 311  /* variant 2 */
 312  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
 313    0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
 314    0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
 315    0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
 316    0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
 317  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
 318    0x20,0x03,0x15,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x18,0x00,0x00,0x04,0x23,
 319    0x00,0x01,0x03,0x44,0x03,0x28,0x06,0x08,0x40,0x18,0x00,0x18,0x04,0x23,0x00,0x23,
 320    0x03,0x11,0x60,0xA6,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x13,0x04,0x04,0x05,
 321    0x04,0x0C,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
 322  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02,
 323    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
 324    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
 325    0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
 326    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
 327  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02,
 328    0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23,
 329    0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23,
 330    0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05,
 331    0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 },
 332  { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02,
 333    0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23,
 334    0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23,
 335    0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05,
 336    0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
 337  { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03,
 338    0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D,
 339    0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D,
 340    0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B,
 341    0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 },
 342  { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x11,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04,
 343    0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23,
 344    0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23,
 345    0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01,
 346    0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEA,0x58,0x01,0xBE,0x01,0x00 }
 347};
 348#endif
 349
 350void            SiS_UnLockCRT2(struct SiS_Private *SiS_Pr);
 351void            SiS_EnableCRT2(struct SiS_Private *SiS_Pr);
 352unsigned short  SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
 353void            SiS_WaitRetrace1(struct SiS_Private *SiS_Pr);
 354bool            SiS_IsDualEdge(struct SiS_Private *SiS_Pr);
 355bool            SiS_IsVAMode(struct SiS_Private *SiS_Pr);
 356void            SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 357                        unsigned short ModeIdIndex, int checkcrt2mode);
 358void            SiS_SetYPbPr(struct SiS_Private *SiS_Pr);
 359void            SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 360                        unsigned short ModeIdIndex);
 361void            SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 362                unsigned short ModeIdIndex);
 363unsigned short  SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
 364                        unsigned short RefreshRateTableIndex);
 365unsigned short  SiS_GetResInfo(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex);
 366void            SiS_DisableBridge(struct SiS_Private *SiS_Pr);
 367bool            SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
 368void            SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr);
 369void            SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr);
 370
 371void            SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
 372unsigned short  SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempax);
 373void            SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
 374unsigned short  SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempax);
 375void            SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
 376                        unsigned char orval,unsigned short andval);
 377#ifdef CONFIG_FB_SIS_315
 378static void     SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
 379static void     SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
 380static void     SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
 381static void     SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
 382void            SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr);
 383void            SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr);
 384#endif /* 315 */
 385
 386#ifdef CONFIG_FB_SIS_300
 387static  bool    SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
 388void            SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo);
 389#endif
 390
 391void            SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime);
 392unsigned short  SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr);
 393unsigned short  SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
 394                        unsigned short adaptnum, unsigned short DDCdatatype,
 395                        unsigned char *buffer, unsigned int VBFlags2);
 396
 397static unsigned short   SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
 398                                int VGAEngine, unsigned short adaptnum, unsigned short DDCdatatype,
 399                                bool checkcr32, unsigned int VBFlags2);
 400static unsigned short   SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
 401static unsigned short   SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
 402                                unsigned char *buffer);
 403static void             SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
 404static unsigned short   SiS_SetStart(struct SiS_Private *SiS_Pr);
 405static unsigned short   SiS_SetStop(struct SiS_Private *SiS_Pr);
 406static unsigned short   SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
 407static unsigned short   SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
 408static unsigned short   SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
 409static unsigned short   SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
 410static unsigned short   SiS_CheckACK(struct SiS_Private *SiS_Pr);
 411static unsigned short   SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
 412static unsigned short   SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
 413static unsigned short   SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
 414static void             SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
 415static unsigned short   SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
 416
 417#ifdef CONFIG_FB_SIS_300
 418static void             SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
 419                                unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefTabindex);
 420static void             SetOEMLCDData2(struct SiS_Private *SiS_Pr,
 421                                unsigned short ModeNo, unsigned short ModeIdIndex,unsigned short RefTableIndex);
 422#endif
 423#ifdef CONFIG_FB_SIS_315
 424static void             SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
 425                                unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
 426static void             SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
 427                                unsigned short ModeNo,unsigned short ModeIdIndex, unsigned short RRTI);
 428static void             SiS_FinalizeLCD(struct SiS_Private *, unsigned short, unsigned short);
 429#endif
 430
 431extern void             SiS_DisplayOff(struct SiS_Private *SiS_Pr);
 432extern void             SiS_DisplayOn(struct SiS_Private *SiS_Pr);
 433extern bool             SiS_SearchModeID(struct SiS_Private *, unsigned short *, unsigned short *);
 434extern unsigned short   SiS_GetModeFlag(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 435                                unsigned short ModeIdIndex);
 436extern unsigned short   SiS_GetModePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
 437extern unsigned short   SiS_GetColorDepth(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex);
 438extern unsigned short   SiS_GetOffset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
 439                                unsigned short RefreshRateTableIndex);
 440extern void             SiS_LoadDAC(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 441                                unsigned short ModeIdIndex);
 442extern void             SiS_CalcLCDACRT1Timing(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
 443                                unsigned short ModeIdIndex);
 444extern void             SiS_CalcCRRegisters(struct SiS_Private *SiS_Pr, int depth);
 445extern unsigned short   SiS_GetRefCRTVCLK(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
 446extern unsigned short   SiS_GetRefCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short Index, int UseWide);
 447#ifdef CONFIG_FB_SIS_300
 448extern void             SiS_GetFIFOThresholdIndex300(struct SiS_Private *SiS_Pr, unsigned short *tempbx,
 449                                unsigned short *tempcl);
 450extern unsigned short   SiS_GetFIFOThresholdB300(unsigned short tempbx, unsigned short tempcl);
 451extern unsigned short   SiS_GetLatencyFactor630(struct SiS_Private *SiS_Pr, unsigned short index);
 452extern unsigned int     sisfb_read_nbridge_pci_dword(struct SiS_Private *SiS_Pr, int reg);
 453extern unsigned int     sisfb_read_lpc_pci_dword(struct SiS_Private *SiS_Pr, int reg);
 454#endif
 455
 456#endif
 457