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