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