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