172b676d7Smrg/* 272b676d7Smrg * Global data and definitions 372b676d7Smrg * 472b676d7Smrg * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria 572b676d7Smrg * 672b676d7Smrg * Redistribution and use in source and binary forms, with or without 772b676d7Smrg * modification, are permitted provided that the following conditions 872b676d7Smrg * are met: 972b676d7Smrg * 1) Redistributions of source code must retain the above copyright 1072b676d7Smrg * notice, this list of conditions and the following disclaimer. 1172b676d7Smrg * 2) Redistributions in binary form must reproduce the above copyright 1272b676d7Smrg * notice, this list of conditions and the following disclaimer in the 1372b676d7Smrg * documentation and/or other materials provided with the distribution. 1472b676d7Smrg * 3) The name of the author may not be used to endorse or promote products 1572b676d7Smrg * derived from this software without specific prior written permission. 1672b676d7Smrg * 1772b676d7Smrg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1872b676d7Smrg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1972b676d7Smrg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2072b676d7Smrg * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2172b676d7Smrg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2272b676d7Smrg * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2372b676d7Smrg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2472b676d7Smrg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2572b676d7Smrg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2672b676d7Smrg * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2772b676d7Smrg * 2872b676d7Smrg * Author: Thomas Winischhofer <thomas@winischhofer.net> 2972b676d7Smrg * 3072b676d7Smrg */ 3172b676d7Smrg 3272b676d7Smrg/* VESA */ 3372b676d7Smrg/* The following is included because there are BIOSes out there that 3472b676d7Smrg * report incomplete mode lists. These are 630 BIOS versions <2.01.2x 3572b676d7Smrg * -) VBE 3.0 on SiS300 and 315 series do not support 24 fpp modes 3672b676d7Smrg * -) Only SiS315 series support 1920x1440x32 3772b676d7Smrg */ 3872b676d7Smrg 3972b676d7Smrgstatic const UShort VESAModeIndices[] = { 4072b676d7Smrg /* x y 8 16 (24) 32 */ 4172b676d7Smrg 320, 200, 0x138, 0x10e, 0x000, 0x000, 4272b676d7Smrg 320, 240, 0x132, 0x135, 0x000, 0x000, 4372b676d7Smrg 400, 300, 0x133, 0x136, 0x000, 0x000, 4472b676d7Smrg 512, 384, 0x134, 0x137, 0x000, 0x000, 4572b676d7Smrg 640, 400, 0x100, 0x139, 0x000, 0x000, 4672b676d7Smrg 640, 480, 0x101, 0x111, 0x000, 0x13a, 4772b676d7Smrg 800, 600, 0x103, 0x114, 0x000, 0x13b, 4872b676d7Smrg 1024, 768, 0x105, 0x117, 0x000, 0x13c, 4972b676d7Smrg 1280,1024, 0x107, 0x11a, 0x000, 0x13d, 5072b676d7Smrg 1600,1200, 0x130, 0x131, 0x000, 0x13e, 5172b676d7Smrg 1920,1440, 0x13f, 0x140, 0x000, 0x141, 5272b676d7Smrg 9999,9999, 0, 0, 0, 0 5372b676d7Smrg}; 5472b676d7Smrg 5572b676d7Smrg/* For calculating refresh rate index (CR33) */ 5672b676d7Smrgstatic const struct _sis_vrate { 5772b676d7Smrg CARD16 idx; 5872b676d7Smrg CARD16 xres; 5972b676d7Smrg CARD16 yres; 6072b676d7Smrg CARD16 refresh; 6172b676d7Smrg Bool SiS730valid32bpp; 6272b676d7Smrg} sisx_vrate[] = { 6372b676d7Smrg {1, 320, 200, 60, TRUE}, {1, 320, 200, 70, TRUE}, 6472b676d7Smrg {1, 320, 240, 60, TRUE}, 6572b676d7Smrg {1, 400, 300, 60, TRUE}, 6672b676d7Smrg {1, 512, 384, 60, TRUE}, 6772b676d7Smrg {1, 640, 400, 60, TRUE}, {1, 640, 400, 72, TRUE}, 6872b676d7Smrg {1, 640, 480, 60, TRUE}, {2, 640, 480, 72, TRUE}, {3, 640, 480, 75, TRUE}, 6972b676d7Smrg {4, 640, 480, 85, TRUE}, {5, 640, 480, 100, TRUE}, {6, 640, 480, 120, TRUE}, 7072b676d7Smrg {7, 640, 480, 160, FALSE}, {8, 640, 480, 200, FALSE}, 7172b676d7Smrg {1, 720, 480, 60, TRUE}, 7272b676d7Smrg {1, 720, 576, 60, TRUE}, 7372b676d7Smrg {1, 768, 576, 60, TRUE}, 7472b676d7Smrg {1, 800, 480, 60, TRUE}, {2, 800, 480, 75, TRUE}, {3, 800, 480, 85, TRUE}, 7572b676d7Smrg {1, 800, 600, 56, TRUE}, {2, 800, 600, 60, TRUE}, {3, 800, 600, 72, TRUE}, 7672b676d7Smrg {4, 800, 600, 75, TRUE}, {5, 800, 600, 85, TRUE}, {6, 800, 600, 105, TRUE}, 7772b676d7Smrg {7, 800, 600, 120, FALSE}, {8, 800, 600, 160, FALSE}, 7872b676d7Smrg {1, 848, 480, 39, TRUE}, {2, 848, 480, 60, TRUE}, 7972b676d7Smrg {1, 856, 480, 39, TRUE}, {2, 856, 480, 60, TRUE}, 8072b676d7Smrg {1, 960, 540, 60, TRUE}, 8172b676d7Smrg {1, 960, 600, 60, TRUE}, 8272b676d7Smrg {1, 1024, 576, 60, TRUE}, {2, 1024, 576, 75, TRUE}, {3, 1024, 576, 85, TRUE}, 8372b676d7Smrg {1, 1024, 600, 60, TRUE}, 8472b676d7Smrg {1, 1024, 768, 43, TRUE}, {2, 1024, 768, 60, TRUE}, {3, 1024, 768, 70, FALSE}, 8572b676d7Smrg {4, 1024, 768, 75, FALSE}, {5, 1024, 768, 85, TRUE}, {6, 1024, 768, 100, TRUE}, 8672b676d7Smrg {7, 1024, 768, 120, TRUE}, 8772b676d7Smrg {1, 1152, 768, 60, TRUE}, 8872b676d7Smrg {1, 1152, 864, 60, TRUE}, {2, 1152, 864, 75, TRUE}, {3, 1152, 864, 84, FALSE}, 8972b676d7Smrg {1, 1280, 720, 60, TRUE}, {2, 1280, 720, 75, FALSE}, {3, 1280, 720, 85, TRUE}, 9072b676d7Smrg {1, 1280, 768, 60, TRUE}, {2, 1280, 768, 75, TRUE}, {3, 1280, 768, 85, TRUE}, 9172b676d7Smrg {1, 1280, 800, 60, TRUE}, {2, 1280, 800, 75, TRUE}, {3, 1280, 800, 85, TRUE}, 9272b676d7Smrg {1, 1280, 854, 60, TRUE}, {2, 1280, 854, 75, TRUE}, {3, 1280, 854, 85, TRUE}, 9372b676d7Smrg {1, 1280, 960, 60, TRUE}, {2, 1280, 960, 85, TRUE}, 9472b676d7Smrg {1, 1280, 1024, 43, FALSE}, {2, 1280, 1024, 60, TRUE}, {3, 1280, 1024, 75, FALSE}, 9572b676d7Smrg {4, 1280, 1024, 85, TRUE}, 9672b676d7Smrg {1, 1360, 768, 60, TRUE}, 9772b676d7Smrg {1, 1400, 1050, 60, TRUE}, {2, 1400, 1050, 75, TRUE}, 9872b676d7Smrg {1, 1600, 1200, 60, TRUE}, {2, 1600, 1200, 65, TRUE}, {3, 1600, 1200, 70, TRUE}, 9972b676d7Smrg {4, 1600, 1200, 75, TRUE}, {5, 1600, 1200, 85, TRUE}, {6, 1600, 1200, 100, TRUE}, 10072b676d7Smrg {7, 1600, 1200, 120, TRUE}, 10172b676d7Smrg {1, 1680, 1050, 60, TRUE}, 10272b676d7Smrg {1, 1920, 1080, 30, TRUE}, 10372b676d7Smrg {1, 1920, 1440, 60, TRUE}, {2, 1920, 1440, 65, TRUE}, {3, 1920, 1440, 70, TRUE}, 10472b676d7Smrg {4, 1920, 1440, 75, TRUE}, {5, 1920, 1440, 85, TRUE}, {6, 1920, 1440, 100, TRUE}, 10572b676d7Smrg {1, 2048, 1536, 60, TRUE}, {2, 2048, 1536, 65, TRUE}, {3, 2048, 1536, 70, TRUE}, 10672b676d7Smrg {4, 2048, 1536, 75, TRUE}, {5, 2048, 1536, 85, TRUE}, 10772b676d7Smrg {0, 0, 0, 0, FALSE} 10872b676d7Smrg}; 10972b676d7Smrg 11072b676d7Smrg/* Some 300-series laptops have a badly designed BIOS and make it 11172b676d7Smrg * impossible to detect the correct panel delay compensation. This 11272b676d7Smrg * table used to detect such machines by their PCI subsystem IDs; 11372b676d7Smrg * however, I don't know how reliable this method is. (With Asus 11472b676d7Smrg * machines, it is to general, ASUS uses the same ID for different 11572b676d7Smrg * boxes) 11672b676d7Smrg */ 11772b676d7Smrgstatic const pdctable mypdctable[] = { 11872b676d7Smrg { 0x1071, 0x7522, 32, "Mitac", "7521T" }, 11972b676d7Smrg { 0, 0, 0, "" , "" } 12072b676d7Smrg}; 12172b676d7Smrg 12272b676d7Smrg/* These machines require setting/clearing a GPIO bit for enabling/ 12372b676d7Smrg * disabling communication with the Chrontel TV encoder 12472b676d7Smrg */ 12572b676d7Smrgstatic const chswtable mychswtable[] = { 12672b676d7Smrg { 0x1631, 0x1002, "Mitachi", "0x1002" }, 12772b676d7Smrg { 0x1071, 0x7521, "Mitac" , "7521P" }, 12872b676d7Smrg { 0, 0, "" , "" } 12972b676d7Smrg}; 13072b676d7Smrg 13172b676d7Smrg/* These machines require special timing/handling 13272b676d7Smrg */ 13372b676d7Smrgconst customttable SiS_customttable[] = { 13472b676d7Smrg { SIS_630, "2.00.07", "09/27/2002-13:38:25", 13572b676d7Smrg 0x3240A8, 13672b676d7Smrg { 0x220, 0x227, 0x228, 0x229, 0x0ee }, 13772b676d7Smrg { 0x01, 0xe3, 0x9a, 0x6a, 0xef }, 13872b676d7Smrg 0x1039, 0x6300, 13972b676d7Smrg "Barco", "iQ R200L/300/400", CUT_BARCO1366, "BARCO_1366" 14072b676d7Smrg }, 14172b676d7Smrg { SIS_630, "2.00.07", "09/27/2002-13:38:25", 14272b676d7Smrg 0x323FBD, 14372b676d7Smrg { 0x220, 0x227, 0x228, 0x229, 0x0ee }, 14472b676d7Smrg { 0x00, 0x5a, 0x64, 0x41, 0xef }, 14572b676d7Smrg 0x1039, 0x6300, 14672b676d7Smrg "Barco", "iQ G200L/300/400/500", CUT_BARCO1024, "BARCO_1024" 14772b676d7Smrg }, 14872b676d7Smrg { SIS_650, "", "", 14972b676d7Smrg 0, 15072b676d7Smrg { 0, 0, 0, 0, 0 }, 15172b676d7Smrg { 0, 0, 0, 0, 0 }, 15272b676d7Smrg 0x0e11, 0x083c, 15372b676d7Smrg "Inventec (Compaq)", "3017cl/3045US", CUT_COMPAQ12802, "COMPAQ_1280" 15472b676d7Smrg }, 15572b676d7Smrg { SIS_650, "", "", 15672b676d7Smrg 0, /* Special 1024x768 / dual link */ 15772b676d7Smrg { 0x00c, 0, 0, 0, 0 }, 15872b676d7Smrg { 'e' , 0, 0, 0, 0 }, 15972b676d7Smrg 0x1558, 0x0287, 16072b676d7Smrg "Clevo", "L285/L287 (Version 1)", CUT_CLEVO1024, "CLEVO_L28X_1" 16172b676d7Smrg }, 16272b676d7Smrg { SIS_650, "", "", 16372b676d7Smrg 0, /* Special 1024x768 / single link */ 16472b676d7Smrg { 0x00c, 0, 0, 0, 0 }, 16572b676d7Smrg { 'y' , 0, 0, 0, 0 }, 16672b676d7Smrg 0x1558, 0x0287, 16772b676d7Smrg "Clevo", "L285/L287 (Version 2)", CUT_CLEVO10242, "CLEVO_L28X_2" 16872b676d7Smrg }, 16972b676d7Smrg { SIS_650, "", "", 17072b676d7Smrg 0, /* Special 1400x1050 */ 17172b676d7Smrg { 0, 0, 0, 0, 0 }, 17272b676d7Smrg { 0, 0, 0, 0, 0 }, 17372b676d7Smrg 0x1558, 0x0400, /* possibly 401 and 402 as well; not panelsize specific? */ 17472b676d7Smrg "Clevo", "D400S/D410S/D400H/D410H", CUT_CLEVO1400, "CLEVO_D4X0" 17572b676d7Smrg }, 17672b676d7Smrg { SIS_650, "", "", 17772b676d7Smrg 0, /* Shift LCD in LCD-via-CRT1 mode */ 17872b676d7Smrg { 0, 0, 0, 0, 0 }, 17972b676d7Smrg { 0, 0, 0, 0, 0 }, 18072b676d7Smrg 0x1558, 0x2263, 18172b676d7Smrg "Clevo", "D22ES/D27ES", CUT_UNIWILL1024, "CLEVO_D2X0ES" 18272b676d7Smrg }, 18372b676d7Smrg { SIS_650, "", "", 18472b676d7Smrg 0, /* Shift LCD in LCD-via-CRT1 mode */ 18572b676d7Smrg { 0, 0, 0, 0, 0 }, 18672b676d7Smrg { 0, 0, 0, 0, 0 }, 18772b676d7Smrg 0x1734, 0x101f, 18872b676d7Smrg "Uniwill", "N243S9", CUT_UNIWILL1024, "UNIWILL_N243S9" 18972b676d7Smrg }, 19072b676d7Smrg { SIS_650, "", "", 19172b676d7Smrg 0, /* Shift LCD in LCD-via-CRT1 mode */ 19272b676d7Smrg { 0, 0, 0, 0, 0 }, 19372b676d7Smrg { 0, 0, 0, 0, 0 }, 19472b676d7Smrg 0x1584, 0x5103, 19572b676d7Smrg "Uniwill", "N35BS1", CUT_UNIWILL10242, "UNIWILL_N35BS1" 19672b676d7Smrg }, 19772b676d7Smrg { SIS_650, "1.09.2c", "", /* Other versions, too? */ 19872b676d7Smrg 0, /* Shift LCD in LCD-via-CRT1 mode */ 19972b676d7Smrg { 0, 0, 0, 0, 0 }, 20072b676d7Smrg { 0, 0, 0, 0, 0 }, 20172b676d7Smrg 0x1019, 0x0f05, 20272b676d7Smrg "ECS", "A928", CUT_UNIWILL1024, "ECS_A928" 20372b676d7Smrg }, 20472b676d7Smrg { SIS_740, "1.11.27a", "", 20572b676d7Smrg 0, 20672b676d7Smrg { 0, 0, 0, 0, 0 }, 20772b676d7Smrg { 0, 0, 0, 0, 0 }, 20872b676d7Smrg 0x1043, 0x1612, 20972b676d7Smrg "Asus", "L3000D/L3500D", CUT_ASUSL3000D, "ASUS_L3X00" 21072b676d7Smrg }, 21172b676d7Smrg { SIS_650, "1.10.9k", "", 21272b676d7Smrg 0, /* For EMI */ 21372b676d7Smrg { 0, 0, 0, 0, 0 }, 21472b676d7Smrg { 0, 0, 0, 0, 0 }, 21572b676d7Smrg 0x1025, 0x0028, 21672b676d7Smrg "Acer", "Aspire 1700", CUT_ACER1280, "ACER_ASPIRE1700" 21772b676d7Smrg }, 21872b676d7Smrg { SIS_650, "1.10.7w", "", 21972b676d7Smrg 0, /* For EMI */ 22072b676d7Smrg { 0, 0, 0, 0, 0 }, 22172b676d7Smrg { 0, 0, 0, 0, 0 }, 22272b676d7Smrg 0x14c0, 0x0012, 22372b676d7Smrg "Compal", "??? (V1)", CUT_COMPAL1400_1, "COMPAL_1400_1" 22472b676d7Smrg }, 22572b676d7Smrg { SIS_650, "1.10.7x", "", /* New BIOS on its way (from BG.) */ 22672b676d7Smrg 0, /* For EMI */ 22772b676d7Smrg { 0, 0, 0, 0, 0 }, 22872b676d7Smrg { 0, 0, 0, 0, 0 }, 22972b676d7Smrg 0x14c0, 0x0012, 23072b676d7Smrg "Compal", "??? (V2)", CUT_COMPAL1400_2, "COMPAL_1400_2" 23172b676d7Smrg }, 23272b676d7Smrg { SIS_650, "1.10.8o", "", 23372b676d7Smrg 0, /* For EMI (unknown) */ 23472b676d7Smrg { 0, 0, 0, 0, 0 }, 23572b676d7Smrg { 0, 0, 0, 0, 0 }, 23672b676d7Smrg 0x1043, 0x1612, 23772b676d7Smrg "Asus", "A2H (V1)", CUT_ASUSA2H_1, "ASUS_A2H_1" 23872b676d7Smrg }, 23972b676d7Smrg { SIS_650, "1.10.8q", "", 24072b676d7Smrg 0, /* For EMI */ 24172b676d7Smrg { 0, 0, 0, 0, 0 }, 24272b676d7Smrg { 0, 0, 0, 0, 0 }, 24372b676d7Smrg 0x1043, 0x1612, 24472b676d7Smrg "Asus", "A2H (V2)", CUT_ASUSA2H_2, "ASUS_A2H_2" 24572b676d7Smrg }, 24672b676d7Smrg#if 0 24772b676d7Smrg { SIS_550, "1.02.0z", "", 24872b676d7Smrg 0x317f37, /* 320x240 LCD panel */ 24972b676d7Smrg { 0, 0, 0, 0, 0 }, 25072b676d7Smrg { 0, 0, 0, 0, 0 }, 25172b676d7Smrg 0, 0, 25272b676d7Smrg "AAEON", "AOP-8060", CUT_AOP8060, "AAEON_AOP_8060" 25372b676d7Smrg }, 25472b676d7Smrg#endif 25572b676d7Smrg { 4321, "", "", /* never autodetected */ 25672b676d7Smrg 0, 25772b676d7Smrg { 0, 0, 0, 0, 0 }, 25872b676d7Smrg { 0, 0, 0, 0, 0 }, 25972b676d7Smrg 0, 0, 26072b676d7Smrg "Generic", "LVDS/Parallel 848x480", CUT_PANEL848, "PANEL848x480" 26172b676d7Smrg }, 26272b676d7Smrg { 4322, "", "", /* never autodetected */ 26372b676d7Smrg 0, 26472b676d7Smrg { 0, 0, 0, 0, 0 }, 26572b676d7Smrg { 0, 0, 0, 0, 0 }, 26672b676d7Smrg 0, 0, 26772b676d7Smrg "Generic", "LVDS/Parallel 856x480", CUT_PANEL856, "PANEL856x480" 26872b676d7Smrg }, 26972b676d7Smrg { 0, "", "", 27072b676d7Smrg 0, 27172b676d7Smrg { 0, 0, 0, 0 }, 27272b676d7Smrg { 0, 0, 0, 0 }, 27372b676d7Smrg 0, 0, 27472b676d7Smrg "", "", CUT_NONE, "" 27572b676d7Smrg } 27672b676d7Smrg}; 27772b676d7Smrg 27872b676d7Smrg/* Our TV modes for the 6326. The data in these structures 27972b676d7Smrg * is mainly correct, but since we use our private CR and 28072b676d7Smrg * clock values anyway, small errors do no matter. 28172b676d7Smrg */ 28272b676d7Smrgstatic DisplayModeRec SiS6326PAL800x600Mode = { 28372b676d7Smrg NULL, NULL, /* prev, next */ 28472b676d7Smrg "PAL800x600", /* identifier of this mode */ 28572b676d7Smrg MODE_OK, /* mode status */ 28672b676d7Smrg M_T_BUILTIN, /* mode type */ 28772b676d7Smrg 36000, /* Clock frequency */ 28872b676d7Smrg 800, /* HDisplay */ 28972b676d7Smrg 848, /* HSyncStart */ 29072b676d7Smrg 912, /* HSyncEnd */ 29172b676d7Smrg 1008, /* HTotal */ 29272b676d7Smrg 0, /* HSkew */ 29372b676d7Smrg 600, /* VDisplay */ 29472b676d7Smrg 600, /* VSyncStart */ 29572b676d7Smrg 602, /* VSyncEnd */ 29672b676d7Smrg 625, /* VTotal */ 29772b676d7Smrg 0, /* VScan */ 29872b676d7Smrg V_PHSYNC | V_PVSYNC, /* Flags */ 29972b676d7Smrg -1, /* ClockIndex */ 30072b676d7Smrg 36000, /* SynthClock */ 30172b676d7Smrg 800, /* CRTC HDisplay */ 30272b676d7Smrg 808, /* CRTC HBlankStart */ 30372b676d7Smrg 848, /* CRTC HSyncStart */ 30472b676d7Smrg 912, /* CRTC HSyncEnd */ 30572b676d7Smrg 1008, /* CRTC HBlankEnd */ 30672b676d7Smrg 1008, /* CRTC HTotal */ 30772b676d7Smrg 0, /* CRTC HSkew */ 30872b676d7Smrg 600, /* CRTC VDisplay */ 30972b676d7Smrg 600, /* CRTC VBlankStart */ 31072b676d7Smrg 600, /* CRTC VSyncStart */ 31172b676d7Smrg 602, /* CRTC VSyncEnd */ 31272b676d7Smrg 625, /* CRTC VBlankEnd */ 31372b676d7Smrg 625, /* CRTC VTotal */ 31472b676d7Smrg FALSE, /* CrtcHAdjusted */ 31572b676d7Smrg FALSE, /* CrtcVAdjusted */ 31672b676d7Smrg 0, /* PrivSize */ 31772b676d7Smrg NULL, /* Private */ 31872b676d7Smrg 0.0, /* HSync */ 31972b676d7Smrg 0.0 /* VRefresh */ 32072b676d7Smrg}; 32172b676d7Smrg 32272b676d7Smrg/* Due to the scaling method this mode uses, the vertical data here 32372b676d7Smrg * does not match the CR data. But this does not matter, we use our 32472b676d7Smrg * private CR data anyway. 32572b676d7Smrg */ 32672b676d7Smrgstatic DisplayModeRec SiS6326PAL800x600UMode = { 32772b676d7Smrg NULL, /* prev */ 32872b676d7Smrg &SiS6326PAL800x600Mode, /* next */ 32972b676d7Smrg "PAL800x600U", /* identifier of this mode */ 33072b676d7Smrg MODE_OK, /* mode status */ 33172b676d7Smrg M_T_BUILTIN, /* mode type */ 33272b676d7Smrg 37120, /* Clock frequency */ 33372b676d7Smrg 800, /* HDisplay */ 33472b676d7Smrg 872, /* HSyncStart */ 33572b676d7Smrg 984, /* HSyncEnd */ 33672b676d7Smrg 1088, /* HTotal */ 33772b676d7Smrg 0, /* HSkew */ 33872b676d7Smrg 600, /* VDisplay (548 due to scaling) */ 33972b676d7Smrg 600, /* VSyncStart (584) */ 34072b676d7Smrg 602, /* VSyncEnd (586) */ 34172b676d7Smrg 625, /* VTotal */ 34272b676d7Smrg 0, /* VScan */ 34372b676d7Smrg V_PHSYNC | V_PVSYNC, /* Flags */ 34472b676d7Smrg -1, /* ClockIndex */ 34572b676d7Smrg 37120, /* SynthClock */ 34672b676d7Smrg 800, /* CRTC HDisplay */ 34772b676d7Smrg 808, /* CRTC HBlankStart */ 34872b676d7Smrg 872, /* CRTC HSyncStart */ 34972b676d7Smrg 984, /* CRTC HSyncEnd */ 35072b676d7Smrg 1024, /* CRTC HBlankEnd */ 35172b676d7Smrg 1088, /* CRTC HTotal */ 35272b676d7Smrg 0, /* CRTC HSkew */ 35372b676d7Smrg 600, /* CRTC VDisplay (548 due to scaling) */ 35472b676d7Smrg 600, /* CRTC VBlankStart (600) */ 35572b676d7Smrg 600, /* CRTC VSyncStart (584) */ 35672b676d7Smrg 602, /* CRTC VSyncEnd (586) */ 35772b676d7Smrg 625, /* CRTC VBlankEnd */ 35872b676d7Smrg 625, /* CRTC VTotal */ 35972b676d7Smrg FALSE, /* CrtcHAdjusted */ 36072b676d7Smrg FALSE, /* CrtcVAdjusted */ 36172b676d7Smrg 0, /* PrivSize */ 36272b676d7Smrg NULL, /* Private */ 36372b676d7Smrg 0.0, /* HSync */ 36472b676d7Smrg 0.0 /* VRefresh */ 36572b676d7Smrg}; 36672b676d7Smrg 36772b676d7Smrgstatic DisplayModeRec SiS6326PAL720x540Mode = { 36872b676d7Smrg NULL, /* prev */ 36972b676d7Smrg &SiS6326PAL800x600UMode, /* next */ 37072b676d7Smrg "PAL720x540", /* identifier of this mode */ 37172b676d7Smrg MODE_OK, /* mode status */ 37272b676d7Smrg M_T_BUILTIN, /* mode type */ 37372b676d7Smrg 36000, /* Clock frequency */ 37472b676d7Smrg 720, /* HDisplay */ 37572b676d7Smrg 816, /* HSyncStart */ 37672b676d7Smrg 920, /* HSyncEnd */ 37772b676d7Smrg 1008, /* HTotal */ 37872b676d7Smrg 0, /* HSkew */ 37972b676d7Smrg 540, /* VDisplay */ 38072b676d7Smrg 578, /* VSyncStart */ 38172b676d7Smrg 580, /* VSyncEnd */ 38272b676d7Smrg 625, /* VTotal */ 38372b676d7Smrg 0, /* VScan */ 38472b676d7Smrg V_PHSYNC | V_PVSYNC, /* Flags */ 38572b676d7Smrg -1, /* ClockIndex */ 38672b676d7Smrg 36000, /* SynthClock */ 38772b676d7Smrg 720, /* CRTC HDisplay */ 38872b676d7Smrg 736, /* CRTC HBlankStart */ 38972b676d7Smrg 816, /* CRTC HSyncStart */ 39072b676d7Smrg 920, /* CRTC HSyncEnd */ 39172b676d7Smrg 1008, /* CRTC HBlankEnd */ 39272b676d7Smrg 1008, /* CRTC HTotal */ 39372b676d7Smrg 0, /* CRTC HSkew */ 39472b676d7Smrg 540, /* CRTC VDisplay */ 39572b676d7Smrg 577, /* CRTC VBlankStart */ 39672b676d7Smrg 578, /* CRTC VSyncStart */ 39772b676d7Smrg 580, /* CRTC VSyncEnd */ 39872b676d7Smrg 625, /* CRTC VBlankEnd */ 39972b676d7Smrg 625, /* CRTC VTotal */ 40072b676d7Smrg FALSE, /* CrtcHAdjusted */ 40172b676d7Smrg FALSE, /* CrtcVAdjusted */ 40272b676d7Smrg 0, /* PrivSize */ 40372b676d7Smrg NULL, /* Private */ 40472b676d7Smrg 0.0, /* HSync */ 40572b676d7Smrg 0.0 /* VRefresh */ 40672b676d7Smrg}; 40772b676d7Smrg 40872b676d7Smrgstatic DisplayModeRec SiS6326PAL640x480Mode = { 40972b676d7Smrg NULL, /* prev */ 41072b676d7Smrg &SiS6326PAL720x540Mode, /* next */ 41172b676d7Smrg "PAL640x480", /* identifier of this mode */ 41272b676d7Smrg MODE_OK, /* mode status */ 41372b676d7Smrg M_T_BUILTIN, /* mode type */ 41472b676d7Smrg 36000, /* Clock frequency */ 41572b676d7Smrg 640, /* HDisplay */ 41672b676d7Smrg 768, /* HSyncStart */ 41772b676d7Smrg 920, /* HSyncEnd */ 41872b676d7Smrg 1008, /* HTotal */ 41972b676d7Smrg 0, /* HSkew */ 42072b676d7Smrg 480, /* VDisplay */ 42172b676d7Smrg 532, /* VSyncStart */ 42272b676d7Smrg 534, /* VSyncEnd */ 42372b676d7Smrg 625, /* VTotal */ 42472b676d7Smrg 0, /* VScan */ 42572b676d7Smrg V_NHSYNC | V_NVSYNC, /* Flags */ 42672b676d7Smrg -1, /* ClockIndex */ 42772b676d7Smrg 36000, /* SynthClock */ 42872b676d7Smrg 640, /* CRTC HDisplay */ 42972b676d7Smrg 648, /* CRTC HBlankStart */ 43072b676d7Smrg 768, /* CRTC HSyncStart */ 43172b676d7Smrg 920, /* CRTC HSyncEnd */ 43272b676d7Smrg 944, /* CRTC HBlankEnd */ 43372b676d7Smrg 1008, /* CRTC HTotal */ 43472b676d7Smrg 0, /* CRTC HSkew */ 43572b676d7Smrg 480, /* CRTC VDisplay */ 43672b676d7Smrg 481, /* CRTC VBlankStart */ 43772b676d7Smrg 532, /* CRTC VSyncStart */ 43872b676d7Smrg 534, /* CRTC VSyncEnd */ 43972b676d7Smrg 561, /* CRTC VBlankEnd */ 44072b676d7Smrg 625, /* CRTC VTotal */ 44172b676d7Smrg FALSE, /* CrtcHAdjusted */ 44272b676d7Smrg FALSE, /* CrtcVAdjusted */ 44372b676d7Smrg 0, /* PrivSize */ 44472b676d7Smrg NULL, /* Private */ 44572b676d7Smrg 0.0, /* HSync */ 44672b676d7Smrg 0.0 /* VRefresh */ 44772b676d7Smrg}; 44872b676d7Smrg 44972b676d7Smrgstatic DisplayModeRec SiS6326NTSC640x480Mode = { 45072b676d7Smrg NULL, NULL, /* prev, next */ 45172b676d7Smrg "NTSC640x480", /* identifier of this mode */ 45272b676d7Smrg MODE_OK, /* mode status */ 45372b676d7Smrg M_T_BUILTIN, /* mode type */ 45472b676d7Smrg 27000, /* Clock frequency */ 45572b676d7Smrg 640, /* HDisplay */ 45672b676d7Smrg 664, /* HSyncStart */ 45772b676d7Smrg 760, /* HSyncEnd */ 45872b676d7Smrg 800, /* HTotal */ 45972b676d7Smrg 0, /* HSkew */ 46072b676d7Smrg 480, /* VDisplay */ 46172b676d7Smrg 489, /* VSyncStart */ 46272b676d7Smrg 491, /* VSyncEnd */ 46372b676d7Smrg 525, /* VTotal */ 46472b676d7Smrg 0, /* VScan */ 46572b676d7Smrg V_NHSYNC | V_NVSYNC, /* Flags */ 46672b676d7Smrg -1, /* ClockIndex */ 46772b676d7Smrg 27000, /* SynthClock */ 46872b676d7Smrg 640, /* CRTC HDisplay */ 46972b676d7Smrg 648, /* CRTC HBlankStart */ 47072b676d7Smrg 664, /* CRTC HSyncStart */ 47172b676d7Smrg 760, /* CRTC HSyncEnd */ 47272b676d7Smrg 792, /* CRTC HBlankEnd */ 47372b676d7Smrg 800, /* CRTC HTotal */ 47472b676d7Smrg 0, /* CRTC HSkew */ 47572b676d7Smrg 480, /* CRTC VDisplay */ 47672b676d7Smrg 488, /* CRTC VBlankStart */ 47772b676d7Smrg 489, /* CRTC VSyncStart */ 47872b676d7Smrg 491, /* CRTC VSyncEnd */ 47972b676d7Smrg 517, /* CRTC VBlankEnd */ 48072b676d7Smrg 525, /* CRTC VTotal */ 48172b676d7Smrg FALSE, /* CrtcHAdjusted */ 48272b676d7Smrg FALSE, /* CrtcVAdjusted */ 48372b676d7Smrg 0, /* PrivSize */ 48472b676d7Smrg NULL, /* Private */ 48572b676d7Smrg 0.0, /* HSync */ 48672b676d7Smrg 0.0 /* VRefresh */ 48772b676d7Smrg}; 48872b676d7Smrg 48972b676d7Smrg/* Due to the scaling method this mode uses, the vertical data here 49072b676d7Smrg * does not match the CR data. But this does not matter, we use our 49172b676d7Smrg * private CR data anyway. 49272b676d7Smrg */ 49372b676d7Smrgstatic DisplayModeRec SiS6326NTSC640x480UMode = { 49472b676d7Smrg NULL, /* prev */ 49572b676d7Smrg &SiS6326NTSC640x480Mode, /* next */ 49672b676d7Smrg "NTSC640x480U", /* identifier of this mode */ 49772b676d7Smrg MODE_OK, /* mode status */ 49872b676d7Smrg M_T_BUILTIN, /* mode type */ 49972b676d7Smrg 32215, /* Clock frequency */ 50072b676d7Smrg 640, /* HDisplay */ 50172b676d7Smrg 696, /* HSyncStart */ 50272b676d7Smrg 840, /* HSyncEnd */ 50372b676d7Smrg 856, /* HTotal */ 50472b676d7Smrg 0, /* HSkew */ 50572b676d7Smrg 480, /* VDisplay (439 due to scaling) */ 50672b676d7Smrg 489, /* VSyncStart (473) */ 50772b676d7Smrg 491, /* VSyncEnd (475) */ 50872b676d7Smrg 525, /* VTotal */ 50972b676d7Smrg 0, /* VScan */ 51072b676d7Smrg V_NHSYNC | V_NVSYNC, /* Flags */ 51172b676d7Smrg -1, /* ClockIndex */ 51272b676d7Smrg 32215, /* SynthClock */ 51372b676d7Smrg 640, /* CRTC HDisplay */ 51472b676d7Smrg 656, /* CRTC HBlankStart */ 51572b676d7Smrg 696, /* CRTC HSyncStart */ 51672b676d7Smrg 840, /* CRTC HSyncEnd */ 51772b676d7Smrg 856, /* CRTC HBlankEnd */ 51872b676d7Smrg 856, /* CRTC HTotal */ 51972b676d7Smrg 0, /* CRTC HSkew */ 52072b676d7Smrg 480, /* CRTC VDisplay */ 52172b676d7Smrg 488, /* CRTC VBlankStart */ 52272b676d7Smrg 489, /* CRTC VSyncStart */ 52372b676d7Smrg 491, /* CRTC VSyncEnd */ 52472b676d7Smrg 517, /* CRTC VBlankEnd */ 52572b676d7Smrg 525, /* CRTC VTotal */ 52672b676d7Smrg FALSE, /* CrtcHAdjusted */ 52772b676d7Smrg FALSE, /* CrtcVAdjusted */ 52872b676d7Smrg 0, /* PrivSize */ 52972b676d7Smrg NULL, /* Private */ 53072b676d7Smrg 0.0, /* HSync */ 53172b676d7Smrg 0.0 /* VRefresh */ 53272b676d7Smrg}; 53372b676d7Smrg 53472b676d7Smrg 53572b676d7Smrgstatic DisplayModeRec SiS6326NTSC640x400Mode = { 53672b676d7Smrg NULL, /* prev */ 53772b676d7Smrg &SiS6326NTSC640x480UMode, /* next */ 53872b676d7Smrg "NTSC640x400", /* identifier of this mode */ 53972b676d7Smrg MODE_OK, /* mode status */ 54072b676d7Smrg M_T_BUILTIN, /* mode type */ 54172b676d7Smrg 27000, /* Clock frequency */ 54272b676d7Smrg 640, /* HDisplay */ 54372b676d7Smrg 664, /* HSyncStart */ 54472b676d7Smrg 760, /* HSyncEnd */ 54572b676d7Smrg 800, /* HTotal */ 54672b676d7Smrg 0, /* HSkew */ 54772b676d7Smrg 400, /* VDisplay */ 54872b676d7Smrg 459, /* VSyncStart */ 54972b676d7Smrg 461, /* VSyncEnd */ 55072b676d7Smrg 525, /* VTotal */ 55172b676d7Smrg 0, /* VScan */ 55272b676d7Smrg V_NHSYNC | V_NVSYNC, /* Flags */ 55372b676d7Smrg -1, /* ClockIndex */ 55472b676d7Smrg 27000, /* SynthClock */ 55572b676d7Smrg 640, /* CRTC HDisplay */ 55672b676d7Smrg 648, /* CRTC HBlankStart */ 55772b676d7Smrg 664, /* CRTC HSyncStart */ 55872b676d7Smrg 760, /* CRTC HSyncEnd */ 55972b676d7Smrg 792, /* CRTC HBlankEnd */ 56072b676d7Smrg 800, /* CRTC HTotal */ 56172b676d7Smrg 0, /* CRTC HSkew */ 56272b676d7Smrg 400, /* CRTC VDisplay */ 56372b676d7Smrg 407, /* CRTC VBlankStart */ 56472b676d7Smrg 459, /* CRTC VSyncStart */ 56572b676d7Smrg 461, /* CRTC VSyncEnd */ 56672b676d7Smrg 490, /* CRTC VBlankEnd */ 56772b676d7Smrg 525, /* CRTC VTotal */ 56872b676d7Smrg FALSE, /* CrtcHAdjusted */ 56972b676d7Smrg FALSE, /* CrtcVAdjusted */ 57072b676d7Smrg 0, /* PrivSize */ 57172b676d7Smrg NULL, /* Private */ 57272b676d7Smrg 0.0, /* HSync */ 57372b676d7Smrg 0.0 /* VRefresh */ 57472b676d7Smrg}; 57572b676d7Smrg 57672b676d7Smrg/* Built-in hi-res modes for the 6326. 57772b676d7Smrg * For some reason, our default mode lines and the 57872b676d7Smrg * clock calculation functions in sis_dac.c do no 57972b676d7Smrg * good job on higher clocks. It seems, the hardware 58072b676d7Smrg * needs some tricks so make mode with higher clock 58172b676d7Smrg * rates than ca. 120MHz work. I didn't bother trying 58272b676d7Smrg * to find out what exactly is going wrong, so I 58372b676d7Smrg * implemented two special modes instead for 1280x1024 58472b676d7Smrg * and 1600x1200. These two are automatically added 58572b676d7Smrg * to the list if they are supported with the current 58672b676d7Smrg * depth. 58772b676d7Smrg * The data in the strucures below is a proximation, 58872b676d7Smrg * in sis_vga.c the register contents are fetched from 58972b676d7Smrg * fixed tables anyway. 59072b676d7Smrg */ 59172b676d7Smrgstatic DisplayModeRec SiS6326SIS1280x1024_75Mode = { 59272b676d7Smrg NULL, /* prev */ 59372b676d7Smrg NULL, /* next */ 59472b676d7Smrg "SIS1280x1024-75", /* identifier of this mode */ 59572b676d7Smrg MODE_OK, /* mode status */ 59672b676d7Smrg M_T_BUILTIN, /* mode type */ 59772b676d7Smrg 135000, /* Clock frequency */ 59872b676d7Smrg 1280, /* HDisplay */ 59972b676d7Smrg 1296, /* HSyncStart */ 60072b676d7Smrg 1440, /* HSyncEnd */ 60172b676d7Smrg 1688, /* HTotal */ 60272b676d7Smrg 0, /* HSkew */ 60372b676d7Smrg 1024, /* VDisplay */ 60472b676d7Smrg 1025, /* VSyncStart */ 60572b676d7Smrg 1028, /* VSyncEnd */ 60672b676d7Smrg 1066, /* VTotal */ 60772b676d7Smrg 0, /* VScan */ 60872b676d7Smrg V_PHSYNC | V_PVSYNC, /* Flags */ 60972b676d7Smrg -1, /* ClockIndex */ 61072b676d7Smrg 135000, /* SynthClock */ 61172b676d7Smrg 1280, /* CRTC HDisplay */ 61272b676d7Smrg 1280, /* CRTC HBlankStart */ 61372b676d7Smrg 1296, /* CRTC HSyncStart */ 61472b676d7Smrg 1440, /* CRTC HSyncEnd */ 61572b676d7Smrg 1680, /* CRTC HBlankEnd */ 61672b676d7Smrg 1688, /* CRTC HTotal */ 61772b676d7Smrg 0, /* CRTC HSkew */ 61872b676d7Smrg 1024, /* CRTC VDisplay */ 61972b676d7Smrg 1024, /* CRTC VBlankStart */ 62072b676d7Smrg 1025, /* CRTC VSyncStart */ 62172b676d7Smrg 1028, /* CRTC VSyncEnd */ 62272b676d7Smrg 1065, /* CRTC VBlankEnd */ 62372b676d7Smrg 1066, /* CRTC VTotal */ 62472b676d7Smrg FALSE, /* CrtcHAdjusted */ 62572b676d7Smrg FALSE, /* CrtcVAdjusted */ 62672b676d7Smrg 0, /* PrivSize */ 62772b676d7Smrg NULL, /* Private */ 62872b676d7Smrg 0.0, /* HSync */ 62972b676d7Smrg 0.0 /* VRefresh */ 63072b676d7Smrg}; 63172b676d7Smrg 63272b676d7Smrgstatic DisplayModeRec SiS6326SIS1600x1200_60Mode = { 63372b676d7Smrg NULL, /* prev */ 63472b676d7Smrg NULL, /* next */ 63572b676d7Smrg "SIS1600x1200-60", /* identifier of this mode */ 63672b676d7Smrg MODE_OK, /* mode status */ 63772b676d7Smrg M_T_BUILTIN, /* mode type */ 63872b676d7Smrg 162000, /* Clock frequency */ 63972b676d7Smrg 1600, /* HDisplay */ 64072b676d7Smrg 1664, /* HSyncStart */ 64172b676d7Smrg 1856, /* HSyncEnd */ 64272b676d7Smrg 2160, /* HTotal */ 64372b676d7Smrg 0, /* HSkew */ 64472b676d7Smrg 1200, /* VDisplay */ 64572b676d7Smrg 1201, /* VSyncStart */ 64672b676d7Smrg 1204, /* VSyncEnd */ 64772b676d7Smrg 1250, /* VTotal */ 64872b676d7Smrg 0, /* VScan */ 64972b676d7Smrg V_PHSYNC | V_PVSYNC, /* Flags */ 65072b676d7Smrg -1, /* ClockIndex */ 65172b676d7Smrg 162000, /* SynthClock */ 65272b676d7Smrg 1600, /* CRTC HDisplay */ 65372b676d7Smrg 1600, /* CRTC HBlankStart */ 65472b676d7Smrg 1664, /* CRTC HSyncStart */ 65572b676d7Smrg 1856, /* CRTC HSyncEnd */ 65672b676d7Smrg 2152, /* CRTC HBlankEnd */ 65772b676d7Smrg 2160, /* CRTC HTotal */ 65872b676d7Smrg 0, /* CRTC HSkew */ 65972b676d7Smrg 1200, /* CRTC VDisplay */ 66072b676d7Smrg 1200, /* CRTC VBlankStart */ 66172b676d7Smrg 1201, /* CRTC VSyncStart */ 66272b676d7Smrg 1204, /* CRTC VSyncEnd */ 66372b676d7Smrg 1249, /* CRTC VBlankEnd */ 66472b676d7Smrg 1250, /* CRTC VTotal */ 66572b676d7Smrg FALSE, /* CrtcHAdjusted */ 66672b676d7Smrg FALSE, /* CrtcVAdjusted */ 66772b676d7Smrg 0, /* PrivSize */ 66872b676d7Smrg NULL, /* Private */ 66972b676d7Smrg 0.0, /* HSync */ 67072b676d7Smrg 0.0 /* VRefresh */ 67172b676d7Smrg}; 67272b676d7Smrg 67372b676d7Smrg/* TV scaling data for SiS video bridges 67472b676d7Smrg */ 67572b676d7Smrgtypedef struct _SiSTVVScale { 67672b676d7Smrg UShort ScaleVDE; 67772b676d7Smrg int sindex; 67872b676d7Smrg UShort RealVDE; 67972b676d7Smrg UShort reg[4]; 68072b676d7Smrg} MySiSTVVScale, *MySiSTVVScalePtr; 68172b676d7Smrg 68272b676d7Smrgstatic const MySiSTVVScale SiSTVVScale[] = { 68372b676d7Smrg { 470, 3, 480, /* NTSC 640x480 */ 68472b676d7Smrg { 893, 508, 0x004c, 0x008f } 68572b676d7Smrg }, 68672b676d7Smrg { 460, 2, 480, 68772b676d7Smrg { 874, 513, 0x004c, 0x008f } 68872b676d7Smrg }, 68972b676d7Smrg { 450, 1, 480, 69072b676d7Smrg { 855, 518, 0x004c, 0x008f } 69172b676d7Smrg }, 69272b676d7Smrg { 440, 0, 480, /* default */ 69372b676d7Smrg { 836, 523, 0x004c, 0x008f } 69472b676d7Smrg }, 69572b676d7Smrg { 430, -1, 480, 69672b676d7Smrg { 860, 528, 0x0050, 0x008f } 69772b676d7Smrg }, 69872b676d7Smrg { 420, -2, 480, 69972b676d7Smrg { 840, 533, 0x0050, 0x008f } 70072b676d7Smrg }, 70172b676d7Smrg { 410, -3, 480, 70272b676d7Smrg { 820, 538, 0x0050, 0x008f } 70372b676d7Smrg }, 70472b676d7Smrg { 470, 3, 480, /* NTSC 720x480 */ 70572b676d7Smrg { 893, 509, 0x004c, 0x008f } 70672b676d7Smrg }, 70772b676d7Smrg { 460, 2, 480, 70872b676d7Smrg { 874, 514, 0x004c, 0x008f } 70972b676d7Smrg }, 71072b676d7Smrg { 450, 1, 480, 71172b676d7Smrg { 855, 519, 0x004c, 0x008f } 71272b676d7Smrg }, 71372b676d7Smrg { 440, 0, 480, /* default */ 71472b676d7Smrg { 836, 524, 0x004c, 0x008f } 71572b676d7Smrg }, 71672b676d7Smrg { 430, -1, 480, 71772b676d7Smrg { 860, 529, 0x0050, 0x008f } 71872b676d7Smrg }, 71972b676d7Smrg { 420, -2, 480, 72072b676d7Smrg { 840, 534, 0x0050, 0x008f } 72172b676d7Smrg }, 72272b676d7Smrg { 410, -3, 480, 72372b676d7Smrg { 820, 539, 0x0050, 0x008f } 72472b676d7Smrg }, 72572b676d7Smrg { 470, 3, 600, /* NTSC 800x600 */ 72672b676d7Smrg { 1081, 628, 0x0073, 0x008f } 72772b676d7Smrg }, 72872b676d7Smrg { 460, 2, 600, 72972b676d7Smrg { 1058, 633, 0x0073, 0x008f } 73072b676d7Smrg }, 73172b676d7Smrg { 450, 1, 600, 73272b676d7Smrg { 1044, 638, 0x0074, 0x008f } 73372b676d7Smrg }, 73472b676d7Smrg { 440, 0, 600, /* default */ 73572b676d7Smrg { 1056, 643, 0x0078, 0x008f } 73672b676d7Smrg }, 73772b676d7Smrg { 430, -1, 600, 73872b676d7Smrg { 1032, 648, 0x0078, 0x008f } 73972b676d7Smrg }, 74072b676d7Smrg { 420, -2, 600, 74172b676d7Smrg { 1008, 653, 0x0078, 0x008f } 74272b676d7Smrg }, 74372b676d7Smrg { 410, -3, 600, 74472b676d7Smrg { 1066, 658, 0x0082, 0x008f } 74572b676d7Smrg }, 74672b676d7Smrg { 560, 3, 480, /* PAL 640x480 */ 74772b676d7Smrg { 882, 513, 0x0007, 0x0010 } 74872b676d7Smrg }, 74972b676d7Smrg { 550, 2, 480, 75072b676d7Smrg { 900, 518, 0x0005, 0x000b } 75172b676d7Smrg }, 75272b676d7Smrg { 540, 1, 480, 75372b676d7Smrg { 864, 523, 0x0004, 0x0009 } 75472b676d7Smrg }, 75572b676d7Smrg { 530, 0, 480, /* default */ 75672b676d7Smrg { 848, 528, 0x0004, 0x0009 } 75772b676d7Smrg }, 75872b676d7Smrg { 520, -1, 480, 75972b676d7Smrg { 832, 533, 0x0004, 0x0009 } 76072b676d7Smrg }, 76172b676d7Smrg { 510, -2, 480, 76272b676d7Smrg { 918, 538, 0x0001, 0x0002 } 76372b676d7Smrg }, 76472b676d7Smrg { 500, -3, 480, 76572b676d7Smrg { 900, 543, 0x0001, 0x0002 } 76672b676d7Smrg }, 76772b676d7Smrg { 560, 2, 576, /* PAL 720x576 */ 76872b676d7Smrg { 960, 610, 0x0004, 0x0007 } 76972b676d7Smrg }, 77072b676d7Smrg { 550, 1, 576, 77172b676d7Smrg { 990, 614, 0x0003, 0x0005 } 77272b676d7Smrg }, 77372b676d7Smrg { 540, 0, 576, /* default */ 77472b676d7Smrg { 1080, 620, 0x0002, 0x0003 } 77572b676d7Smrg }, 77672b676d7Smrg { 530, -1, 576, 77772b676d7Smrg { 1060, 625, 0x8002, 0x0003 } 77872b676d7Smrg }, 77972b676d7Smrg { 520, -2, 576, 78072b676d7Smrg { 1040, 630, 0x0002, 0x0003 } 78172b676d7Smrg }, 78272b676d7Smrg { 510, -3, 576, 78372b676d7Smrg { 1020, 635, 0x0002, 0x0003 } 78472b676d7Smrg }, 78572b676d7Smrg { 500, -4, 576, 78672b676d7Smrg { 1000, 640, 0x0002, 0x0003 } 78772b676d7Smrg }, 78872b676d7Smrg { 560, 3, 600, /* PAL 800x600 */ 78972b676d7Smrg { 1152, 633, 0x0005, 0x0007 } 79072b676d7Smrg }, 79172b676d7Smrg { 550, 2, 600, 79272b676d7Smrg { 1100, 638, 0x0019, 0x0024 } 79372b676d7Smrg }, 79472b676d7Smrg { 540, 1, 600, 79572b676d7Smrg { 1080, 643, 0x0019, 0x0024 } 79672b676d7Smrg }, 79772b676d7Smrg { 530, 0, 600, /* default */ 79872b676d7Smrg { 1060, 648, 0x0019, 0x0024 } 79972b676d7Smrg }, 80072b676d7Smrg { 520, -1, 600, 80172b676d7Smrg { 1040, 653, 0x0019, 0x0024 } 80272b676d7Smrg }, 80372b676d7Smrg { 510, -2, 600, 80472b676d7Smrg { 1020, 658, 0x0019, 0x0024 } 80572b676d7Smrg }, 80672b676d7Smrg { 500, -3, 600, 80772b676d7Smrg { 1080, 663, 0x0003, 0x0004 } 80872b676d7Smrg }, 80972b676d7Smrg { 720, 3, 480, /* 750p 640x480 (42) */ 81072b676d7Smrg { 1238, 500, 0x0001, 0x0002 } 81172b676d7Smrg }, 81272b676d7Smrg { 693, 2, 480, 81372b676d7Smrg { 1191, 519, 0x0001, 0x0002 } 81472b676d7Smrg }, 81572b676d7Smrg { 667, 1, 480, 81672b676d7Smrg { 1146, 540, 0x0001, 0x0002 } 81772b676d7Smrg }, 81872b676d7Smrg { 640, 0, 480, 81972b676d7Smrg { 1100, 563, 0x0001, 0x0002 } 82072b676d7Smrg }, 82172b676d7Smrg { 613, -1, 480, 82272b676d7Smrg { 1054, 587, 0x0001, 0x0002 } 82372b676d7Smrg }, 82472b676d7Smrg { 587, -2, 480, 82572b676d7Smrg { 1009, 613, 0x0001, 0x0002 } 82672b676d7Smrg }, 82772b676d7Smrg { 560, -3, 480, 82872b676d7Smrg { 963, 643, 0x0001, 0x0002 } 82972b676d7Smrg }, 83072b676d7Smrg { 720, 3, 480, /* 750p 720x480 (49) */ 83172b676d7Smrg { 1238, 500, 0x0001, 0x0002 } 83272b676d7Smrg }, 83372b676d7Smrg { 693, 2, 480, 83472b676d7Smrg { 1191, 519, 0x0001, 0x0002 } 83572b676d7Smrg }, 83672b676d7Smrg { 667, 1, 480, 83772b676d7Smrg { 1146, 540, 0x0001, 0x0002 } 83872b676d7Smrg }, 83972b676d7Smrg { 640, 0, 480, 84072b676d7Smrg { 1100, 563, 0x0001, 0x0002 } 84172b676d7Smrg }, 84272b676d7Smrg { 613, -1, 480, 84372b676d7Smrg { 1054, 587, 0x0001, 0x0002 } 84472b676d7Smrg }, 84572b676d7Smrg { 587, -2, 480, 84672b676d7Smrg { 1009, 613, 0x0001, 0x0002 } 84772b676d7Smrg }, 84872b676d7Smrg { 560, -3, 480, 84972b676d7Smrg { 963, 643, 0x0001, 0x0002 } 85072b676d7Smrg }, 85172b676d7Smrg { 720, 3, 576, /* 750p 720/768x576 (56) */ 85272b676d7Smrg { 1238, 600, 0x0003, 0x0005 } 85372b676d7Smrg }, 85472b676d7Smrg { 693, 2, 576, 85572b676d7Smrg { 1191, 623, 0x0003, 0x0005 } 85672b676d7Smrg }, 85772b676d7Smrg { 667, 1, 576, 85872b676d7Smrg { 1146, 648, 0x0003, 0x0005 } 85972b676d7Smrg }, 86072b676d7Smrg { 640, 0, 576, 86172b676d7Smrg { 1100, 675, 0x0003, 0x0005 } 86272b676d7Smrg }, 86372b676d7Smrg { 613, -1, 576, 86472b676d7Smrg { 1054, 705, 0x0003, 0x0005 } 86572b676d7Smrg }, 86672b676d7Smrg { 587, -2, 576, 86772b676d7Smrg { 1009, 736, 0x0003, 0x0005 } 86872b676d7Smrg }, 86972b676d7Smrg { 560, -3, 576, 87072b676d7Smrg { 963, 771, 0x0003, 0x0005 } 87172b676d7Smrg }, 87272b676d7Smrg { 720, 3, 480, /* 750p 800x480 (63) */ 87372b676d7Smrg { 1238, 500, 0x0001, 0x0002 } 87472b676d7Smrg }, 87572b676d7Smrg { 693, 2, 480, 87672b676d7Smrg { 1191, 519, 0x0001, 0x0002 } 87772b676d7Smrg }, 87872b676d7Smrg { 667, 1, 480, 87972b676d7Smrg { 1146, 540, 0x0001, 0x0002 } 88072b676d7Smrg }, 88172b676d7Smrg { 640, 0, 480, 88272b676d7Smrg { 1100, 563, 0x0001, 0x0002 } 88372b676d7Smrg }, 88472b676d7Smrg { 613, -1, 480, 88572b676d7Smrg { 1054, 587, 0x0001, 0x0002 } 88672b676d7Smrg }, 88772b676d7Smrg { 587, -2, 480, 88872b676d7Smrg { 1009, 613, 0x0001, 0x0002 } 88972b676d7Smrg }, 89072b676d7Smrg { 560, -3, 480, 89172b676d7Smrg { 963, 643, 0x0001, 0x0002 } 89272b676d7Smrg }, 89372b676d7Smrg { 720, 3, 600, /* 750p 800x600 (70) */ 89472b676d7Smrg { 1320, 625, 0x0002, 0x0003 } 89572b676d7Smrg }, 89672b676d7Smrg { 700, 2, 600, 89772b676d7Smrg { 1283, 643, 0x0002, 0x0003 } 89872b676d7Smrg }, 89972b676d7Smrg { 680, 1, 600, 90072b676d7Smrg { 1247, 662, 0x0002, 0x0003 } 90172b676d7Smrg }, 90272b676d7Smrg { 660, 0, 600, 90372b676d7Smrg { 1210, 682, 0x0002, 0x0003 } 90472b676d7Smrg }, 90572b676d7Smrg { 640, -1, 600, 90672b676d7Smrg { 1173, 703, 0x0002, 0x0003 } 90772b676d7Smrg }, 90872b676d7Smrg { 620, -2, 600, 90972b676d7Smrg { 1137, 726, 0x0002, 0x0003 } 91072b676d7Smrg }, 91172b676d7Smrg { 600, -3, 600, 91272b676d7Smrg { 1100, 750, 0x0002, 0x0003 } 91372b676d7Smrg }, 91472b676d7Smrg { 720, 3, 576, /* 750p 1024x576 (77) */ 91572b676d7Smrg { 1238, 600, 0x0003, 0x0005 } 91672b676d7Smrg }, 91772b676d7Smrg { 693, 2, 576, 91872b676d7Smrg { 1191, 623, 0x0003, 0x0005 } 91972b676d7Smrg }, 92072b676d7Smrg { 667, 1, 576, 92172b676d7Smrg { 1146, 648, 0x0003, 0x0005 } 92272b676d7Smrg }, 92372b676d7Smrg { 640, 0, 576, 92472b676d7Smrg { 1100, 675, 0x0003, 0x0005 } 92572b676d7Smrg }, 92672b676d7Smrg { 630, -1, 576, 92772b676d7Smrg { 1083, 686, 0x0003, 0x0005 } 92872b676d7Smrg }, 92972b676d7Smrg { 620, -2, 576, 93072b676d7Smrg { 1066, 697, 0x0003, 0x0005 } 93172b676d7Smrg }, 93272b676d7Smrg { 616, -3, 576, 93372b676d7Smrg { 1059, 701, 0x0003, 0x0005 } 93472b676d7Smrg }, 93572b676d7Smrg { 720, 3, 768, /* 750p 1024x768 (84) */ 93672b676d7Smrg { 1547, 800, 0x0001, 0x0001 } 93772b676d7Smrg }, 93872b676d7Smrg { 693, 2, 768, 93972b676d7Smrg { 1489, 831, 0x0001, 0x0001 } 94072b676d7Smrg }, 94172b676d7Smrg { 667, 1, 768, 94272b676d7Smrg { 1433, 864, 0x0001, 0x0001 } 94372b676d7Smrg }, 94472b676d7Smrg { 640, 0, 768, 94572b676d7Smrg { 1375, 900, 0x0001, 0x0001 } 94672b676d7Smrg }, 94772b676d7Smrg { 613, -1, 768, 94872b676d7Smrg { 1317, 940, 0x0001, 0x0001 } 94972b676d7Smrg }, 95072b676d7Smrg { 587, -2, 768, 95172b676d7Smrg { 1261, 981, 0x0001, 0x0001 } 95272b676d7Smrg }, 95372b676d7Smrg { 560, -3, 768, 95472b676d7Smrg { 1203, 1029, 0x0001, 0x0001 } 95572b676d7Smrg }, 95672b676d7Smrg#ifdef OLD1280720P 95772b676d7Smrg { 720, 3, 720, /* 750p 1280x720-old (91) */ 95872b676d7Smrg { 1584, 750, 0x0018, 0x0019 } 95972b676d7Smrg }, 96072b676d7Smrg { 707, 2, 720, 96172b676d7Smrg { 1555, 764, 0x0018, 0x0019 } 96272b676d7Smrg }, 96372b676d7Smrg { 693, 1, 720, 96472b676d7Smrg { 1525, 779, 0x0018, 0x0019 } 96572b676d7Smrg }, 96672b676d7Smrg { 680, 0, 720, 96772b676d7Smrg { 1496, 794, 0x0018, 0x0019 } 96872b676d7Smrg }, 96972b676d7Smrg { 667, -1, 720, 97072b676d7Smrg { 1467, 810, 0x0018, 0x0019 } 97172b676d7Smrg }, 97272b676d7Smrg { 653, -2, 720, 97372b676d7Smrg { 1437, 827, 0x0018, 0x0019 } 97472b676d7Smrg }, 97572b676d7Smrg { 640, -3, 720, 97672b676d7Smrg { 1408, 844, 0x0018, 0x0019 } 97772b676d7Smrg }, 97872b676d7Smrg#endif 97972b676d7Smrg#ifndef OLD1280720P 98072b676d7Smrg { 720, 3, 720, /* 750p 1280x720-new (91) */ 98172b676d7Smrg { 1650, 750, 0x0001, 0x0001 } 98272b676d7Smrg }, 98372b676d7Smrg { 720, 2, 720, 98472b676d7Smrg { 1650, 750, 0x0001, 0x0001 } 98572b676d7Smrg }, 98672b676d7Smrg { 720, 1, 720, 98772b676d7Smrg { 1650, 750, 0x0001, 0x0001 } 98872b676d7Smrg }, 98972b676d7Smrg { 720, 0, 720, 99072b676d7Smrg { 1650, 750, 0x0001, 0x0001 } 99172b676d7Smrg }, 99272b676d7Smrg { 704, -1, 720, 99372b676d7Smrg { 1613, 767, 0x0001, 0x0001 } 99472b676d7Smrg }, 99572b676d7Smrg { 688, -2, 720, 99672b676d7Smrg { 1577, 785, 0x0001, 0x0001 } 99772b676d7Smrg }, 99872b676d7Smrg { 672, -3, 720, 99972b676d7Smrg { 1540, 804, 0x0001, 0x0001 } 100072b676d7Smrg }, 100172b676d7Smrg#endif 100272b676d7Smrg { 1080, 3, 480, /* 1080i 640x480 (98) */ 100372b676d7Smrg { 945, 500, 0x8001, 0x0005 } 100472b676d7Smrg }, 100572b676d7Smrg { 1040, 2, 480, 100672b676d7Smrg { 910, 519, 0x8001, 0x0005 } 100772b676d7Smrg }, 100872b676d7Smrg { 1000, 1, 480, 100972b676d7Smrg { 875, 540, 0x8001, 0x0005 } 101072b676d7Smrg }, 101172b676d7Smrg { 960, 0, 480, 101272b676d7Smrg { 840, 563, 0x8001, 0x0005 } 101372b676d7Smrg }, 101472b676d7Smrg { 920, -1, 480, 101572b676d7Smrg { 805, 587, 0x8001, 0x0005 } 101672b676d7Smrg }, 101772b676d7Smrg { 880, -2, 480, 101872b676d7Smrg { 770, 614, 0x8001, 0x0005 } 101972b676d7Smrg }, 102072b676d7Smrg { 840, -3, 480, 102172b676d7Smrg { 735, 643, 0x8001, 0x0005 } 102272b676d7Smrg }, 102372b676d7Smrg { 1080, 3, 480, /* 1080i 800x480 (105) */ 102472b676d7Smrg { 1181, 500, 0x8001, 0x0004 } 102572b676d7Smrg }, 102672b676d7Smrg { 1040, 2, 480, 102772b676d7Smrg { 1138, 519, 0x8001, 0x0004 } 102872b676d7Smrg }, 102972b676d7Smrg { 1000, 1, 480, 103072b676d7Smrg { 1094, 540, 0x8001, 0x0004 } 103172b676d7Smrg }, 103272b676d7Smrg { 960, 0, 480, 103372b676d7Smrg { 1050, 563, 0x8001, 0x0004 } 103472b676d7Smrg }, 103572b676d7Smrg { 920, -1, 480, 103672b676d7Smrg { 1006, 587, 0x8001, 0x0004 } 103772b676d7Smrg }, 103872b676d7Smrg { 880, -2, 480, 103972b676d7Smrg { 963, 614, 0x8001, 0x0004 } 104072b676d7Smrg }, 104172b676d7Smrg { 840, -3, 480, 104272b676d7Smrg { 919, 643, 0x8001, 0x0004 } 104372b676d7Smrg }, 104472b676d7Smrg { 1080, 3, 600, /* 1080i 800x600 (112) */ 104572b676d7Smrg { 1181, 625, 0x8005, 0x0010 } 104672b676d7Smrg }, 104772b676d7Smrg { 1040, 2, 600, 104872b676d7Smrg { 1138, 649, 0x8005, 0x0010 } 104972b676d7Smrg }, 105072b676d7Smrg { 1000, 1, 600, 105172b676d7Smrg { 1094, 675, 0x8005, 0x0010 } 105272b676d7Smrg }, 105372b676d7Smrg { 960, 0, 600, 105472b676d7Smrg { 1050, 703, 0x8005, 0x0010 } 105572b676d7Smrg }, 105672b676d7Smrg { 920, -1, 600, 105772b676d7Smrg { 1006, 734, 0x8005, 0x0010 } 105872b676d7Smrg }, 105972b676d7Smrg { 880, -2, 600, 106072b676d7Smrg { 963, 767, 0x8005, 0x0010 } 106172b676d7Smrg }, 106272b676d7Smrg { 840, -3, 600, 106372b676d7Smrg { 919, 804, 0x8005, 0x0010 } 106472b676d7Smrg }, 106572b676d7Smrg { 1080, 3, 576, /* 1080i 1024x576 (119) */ 106672b676d7Smrg { 1575, 600, 0x0002, 0x0005 } 106772b676d7Smrg }, 106872b676d7Smrg { 1040, 2, 576, 106972b676d7Smrg { 1517, 623, 0x0002, 0x0005 } 107072b676d7Smrg }, 107172b676d7Smrg { 1000, 1, 576, 107272b676d7Smrg { 1458, 648, 0x0002, 0x0005 } 107372b676d7Smrg }, 107472b676d7Smrg { 960, 0, 576, 107572b676d7Smrg { 1400, 675, 0x0002, 0x0005 } 107672b676d7Smrg }, 107772b676d7Smrg { 920, -1, 576, 107872b676d7Smrg { 1342, 704, 0x0002, 0x0005 } 107972b676d7Smrg }, 108072b676d7Smrg { 880, -2, 576, 108172b676d7Smrg { 1283, 736, 0x0002, 0x0005 } 108272b676d7Smrg }, 108372b676d7Smrg { 840, -3, 576, 108472b676d7Smrg { 1225, 771, 0x0002, 0x0005 } 108572b676d7Smrg }, 108672b676d7Smrg { 1080, 3, 768, /* 1080i 1024x768 (126) */ 108772b676d7Smrg { 1418, 800, 0x000c, 0x0019 } 108872b676d7Smrg }, 108972b676d7Smrg { 1040, 2, 768, 109072b676d7Smrg { 1365, 831, 0x000c, 0x0019 } 109172b676d7Smrg }, 109272b676d7Smrg { 1000, 1, 768, 109372b676d7Smrg { 1313, 864, 0x000c, 0x0019 } 109472b676d7Smrg }, 109572b676d7Smrg { 960, 0, 768, 109672b676d7Smrg { 1260, 900, 0x000c, 0x0019 } 109772b676d7Smrg }, 109872b676d7Smrg { 920, -1, 768, 109972b676d7Smrg { 1208, 939, 0x000c, 0x0019 } 110072b676d7Smrg }, 110172b676d7Smrg { 880, -2, 768, 110272b676d7Smrg { 1155, 982, 0x000c, 0x0019 } 110372b676d7Smrg }, 110472b676d7Smrg { 840, -3, 768, 110572b676d7Smrg { 1103, 1029, 0x000c, 0x0019 } 110672b676d7Smrg }, 110772b676d7Smrg { 1080, 3, 720, /* 1080i 1280x720 (133) */ 110872b676d7Smrg { 1969, 750, 0x0005, 0x0008 } 110972b676d7Smrg }, 111072b676d7Smrg { 1040, 2, 720, 111172b676d7Smrg { 1896, 779, 0x0005, 0x0008 } 111272b676d7Smrg }, 111372b676d7Smrg { 1000, 1, 720, 111472b676d7Smrg { 1823, 810, 0x0005, 0x0008 } 111572b676d7Smrg }, 111672b676d7Smrg { 960, 0, 720, 111772b676d7Smrg { 1750, 844, 0x0005, 0x0008 } 111872b676d7Smrg }, 111972b676d7Smrg { 920, -1, 720, 112072b676d7Smrg { 1677, 880, 0x0005, 0x0008 } 112172b676d7Smrg }, 112272b676d7Smrg { 880, -2, 720, 112372b676d7Smrg { 1604, 920, 0x0005, 0x0008 } 112472b676d7Smrg }, 112572b676d7Smrg { 840, -3, 720, 112672b676d7Smrg { 1531, 964, 0x0005, 0x0008 } 112772b676d7Smrg }, 112872b676d7Smrg { 1080, 3, 1024, /* 1080i 1280x1024 (140) */ 112972b676d7Smrg { 1772, 1067, 0x0004, 0x0005 } 113072b676d7Smrg }, 113172b676d7Smrg { 1040, 2, 1024, 113272b676d7Smrg { 1706, 1108, 0x0004, 0x0005 } 113372b676d7Smrg }, 113472b676d7Smrg { 1000, 1, 1024, 113572b676d7Smrg { 1641, 1152, 0x0004, 0x0005 } 113672b676d7Smrg }, 113772b676d7Smrg { 960, 0, 1024, 113872b676d7Smrg { 1575, 1200, 0x0004, 0x0005 } 113972b676d7Smrg }, 114072b676d7Smrg { 920, -1, 1024, 114172b676d7Smrg { 1509, 1252, 0x0004, 0x0005 } 114272b676d7Smrg }, 114372b676d7Smrg { 880, -2, 1024, 114472b676d7Smrg { 1444, 1309, 0x0004, 0x0005 } 114572b676d7Smrg }, 114672b676d7Smrg { 840, -3, 1024, 114772b676d7Smrg { 1378, 1371, 0x0004, 0x0005 } 114872b676d7Smrg }, 114972b676d7Smrg { 470, 3, 576, /* NTSC 720x576 (147) */ 115072b676d7Smrg { 1175, 602, 0x8078, 0x008f } 115172b676d7Smrg }, 115272b676d7Smrg { 460, 2, 576, 115372b676d7Smrg { 1150, 614, 0x8078, 0x008f } 115472b676d7Smrg }, 115572b676d7Smrg { 450, 1, 576, 115672b676d7Smrg { 1125, 628, 0x8078, 0x008f } 115772b676d7Smrg }, 115872b676d7Smrg { 440, 0, 576, 115972b676d7Smrg { 1100, 643, 0x8078, 0x008f } 116072b676d7Smrg }, 116172b676d7Smrg { 430, -1, 576, 116272b676d7Smrg { 1075, 658, 0x8078, 0x008f } 116372b676d7Smrg }, 116472b676d7Smrg { 420, -2, 576, 116572b676d7Smrg { 1050, 673, 0x8078, 0x008f } 116672b676d7Smrg }, 116772b676d7Smrg { 410, -3, 576, 116872b676d7Smrg { 1025, 680, 0x8078, 0x008f } 116972b676d7Smrg }, 117072b676d7Smrg { 550, 3, 768, /* PAL 1024x768 (154) */ 117172b676d7Smrg { 1238, 776, 0x0001, 0x0001 } 117272b676d7Smrg }, 117372b676d7Smrg { 540, 2, 768, 117472b676d7Smrg { 1215, 790, 0x0001, 0x0001 } 117572b676d7Smrg }, 117672b676d7Smrg { 530, 1, 768, 117772b676d7Smrg { 1193, 805, 0x0001, 0x0001 } 117872b676d7Smrg }, 117972b676d7Smrg { 520, 0, 768, 118072b676d7Smrg { 1170, 821, 0x0001, 0x0001 } 118172b676d7Smrg }, 118272b676d7Smrg { 510, -1, 768, 118372b676d7Smrg { 1148, 837, 0x0001, 0x0001 } 118472b676d7Smrg }, 118572b676d7Smrg { 500, -2, 768, 118672b676d7Smrg { 1125, 853, 0x0001, 0x0001 } 118772b676d7Smrg }, 118872b676d7Smrg { 490, -3, 768, 118972b676d7Smrg { 1103, 871, 0x0001, 0x0001 } 119072b676d7Smrg }, 119172b676d7Smrg { 470, 3, 768, /* NTSC 1024 i (161) */ 119272b676d7Smrg { 1175, 759, 0x8001, 0x0001 } 119372b676d7Smrg }, 119472b676d7Smrg { 460, 2, 768, 119572b676d7Smrg { 1150, 775, 0x8001, 0x0001 } 119672b676d7Smrg }, 119772b676d7Smrg { 450, 1, 768, 119872b676d7Smrg { 1125, 792, 0x8001, 0x0001 } 119972b676d7Smrg }, 120072b676d7Smrg { 440, 0, 768, 120172b676d7Smrg { 1100, 811, 0x8001, 0x0001 } 120272b676d7Smrg }, 120372b676d7Smrg { 430, -1, 768, 120472b676d7Smrg { 1075, 829, 0x8001, 0x0001 } 120572b676d7Smrg }, 120672b676d7Smrg { 430, -2, 768, 120772b676d7Smrg { 1075, 829, 0x8001, 0x0001 } 120872b676d7Smrg }, 120972b676d7Smrg { 430, -3, 768, 121072b676d7Smrg { 1075, 829, 0x8001, 0x0001 } 121172b676d7Smrg }, 121272b676d7Smrg { 470, 3, 768, /* NTSC 1024 p (168) */ 121372b676d7Smrg { 1175, 792, 0x0001, 0x0001 } 121472b676d7Smrg }, 121572b676d7Smrg { 460, 2, 768, 121672b676d7Smrg { 1150, 809, 0x0001, 0x0001 } 121772b676d7Smrg }, 121872b676d7Smrg { 450, 1, 768, 121972b676d7Smrg { 1125, 827, 0x0001, 0x0001 } 122072b676d7Smrg }, 122172b676d7Smrg { 440, 0, 768, 122272b676d7Smrg { 1100, 846, 0x0001, 0x0001 } 122372b676d7Smrg }, 122472b676d7Smrg { 430, -1, 768, 122572b676d7Smrg { 1075, 865, 0x0001, 0x0001 } 122672b676d7Smrg }, 122772b676d7Smrg { 430, -2, 768, 122872b676d7Smrg { 1075, 865, 0x0001, 0x0001 } 122972b676d7Smrg }, 123072b676d7Smrg { 430, -3, 768, 123172b676d7Smrg { 1075, 865, 0x0001, 0x0001 } 123272b676d7Smrg }, 123372b676d7Smrg { 470, 3, 480, /* NTSC 800x480 (175) */ 123472b676d7Smrg { 893, 509, 0x004c, 0x008f } 123572b676d7Smrg }, 123672b676d7Smrg { 460, 2, 480, 123772b676d7Smrg { 874, 514, 0x004c, 0x008f } 123872b676d7Smrg }, 123972b676d7Smrg { 450, 1, 480, 124072b676d7Smrg { 855, 519, 0x004c, 0x008f } 124172b676d7Smrg }, 124272b676d7Smrg { 440, 0, 480, /* default */ 124372b676d7Smrg { 836, 524, 0x004c, 0x008f } 124472b676d7Smrg }, 124572b676d7Smrg { 430, -1, 480, 124672b676d7Smrg { 860, 529, 0x0050, 0x008f } 124772b676d7Smrg }, 124872b676d7Smrg { 420, -2, 480, 124972b676d7Smrg { 840, 534, 0x0050, 0x008f } 125072b676d7Smrg }, 125172b676d7Smrg { 420, -3, 480, 125272b676d7Smrg { 840, 534, 0x0050, 0x008f } 125372b676d7Smrg }, 125472b676d7Smrg { 470, 3, 576, /* NTSC 1024x576 (182) */ 125572b676d7Smrg { 1175, 602, 0x8078, 0x008f } 125672b676d7Smrg }, 125772b676d7Smrg { 460, 2, 576, 125872b676d7Smrg { 1150, 614, 0x8078, 0x008f } 125972b676d7Smrg }, 126072b676d7Smrg { 450, 1, 576, 126172b676d7Smrg { 1125, 628, 0x8078, 0x008f } 126272b676d7Smrg }, 126372b676d7Smrg { 440, 0, 576, 126472b676d7Smrg { 1100, 643, 0x8078, 0x008f } 126572b676d7Smrg }, 126672b676d7Smrg { 430, -1, 576, 126772b676d7Smrg { 1075, 658, 0x8078, 0x008f } 126872b676d7Smrg }, 126972b676d7Smrg { 430, -2, 576, 127072b676d7Smrg { 1075, 658, 0x8078, 0x008f } 127172b676d7Smrg }, 127272b676d7Smrg { 430, -3, 576, 127372b676d7Smrg { 1075, 658, 0x8078, 0x008f } 127472b676d7Smrg }, 127572b676d7Smrg { 564, 3, 576, /* PAL 1024x576 (189) */ 127672b676d7Smrg { 1128, 592, 0x0002, 0x0003 } 127772b676d7Smrg }, 127872b676d7Smrg { 556, 2, 576, 127972b676d7Smrg { 1112, 601, 0x0002, 0x0003 } 128072b676d7Smrg }, 128172b676d7Smrg { 548, 1, 576, 128272b676d7Smrg { 1096, 610, 0x0002, 0x0003 } 128372b676d7Smrg }, 128472b676d7Smrg { 540, 0, 576, 128572b676d7Smrg { 1080, 619, 0x0002, 0x0003 } 128672b676d7Smrg }, 128772b676d7Smrg { 532, -1, 576, 128872b676d7Smrg { 1064, 628, 0x0002, 0x0003 } 128972b676d7Smrg }, 129072b676d7Smrg { 532, -2, 576, 129172b676d7Smrg { 1064, 628, 0x0002, 0x0003 } 129272b676d7Smrg }, 129372b676d7Smrg { 532, -3, 576, 129472b676d7Smrg { 1064, 628, 0x0002, 0x0003 } 129572b676d7Smrg }, 129672b676d7Smrg { 1080, 3, 540, /* 1080i 960x540 (196) */ 129772b676d7Smrg { 1050, 600, 0x0001, 0x0004 } 129872b676d7Smrg }, 129972b676d7Smrg { 1080, 2, 540, 130072b676d7Smrg { 1050, 600, 0x0001, 0x0004 } 130172b676d7Smrg }, 130272b676d7Smrg { 1080, 1, 540, 130372b676d7Smrg { 1050, 600, 0x0001, 0x0004 } 130472b676d7Smrg }, 130572b676d7Smrg { 1080, 0, 540, 130672b676d7Smrg { 1050, 600, 0x0001, 0x0004 } 130772b676d7Smrg }, 130872b676d7Smrg { 1040, -1, 540, 130972b676d7Smrg { 1011, 623, 0x0001, 0x0004 } 131072b676d7Smrg }, 131172b676d7Smrg { 1000, -2, 540, 131272b676d7Smrg { 1944, 648, 0x0001, 0x0002 } 131372b676d7Smrg }, 131472b676d7Smrg { 960, -3, 540, 131572b676d7Smrg { 1866, 675, 0x0001, 0x0002 } 131672b676d7Smrg }, 131772b676d7Smrg { 1080, 3, 600, /* 1080i 960x600 (203) */ 131872b676d7Smrg { 1418, 670, 0x0003, 0x0008 } 131972b676d7Smrg }, 132072b676d7Smrg { 1040, 2, 600, 132172b676d7Smrg { 1365, 700, 0x0003, 0x0008 } 132272b676d7Smrg }, 132372b676d7Smrg { 1000, 1, 600, 132472b676d7Smrg { 1313, 816, 0x0003, 0x0008 } 132572b676d7Smrg }, 132672b676d7Smrg { 960, 0, 600, 132772b676d7Smrg { 1260, 851, 0x0003, 0x0008 } 132872b676d7Smrg }, 132972b676d7Smrg { 920, -1, 600, 133072b676d7Smrg { 1208, 887, 0x0003, 0x0008 } 133172b676d7Smrg }, 133272b676d7Smrg { 880, -2, 600, 133372b676d7Smrg { 1155, 928, 0x0003, 0x0008 } 133472b676d7Smrg }, 133572b676d7Smrg { 840, -3, 600, 133672b676d7Smrg { 1103, 972, 0x0003, 0x0008 } 133772b676d7Smrg } 133872b676d7Smrg}; 133972b676d7Smrg 134072b676d7Smrgstatic unsigned const char SiSScalingP1Regs[] = { 134172b676d7Smrg 0x08,0x09,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12 134272b676d7Smrg}; 134372b676d7Smrgstatic unsigned const char SiSScalingP4Regs[] = { 134472b676d7Smrg 0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b 134572b676d7Smrg}; 134672b676d7Smrg 134772b676d7Smrg/* TV filters for SiS video bridges 134872b676d7Smrg */ 134972b676d7Smrgstatic const struct _SiSTVFilter301 { 135072b676d7Smrg UChar filter[7][4]; 135172b676d7Smrg} SiSTVFilter301[] = { 135272b676d7Smrg {{ {0x00,0xE0,0x10,0x60}, /* NTSCFilter - 320 */ 135372b676d7Smrg {0x00,0xEE,0x10,0x44}, 135472b676d7Smrg {0x00,0xF4,0x10,0x38}, 135572b676d7Smrg {0xF8,0xF4,0x18,0x38}, 135672b676d7Smrg {0xFC,0xFB,0x14,0x2A}, 135772b676d7Smrg {0x00,0x00,0x10,0x20}, 135872b676d7Smrg {0x00,0x04,0x10,0x18} }}, 135972b676d7Smrg {{ {0xF5,0xEE,0x1B,0x44}, /* NTSCFilter - 640 */ 136072b676d7Smrg {0xF8,0xF4,0x18,0x38}, 136172b676d7Smrg {0xEB,0x04,0x25,0x18}, 136272b676d7Smrg {0xF1,0x05,0x1F,0x16}, 136372b676d7Smrg {0xF6,0x06,0x1A,0x14}, 136472b676d7Smrg {0xFA,0x06,0x16,0x14}, 136572b676d7Smrg {0x00,0x04,0x10,0x18} }}, 136672b676d7Smrg {{ {0xEB,0x04,0x25,0x18}, /* NTSCFilter - 720 */ 136772b676d7Smrg {0xE7,0x0E,0x29,0x04}, 136872b676d7Smrg {0xEE,0x0C,0x22,0x08}, 136972b676d7Smrg {0xF6,0x0B,0x1A,0x0A}, 137072b676d7Smrg {0xF9,0x0A,0x17,0x0C}, 137172b676d7Smrg {0xFC,0x0A,0x14,0x0C}, 137272b676d7Smrg {0x00,0x08,0x10,0x10} }}, 137372b676d7Smrg {{ {0xEC,0x02,0x24,0x1C}, /* NTSCFilter - 800/400 */ 137472b676d7Smrg {0xF2,0x04,0x1E,0x18}, 137572b676d7Smrg {0xEB,0x15,0x25,0xF6}, 137672b676d7Smrg {0xF4,0x10,0x1C,0x00}, 137772b676d7Smrg {0xF8,0x0F,0x18,0x02}, 137872b676d7Smrg {0x00,0x04,0x10,0x18}, 137972b676d7Smrg {0x01,0x06,0x0F,0x14} }}, 138072b676d7Smrg {{ {0x00,0xE0,0x10,0x60}, /* PALFilter - 320 */ 138172b676d7Smrg {0x00,0xEE,0x10,0x44}, 138272b676d7Smrg {0x00,0xF4,0x10,0x38}, 138372b676d7Smrg {0xF8,0xF4,0x18,0x38}, 138472b676d7Smrg {0xFC,0xFB,0x14,0x2A}, 138572b676d7Smrg {0x00,0x00,0x10,0x20}, 138672b676d7Smrg {0x00,0x04,0x10,0x18} }}, 138772b676d7Smrg {{ {0xF5,0xEE,0x1B,0x44}, /* PALFilter - 640 */ 138872b676d7Smrg {0xF8,0xF4,0x18,0x38}, 138972b676d7Smrg {0xF1,0xF7,0x1F,0x32}, 139072b676d7Smrg {0xF5,0xFB,0x1B,0x2A}, 139172b676d7Smrg {0xF9,0xFF,0x17,0x22}, 139272b676d7Smrg {0xFB,0x01,0x15,0x1E}, 139372b676d7Smrg {0x00,0x04,0x10,0x18} }}, 139472b676d7Smrg {{ {0xF5,0xEE,0x1B,0x2A}, /* PALFilter - 720 */ 139572b676d7Smrg {0xEE,0xFE,0x22,0x24}, 139672b676d7Smrg {0xF3,0x00,0x1D,0x20}, 139772b676d7Smrg {0xF9,0x03,0x17,0x1A}, 139872b676d7Smrg {0xFB,0x02,0x14,0x1E}, 139972b676d7Smrg {0xFB,0x04,0x15,0x18}, 140072b676d7Smrg {0x00,0x06,0x10,0x14} }}, 140172b676d7Smrg {{ {0xF5,0xEE,0x1B,0x44}, /* PALFilter - 800/400 */ 140272b676d7Smrg {0xF8,0xF4,0x18,0x38}, 140372b676d7Smrg {0xFC,0xFB,0x14,0x2A}, 140472b676d7Smrg {0xEB,0x05,0x25,0x16}, 140572b676d7Smrg {0xF1,0x05,0x1F,0x16}, 140672b676d7Smrg {0xFA,0x07,0x16,0x12}, 140772b676d7Smrg {0x00,0x07,0x10,0x12} }} 140872b676d7Smrg}; 140972b676d7Smrg 141072b676d7Smrgstatic const struct _SiSTVFilter301B { 141172b676d7Smrg UChar filter[7][7]; 141272b676d7Smrg} SiSTVFilter301B[] = { 141372b676d7Smrg {{ {0x01,0x02,0xfb,0xf8,0x06,0x27,0x3a}, /* NTSC - 640 */ 141472b676d7Smrg {0x01,0x02,0xfe,0xf7,0x03,0x27,0x3c}, 141572b676d7Smrg {0x01,0x01,0x00,0xf6,0x00,0x28,0x40}, 141672b676d7Smrg {0xff,0x03,0x02,0xf6,0xfc,0x27,0x46}, 141772b676d7Smrg {0xff,0x01,0x04,0xf8,0xfa,0x27,0x46}, 141872b676d7Smrg {0xff,0x01,0x05,0xf9,0xf7,0x26,0x4a}, 141972b676d7Smrg {0xff,0xff,0x05,0xfc,0xf4,0x24,0x52} }}, 142072b676d7Smrg {{ {0x01,0x00,0xfb,0xfb,0x0b,0x25,0x32}, /* NTSC - 720 (?) */ 142172b676d7Smrg {0x01,0x01,0xfb,0xf9,0x09,0x26,0x36}, 142272b676d7Smrg {0x01,0x02,0xfc,0xf8,0x06,0x27,0x38}, 142372b676d7Smrg {0x01,0x02,0xfe,0xf7,0x03,0x27,0x3c}, 142472b676d7Smrg {0x01,0x03,0xff,0xf6,0x00,0x27,0x40}, 142572b676d7Smrg {0xff,0x03,0x02,0xf6,0xfe,0x27,0x42}, 142672b676d7Smrg {0xff,0x02,0x03,0xf7,0xfb,0x27,0x46} }}, 142772b676d7Smrg {{ {0x01,0xfe,0xfb,0xfe,0x0e,0x23,0x2e}, /* NTSC - 800 */ 142872b676d7Smrg {0x01,0xff,0xfb,0xfc,0x0c,0x25,0x30}, 142972b676d7Smrg {0x01,0x00,0xfb,0xfa,0x0a,0x26,0x34}, 143072b676d7Smrg {0x01,0x01,0xfc,0xf8,0x08,0x26,0x38}, 143172b676d7Smrg {0x01,0x02,0xfd,0xf7,0x06,0x27,0x38}, 143272b676d7Smrg {0x01,0x02,0xfe,0xf7,0x03,0x27,0x3c}, 143372b676d7Smrg {0xff,0x03,0x00,0xf6,0x00,0x27,0x42} }}, 143472b676d7Smrg {{ {0xff,0xfd,0xfe,0x05,0x11,0x1e,0x24}, /* NTSC - 1024 */ 143572b676d7Smrg {0xff,0xfd,0xfd,0x04,0x11,0x1f,0x26}, 143672b676d7Smrg {0xff,0xfd,0xfc,0x02,0x10,0x22,0x28}, 143772b676d7Smrg {0xff,0xff,0xfc,0x00,0x0f,0x22,0x28}, 143872b676d7Smrg {0x01,0xfe,0xfb,0xff,0x0e,0x23,0x2c}, 143972b676d7Smrg {0x01,0xff,0xfb,0xfd,0x0d,0x24,0x2e}, 144072b676d7Smrg {0x01,0xff,0xfb,0xfb,0x0c,0x25,0x32} }}, 144172b676d7Smrg {{ {0x01,0x02,0xfb,0xf8,0x06,0x27,0x3a}, /* PAL - 640 */ 144272b676d7Smrg {0x01,0x02,0xfe,0xf7,0x03,0x27,0x3c}, 144372b676d7Smrg {0x01,0x01,0x00,0xf6,0x00,0x28,0x40}, 144472b676d7Smrg {0xff,0x03,0x02,0xf6,0xfc,0x27,0x46}, 144572b676d7Smrg {0xff,0x01,0x04,0xf8,0xfa,0x27,0x46}, 144672b676d7Smrg {0xff,0x01,0x05,0xf9,0xf7,0x26,0x4a}, 144772b676d7Smrg {0xff,0xff,0x05,0xfc,0xf4,0x24,0x52} }}, 144872b676d7Smrg {{ {0x01,0x00,0xfb,0xfb,0x0b,0x25,0x32}, /* PAL - 720/768 */ 144972b676d7Smrg {0x01,0x01,0xfb,0xf9,0x09,0x26,0x36}, 145072b676d7Smrg {0x01,0x02,0xfc,0xf8,0x06,0x27,0x38}, 145172b676d7Smrg {0x01,0x02,0xfe,0xf7,0x03,0x27,0x3c}, 145272b676d7Smrg {0x01,0x03,0xff,0xf6,0x00,0x27,0x40}, 145372b676d7Smrg {0xff,0x03,0x02,0xf6,0xfe,0x27,0x42}, 145472b676d7Smrg {0xff,0x02,0x03,0xf7,0xfb,0x27,0x46} }}, 145572b676d7Smrg {{ {0x01,0xfe,0xfb,0xfe,0x0e,0x23,0x2e}, /* PAL - 800 */ 145672b676d7Smrg {0x01,0xff,0xfb,0xfc,0x0c,0x25,0x30}, 145772b676d7Smrg {0x01,0x00,0xfb,0xfa,0x0a,0x26,0x34}, 145872b676d7Smrg {0x01,0x01,0xfc,0xf8,0x08,0x26,0x38}, 145972b676d7Smrg {0x01,0x02,0xfd,0xf7,0x06,0x27,0x38}, 146072b676d7Smrg {0x01,0x02,0xfe,0xf7,0x03,0x27,0x3c}, 146172b676d7Smrg {0xff,0x03,0x00,0xf6,0x00,0x27,0x42} }}, 146272b676d7Smrg {{ {0xff,0xfd,0xfe,0x05,0x11,0x1e,0x24}, /* PAL - 1024 */ 146372b676d7Smrg {0xff,0xfd,0xfd,0x04,0x11,0x1f,0x26}, 146472b676d7Smrg {0xff,0xfd,0xfc,0x02,0x10,0x22,0x28}, 146572b676d7Smrg {0xff,0xff,0xfc,0x00,0x0f,0x22,0x28}, 146672b676d7Smrg {0x01,0xfe,0xfb,0xff,0x0e,0x23,0x2c}, 146772b676d7Smrg {0x01,0xff,0xfb,0xfd,0x0d,0x24,0x2e}, 146872b676d7Smrg {0x01,0xff,0xfb,0xfb,0x0c,0x25,0x32} }}, 146972b676d7Smrg {{ {0x54,0x69,0x6c,0x6c,0x20,0x53,0x6f}, /* PAL-M - 1024 */ 147072b676d7Smrg {0x66,0x69,0x61,0x20,0x42,0x65,0x72}, 147172b676d7Smrg {0x6e,0x74,0x73,0x73,0x6f,0x6e,0x20}, 147272b676d7Smrg {0x2d,0x20,0x42,0x72,0x6f,0x75,0x67}, 147372b676d7Smrg {0x68,0x74,0x20,0x74,0x6f,0x20,0x79}, 147472b676d7Smrg {0x6f,0x75,0x20,0x62,0x79,0x20,0x6e}, 147572b676d7Smrg {0x6f,0x74,0x20,0x61,0x20,0x6d,0x65,} }}, 147672b676d7Smrg {{ {0x72,0x65,0x20,0x57,0x69,0x7a,0x61}, /* PAL-N - 1024 */ 147772b676d7Smrg {0x72,0x64,0x20,0x62,0x75,0x74,0x20}, 147872b676d7Smrg {0x74,0x68,0x65,0x20,0x57,0x69,0x7a}, 147972b676d7Smrg {0x61,0x72,0x64,0x20,0x45,0x78,0x74}, 148072b676d7Smrg {0x72,0x61,0x6f,0x72,0x64,0x69,0x6e}, 148172b676d7Smrg {0x61,0x69,0x72,0x65,0x21,0x20,0x48}, 148272b676d7Smrg {0x69,0x20,0x44,0x61,0x6c,0x65,0x21} }} 148372b676d7Smrg}; 148472b676d7Smrg 148572b676d7Smrg/* For communication with the SiS Linux framebuffer driver (sisfb) */ 148672b676d7Smrg 148772b676d7Smrg/* ioctl for identifying and giving some info (esp. memory heap start) */ 148872b676d7Smrg#define SISFB_GET_INFO_SIZE 0x8004f300 148972b676d7Smrg#define SISFB_GET_INFO 0x8000f301 /* Must be patched with result from ..._SIZE at D[29:16] */ 149072b676d7Smrg/* deprecated ioctl number (for older versions of sisfb) */ 149172b676d7Smrg#define SISFB_GET_INFO_OLD 0x80046ef8 149272b676d7Smrg 149372b676d7Smrg/* ioctls for tv parameters (position) */ 149472b676d7Smrg#define SISFB_SET_TVPOSOFFSET 0x4004f304 149572b676d7Smrg 149672b676d7Smrg/* lock sisfb from register access */ 149772b676d7Smrg#define SISFB_SET_LOCK 0x4004f306 149872b676d7Smrg 149972b676d7Smrg/* Magic value for USB device */ 150072b676d7Smrg#ifndef SISFB_USB_MAGIC 150172b676d7Smrg#define SISFB_USB_MAGIC 0x55aa2011 150272b676d7Smrg#endif 150372b676d7Smrg 150472b676d7Smrg/* Structure argument for SISFB_GET_INFO ioctl */ 150572b676d7Smrgtypedef struct _SISFB_INFO sisfb_info, *psisfb_info; 150672b676d7Smrg 150772b676d7Smrgstruct _SISFB_INFO { 150872b676d7Smrg CARD32 sisfb_id; /* for identifying sisfb */ 150972b676d7Smrg#ifndef SISFB_ID 151072b676d7Smrg#define SISFB_ID 0x53495346 /* Identify myself with 'SISF' */ 151172b676d7Smrg#endif 151272b676d7Smrg CARD32 chip_id; /* PCI ID of detected chip */ 151372b676d7Smrg CARD32 memory; /* video memory in KB which sisfb manages */ 151472b676d7Smrg CARD32 heapstart; /* heap start (= sisfb "mem" argument) in KB */ 151572b676d7Smrg CARD8 fbvidmode; /* current sisfb mode */ 151672b676d7Smrg 151772b676d7Smrg CARD8 sisfb_version; 151872b676d7Smrg CARD8 sisfb_revision; 151972b676d7Smrg CARD8 sisfb_patchlevel; 152072b676d7Smrg 152172b676d7Smrg CARD8 sisfb_caps; /* sisfb's capabilities */ 152272b676d7Smrg 152372b676d7Smrg CARD32 sisfb_tqlen; /* turbo queue length (in KB) */ 152472b676d7Smrg 152572b676d7Smrg CARD32 sisfb_pcibus; /* The card's PCI bus ID. For USB, bus = SISFB_USB_MAGIC */ 152672b676d7Smrg CARD32 sisfb_pcislot; /* alias usbbus */ 152772b676d7Smrg CARD32 sisfb_pcifunc; /* alias usbdev */ 152872b676d7Smrg 152972b676d7Smrg CARD8 sisfb_lcdpdc; 153072b676d7Smrg 153172b676d7Smrg CARD8 sisfb_lcda; 153272b676d7Smrg 153372b676d7Smrg CARD32 sisfb_vbflags; 153472b676d7Smrg CARD32 sisfb_currentvbflags; 153572b676d7Smrg 153672b676d7Smrg CARD32 sisfb_scalelcd; 153772b676d7Smrg CARD32 sisfb_specialtiming; 153872b676d7Smrg 153972b676d7Smrg CARD8 sisfb_haveemi; 154072b676d7Smrg CARD8 sisfb_emi30,sisfb_emi31,sisfb_emi32,sisfb_emi33; 154172b676d7Smrg CARD8 sisfb_haveemilcd; 154272b676d7Smrg 154372b676d7Smrg CARD8 sisfb_lcdpdca; 154472b676d7Smrg 154572b676d7Smrg CARD16 sisfb_tvxpos, sisfb_tvypos; /* Warning: Values + 32 ! */ 154672b676d7Smrg 154772b676d7Smrg CARD32 sisfb_heapsize; /* heap size (in KB) */ 154872b676d7Smrg CARD32 sisfb_videooffset; /* Offset of viewport in video memory (in bytes) */ 154972b676d7Smrg 155072b676d7Smrg CARD32 sisfb_curfstn; /* currently running FSTN/DSTN mode */ 155172b676d7Smrg CARD32 sisfb_curdstn; 155272b676d7Smrg 155372b676d7Smrg CARD16 sisfb_pci_vendor; /* PCI vendor (SiS or XGI) */ 155472b676d7Smrg 155572b676d7Smrg CARD32 sisfb_vbflags2; 155672b676d7Smrg 155772b676d7Smrg CARD8 sisfb_can_post; /* sisfb can POST this card */ 155872b676d7Smrg CARD8 sisfb_card_posted; /* card is POSTED */ 155972b676d7Smrg CARD8 sisfb_was_boot_device; /* This card was the boot video device (ie is primary) */ 156072b676d7Smrg 156172b676d7Smrg CARD8 reserved[183]; /* for future use */ 156272b676d7Smrg}; 156372b676d7Smrg 156472b676d7Smrg/* Mandatory functions */ 156572b676d7Smrgstatic void SISIdentify(int flags); 156672b676d7Smrgstatic Bool SISProbe(DriverPtr drv, int flags); 156772b676d7Smrgstatic Bool SISPreInit(ScrnInfoPtr pScrn, int flags); 156874c14cd6Smrgstatic Bool SISScreenInit(SCREEN_INIT_ARGS_DECL); 156974c14cd6Smrgstatic Bool SISEnterVT(VT_FUNC_ARGS_DECL); 157074c14cd6Smrgstatic void SISLeaveVT(VT_FUNC_ARGS_DECL); 157174c14cd6Smrgstatic Bool SISCloseScreen(CLOSE_SCREEN_ARGS_DECL); 157272b676d7Smrgstatic Bool SISSaveScreen(ScreenPtr pScreen, int mode); 157374c14cd6Smrgstatic Bool SISSwitchMode(SWITCH_MODE_ARGS_DECL); 157474c14cd6Smrgvoid SISAdjustFrame(ADJUST_FRAME_ARGS_DECL); 157572b676d7Smrg 157672b676d7Smrg/* Optional functions */ 157772b676d7Smrg#ifdef SISDUALHEAD 157872b676d7Smrgstatic Bool SISSaveScreenDH(ScreenPtr pScreen, int mode); 157972b676d7Smrg#endif 158074c14cd6Smrgstatic void SISFreeScreen(FREE_SCREEN_ARGS_DECL); 158174c14cd6Smrgstatic ModeStatus SISValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode, 158272b676d7Smrg Bool verbose, int flags); 158372b676d7Smrg 158472b676d7Smrg/* Internally used functions */ 158572b676d7Smrgstatic Bool SISMapMem(ScrnInfoPtr pScrn); 158672b676d7Smrgstatic Bool SISUnmapMem(ScrnInfoPtr pScrn); 158772b676d7Smrg#ifdef SIS_NEED_MAP_IOP 158872b676d7Smrgstatic Bool SISMapIOPMem(ScrnInfoPtr pScrn); 158972b676d7Smrgstatic Bool SISUnmapIOPMem(ScrnInfoPtr pScrn); 159072b676d7Smrg#endif 159172b676d7Smrgstatic void SISSave(ScrnInfoPtr pScrn); 159272b676d7Smrgstatic void SISRestore(ScrnInfoPtr pScrn); 159372b676d7Smrgstatic Bool SISModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode); 159472b676d7Smrgstatic void SISModifyModeInfo(DisplayModePtr mode); 159572b676d7Smrgstatic void SiSPreSetMode(ScrnInfoPtr pScrn, DisplayModePtr mode, int viewmode); 159672b676d7Smrgstatic void SiSPostSetMode(ScrnInfoPtr pScrn, SISRegPtr sisReg); 159772b676d7Smrgstatic void SiS6326PostSetMode(ScrnInfoPtr pScrn, SISRegPtr sisReg); 159872b676d7Smrgstatic Bool SiSSetVESAMode(ScrnInfoPtr pScrn, DisplayModePtr pMode); 159972b676d7Smrgstatic void SISVESARestore(ScrnInfoPtr pScrn); 160072b676d7Smrgstatic void SiSBuildVesaModeList(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe); 160172b676d7Smrgstatic UShort SiSCalcVESAModeIndex(ScrnInfoPtr pScrn, DisplayModePtr mode); 160272b676d7Smrgstatic void SISVESASaveRestore(ScrnInfoPtr pScrn, vbeSaveRestoreFunction function); 160372b676d7Smrgstatic void SISBridgeRestore(ScrnInfoPtr pScrn); 160472b676d7Smrgstatic void SiSEnableTurboQueue(ScrnInfoPtr pScrn); 160572b676d7Smrgstatic void SiSRestoreQueueMode(SISPtr pSiS, SISRegPtr sisReg); 160672b676d7SmrgUChar SISSearchCRT1Rate(ScrnInfoPtr pScrn, DisplayModePtr mode); 160772b676d7Smrgstatic void SISWaitVBRetrace(ScrnInfoPtr pScrn); 160872b676d7Smrgvoid SISWaitRetraceCRT1(ScrnInfoPtr pScrn); 160972b676d7Smrgvoid SISWaitRetraceCRT2(ScrnInfoPtr pScrn); 161072b676d7SmrgUShort SiS_CheckModeCRT1(ScrnInfoPtr pScrn, DisplayModePtr mode, 161172b676d7Smrg unsigned int VBFlags, Bool hcm); 161272b676d7SmrgUShort SiS_CheckModeCRT2(ScrnInfoPtr pScrn, DisplayModePtr mode, 161372b676d7Smrg unsigned int VBFlags, Bool hcm); 161472b676d7Smrg 161572b676d7Smrg#ifdef SISMERGED 161672b676d7Smrgstatic Bool InRegion(int x, int y, region r); 161774c14cd6Smrgstatic void SISMergedPointerMoved(SCRN_ARG_TYPE arg, int x, int y); 161872b676d7Smrg#endif 161972b676d7SmrgBool SiSBridgeIsInSlaveMode(ScrnInfoPtr pScrn); 162072b676d7SmrgUShort SiS_GetModeNumber(ScrnInfoPtr pScrn, DisplayModePtr mode, unsigned int VBFlags); 162172b676d7SmrgUChar SiS_GetSetBIOSScratch(ScrnInfoPtr pScrn, UShort offset, UChar value); 162272b676d7Smrg#ifdef DEBUG 162372b676d7Smrgstatic void SiSDumpModeInfo(ScrnInfoPtr pScrn, DisplayModePtr mode); 162472b676d7Smrg#endif 162572b676d7SmrgBool SISDetermineLCDACap(ScrnInfoPtr pScrn); 162672b676d7Smrgvoid SISSaveDetectedDevices(ScrnInfoPtr pScrn); 162772b676d7Smrg#ifdef SISGAMMARAMP 162872b676d7Smrgvoid SISCalculateGammaRamp(ScreenPtr pScreen, ScrnInfoPtr pScrn); 162972b676d7Smrg#endif 163072b676d7Smrg 163172b676d7Smrg/* Our very own vgaHW functions (sis_vga.c) */ 163272b676d7Smrgextern void SiSVGASave(ScrnInfoPtr pScrn, SISRegPtr save, int flags); 163372b676d7Smrgextern void SiSVGARestore(ScrnInfoPtr pScrn, SISRegPtr restore, int flags); 163472b676d7Smrgextern void SiSVGASaveFonts(ScrnInfoPtr pScrn); 163572b676d7Smrgextern void SiSVGARestoreFonts(ScrnInfoPtr pScrn); 163672b676d7Smrgextern void SISVGALock(SISPtr pSiS); 163772b676d7Smrgextern void SiSVGAUnlock(SISPtr pSiS); 163872b676d7Smrgextern void SiSVGAProtect(ScrnInfoPtr pScrn, Bool on); 163972b676d7Smrgextern Bool SiSVGAMapMem(ScrnInfoPtr pScrn); 164072b676d7Smrgextern void SiSVGAUnmapMem(ScrnInfoPtr pScrn); 164172b676d7Smrgextern Bool SiSVGASaveScreen(ScreenPtr pScreen, int mode); 164272b676d7Smrg 164372b676d7Smrg/* shadow */ 164474c14cd6Smrgextern void SISPointerMoved(SCRN_ARG_TYPE arg, int x, int y); 164574c14cd6Smrgextern void SISPointerMovedReflect(SCRN_ARG_TYPE arg, int x, int y); 164672b676d7Smrgextern void SISRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 164772b676d7Smrgextern void SISRefreshAreaReflect(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 164872b676d7Smrgextern void SISRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 164972b676d7Smrgextern void SISRefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 165072b676d7Smrgextern void SISRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 165172b676d7Smrgextern void SISRefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox); 165272b676d7Smrg 165372b676d7Smrg/* vb */ 165472b676d7Smrgextern void SISCRT1PreInit(ScrnInfoPtr pScrn); 165572b676d7Smrgextern void SISLCDPreInit(ScrnInfoPtr pScrn, Bool quiet); 165672b676d7Smrgextern void SISTVPreInit(ScrnInfoPtr pScrn, Bool quiet); 165772b676d7Smrgextern void SISCRT2PreInit(ScrnInfoPtr pScrn, Bool quiet); 165872b676d7Smrgextern void SISSense30x(ScrnInfoPtr pScrn, Bool quiet); 165972b676d7Smrgextern void SISSenseChrontel(ScrnInfoPtr pScrn, Bool quiet); 166072b676d7Smrgextern void SiSSetupPseudoPanel(ScrnInfoPtr pScrn); 166172b676d7Smrg 166272b676d7Smrg/* utility */ 166372b676d7Smrgextern void SiSCtrlExtInit(ScrnInfoPtr pScrn); 166472b676d7Smrgextern void SiSCtrlExtUnregister(SISPtr pSiS, int index); 166572b676d7Smrg 166672b676d7Smrg/* init.c, init301.c ----- (use their data types!) */ 166772b676d7Smrgextern unsigned short SiS_GetModeID(int VGAEngine, unsigned int VBFlags, int HDisplay, int VDisplay, 166872b676d7Smrg int Depth, BOOLEAN FSTN, int LCDwith, int LCDheight); 166972b676d7Smrgextern unsigned short SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay, 167072b676d7Smrg int VDisplay, int Depth, BOOLEAN FSTN, unsigned short CustomT, 167172b676d7Smrg int LCDwith, int LCDheight, unsigned int VBFlags2); 167272b676d7Smrgextern unsigned short SiS_GetModeID_TV(int VGAEngine, unsigned int VBFlags, int HDisplay, 167372b676d7Smrg int VDisplay, int Depth, unsigned int VBFlags2); 167472b676d7Smrgextern unsigned short SiS_GetModeID_VGA2(int VGAEngine, unsigned int VBFlags, int HDisplay, 167572b676d7Smrg int VDisplay, int Depth, unsigned int VBFlags2); 167672b676d7Smrgextern int SiSTranslateToVESA(ScrnInfoPtr pScrn, int modenumber); 167772b676d7Smrgextern int SiSTranslateToOldMode(int modenumber); 167872b676d7Smrgextern BOOLEAN SiSDetermineROMLayout661(struct SiS_Private *SiS_Pr); 167972b676d7Smrgextern BOOLEAN SiSBIOSSetMode(struct SiS_Private *SiS_Pr, 168072b676d7Smrg ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom); 168172b676d7Smrgextern BOOLEAN SiSSetMode(struct SiS_Private *SiS_Pr, 168272b676d7Smrg ScrnInfoPtr pScrn, unsigned short ModeNo, BOOLEAN dosetpitch); 168372b676d7Smrgextern BOOLEAN SiSBIOSSetModeCRT1(struct SiS_Private *SiS_Pr, 168472b676d7Smrg ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom); 168572b676d7Smrgextern BOOLEAN SiSBIOSSetModeCRT2(struct SiS_Private *SiS_Pr, 168672b676d7Smrg ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom); 168772b676d7Smrgextern DisplayModePtr SiSBuildBuiltInModeList(ScrnInfoPtr pScrn, BOOLEAN includelcdmodes, 168872b676d7Smrg BOOLEAN isfordvi, BOOLEAN fakecrt2modes, BOOLEAN IsForCRT2); 168972b676d7Smrgextern void SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr); 169072b676d7Smrgextern void SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr); 169172b676d7Smrgextern void SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr); 169272b676d7Smrgextern void SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr); 169372b676d7Smrgextern void SiS_CalcXTapScaler(struct SiS_Private *SiS_Pr, int srcsize, int destsize, int taps, Bool ishoriz); 169472b676d7Smrg/* End of init.c, init301.c ----- */ 169572b676d7Smrg 169672b676d7Smrg 169772b676d7Smrg 169872b676d7Smrg 169972b676d7Smrg 170072b676d7Smrg 1701