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