1 /* $XFree86$ */ 2 /* $XdotOrg$ */ 3 /* 4 * Data and prototypes for init301.c 5 * 6 * Copyright (C) 2001-2004 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 EXPRESSED 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_ 54 #define _INIT301_ 55 56 #include "osdef.h" 57 58 #include "initdef.h" 59 #include "vgatypes.h" 60 #include "vstruct.h" 61 62 #ifdef LINUX_XF86 63 #include "xf86.h" 64 #include "xf86Pci.h" 65 #include "xf86PciInfo.h" 66 #include "sis.h" 67 #include "sis_regs.h" 68 #endif 69 70 #ifdef LINUX_KERNEL 71 #ifdef SIS_CP 72 #undef SIS_CP 73 #endif 74 #include <linux/config.h> 75 #include <linux/version.h> 76 #include <asm/io.h> 77 #include <linux/types.h> 78 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) 79 #include <linux/sisfb.h> 80 #else 81 #include <video/sisfb.h> 82 #endif 83 #endif 84 85 const UCHAR SiS_YPbPrTable[3][64] = { 86 { 87 0x17,0x1d,0x03,0x09,0x05,0x06,0x0c,0x0c, 88 0x94,0x49,0x01,0x0a,0x06,0x0d,0x04,0x0a, 89 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x1b, 90 0x0c,0x50,0x00,0x97,0x00,0xda,0x4a,0x17, 91 0x7d,0x05,0x4b,0x00,0x00,0xe2,0x00,0x02, 92 0x03,0x0a,0x65,0x9d /*0x8d*/,0x08,0x92,0x8f,0x40, 93 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x53 /*0x50*/, 94 0x00,0x40,0x44,0x00,0xdb,0x02,0x3b,0x00 95 }, 96 { 97 0x1d,0x11,0x06,0x09,0x0b,0x0c,0x0c,0x0c, 98 0x98,0x0a,0x01,0x0d,0x06,0x0d,0x04,0x0a, 99 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f, 100 0x0c,0x50,0xb2,0x9f,0x16,0x59,0x4c /*0x4f*/,0x13, 101 0xad,0x11,0xad,0x1d,0x40,0x8a,0x3d,0xb8, 102 0x51,0x5e,0x60,0x57 /*0x49*/,0x7b /*0x7d*/,0x92,0x0f,0x40, 103 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x4b, 104 0x43,0x41,0x11,0x00,0xfc,0xff,0x32,0x00 105 }, 106 { 107 #if 1 108 0x13,0x1d,0xe8,0x09,0x09,0xed,0x0c,0x0c, 109 0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a, 110 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f, 111 0xed,0x50,0x70,0x9f,0x16,0x59,0x21 /*0x2b*/,0x13, 112 0x27,0x0b,0x27,0xfc,0x30,0x27,0x1c,0xb0, 113 0x4b,0x4b,0x65 /*0x6f*/,0x2f,0x63,0x92,0x0f,0x40, 114 0x60,0x80,0x14,0x90,0x8c,0x60,0x14,0x27, 115 0x00,0x40,0x11,0x00,0xfc,0xff,0x32,0x00 116 #endif 117 #if 0 118 0x2a,0x14,0xe8,0x09,0x09,0xed,0x0c,0x0c, /* TEST (0.93) - BAD */ 119 0x98,0x0a,0x01,0x0c,0x06,0x0d,0x04,0x0a, 120 0x06,0x14,0x0d,0x04,0x0a,0x00,0x85,0x3f, 121 0xed,0x50,0x70,0x9e,0x16,0x57,0x6c,0x13, 122 0x27,0x0b,0x27,0xfb,0x30,0x27,0x15,0xb0, 123 0x3b,0xdb,0x61,0x24,0x78,0x92,0x0f,0xff, 124 0xff,0xff,0xff,0xff,0xff,0xff,0x14,0x6f, 125 0x00,0x52,0xbb,0x00,0xd5,0xf7,0xa2,0x00 126 #endif 127 } 128 }; 129 130 const UCHAR SiS_HiTVGroup3_1[] = { 131 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13, 132 0xb1, 0x41, 0x62, 0x62, 0xff, 0xf4, 0x45, 0xa6, 133 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20, 134 0xac, 0xda, 0x60, 0xfe, 0x6a, 0x9a, 0x06, 0x10, 135 0xd1, 0x04, 0x18, 0x0a, 0xff, 0x80, 0x00, 0x80, 136 0x3b, 0x77, 0x00, 0xef, 0xe0, 0x10, 0xb0, 0xe0, 137 0x10, 0x4f, 0x0f, 0x0f, 0x05, 0x0f, 0x08, 0x6e, 138 0x1a, 0x1f, 0x25, 0x2a, 0x4c, 0xaa, 0x01 139 }; 140 141 const UCHAR SiS_HiTVGroup3_2[] = { 142 0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a, 143 0x54, 0x41, 0xe7, 0xe7, 0xff, 0xf4, 0x45, 0xa6, 144 0x25, 0x2f, 0x67, 0xf6, 0xbf, 0xff, 0x8e, 0x20, 145 0xac, 0x6a, 0x60, 0x2b, 0x52, 0xcd, 0x61, 0x10, 146 0x51, 0x04, 0x18, 0x0a, 0x1f, 0x80, 0x00, 0x80, 147 0xff, 0xa4, 0x04, 0x2b, 0x94, 0x21, 0x72, 0x94, 148 0x26, 0x05, 0x01, 0x0f, 0xed, 0x0f, 0x0a, 0x64, 149 0x18, 0x1d, 0x23, 0x28, 0x4c, 0xaa, 0x01 150 }; 151 152 /* 301C / 302ELV extended Part2 TV registers */ 153 154 static const UCHAR SiS_Part2CLVX_1[] = { 155 0x00,0x00, 156 0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E, 157 0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C, 158 0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C, 159 0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E 160 }; 161 162 static const UCHAR SiS_Part2CLVX_2[] = { 163 0x00,0x00, 164 0x00,0x20,0x00,0x00,0x7F,0x20,0x02,0x7F,0x7D,0x20,0x04,0x7F,0x7D,0x1F,0x06,0x7E, 165 0x7C,0x1D,0x09,0x7E,0x7C,0x1B,0x0B,0x7E,0x7C,0x19,0x0E,0x7D,0x7C,0x17,0x11,0x7C, 166 0x7C,0x14,0x14,0x7C,0x7C,0x11,0x17,0x7C,0x7D,0x0E,0x19,0x7C,0x7E,0x0B,0x1B,0x7C, 167 0x7E,0x09,0x1D,0x7C,0x7F,0x06,0x1F,0x7C,0x7F,0x04,0x20,0x7D,0x00,0x02,0x20,0x7E 168 }; 169 170 static const UCHAR SiS_Part2CLVX_3[] = { /* NTSC, 525i, 525p */ 171 0xE0,0x01, 172 0x04,0x1A,0x04,0x7E,0x03,0x1A,0x06,0x7D,0x01,0x1A,0x08,0x7D,0x00,0x19,0x0A,0x7D, 173 0x7F,0x19,0x0C,0x7C,0x7E,0x18,0x0E,0x7C,0x7E,0x17,0x10,0x7B,0x7D,0x15,0x12,0x7C, 174 0x7D,0x13,0x13,0x7D,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0E,0x18,0x7E, 175 0x7D,0x0C,0x19,0x7E,0x7D,0x0A,0x19,0x00,0x7D,0x08,0x1A,0x01,0x7E,0x06,0x1A,0x02, 176 0x58,0x02, 177 0x07,0x14,0x07,0x7E,0x06,0x14,0x09,0x7D,0x05,0x14,0x0A,0x7D,0x04,0x13,0x0B,0x7E, 178 0x03,0x13,0x0C,0x7E,0x02,0x12,0x0D,0x7F,0x01,0x12,0x0E,0x7F,0x01,0x11,0x0F,0x7F, 179 0x00,0x10,0x10,0x00,0x7F,0x0F,0x11,0x01,0x7F,0x0E,0x12,0x01,0x7E,0x0D,0x12,0x03, 180 0x7E,0x0C,0x13,0x03,0x7E,0x0B,0x13,0x04,0x7E,0x0A,0x14,0x04,0x7D,0x09,0x14,0x06, 181 0x00,0x03, 182 0x09,0x0F,0x09,0x7F,0x08,0x0F,0x09,0x00,0x07,0x0F,0x0A,0x00,0x06,0x0F,0x0A,0x01, 183 0x06,0x0E,0x0B,0x01,0x05,0x0E,0x0B,0x02,0x04,0x0E,0x0C,0x02,0x04,0x0D,0x0C,0x03, 184 0x03,0x0D,0x0D,0x03,0x02,0x0C,0x0D,0x05,0x02,0x0C,0x0E,0x04,0x01,0x0B,0x0E,0x06, 185 0x01,0x0B,0x0E,0x06,0x00,0x0A,0x0F,0x07,0x00,0x0A,0x0F,0x07,0x00,0x09,0x0F,0x08, 186 0xFF,0xFF 187 }; 188 189 static const UCHAR SiS_Part2CLVX_4[] = { /* PAL */ 190 0x58,0x02, 191 0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D, 192 0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D, 193 0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E, 194 0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04, 195 0x00,0x03, 196 0x08,0x12,0x08,0x7E,0x07,0x12,0x09,0x7E,0x06,0x12,0x0A,0x7E,0x05,0x11,0x0B,0x7F, 197 0x04,0x11,0x0C,0x7F,0x03,0x11,0x0C,0x00,0x03,0x10,0x0D,0x00,0x02,0x0F,0x0E,0x01, 198 0x01,0x0F,0x0F,0x01,0x01,0x0E,0x0F,0x02,0x00,0x0D,0x10,0x03,0x7F,0x0C,0x11,0x04, 199 0x7F,0x0C,0x11,0x04,0x7F,0x0B,0x11,0x05,0x7E,0x0A,0x12,0x06,0x7E,0x09,0x12,0x07, 200 0x40,0x02, 201 0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D, 202 0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C, 203 0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D,0x7C,0x0D,0x18,0x7F, 204 0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02, 205 0xFF,0xFF 206 }; 207 208 static const UCHAR SiS_Part2CLVX_5[] = { /* 750p */ 209 0x00,0x03, 210 0x05,0x19,0x05,0x7D,0x03,0x19,0x06,0x7E,0x02,0x19,0x08,0x7D,0x01,0x18,0x0A,0x7D, 211 0x00,0x18,0x0C,0x7C,0x7F,0x17,0x0E,0x7C,0x7E,0x16,0x0F,0x7D,0x7E,0x14,0x11,0x7D, 212 0x7D,0x13,0x13,0x7D,0x7D,0x11,0x14,0x7E,0x7D,0x0F,0x16,0x7E,0x7D,0x0E,0x17,0x7E, 213 0x7D,0x0C,0x18,0x7F,0x7D,0x0A,0x18,0x01,0x7D,0x08,0x19,0x02,0x7D,0x06,0x19,0x04, 214 0xFF,0xFF 215 }; 216 217 static const UCHAR SiS_Part2CLVX_6[] = { /* 1080i */ 218 0x00,0x04, 219 0x04,0x1A,0x04,0x7E,0x02,0x1B,0x05,0x7E,0x01,0x1A,0x07,0x7E,0x00,0x1A,0x09,0x7D, 220 0x7F,0x19,0x0B,0x7D,0x7E,0x18,0x0D,0x7D,0x7D,0x17,0x10,0x7C,0x7D,0x15,0x12,0x7C, 221 0x7C,0x14,0x14,0x7C,0x7C,0x12,0x15,0x7D,0x7C,0x10,0x17,0x7D /* 0x1D(6330)? */ ,0x7C,0x0D,0x18,0x7F, 222 0x7D,0x0B,0x19,0x7F,0x7D,0x09,0x1A,0x00,0x7D,0x07,0x1A,0x02,0x7E,0x05,0x1B,0x02, 223 0xFF,0xFF, 224 }; 225 226 #ifdef SIS315H 227 /* 661 et al LCD data structure (0.94.0) */ 228 static const UCHAR SiS_LCDStruct661[] = { 229 /* 1024x768 */ 230 /* type|CR37| HDE | VDE | HT | VT | hss | hse */ 231 0x02,0xC0,0x00,0x04,0x00,0x03,0x40,0x05,0x26,0x03,0x10,0x00,0x88, 232 0x00,0x02,0x00,0x06,0x00,0x41,0x5A,0x64,0x00,0x00,0x00,0x00,0x04, 233 /* | vss | vse |clck| clock |CRT2DataP|CRT2DataP|idx */ 234 /* VESA non-VESA noscale */ 235 /* 1280x1024 */ 236 0x03,0xC0,0x00,0x05,0x00,0x04,0x98,0x06,0x2A,0x04,0x30,0x00,0x70, 237 0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x08, 238 /* 1400x1050 */ 239 0x09,0x20,0x78,0x05,0x1A,0x04,0x98,0x06,0x2A,0x04,0x18,0x00,0x38, 240 0x00,0x01,0x00,0x03,0x00,0x6C,0xF8,0x2F,0x00,0x00,0x00,0x00,0x09, 241 /* 1600x1200 */ 242 0x0B,0xC0,0x40,0x06,0xB0,0x04,0x70,0x08,0xE2,0x04,0x40,0x00,0xC0, 243 0x00,0x01,0x00,0x03,0x00,0xA2,0x70,0x24,0x00,0x00,0x00,0x00,0x0B, 244 /* 1280x768 */ 245 0x0A,0xC0,0x00,0x05,0x00,0x03,0x80,0x05,0x26,0x03,0x10,0x00,0x40, 246 0x00,0x03,0x00,0x06,0x00,0x44,0x63,0x46,0x00,0x00,0x00,0x00,0x06, 247 /* 1280x720 */ 248 0x0E,0xE0,0x00,0x05,0xD0,0x02,0x80,0x05,0x26,0x03,0x10,0x00,0x02, 249 0x00,0x01,0x00,0x06,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x05, 250 /* 1280x800 */ 251 0x0C,0xE0,0x00,0x05,0x20,0x03,0x80,0x05,0x30,0x03,0x10,0x00,0x40, 252 0x00,0x04,0x00,0x03,0x00,0x45,0x9C,0x62,0x00,0x00,0x00,0x00,0x07, 253 /* 1680x1050 */ 254 0x0D,0xE0,0x90,0x06,0x1A,0x04,0x6C,0x07,0x2A,0x04,0x1A,0x00,0x4C, 255 0x00,0x03,0x00,0x06,0x00,0x79,0xBE,0x44,0x00,0x00,0x00,0x00,0x06, 256 /* 1280x768 (not in 0.93) */ 257 0x0A,0xC0,0x00,0x05,0x00,0x03,0x80,0x06,0x1E,0x03,0x40,0x00,0x80, 258 0x00,0x03,0x00,0x07,0x00,0x4F,0x00,0x00,0x00,0x00,0x00,0x00,0x06 259 }; 260 #endif 261 262 #ifdef SIS300 263 static UCHAR SiS300_TrumpionData[7][80] = { 264 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02, 265 0x20,0x03,0x0B,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x10,0x00,0x00,0x04,0x23, 266 0x00,0x00,0x03,0x28,0x03,0x10,0x05,0x08,0x40,0x10,0x00,0x10,0x04,0x23,0x00,0x23, 267 0x03,0x11,0x60,0xBC,0x01,0xFF,0x03,0xFF,0x19,0x01,0x00,0x05,0x09,0x04,0x04,0x05, 268 0x04,0x0C,0x09,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5A,0x01,0xBE,0x01,0x00 }, 269 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x27,0x00,0x80,0x02, 270 0x20,0x03,0x07,0x00,0x5E,0x01,0x0D,0x02,0x60,0x0C,0x30,0x11,0x00,0x00,0x04,0x23, 271 0x00,0x00,0x03,0x80,0x03,0x28,0x06,0x08,0x40,0x11,0x00,0x11,0x04,0x23,0x00,0x23, 272 0x03,0x11,0x60,0x90,0x01,0xFF,0x0F,0xF4,0x19,0x01,0x00,0x05,0x01,0x00,0x04,0x05, 273 0x04,0x0C,0x02,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xEC,0x57,0x01,0xBE,0x01,0x00 }, 274 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x8A,0x00,0xD8,0x02, 275 0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23, 276 0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23, 277 0x03,0x11,0x60,0xD9,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05, 278 0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x59,0x01,0xBE,0x01,0x00 }, 279 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x72,0x00,0xD8,0x02, 280 0x84,0x03,0x16,0x00,0x90,0x01,0xC1,0x01,0x60,0x0C,0x30,0x1C,0x00,0x20,0x04,0x23, 281 0x00,0x01,0x03,0x53,0x03,0x28,0x06,0x08,0x40,0x1C,0x00,0x16,0x04,0x23,0x00,0x23, 282 0x03,0x11,0x60,0xDA,0x01,0xFF,0x0F,0xF4,0x18,0x07,0x05,0x05,0x13,0x04,0x04,0x05, 283 0x01,0x0B,0x13,0x0A,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x55,0x01,0xBE,0x01,0x00 }, 284 { 0x02,0x0A,0x02,0x00,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0x7F,0x00,0x80,0x02, 285 0x20,0x03,0x16,0x00,0xE0,0x01,0x0D,0x02,0x60,0x0C,0x30,0x98,0x00,0x00,0x04,0x23, 286 0x00,0x01,0x03,0x45,0x03,0x48,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x23,0x00,0x23, 287 0x03,0x11,0x60,0xF4,0x01,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x05,0x01,0x00,0x05,0x05, 288 0x04,0x0C,0x08,0x05,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 }, 289 { 0x02,0x0A,0x02,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xBF,0x00,0x20,0x03, 290 0x20,0x04,0x0D,0x00,0x58,0x02,0x71,0x02,0x80,0x0C,0x30,0x9A,0x00,0xFA,0x03,0x1D, 291 0x00,0x01,0x03,0x22,0x03,0x28,0x06,0x08,0x40,0x98,0x00,0x98,0x04,0x1D,0x00,0x1D, 292 0x03,0x11,0x60,0x39,0x03,0x40,0x05,0xF4,0x18,0x07,0x02,0x06,0x04,0x01,0x06,0x0B, 293 0x02,0x0A,0x20,0x19,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 }, 294 { 0x02,0x0A,0x0A,0x01,0x04,0x01,0x00,0x03,0x0D,0x00,0x0D,0x10,0xEF,0x00,0x00,0x04, 295 0x40,0x05,0x13,0x00,0x00,0x03,0x26,0x03,0x88,0x0C,0x30,0x90,0x00,0x00,0x04,0x23, 296 0x00,0x01,0x03,0x24,0x03,0x28,0x06,0x08,0x40,0x90,0x00,0x90,0x04,0x23,0x00,0x23, 297 0x03,0x11,0x60,0x40,0x05,0xFF,0x0F,0xF4,0x18,0x01,0x00,0x08,0x01,0x00,0x08,0x01, 298 0x00,0x08,0x01,0x01,0x02,0xB0,0x00,0x00,0x02,0xBA,0xF0,0x5B,0x01,0xBE,0x01,0x00 } 299 }; 300 #endif 301 302 void SiS_UnLockCRT2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 303 void SiS_LockCRT2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 304 void SiS_EnableCRT2(SiS_Private *SiS_Pr); 305 USHORT SiS_GetRatePtr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo); 306 void SiS_WaitRetrace1(SiS_Private *SiS_Pr); 307 BOOLEAN SiS_IsDualEdge(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 308 BOOLEAN SiS_IsVAMode(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 309 void SiS_SetChrontelGPIO(SiS_Private *SiS_Pr, USHORT myvbinfo); 310 void SiS_GetVBInfo(SiS_Private *SiS_Pr, USHORT ModeNo, 311 USHORT ModeIdIndex,PSIS_HW_INFO HwInfo, 312 int checkcrt2mode); 313 void SiS_SetYPbPr(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 314 void SiS_SetTVMode(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo); 315 void SiS_GetLCDResInfo(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo); 316 USHORT SiS_GetVCLK2Ptr(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, 317 USHORT RefreshRateTableIndex, PSIS_HW_INFO HwInfo); 318 USHORT SiS_GetResInfo(SiS_Private *SiS_Pr,USHORT ModeNo,USHORT ModeIdIndex); 319 void SiS_DisableBridge(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 320 void SiS_EnableBridge(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 321 BOOLEAN SiS_SetCRT2Group(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, USHORT ModeNo); 322 void SiS_SiS30xBLOn(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 323 void SiS_SiS30xBLOff(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 324 325 void SiS_SetCH700x(SiS_Private *SiS_Pr, USHORT tempax); 326 USHORT SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempax); 327 void SiS_SetCH701x(SiS_Private *SiS_Pr, USHORT tempax); 328 USHORT SiS_GetCH701x(SiS_Private *SiS_Pr, USHORT tempax); 329 void SiS_SetCH70xx(SiS_Private *SiS_Pr, USHORT tempax); 330 USHORT SiS_GetCH70xx(SiS_Private *SiS_Pr, USHORT tempax); 331 void SiS_SetCH70xxANDOR(SiS_Private *SiS_Pr, USHORT tempax,USHORT tempbh); 332 #ifdef SIS315H 333 void SiS_Chrontel701xOn(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 334 void SiS_Chrontel701xOff(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 335 void SiS_ChrontelInitTVVSync(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 336 void SiS_ChrontelDoSomething1(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 337 void SiS_Chrontel701xBLOn(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo); 338 void SiS_Chrontel701xBLOff(SiS_Private *SiS_Pr); 339 #endif /* 315 */ 340 #ifdef SIS300 341 void SiS_SetTrumpReg(SiS_Private *SiS_Pr, USHORT tempbx); 342 USHORT SiS_GetTrumpReg(SiS_Private *SiS_Pr, USHORT tempbx); 343 static BOOLEAN SiS_SetTrumpionBlock(SiS_Private *SiS_Pr, UCHAR *dataptr); 344 #endif 345 346 USHORT SiS_ReadDDC1Bit(SiS_Private *SiS_Pr); 347 void SiS_SetSwitchDDC2(SiS_Private *SiS_Pr); 348 USHORT SiS_SetStart(SiS_Private *SiS_Pr); 349 USHORT SiS_SetStop(SiS_Private *SiS_Pr); 350 void SiS_DDC2Delay(SiS_Private *SiS_Pr, USHORT delaytime); 351 USHORT SiS_SetSCLKLow(SiS_Private *SiS_Pr); 352 USHORT SiS_SetSCLKHigh(SiS_Private *SiS_Pr); 353 USHORT SiS_ReadDDC2Data(SiS_Private *SiS_Pr, USHORT tempax); 354 USHORT SiS_WriteDDC2Data(SiS_Private *SiS_Pr, USHORT tempax); 355 USHORT SiS_CheckACK(SiS_Private *SiS_Pr); 356 357 USHORT SiS_InitDDCRegs(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine, 358 USHORT adaptnum, USHORT DDCdatatype, BOOLEAN checkcr32); 359 USHORT SiS_WriteDABDDC(SiS_Private *SiS_Pr); 360 USHORT SiS_PrepareReadDDC(SiS_Private *SiS_Pr); 361 USHORT SiS_PrepareDDC(SiS_Private *SiS_Pr); 362 void SiS_SendACK(SiS_Private *SiS_Pr, USHORT yesno); 363 USHORT SiS_DoProbeDDC(SiS_Private *SiS_Pr); 364 USHORT SiS_ProbeDDC(SiS_Private *SiS_Pr); 365 USHORT SiS_ReadDDC(SiS_Private *SiS_Pr, USHORT DDCdatatype, unsigned char *buffer); 366 USHORT SiS_HandleDDC(SiS_Private *SiS_Pr, unsigned long VBFlags, int VGAEngine, 367 USHORT adaptnum, USHORT DDCdatatype, unsigned char *buffer); 368 #ifdef LINUX_XF86 369 USHORT SiS_SenseLCDDDC(SiS_Private *SiS_Pr, SISPtr pSiS); 370 USHORT SiS_SenseVGA2DDC(SiS_Private *SiS_Pr, SISPtr pSiS); 371 #endif 372 373 #ifdef SIS315H 374 void SiS_OEM310Setting(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, 375 USHORT ModeNo,USHORT ModeIdIndex); 376 void SiS_OEM661Setting(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, 377 USHORT ModeNo,USHORT ModeIdIndex, USHORT RRTI); 378 void SiS_FinalizeLCD(SiS_Private *, USHORT, USHORT, PSIS_HW_INFO); 379 #endif 380 #ifdef SIS300 381 void SiS_OEM300Setting(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, 382 USHORT ModeNo, USHORT ModeIdIndex, USHORT RefTabindex); 383 void SetOEMLCDData2(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo, 384 USHORT ModeNo, USHORT ModeIdIndex,USHORT RefTableIndex); 385 #endif 386 387 extern void SiS_SetReg(SISIOADDRESS, USHORT, USHORT); 388 extern void SiS_SetRegByte(SISIOADDRESS, USHORT); 389 extern void SiS_SetRegShort(SISIOADDRESS, USHORT); 390 extern void SiS_SetRegLong(SISIOADDRESS, ULONG); 391 extern UCHAR SiS_GetReg(SISIOADDRESS, USHORT); 392 extern UCHAR SiS_GetRegByte(SISIOADDRESS); 393 extern USHORT SiS_GetRegShort(SISIOADDRESS); 394 extern ULONG SiS_GetRegLong(SISIOADDRESS); 395 extern void SiS_SetRegANDOR(SISIOADDRESS Port,USHORT Index,USHORT DataAND,USHORT DataOR); 396 extern void SiS_SetRegOR(SISIOADDRESS Port,USHORT Index,USHORT DataOR); 397 extern void SiS_SetRegAND(SISIOADDRESS Port,USHORT Index,USHORT DataAND); 398 399 extern void SiS_DisplayOff(SiS_Private *SiS_Pr); 400 extern void SiS_DisplayOn(SiS_Private *SiS_Pr); 401 402 extern BOOLEAN SiS_SearchModeID(SiS_Private *, USHORT *, USHORT *); 403 extern UCHAR SiS_GetModePtr(SiS_Private *SiS_Pr, USHORT ModeNo,USHORT ModeIdIndex); 404 405 extern USHORT SiS_GetColorDepth(SiS_Private *SiS_Pr,USHORT ModeNo,USHORT ModeIdIndex); 406 extern USHORT SiS_GetOffset(SiS_Private *SiS_Pr,USHORT ModeNo,USHORT ModeIdIndex, 407 USHORT RefreshRateTableIndex,PSIS_HW_INFO HwInfo); 408 409 extern void SiS_LoadDAC(SiS_Private *SiS_Pr, PSIS_HW_INFO,USHORT ModeNo, 410 USHORT ModeIdIndex); 411 412 extern void SiS_CalcLCDACRT1Timing(SiS_Private *SiS_Pr,USHORT ModeNo,USHORT ModeIdIndex); 413 414 #endif 415