linux/drivers/usb/misc/sisusbvga/sisusb_init.h
<<
>>
Prefs
   1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
   2/* $XFree86$ */
   3/* $XdotOrg$ */
   4/*
   5 * Data and prototypes for init.c
   6 *
   7 * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
   8 *
   9 * If distributed as part of the Linux kernel, the following license terms
  10 * apply:
  11 *
  12 * * This program is free software; you can redistribute it and/or modify
  13 * * it under the terms of the GNU General Public License as published by
  14 * * the Free Software Foundation; either version 2 of the named License,
  15 * * or any later version.
  16 * *
  17 * * This program is distributed in the hope that it will be useful,
  18 * * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19 * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  20 * * GNU General Public License for more details.
  21 * *
  22 * * You should have received a copy of the GNU General Public License
  23 * * along with this program; if not, write to the Free Software
  24 * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
  25 *
  26 * Otherwise, the following license terms apply:
  27 *
  28 * * Redistribution and use in source and binary forms, with or without
  29 * * modification, are permitted provided that the following conditions
  30 * * are met:
  31 * * 1) Redistributions of source code must retain the above copyright
  32 * *    notice, this list of conditions and the following disclaimer.
  33 * * 2) Redistributions in binary form must reproduce the above copyright
  34 * *    notice, this list of conditions and the following disclaimer in the
  35 * *    documentation and/or other materials provided with the distribution.
  36 * * 3) The name of the author may not be used to endorse or promote products
  37 * *    derived from this software without specific prior written permission.
  38 * *
  39 * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  40 * * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  41 * * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  42 * * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  43 * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  44 * * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  45 * * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  46 * * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  47 * * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  48 * * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  49 *
  50 * Author:      Thomas Winischhofer <thomas@winischhofer.net>
  51 *
  52 */
  53
  54#ifndef _SISUSB_INIT_H_
  55#define _SISUSB_INIT_H_
  56
  57/* SiS_ModeType */
  58#define ModeText                0x00
  59#define ModeCGA                 0x01
  60#define ModeEGA                 0x02
  61#define ModeVGA                 0x03
  62#define Mode15Bpp               0x04
  63#define Mode16Bpp               0x05
  64#define Mode24Bpp               0x06
  65#define Mode32Bpp               0x07
  66
  67#define ModeTypeMask            0x07
  68#define IsTextMode              0x07
  69
  70#define DACInfoFlag             0x0018
  71#define MemoryInfoFlag          0x01E0
  72#define MemorySizeShift         5
  73
  74/* modeflag */
  75#define Charx8Dot               0x0200
  76#define LineCompareOff          0x0400
  77#define CRT2Mode                0x0800
  78#define HalfDCLK                0x1000
  79#define NoSupportSimuTV         0x2000
  80#define NoSupportLCDScale       0x4000  /* SiS bridge: No scaling possible (no matter what panel) */
  81#define DoubleScanMode          0x8000
  82
  83/* Infoflag */
  84#define SupportTV               0x0008
  85#define SupportTV1024           0x0800
  86#define SupportCHTV             0x0800
  87#define Support64048060Hz       0x0800  /* Special for 640x480 LCD */
  88#define SupportHiVision         0x0010
  89#define SupportYPbPr750p        0x1000
  90#define SupportLCD              0x0020
  91#define SupportRAMDAC2          0x0040  /* All           (<= 100Mhz) */
  92#define SupportRAMDAC2_135      0x0100  /* All except DH (<= 135Mhz) */
  93#define SupportRAMDAC2_162      0x0200  /* B, C          (<= 162Mhz) */
  94#define SupportRAMDAC2_202      0x0400  /* C             (<= 202Mhz) */
  95#define InterlaceMode           0x0080
  96#define SyncPP                  0x0000
  97#define SyncPN                  0x4000
  98#define SyncNP                  0x8000
  99#define SyncNN                  0xc000
 100
 101/* SetFlag */
 102#define ProgrammingCRT2         0x0001
 103#define LowModeTests            0x0002
 104#define LCDVESATiming           0x0008
 105#define EnableLVDSDDA           0x0010
 106#define SetDispDevSwitchFlag    0x0020
 107#define CheckWinDos             0x0040
 108#define SetDOSMode              0x0080
 109
 110/* Index in ModeResInfo table */
 111#define SIS_RI_320x200          0
 112#define SIS_RI_320x240          1
 113#define SIS_RI_320x400          2
 114#define SIS_RI_400x300          3
 115#define SIS_RI_512x384          4
 116#define SIS_RI_640x400          5
 117#define SIS_RI_640x480          6
 118#define SIS_RI_800x600          7
 119#define SIS_RI_1024x768         8
 120#define SIS_RI_1280x1024        9
 121#define SIS_RI_1600x1200        10
 122#define SIS_RI_1920x1440        11
 123#define SIS_RI_2048x1536        12
 124#define SIS_RI_720x480          13
 125#define SIS_RI_720x576          14
 126#define SIS_RI_1280x960         15
 127#define SIS_RI_800x480          16
 128#define SIS_RI_1024x576         17
 129#define SIS_RI_1280x720         18
 130#define SIS_RI_856x480          19
 131#define SIS_RI_1280x768         20
 132#define SIS_RI_1400x1050        21
 133#define SIS_RI_1152x864         22      /* Up to here SiS conforming */
 134#define SIS_RI_848x480          23
 135#define SIS_RI_1360x768         24
 136#define SIS_RI_1024x600         25
 137#define SIS_RI_1152x768         26
 138#define SIS_RI_768x576          27
 139#define SIS_RI_1360x1024        28
 140#define SIS_RI_1680x1050        29
 141#define SIS_RI_1280x800         30
 142#define SIS_RI_1920x1080        31
 143#define SIS_RI_960x540          32
 144#define SIS_RI_960x600          33
 145
 146#define SIS_VIDEO_CAPTURE       0x00 - 0x30
 147#define SIS_VIDEO_PLAYBACK      0x02 - 0x30
 148#define SIS_CRT2_PORT_04        0x04 - 0x30
 149
 150/* Mode numbers */
 151static const unsigned short ModeIndex_320x200[] = { 0x59, 0x41, 0x00, 0x4f };
 152static const unsigned short ModeIndex_320x240[] = { 0x50, 0x56, 0x00, 0x53 };
 153static const unsigned short ModeIndex_400x300[] = { 0x51, 0x57, 0x00, 0x54 };
 154static const unsigned short ModeIndex_512x384[] = { 0x52, 0x58, 0x00, 0x5c };
 155static const unsigned short ModeIndex_640x400[] = { 0x2f, 0x5d, 0x00, 0x5e };
 156static const unsigned short ModeIndex_640x480[] = { 0x2e, 0x44, 0x00, 0x62 };
 157static const unsigned short ModeIndex_720x480[] = { 0x31, 0x33, 0x00, 0x35 };
 158static const unsigned short ModeIndex_720x576[] = { 0x32, 0x34, 0x00, 0x36 };
 159static const unsigned short ModeIndex_768x576[] = { 0x5f, 0x60, 0x00, 0x61 };
 160static const unsigned short ModeIndex_800x480[] = { 0x70, 0x7a, 0x00, 0x76 };
 161static const unsigned short ModeIndex_800x600[] = { 0x30, 0x47, 0x00, 0x63 };
 162static const unsigned short ModeIndex_848x480[] = { 0x39, 0x3b, 0x00, 0x3e };
 163static const unsigned short ModeIndex_856x480[] = { 0x3f, 0x42, 0x00, 0x45 };
 164static const unsigned short ModeIndex_960x540[] = { 0x1d, 0x1e, 0x00, 0x1f };
 165static const unsigned short ModeIndex_960x600[] = { 0x20, 0x21, 0x00, 0x22 };
 166static const unsigned short ModeIndex_1024x768[] = { 0x38, 0x4a, 0x00, 0x64 };
 167static const unsigned short ModeIndex_1024x576[] = { 0x71, 0x74, 0x00, 0x77 };
 168static const unsigned short ModeIndex_1152x864[] = { 0x29, 0x2a, 0x00, 0x2b };
 169static const unsigned short ModeIndex_1280x720[] = { 0x79, 0x75, 0x00, 0x78 };
 170static const unsigned short ModeIndex_1280x768[] = { 0x23, 0x24, 0x00, 0x25 };
 171static const unsigned short ModeIndex_1280x1024[] = { 0x3a, 0x4d, 0x00, 0x65 };
 172
 173static const unsigned char SiS_MDA_DAC[] = {
 174        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 175        0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 176        0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 177        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
 178        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 179        0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 180        0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
 181        0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F
 182};
 183
 184static const unsigned char SiS_CGA_DAC[] = {
 185        0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
 186        0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
 187        0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
 188        0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
 189        0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
 190        0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
 191        0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
 192        0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F
 193};
 194
 195static const unsigned char SiS_EGA_DAC[] = {
 196        0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x05, 0x15,
 197        0x20, 0x30, 0x24, 0x34, 0x21, 0x31, 0x25, 0x35,
 198        0x08, 0x18, 0x0C, 0x1C, 0x09, 0x19, 0x0D, 0x1D,
 199        0x28, 0x38, 0x2C, 0x3C, 0x29, 0x39, 0x2D, 0x3D,
 200        0x02, 0x12, 0x06, 0x16, 0x03, 0x13, 0x07, 0x17,
 201        0x22, 0x32, 0x26, 0x36, 0x23, 0x33, 0x27, 0x37,
 202        0x0A, 0x1A, 0x0E, 0x1E, 0x0B, 0x1B, 0x0F, 0x1F,
 203        0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F
 204};
 205
 206static const unsigned char SiS_VGA_DAC[] = {
 207        0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
 208        0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
 209        0x00, 0x05, 0x08, 0x0B, 0x0E, 0x11, 0x14, 0x18,
 210        0x1C, 0x20, 0x24, 0x28, 0x2D, 0x32, 0x38, 0x3F,
 211        0x00, 0x10, 0x1F, 0x2F, 0x3F, 0x1F, 0x27, 0x2F,
 212        0x37, 0x3F, 0x2D, 0x31, 0x36, 0x3A, 0x3F, 0x00,
 213        0x07, 0x0E, 0x15, 0x1C, 0x0E, 0x11, 0x15, 0x18,
 214        0x1C, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x00, 0x04,
 215        0x08, 0x0C, 0x10, 0x08, 0x0A, 0x0C, 0x0E, 0x10,
 216        0x0B, 0x0C, 0x0D, 0x0F, 0x10
 217};
 218
 219static const struct SiS_St SiSUSB_SModeIDTable[] = {
 220        {0x03, 0x0010, 0x18, 0x02, 0x02, 0x00, 0x01, 0x03, 0x40},
 221        {0xff, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 222};
 223
 224static const struct SiS_StResInfo_S SiSUSB_StResInfo[] = {
 225        {640, 400},
 226        {640, 350},
 227        {720, 400},
 228        {720, 350},
 229        {640, 480}
 230};
 231
 232static const struct SiS_ModeResInfo SiSUSB_ModeResInfo[] = {
 233        {320, 200, 8, 8},       /* 0x00 */
 234        {320, 240, 8, 8},       /* 0x01 */
 235        {320, 400, 8, 8},       /* 0x02 */
 236        {400, 300, 8, 8},       /* 0x03 */
 237        {512, 384, 8, 8},       /* 0x04 */
 238        {640, 400, 8, 16},      /* 0x05 */
 239        {640, 480, 8, 16},      /* 0x06 */
 240        {800, 600, 8, 16},      /* 0x07 */
 241        {1024, 768, 8, 16},     /* 0x08 */
 242        {1280, 1024, 8, 16},    /* 0x09 */
 243        {1600, 1200, 8, 16},    /* 0x0a */
 244        {1920, 1440, 8, 16},    /* 0x0b */
 245        {2048, 1536, 8, 16},    /* 0x0c */
 246        {720, 480, 8, 16},      /* 0x0d */
 247        {720, 576, 8, 16},      /* 0x0e */
 248        {1280, 960, 8, 16},     /* 0x0f */
 249        {800, 480, 8, 16},      /* 0x10 */
 250        {1024, 576, 8, 16},     /* 0x11 */
 251        {1280, 720, 8, 16},     /* 0x12 */
 252        {856, 480, 8, 16},      /* 0x13 */
 253        {1280, 768, 8, 16},     /* 0x14 */
 254        {1400, 1050, 8, 16},    /* 0x15 */
 255        {1152, 864, 8, 16},     /* 0x16 */
 256        {848, 480, 8, 16},      /* 0x17 */
 257        {1360, 768, 8, 16},     /* 0x18 */
 258        {1024, 600, 8, 16},     /* 0x19 */
 259        {1152, 768, 8, 16},     /* 0x1a */
 260        {768, 576, 8, 16},      /* 0x1b */
 261        {1360, 1024, 8, 16},    /* 0x1c */
 262        {1680, 1050, 8, 16},    /* 0x1d */
 263        {1280, 800, 8, 16},     /* 0x1e */
 264        {1920, 1080, 8, 16},    /* 0x1f */
 265        {960, 540, 8, 16},      /* 0x20 */
 266        {960, 600, 8, 16}       /* 0x21 */
 267};
 268
 269static const struct SiS_StandTable SiSUSB_StandTable[] = {
 270        /* MD_3_400 - mode 0x03 - 400 */
 271        {
 272         0x50, 0x18, 0x10, 0x1000,
 273         {0x00, 0x03, 0x00, 0x02},
 274         0x67,
 275         {0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
 276          0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x00, 0x00,
 277          0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
 278          0xff},
 279         {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
 280          0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
 281          0x0c, 0x00, 0x0f, 0x08},
 282         {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff}
 283         },
 284        /* Generic for VGA and higher */
 285        {
 286         0x00, 0x00, 0x00, 0x0000,
 287         {0x01, 0x0f, 0x00, 0x0e},
 288         0x23,
 289         {0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
 290          0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 291          0xea, 0x8c, 0xdf, 0x28, 0x40, 0xe7, 0x04, 0xa3,
 292          0xff},
 293         {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
 294          0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
 295          0x01, 0x00, 0x00, 0x00},
 296         {0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f, 0xff}
 297         }
 298};
 299
 300static const struct SiS_Ext SiSUSB_EModeIDTable[] = {
 301        {0x2e, 0x0a1b, 0x0101, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},        /* 640x480x8 */
 302        {0x2f, 0x0a1b, 0x0100, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x05, 0x10, 0},        /* 640x400x8 */
 303        {0x30, 0x2a1b, 0x0103, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},        /* 800x600x8 */
 304        {0x31, 0x4a1b, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},       /* 720x480x8 */
 305        {0x32, 0x4a1b, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},       /* 720x576x8 */
 306        {0x33, 0x4a1d, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},       /* 720x480x16 */
 307        {0x34, 0x6a1d, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},       /* 720x576x16 */
 308        {0x35, 0x4a1f, 0x0000, SIS_RI_720x480, 0x00, 0x00, 0x06, 0x06, 0x11, -1},       /* 720x480x32 */
 309        {0x36, 0x6a1f, 0x0000, SIS_RI_720x576, 0x00, 0x00, 0x06, 0x06, 0x12, -1},       /* 720x576x32 */
 310        {0x38, 0x0a1b, 0x0105, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},       /* 1024x768x8 */
 311        {0x3a, 0x0e3b, 0x0107, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},      /* 1280x1024x8 */
 312        {0x41, 0x9a1d, 0x010e, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},        /* 320x200x16 */
 313        {0x44, 0x0a1d, 0x0111, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},        /* 640x480x16 */
 314        {0x47, 0x2a1d, 0x0114, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},        /* 800x600x16 */
 315        {0x4a, 0x0a3d, 0x0117, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},       /* 1024x768x16 */
 316        {0x4d, 0x0e7d, 0x011a, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},      /* 1280x1024x16 */
 317        {0x50, 0x9a1b, 0x0132, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},        /* 320x240x8  */
 318        {0x51, 0xba1b, 0x0133, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},        /* 400x300x8  */
 319        {0x52, 0xba1b, 0x0134, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},        /* 512x384x8  */
 320        {0x56, 0x9a1d, 0x0135, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},        /* 320x240x16 */
 321        {0x57, 0xba1d, 0x0136, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},        /* 400x300x16 */
 322        {0x58, 0xba1d, 0x0137, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},        /* 512x384x16 */
 323        {0x59, 0x9a1b, 0x0138, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},        /* 320x200x8  */
 324        {0x5c, 0xba1f, 0x0000, SIS_RI_512x384, 0x00, 0x00, 0x00, 0x00, 0x1d, 4},        /* 512x384x32 */
 325        {0x5d, 0x0a1d, 0x0139, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x07, 0x10, 0},        /* 640x400x16 */
 326        {0x5e, 0x0a1f, 0x0000, SIS_RI_640x400, 0x00, 0x00, 0x05, 0x07, 0x10, 0},        /* 640x400x32 */
 327        {0x62, 0x0a3f, 0x013a, SIS_RI_640x480, 0x00, 0x00, 0x05, 0x05, 0x08, 2},        /* 640x480x32 */
 328        {0x63, 0x2a3f, 0x013b, SIS_RI_800x600, 0x00, 0x00, 0x07, 0x06, 0x00, 3},        /* 800x600x32 */
 329        {0x64, 0x0a7f, 0x013c, SIS_RI_1024x768, 0x00, 0x00, 0x08, 0x07, 0x13, 4},       /* 1024x768x32 */
 330        {0x65, 0x0eff, 0x013d, SIS_RI_1280x1024, 0x00, 0x00, 0x00, 0x00, 0x2f, 8},      /* 1280x1024x32 */
 331        {0x70, 0x6a1b, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},       /* 800x480x8 */
 332        {0x71, 0x4a1b, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},      /* 1024x576x8 */
 333        {0x74, 0x4a1d, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},      /* 1024x576x16 */
 334        {0x75, 0x0a3d, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},       /* 1280x720x16 */
 335        {0x76, 0x6a1f, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},       /* 800x480x32 */
 336        {0x77, 0x4a1f, 0x0000, SIS_RI_1024x576, 0x00, 0x00, 0x00, 0x00, 0x21, -1},      /* 1024x576x32 */
 337        {0x78, 0x0a3f, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},       /* 1280x720x32 */
 338        {0x79, 0x0a3b, 0x0000, SIS_RI_1280x720, 0x00, 0x00, 0x00, 0x00, 0x24, 5},       /* 1280x720x8 */
 339        {0x7a, 0x6a1d, 0x0000, SIS_RI_800x480, 0x00, 0x00, 0x07, 0x07, 0x1e, -1},       /* 800x480x16 */
 340        {0x23, 0x0e3b, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},       /* 1280x768x8 */
 341        {0x24, 0x0e7d, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},       /* 1280x768x16 */
 342        {0x25, 0x0eff, 0x0000, SIS_RI_1280x768, 0x00, 0x00, 0x00, 0x00, 0x27, 6},       /* 1280x768x32 */
 343        {0x39, 0x6a1b, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28, -1},       /* 848x480 */
 344        {0x3b, 0x6a3d, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28,
 345         -1},
 346        {0x3e, 0x6a7f, 0x0000, SIS_RI_848x480, 0x00, 0x00, 0x00, 0x00, 0x28,
 347         -1},
 348        {0x3f, 0x6a1b, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a, -1},       /* 856x480 */
 349        {0x42, 0x6a3d, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a,
 350         -1},
 351        {0x45, 0x6a7f, 0x0000, SIS_RI_856x480, 0x00, 0x00, 0x00, 0x00, 0x2a,
 352         -1},
 353        {0x4f, 0x9a1f, 0x0000, SIS_RI_320x200, 0x00, 0x00, 0x04, 0x04, 0x1a, 0},        /* 320x200x32 */
 354        {0x53, 0x9a1f, 0x0000, SIS_RI_320x240, 0x00, 0x00, 0x04, 0x04, 0x1b, 2},        /* 320x240x32 */
 355        {0x54, 0xba1f, 0x0000, SIS_RI_400x300, 0x00, 0x00, 0x07, 0x07, 0x1c, 3},        /* 400x300x32 */
 356        {0x5f, 0x6a1b, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c, -1},       /* 768x576 */
 357        {0x60, 0x6a1d, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c,
 358         -1},
 359        {0x61, 0x6a3f, 0x0000, SIS_RI_768x576, 0x00, 0x00, 0x06, 0x06, 0x2c,
 360         -1},
 361        {0x1d, 0x6a1b, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d, -1},       /* 960x540 */
 362        {0x1e, 0x6a3d, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d,
 363         -1},
 364        {0x1f, 0x6a7f, 0x0000, SIS_RI_960x540, 0x00, 0x00, 0x00, 0x00, 0x2d,
 365         -1},
 366        {0x20, 0x6a1b, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e, -1},       /* 960x600 */
 367        {0x21, 0x6a3d, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e,
 368         -1},
 369        {0x22, 0x6a7f, 0x0000, SIS_RI_960x600, 0x00, 0x00, 0x00, 0x00, 0x2e,
 370         -1},
 371        {0x29, 0x4e1b, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33, -1},      /* 1152x864 */
 372        {0x2a, 0x4e3d, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33,
 373         -1},
 374        {0x2b, 0x4e7f, 0x0000, SIS_RI_1152x864, 0x00, 0x00, 0x00, 0x00, 0x33,
 375         -1},
 376        {0xff, 0x0000, 0x0000, 0, 0x00, 0x00, 0x00, 0x00, 0x00, -1}
 377};
 378
 379static const struct SiS_Ext2 SiSUSB_RefIndex[] = {
 380        {0x085f, 0x0d, 0x03, 0x05, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x0 */
 381        {0x0067, 0x0e, 0x04, 0x05, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x1 */
 382        {0x0067, 0x0f, 0x08, 0x48, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x2 */
 383        {0x0067, 0x10, 0x07, 0x8b, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x3 */
 384        {0x0047, 0x11, 0x0a, 0x00, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x4 */
 385        {0x0047, 0x12, 0x0d, 0x00, 0x05, 0x30, 800, 600, 0x40, 0x00, 0x00},     /* 0x5 */
 386        {0x0047, 0x13, 0x13, 0x00, 0x05, 0x30, 800, 600, 0x20, 0x00, 0x00},     /* 0x6 */
 387        {0x0107, 0x14, 0x1c, 0x00, 0x05, 0x30, 800, 600, 0x20, 0x00, 0x00},     /* 0x7 */
 388        {0xc85f, 0x05, 0x00, 0x04, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0x8 */
 389        {0xc067, 0x06, 0x02, 0x04, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0x9 */
 390        {0xc067, 0x07, 0x02, 0x47, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xa */
 391        {0xc067, 0x08, 0x03, 0x8a, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xb */
 392        {0xc047, 0x09, 0x05, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xc */
 393        {0xc047, 0x0a, 0x09, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xd */
 394        {0xc047, 0x0b, 0x0e, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xe */
 395        {0xc047, 0x0c, 0x15, 0x00, 0x04, 0x2e, 640, 480, 0x40, 0x00, 0x00},     /* 0xf */
 396        {0x487f, 0x04, 0x00, 0x00, 0x00, 0x2f, 640, 400, 0x30, 0x55, 0x6e},     /* 0x10 */
 397        {0xc06f, 0x3c, 0x01, 0x06, 0x13, 0x31, 720, 480, 0x30, 0x00, 0x00},     /* 0x11 */
 398        {0x006f, 0x3d, 0x6f, 0x06, 0x14, 0x32, 720, 576, 0x30, 0x00, 0x00},     /* 0x12 (6f was 03) */
 399        {0x0087, 0x15, 0x06, 0x00, 0x06, 0x38, 1024, 768, 0x30, 0x00, 0x00},    /* 0x13 */
 400        {0xc877, 0x16, 0x0b, 0x06, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x14 */
 401        {0xc067, 0x17, 0x0f, 0x49, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x15 */
 402        {0x0067, 0x18, 0x11, 0x00, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x16 */
 403        {0x0047, 0x19, 0x16, 0x8c, 0x06, 0x38, 1024, 768, 0x20, 0x00, 0x00},    /* 0x17 */
 404        {0x0107, 0x1a, 0x1b, 0x00, 0x06, 0x38, 1024, 768, 0x10, 0x00, 0x00},    /* 0x18 */
 405        {0x0107, 0x1b, 0x1f, 0x00, 0x06, 0x38, 1024, 768, 0x10, 0x00, 0x00},    /* 0x19 */
 406        {0x407f, 0x00, 0x00, 0x00, 0x00, 0x41, 320, 200, 0x30, 0x56, 0x4e},     /* 0x1a */
 407        {0xc07f, 0x01, 0x00, 0x04, 0x04, 0x50, 320, 240, 0x30, 0x00, 0x00},     /* 0x1b */
 408        {0x007f, 0x02, 0x04, 0x05, 0x05, 0x51, 400, 300, 0x30, 0x00, 0x00},     /* 0x1c */
 409        {0xc077, 0x03, 0x0b, 0x06, 0x06, 0x52, 512, 384, 0x30, 0x00, 0x00},     /* 0x1d */
 410        {0x0077, 0x32, 0x40, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},     /* 0x1e */
 411        {0x0047, 0x33, 0x07, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},     /* 0x1f */
 412        {0x0047, 0x34, 0x0a, 0x08, 0x18, 0x70, 800, 480, 0x30, 0x00, 0x00},     /* 0x20 */
 413        {0x0077, 0x35, 0x0b, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},    /* 0x21 */
 414        {0x0047, 0x36, 0x11, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},    /* 0x22 */
 415        {0x0047, 0x37, 0x16, 0x09, 0x19, 0x71, 1024, 576, 0x30, 0x00, 0x00},    /* 0x23 */
 416        {0x1137, 0x38, 0x19, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},    /* 0x24 */
 417        {0x1107, 0x39, 0x1e, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},    /* 0x25 */
 418        {0x1307, 0x3a, 0x20, 0x0a, 0x0c, 0x75, 1280, 720, 0x30, 0x00, 0x00},    /* 0x26 */
 419        {0x0077, 0x42, 0x5b, 0x08, 0x11, 0x23, 1280, 768, 0x30, 0x00, 0x00},    /* 0x27 */
 420        {0x0087, 0x45, 0x57, 0x00, 0x16, 0x39, 848, 480, 0x30, 0x00, 0x00},     /* 0x28 38Hzi  */
 421        {0xc067, 0x46, 0x55, 0x0b, 0x16, 0x39, 848, 480, 0x30, 0x00, 0x00},     /* 0x29 848x480-60Hz   */
 422        {0x0087, 0x47, 0x57, 0x00, 0x17, 0x3f, 856, 480, 0x30, 0x00, 0x00},     /* 0x2a 856x480-38Hzi  */
 423        {0xc067, 0x48, 0x57, 0x00, 0x17, 0x3f, 856, 480, 0x30, 0x00, 0x00},     /* 0x2b 856x480-60Hz   */
 424        {0x006f, 0x4d, 0x71, 0x06, 0x15, 0x5f, 768, 576, 0x30, 0x00, 0x00},     /* 0x2c 768x576-56Hz   */
 425        {0x0067, 0x52, 0x6a, 0x00, 0x1c, 0x1d, 960, 540, 0x30, 0x00, 0x00},     /* 0x2d 960x540 60Hz */
 426        {0x0077, 0x53, 0x6b, 0x0b, 0x1d, 0x20, 960, 600, 0x30, 0x00, 0x00},     /* 0x2e 960x600 60Hz */
 427        {0x0087, 0x1c, 0x11, 0x00, 0x07, 0x3a, 1280, 1024, 0x30, 0x00, 0x00},   /* 0x2f */
 428        {0x0137, 0x1d, 0x19, 0x07, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},   /* 0x30 */
 429        {0x0107, 0x1e, 0x1e, 0x00, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},   /* 0x31 */
 430        {0x0207, 0x1f, 0x20, 0x00, 0x07, 0x3a, 1280, 1024, 0x00, 0x00, 0x00},   /* 0x32 */
 431        {0x0127, 0x54, 0x6d, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},    /* 0x33 1152x864-60Hz  */
 432        {0x0127, 0x44, 0x19, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},    /* 0x34 1152x864-75Hz  */
 433        {0x0127, 0x4a, 0x1e, 0x00, 0x1a, 0x29, 1152, 864, 0x30, 0x00, 0x00},    /* 0x35 1152x864-85Hz  */
 434        {0xffff, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0x00, 0x00}
 435};
 436
 437static const struct SiS_CRT1Table SiSUSB_CRT1Table[] = {
 438        {{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0xbf, 0x1f,
 439          0x9c, 0x8e, 0x8f, 0x96, 0xb9, 0x30, 0x00, 0x00,
 440          0x00}},               /* 0x0 */
 441        {{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0x0b, 0x3e,
 442          0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x00,
 443          0x00}},               /* 0x1 */
 444        {{0x3d, 0x31, 0x31, 0x81, 0x37, 0x1f, 0x72, 0xf0,
 445          0x58, 0x8c, 0x57, 0x57, 0x73, 0x20, 0x00, 0x05,
 446          0x01}},               /* 0x2 */
 447        {{0x4f, 0x3f, 0x3f, 0x93, 0x45, 0x0d, 0x24, 0xf5,
 448          0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x01,
 449          0x01}},               /* 0x3 */
 450        {{0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
 451          0x9c, 0x8e, 0x8f, 0x96, 0xb9, 0x30, 0x00, 0x05,
 452          0x00}},               /* 0x4 */
 453        {{0x5f, 0x4f, 0x4f, 0x83, 0x55, 0x81, 0x0b, 0x3e,
 454          0xe9, 0x8b, 0xdf, 0xe8, 0x0c, 0x00, 0x00, 0x05,
 455          0x00}},               /* 0x5 */
 456        {{0x63, 0x4f, 0x4f, 0x87, 0x56, 0x9b, 0x06, 0x3e,
 457          0xe8, 0x8a, 0xdf, 0xe7, 0x07, 0x00, 0x00, 0x01,
 458          0x00}},               /* 0x6 */
 459        {{0x64, 0x4f, 0x4f, 0x88, 0x55, 0x9d, 0xf2, 0x1f,
 460          0xe0, 0x83, 0xdf, 0xdf, 0xf3, 0x10, 0x00, 0x01,
 461          0x00}},               /* 0x7 */
 462        {{0x63, 0x4f, 0x4f, 0x87, 0x5a, 0x81, 0xfb, 0x1f,
 463          0xe0, 0x83, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x05,
 464          0x00}},               /* 0x8 */
 465        {{0x65, 0x4f, 0x4f, 0x89, 0x58, 0x80, 0xfb, 0x1f,
 466          0xe0, 0x83, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x05,
 467          0x61}},               /* 0x9 */
 468        {{0x65, 0x4f, 0x4f, 0x89, 0x58, 0x80, 0x01, 0x3e,
 469          0xe0, 0x83, 0xdf, 0xdf, 0x02, 0x00, 0x00, 0x05,
 470          0x61}},               /* 0xa */
 471        {{0x67, 0x4f, 0x4f, 0x8b, 0x58, 0x81, 0x0d, 0x3e,
 472          0xe0, 0x83, 0xdf, 0xdf, 0x0e, 0x00, 0x00, 0x05,
 473          0x61}},               /* 0xb */
 474        {{0x65, 0x4f, 0x4f, 0x89, 0x57, 0x9f, 0xfb, 0x1f,
 475          0xe6, 0x8a, 0xdf, 0xdf, 0xfc, 0x10, 0x00, 0x01,
 476          0x00}},               /* 0xc */
 477        {{0x7b, 0x63, 0x63, 0x9f, 0x6a, 0x93, 0x6f, 0xf0,
 478          0x58, 0x8a, 0x57, 0x57, 0x70, 0x20, 0x00, 0x05,
 479          0x01}},               /* 0xd */
 480        {{0x7f, 0x63, 0x63, 0x83, 0x6c, 0x1c, 0x72, 0xf0,
 481          0x58, 0x8c, 0x57, 0x57, 0x73, 0x20, 0x00, 0x06,
 482          0x01}},               /* 0xe */
 483        {{0x7d, 0x63, 0x63, 0x81, 0x6e, 0x1d, 0x98, 0xf0,
 484          0x7c, 0x82, 0x57, 0x57, 0x99, 0x00, 0x00, 0x06,
 485          0x01}},               /* 0xf */
 486        {{0x7f, 0x63, 0x63, 0x83, 0x69, 0x13, 0x6f, 0xf0,
 487          0x58, 0x8b, 0x57, 0x57, 0x70, 0x20, 0x00, 0x06,
 488          0x01}},               /* 0x10 */
 489        {{0x7e, 0x63, 0x63, 0x82, 0x6b, 0x13, 0x75, 0xf0,
 490          0x58, 0x8b, 0x57, 0x57, 0x76, 0x20, 0x00, 0x06,
 491          0x01}},               /* 0x11 */
 492        {{0x81, 0x63, 0x63, 0x85, 0x6d, 0x18, 0x7a, 0xf0,
 493          0x58, 0x8b, 0x57, 0x57, 0x7b, 0x20, 0x00, 0x06,
 494          0x61}},               /* 0x12 */
 495        {{0x83, 0x63, 0x63, 0x87, 0x6e, 0x19, 0x81, 0xf0,
 496          0x58, 0x8b, 0x57, 0x57, 0x82, 0x20, 0x00, 0x06,
 497          0x61}},               /* 0x13 */
 498        {{0x85, 0x63, 0x63, 0x89, 0x6f, 0x1a, 0x91, 0xf0,
 499          0x58, 0x8b, 0x57, 0x57, 0x92, 0x20, 0x00, 0x06,
 500          0x61}},               /* 0x14 */
 501        {{0x99, 0x7f, 0x7f, 0x9d, 0x84, 0x1a, 0x96, 0x1f,
 502          0x7f, 0x83, 0x7f, 0x7f, 0x97, 0x10, 0x00, 0x02,
 503          0x00}},               /* 0x15 */
 504        {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf5,
 505          0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
 506          0x01}},               /* 0x16 */
 507        {{0xa1, 0x7f, 0x7f, 0x85, 0x86, 0x97, 0x24, 0xf5,
 508          0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
 509          0x01}},               /* 0x17 */
 510        {{0x9f, 0x7f, 0x7f, 0x83, 0x85, 0x91, 0x1e, 0xf5,
 511          0x00, 0x83, 0xff, 0xff, 0x1f, 0x10, 0x00, 0x02,
 512          0x01}},               /* 0x18 */
 513        {{0xa7, 0x7f, 0x7f, 0x8b, 0x89, 0x95, 0x26, 0xf5,
 514          0x00, 0x83, 0xff, 0xff, 0x27, 0x10, 0x00, 0x02,
 515          0x01}},               /* 0x19 */
 516        {{0xa9, 0x7f, 0x7f, 0x8d, 0x8c, 0x9a, 0x2c, 0xf5,
 517          0x00, 0x83, 0xff, 0xff, 0x2d, 0x14, 0x00, 0x02,
 518          0x62}},               /* 0x1a */
 519        {{0xab, 0x7f, 0x7f, 0x8f, 0x8d, 0x9b, 0x35, 0xf5,
 520          0x00, 0x83, 0xff, 0xff, 0x36, 0x14, 0x00, 0x02,
 521          0x62}},               /* 0x1b */
 522        {{0xcf, 0x9f, 0x9f, 0x93, 0xb2, 0x01, 0x14, 0xba,
 523          0x00, 0x83, 0xff, 0xff, 0x15, 0x00, 0x00, 0x03,
 524          0x00}},               /* 0x1c */
 525        {{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x28, 0x5a,
 526          0x00, 0x83, 0xff, 0xff, 0x29, 0x09, 0x00, 0x07,
 527          0x01}},               /* 0x1d */
 528        {{0xce, 0x9f, 0x9f, 0x92, 0xa5, 0x17, 0x28, 0x5a,
 529          0x00, 0x83, 0xff, 0xff, 0x29, 0x09, 0x00, 0x07,
 530          0x01}},               /* 0x1e */
 531        {{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0x2e, 0x5a,
 532          0x00, 0x83, 0xff, 0xff, 0x2f, 0x09, 0x00, 0x07,
 533          0x01}},               /* 0x1f */
 534        {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
 535          0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
 536          0x00}},               /* 0x20 */
 537        {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
 538          0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
 539          0x00}},               /* 0x21 */
 540        {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
 541          0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
 542          0x00}},               /* 0x22 */
 543        {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
 544          0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
 545          0x00}},               /* 0x23 */
 546        {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
 547          0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
 548          0x00}},               /* 0x24 */
 549        {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
 550          0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
 551          0x00}},               /* 0x25 */
 552        {{0x09, 0xc7, 0xc7, 0x8d, 0xd3, 0x0b, 0xe0, 0x10,
 553          0xb0, 0x83, 0xaf, 0xaf, 0xe1, 0x2f, 0x01, 0x04,
 554          0x00}},               /* 0x26 */
 555        {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
 556          0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
 557          0x00}},               /* 0x27 */
 558        {{0x43, 0xef, 0xef, 0x87, 0x06, 0x00, 0xd4, 0x1f,
 559          0xa0, 0x83, 0x9f, 0x9f, 0xd5, 0x1f, 0x41, 0x05,
 560          0x63}},               /* 0x28 */
 561        {{0x45, 0xef, 0xef, 0x89, 0x07, 0x01, 0xd9, 0x1f,
 562          0xa0, 0x83, 0x9f, 0x9f, 0xda, 0x1f, 0x41, 0x05,
 563          0x63}},               /* 0x29 */
 564        {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
 565          0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
 566          0x00}},               /* 0x2a */
 567        {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
 568          0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
 569          0x00}},               /* 0x2b */
 570        {{0x40, 0xef, 0xef, 0x84, 0x03, 0x1d, 0xda, 0x1f,
 571          0xa0, 0x83, 0x9f, 0x9f, 0xdb, 0x1f, 0x41, 0x01,
 572          0x00}},               /* 0x2c */
 573        {{0x59, 0xff, 0xff, 0x9d, 0x17, 0x13, 0x33, 0xba,
 574          0x00, 0x83, 0xff, 0xff, 0x34, 0x0f, 0x41, 0x05,
 575          0x44}},               /* 0x2d */
 576        {{0x5b, 0xff, 0xff, 0x9f, 0x18, 0x14, 0x38, 0xba,
 577          0x00, 0x83, 0xff, 0xff, 0x39, 0x0f, 0x41, 0x05,
 578          0x44}},               /* 0x2e */
 579        {{0x5b, 0xff, 0xff, 0x9f, 0x18, 0x14, 0x3d, 0xba,
 580          0x00, 0x83, 0xff, 0xff, 0x3e, 0x0f, 0x41, 0x05,
 581          0x44}},               /* 0x2f */
 582        {{0x5d, 0xff, 0xff, 0x81, 0x19, 0x95, 0x41, 0xba,
 583          0x00, 0x84, 0xff, 0xff, 0x42, 0x0f, 0x41, 0x05,
 584          0x44}},               /* 0x30 */
 585        {{0x55, 0xff, 0xff, 0x99, 0x0d, 0x0c, 0x3e, 0xba,
 586          0x00, 0x84, 0xff, 0xff, 0x3f, 0x0f, 0x41, 0x05,
 587          0x00}},               /* 0x31 */
 588        {{0x7f, 0x63, 0x63, 0x83, 0x6c, 0x1c, 0x72, 0xba,
 589          0x27, 0x8b, 0xdf, 0xdf, 0x73, 0x00, 0x00, 0x06,
 590          0x01}},               /* 0x32 */
 591        {{0x7f, 0x63, 0x63, 0x83, 0x69, 0x13, 0x6f, 0xba,
 592          0x26, 0x89, 0xdf, 0xdf, 0x6f, 0x00, 0x00, 0x06,
 593          0x01}},               /* 0x33 */
 594        {{0x7f, 0x63, 0x63, 0x82, 0x6b, 0x13, 0x75, 0xba,
 595          0x29, 0x8c, 0xdf, 0xdf, 0x75, 0x00, 0x00, 0x06,
 596          0x01}},               /* 0x34 */
 597        {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf1,
 598          0xaf, 0x85, 0x3f, 0x3f, 0x25, 0x30, 0x00, 0x02,
 599          0x01}},               /* 0x35 */
 600        {{0x9f, 0x7f, 0x7f, 0x83, 0x85, 0x91, 0x1e, 0xf1,
 601          0xad, 0x81, 0x3f, 0x3f, 0x1f, 0x30, 0x00, 0x02,
 602          0x01}},               /* 0x36 */
 603        {{0xa7, 0x7f, 0x7f, 0x88, 0x89, 0x95, 0x26, 0xf1,
 604          0xb1, 0x85, 0x3f, 0x3f, 0x27, 0x30, 0x00, 0x02,
 605          0x01}},               /* 0x37 */
 606        {{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x28, 0xc4,
 607          0x7a, 0x8e, 0xcf, 0xcf, 0x29, 0x21, 0x00, 0x07,
 608          0x01}},               /* 0x38 */
 609        {{0xce, 0x9f, 0x9f, 0x92, 0xa5, 0x17, 0x28, 0xd4,
 610          0x7a, 0x8e, 0xcf, 0xcf, 0x29, 0x21, 0x00, 0x07,
 611          0x01}},               /* 0x39 */
 612        {{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0x2e, 0xd4,
 613          0x7d, 0x81, 0xcf, 0xcf, 0x2f, 0x21, 0x00, 0x07,
 614          0x01}},               /* 0x3a */
 615        {{0xdc, 0x9f, 0x9f, 0x80, 0xaf, 0x9d, 0xe6, 0xff,
 616          0xc0, 0x83, 0xbf, 0xbf, 0xe7, 0x10, 0x00, 0x07,
 617          0x01}},               /* 0x3b */
 618        {{0x6b, 0x59, 0x59, 0x8f, 0x5e, 0x8c, 0x0b, 0x3e,
 619          0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x05,
 620          0x00}},               /* 0x3c */
 621        {{0x6d, 0x59, 0x59, 0x91, 0x60, 0x89, 0x53, 0xf0,
 622          0x41, 0x84, 0x3f, 0x3f, 0x54, 0x00, 0x00, 0x05,
 623          0x41}},               /* 0x3d */
 624        {{0x86, 0x6a, 0x6a, 0x8a, 0x74, 0x06, 0x8c, 0x15,
 625          0x4f, 0x83, 0xef, 0xef, 0x8d, 0x30, 0x00, 0x02,
 626          0x00}},               /* 0x3e */
 627        {{0x81, 0x6a, 0x6a, 0x85, 0x70, 0x00, 0x0f, 0x3e,
 628          0xeb, 0x8e, 0xdf, 0xdf, 0x10, 0x00, 0x00, 0x02,
 629          0x00}},               /* 0x3f */
 630        {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x1e, 0xf1,
 631          0xae, 0x85, 0x57, 0x57, 0x1f, 0x30, 0x00, 0x02,
 632          0x01}},               /* 0x40 */
 633        {{0xa3, 0x7f, 0x7f, 0x87, 0x86, 0x97, 0x24, 0xf5,
 634          0x02, 0x88, 0xff, 0xff, 0x25, 0x10, 0x00, 0x02,
 635          0x01}},               /* 0x41 */
 636        {{0xce, 0x9f, 0x9f, 0x92, 0xa9, 0x17, 0x20, 0xf5,
 637          0x03, 0x88, 0xff, 0xff, 0x21, 0x10, 0x00, 0x07,
 638          0x01}},               /* 0x42 */
 639        {{0xe6, 0xae, 0xae, 0x8a, 0xbd, 0x90, 0x3d, 0x10,
 640          0x1a, 0x8d, 0x19, 0x19, 0x3e, 0x2f, 0x00, 0x03,
 641          0x00}},               /* 0x43 */
 642        {{0xc3, 0x8f, 0x8f, 0x87, 0x9b, 0x0b, 0x82, 0xef,
 643          0x60, 0x83, 0x5f, 0x5f, 0x83, 0x10, 0x00, 0x07,
 644          0x01}},               /* 0x44 */
 645        {{0x86, 0x69, 0x69, 0x8A, 0x74, 0x06, 0x8C, 0x15,
 646          0x4F, 0x83, 0xEF, 0xEF, 0x8D, 0x30, 0x00, 0x02,
 647          0x00}},               /* 0x45 */
 648        {{0x83, 0x69, 0x69, 0x87, 0x6f, 0x1d, 0x03, 0x3E,
 649          0xE5, 0x8d, 0xDF, 0xe4, 0x04, 0x00, 0x00, 0x06,
 650          0x00}},               /* 0x46 */
 651        {{0x86, 0x6A, 0x6A, 0x8A, 0x74, 0x06, 0x8C, 0x15,
 652          0x4F, 0x83, 0xEF, 0xEF, 0x8D, 0x30, 0x00, 0x02,
 653          0x00}},               /* 0x47 */
 654        {{0x81, 0x6A, 0x6A, 0x85, 0x70, 0x00, 0x0F, 0x3E,
 655          0xEB, 0x8E, 0xDF, 0xDF, 0x10, 0x00, 0x00, 0x02,
 656          0x00}},               /* 0x48 */
 657        {{0xdd, 0xa9, 0xa9, 0x81, 0xb4, 0x97, 0x26, 0xfd,
 658          0x01, 0x8d, 0xff, 0x00, 0x27, 0x10, 0x00, 0x03,
 659          0x01}},               /* 0x49 */
 660        {{0xd9, 0x8f, 0x8f, 0x9d, 0xba, 0x0a, 0x8a, 0xff,
 661          0x60, 0x8b, 0x5f, 0x5f, 0x8b, 0x10, 0x00, 0x03,
 662          0x01}},               /* 0x4a */
 663        {{0xea, 0xae, 0xae, 0x8e, 0xba, 0x82, 0x40, 0x10,
 664          0x1b, 0x87, 0x19, 0x1a, 0x41, 0x0f, 0x00, 0x03,
 665          0x00}},               /* 0x4b */
 666        {{0xd3, 0x9f, 0x9f, 0x97, 0xab, 0x1f, 0xf1, 0xff,
 667          0xc0, 0x83, 0xbf, 0xbf, 0xf2, 0x10, 0x00, 0x07,
 668          0x01}},               /* 0x4c */
 669        {{0x75, 0x5f, 0x5f, 0x99, 0x66, 0x90, 0x53, 0xf0,
 670          0x41, 0x84, 0x3f, 0x3f, 0x54, 0x00, 0x00, 0x05,
 671          0x41}},
 672        {{0x2d, 0x27, 0x28, 0x90, 0x2c, 0x80, 0x0b, 0x3e,
 673          0xe9, 0x8b, 0xdf, 0xe7, 0x04, 0x00, 0x00, 0x00,
 674          0x00}},               /* 0x4e */
 675        {{0xcd, 0x9f, 0x9f, 0x91, 0xab, 0x1c, 0x3a, 0xff,
 676          0x20, 0x83, 0x1f, 0x1f, 0x3b, 0x10, 0x00, 0x07,
 677          0x21}},               /* 0x4f */
 678        {{0x15, 0xd1, 0xd1, 0x99, 0xe2, 0x19, 0x3d, 0x10,
 679          0x1a, 0x8d, 0x19, 0x19, 0x3e, 0x2f, 0x01, 0x0c,
 680          0x20}},               /* 0x50 */
 681        {{0x0e, 0xef, 0xef, 0x92, 0xfe, 0x03, 0x30, 0xf0,
 682          0x1e, 0x83, 0x1b, 0x1c, 0x31, 0x00, 0x01, 0x00,
 683          0x61}},               /* 0x51 */
 684        {{0x85, 0x77, 0x77, 0x89, 0x7d, 0x01, 0x31, 0xf0,
 685          0x1e, 0x84, 0x1b, 0x1c, 0x32, 0x00, 0x00, 0x02,
 686          0x41}},               /* 0x52 */
 687        {{0x87, 0x77, 0x77, 0x8b, 0x81, 0x0b, 0x68, 0xf0,
 688          0x5a, 0x80, 0x57, 0x57, 0x69, 0x00, 0x00, 0x02,
 689          0x01}},               /* 0x53 */
 690        {{0xcd, 0x8f, 0x8f, 0x91, 0x9b, 0x1b, 0x7a, 0xff,
 691          0x64, 0x8c, 0x5f, 0x62, 0x7b, 0x10, 0x00, 0x07,
 692          0x41}}                /* 0x54 */
 693};
 694
 695static const struct SiS_VCLKData SiSUSB_VCLKData[] = {
 696        {0x1b, 0xe1, 25},       /* 0x00 */
 697        {0x4e, 0xe4, 28},       /* 0x01 */
 698        {0x57, 0xe4, 31},       /* 0x02 */
 699        {0xc3, 0xc8, 36},       /* 0x03 */
 700        {0x42, 0xe2, 40},       /* 0x04 */
 701        {0xfe, 0xcd, 43},       /* 0x05 */
 702        {0x5d, 0xc4, 44},       /* 0x06 */
 703        {0x52, 0xe2, 49},       /* 0x07 */
 704        {0x53, 0xe2, 50},       /* 0x08 */
 705        {0x74, 0x67, 52},       /* 0x09 */
 706        {0x6d, 0x66, 56},       /* 0x0a */
 707        {0x5a, 0x64, 65},       /* 0x0b */
 708        {0x46, 0x44, 67},       /* 0x0c */
 709        {0xb1, 0x46, 68},       /* 0x0d */
 710        {0xd3, 0x4a, 72},       /* 0x0e */
 711        {0x29, 0x61, 75},       /* 0x0f */
 712        {0x6e, 0x46, 76},       /* 0x10 */
 713        {0x2b, 0x61, 78},       /* 0x11 */
 714        {0x31, 0x42, 79},       /* 0x12 */
 715        {0xab, 0x44, 83},       /* 0x13 */
 716        {0x46, 0x25, 84},       /* 0x14 */
 717        {0x78, 0x29, 86},       /* 0x15 */
 718        {0x62, 0x44, 94},       /* 0x16 */
 719        {0x2b, 0x41, 104},      /* 0x17 */
 720        {0x3a, 0x23, 105},      /* 0x18 */
 721        {0x70, 0x44, 108},      /* 0x19 */
 722        {0x3c, 0x23, 109},      /* 0x1a */
 723        {0x5e, 0x43, 113},      /* 0x1b */
 724        {0xbc, 0x44, 116},      /* 0x1c */
 725        {0xe0, 0x46, 132},      /* 0x1d */
 726        {0x54, 0x42, 135},      /* 0x1e */
 727        {0xea, 0x2a, 139},      /* 0x1f */
 728        {0x41, 0x22, 157},      /* 0x20 */
 729        {0x70, 0x24, 162},      /* 0x21 */
 730        {0x30, 0x21, 175},      /* 0x22 */
 731        {0x4e, 0x22, 189},      /* 0x23 */
 732        {0xde, 0x26, 194},      /* 0x24 */
 733        {0x62, 0x06, 202},      /* 0x25 */
 734        {0x3f, 0x03, 229},      /* 0x26 */
 735        {0xb8, 0x06, 234},      /* 0x27 */
 736        {0x34, 0x02, 253},      /* 0x28 */
 737        {0x58, 0x04, 255},      /* 0x29 */
 738        {0x24, 0x01, 265},      /* 0x2a */
 739        {0x9b, 0x02, 267},      /* 0x2b */
 740        {0x70, 0x05, 270},      /* 0x2c */
 741        {0x25, 0x01, 272},      /* 0x2d */
 742        {0x9c, 0x02, 277},      /* 0x2e */
 743        {0x27, 0x01, 286},      /* 0x2f */
 744        {0x3c, 0x02, 291},      /* 0x30 */
 745        {0xef, 0x0a, 292},      /* 0x31 */
 746        {0xf6, 0x0a, 310},      /* 0x32 */
 747        {0x95, 0x01, 315},      /* 0x33 */
 748        {0xf0, 0x09, 324},      /* 0x34 */
 749        {0xfe, 0x0a, 331},      /* 0x35 */
 750        {0xf3, 0x09, 332},      /* 0x36 */
 751        {0xea, 0x08, 340},      /* 0x37 */
 752        {0xe8, 0x07, 376},      /* 0x38 */
 753        {0xde, 0x06, 389},      /* 0x39 */
 754        {0x52, 0x2a, 54},       /* 0x3a 301 TV */
 755        {0x52, 0x6a, 27},       /* 0x3b 301 TV */
 756        {0x62, 0x24, 70},       /* 0x3c 301 TV */
 757        {0x62, 0x64, 70},       /* 0x3d 301 TV */
 758        {0xa8, 0x4c, 30},       /* 0x3e 301 TV */
 759        {0x20, 0x26, 33},       /* 0x3f 301 TV */
 760        {0x31, 0xc2, 39},       /* 0x40 */
 761        {0x60, 0x36, 30},       /* 0x41 Chrontel */
 762        {0x40, 0x4a, 28},       /* 0x42 Chrontel */
 763        {0x9f, 0x46, 44},       /* 0x43 Chrontel */
 764        {0x97, 0x2c, 26},       /* 0x44 */
 765        {0x44, 0xe4, 25},       /* 0x45 Chrontel */
 766        {0x7e, 0x32, 47},       /* 0x46 Chrontel */
 767        {0x8a, 0x24, 31},       /* 0x47 Chrontel */
 768        {0x97, 0x2c, 26},       /* 0x48 Chrontel */
 769        {0xce, 0x3c, 39},       /* 0x49 */
 770        {0x52, 0x4a, 36},       /* 0x4a Chrontel */
 771        {0x34, 0x61, 95},       /* 0x4b */
 772        {0x78, 0x27, 108},      /* 0x4c - was 102 */
 773        {0x66, 0x43, 123},      /* 0x4d Modes 0x26-0x28 (1400x1050) */
 774        {0x41, 0x4e, 21},       /* 0x4e */
 775        {0xa1, 0x4a, 29},       /* 0x4f Chrontel */
 776        {0x19, 0x42, 42},       /* 0x50 */
 777        {0x54, 0x46, 58},       /* 0x51 Chrontel */
 778        {0x25, 0x42, 61},       /* 0x52 */
 779        {0x44, 0x44, 66},       /* 0x53 Chrontel */
 780        {0x3a, 0x62, 70},       /* 0x54 Chrontel */
 781        {0x62, 0xc6, 34},       /* 0x55 848x480-60 */
 782        {0x6a, 0xc6, 37},       /* 0x56 848x480-75 - TEMP */
 783        {0xbf, 0xc8, 35},       /* 0x57 856x480-38i,60 */
 784        {0x30, 0x23, 88},       /* 0x58 1360x768-62 (is 60Hz!) */
 785        {0x52, 0x07, 149},      /* 0x59 1280x960-85 */
 786        {0x56, 0x07, 156},      /* 0x5a 1400x1050-75 */
 787        {0x70, 0x29, 81},       /* 0x5b 1280x768 LCD */
 788        {0x45, 0x25, 83},       /* 0x5c 1280x800  */
 789        {0x70, 0x0a, 147},      /* 0x5d 1680x1050 */
 790        {0x70, 0x24, 162},      /* 0x5e 1600x1200 */
 791        {0x5a, 0x64, 65},       /* 0x5f 1280x720 - temp */
 792        {0x63, 0x46, 68},       /* 0x60 1280x768_2 */
 793        {0x31, 0x42, 79},       /* 0x61 1280x768_3 - temp */
 794        {0, 0, 0},              /* 0x62 - custom (will be filled out at run-time) */
 795        {0x5a, 0x64, 65},       /* 0x63 1280x720 (LCD LVDS) */
 796        {0x70, 0x28, 90},       /* 0x64 1152x864@60 */
 797        {0x41, 0xc4, 32},       /* 0x65 848x480@60 */
 798        {0x5c, 0xc6, 32},       /* 0x66 856x480@60 */
 799        {0x76, 0xe7, 27},       /* 0x67 720x480@60 */
 800        {0x5f, 0xc6, 33},       /* 0x68 720/768x576@60 */
 801        {0x52, 0x27, 75},       /* 0x69 1920x1080i 60Hz interlaced */
 802        {0x7c, 0x6b, 38},       /* 0x6a 960x540@60 */
 803        {0xe3, 0x56, 41},       /* 0x6b 960x600@60 */
 804        {0x45, 0x25, 83},       /* 0x6c 1280x800 */
 805        {0x70, 0x28, 90},       /* 0x6d 1152x864@60 */
 806        {0x15, 0xe1, 20},       /* 0x6e 640x400@60 (fake, not actually used) */
 807        {0x5f, 0xc6, 33},       /* 0x6f 720x576@60 */
 808        {0x37, 0x5a, 10},       /* 0x70 320x200@60 (fake, not actually used) */
 809        {0x2b, 0xc2, 35}        /* 0x71 768@576@60 */
 810};
 811
 812int SiSUSBSetMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo);
 813int SiSUSBSetVESAMode(struct SiS_Private *SiS_Pr, unsigned short VModeNo);
 814
 815extern int sisusb_setreg(struct sisusb_usb_data *sisusb, int port, u8 data);
 816extern int sisusb_getreg(struct sisusb_usb_data *sisusb, int port, u8 * data);
 817extern int sisusb_setidxreg(struct sisusb_usb_data *sisusb, int port,
 818                            u8 index, u8 data);
 819extern int sisusb_getidxreg(struct sisusb_usb_data *sisusb, int port,
 820                            u8 index, u8 * data);
 821extern int sisusb_setidxregandor(struct sisusb_usb_data *sisusb, int port,
 822                                 u8 idx, u8 myand, u8 myor);
 823extern int sisusb_setidxregor(struct sisusb_usb_data *sisusb, int port,
 824                              u8 index, u8 myor);
 825extern int sisusb_setidxregand(struct sisusb_usb_data *sisusb, int port,
 826                               u8 idx, u8 myand);
 827
 828void sisusb_delete(struct kref *kref);
 829int sisusb_writeb(struct sisusb_usb_data *sisusb, u32 adr, u8 data);
 830int sisusb_readb(struct sisusb_usb_data *sisusb, u32 adr, u8 * data);
 831int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src,
 832                       u32 dest, int length);
 833int sisusb_reset_text_mode(struct sisusb_usb_data *sisusb, int init);
 834int sisusbcon_do_font_op(struct sisusb_usb_data *sisusb, int set, int slot,
 835                         u8 * arg, int cmapsz, int ch512, int dorecalc,
 836                         struct vc_data *c, int fh, int uplock);
 837void sisusb_set_cursor(struct sisusb_usb_data *sisusb, unsigned int location);
 838int sisusb_console_init(struct sisusb_usb_data *sisusb, int first, int last);
 839void sisusb_console_exit(struct sisusb_usb_data *sisusb);
 840void sisusb_init_concode(void);
 841
 842#endif
 843