[PATCH] staging: xgifb: delete the driver

Daniel Vetter daniel at ffwll.ch
Fri Jan 18 11:20:28 UTC 2019


On Fri, Jan 18, 2019 at 11:08:28AM +0100, Greg Kroah-Hartman wrote:
> There has not been any real work done on cleaning this driver up and
> getting it out of the staging tree in years.  Also, no new fb drivers
> are being added to the tree, so it should be converted into a drm driver
> as well.
> 
> Due to the lack of interest in this codebase, just drop it.
> 
> Cc: Arnaud Patard <arnaud.patard at rtp-net.org>
> Cc: Mauro Carvalho Chehab <mchehab+samsung at kernel.org>
> Reported-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>

Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>

> ---
>  MAINTAINERS                         |    5 -
>  drivers/staging/Kconfig             |    2 -
>  drivers/staging/Makefile            |    1 -
>  drivers/staging/xgifb/Kconfig       |   11 -
>  drivers/staging/xgifb/Makefile      |    4 -
>  drivers/staging/xgifb/TODO          |   16 -
>  drivers/staging/xgifb/XGI_main.h    |  365 --
>  drivers/staging/xgifb/XGI_main_26.c | 2084 ----------
>  drivers/staging/xgifb/XGIfb.h       |  109 -
>  drivers/staging/xgifb/vb_def.h      |  257 --
>  drivers/staging/xgifb/vb_init.c     | 1367 -------
>  drivers/staging/xgifb/vb_init.h     |    6 -
>  drivers/staging/xgifb/vb_setmode.c  | 5528 ---------------------------
>  drivers/staging/xgifb/vb_setmode.h  |   24 -
>  drivers/staging/xgifb/vb_struct.h   |  165 -
>  drivers/staging/xgifb/vb_table.h    | 2513 ------------
>  drivers/staging/xgifb/vb_util.h     |   46 -
>  drivers/staging/xgifb/vgatypes.h    |   51 -
>  18 files changed, 12554 deletions(-)
>  delete mode 100644 drivers/staging/xgifb/Kconfig
>  delete mode 100644 drivers/staging/xgifb/Makefile
>  delete mode 100644 drivers/staging/xgifb/TODO
>  delete mode 100644 drivers/staging/xgifb/XGI_main.h
>  delete mode 100644 drivers/staging/xgifb/XGI_main_26.c
>  delete mode 100644 drivers/staging/xgifb/XGIfb.h
>  delete mode 100644 drivers/staging/xgifb/vb_def.h
>  delete mode 100644 drivers/staging/xgifb/vb_init.c
>  delete mode 100644 drivers/staging/xgifb/vb_init.h
>  delete mode 100644 drivers/staging/xgifb/vb_setmode.c
>  delete mode 100644 drivers/staging/xgifb/vb_setmode.h
>  delete mode 100644 drivers/staging/xgifb/vb_struct.h
>  delete mode 100644 drivers/staging/xgifb/vb_table.h
>  delete mode 100644 drivers/staging/xgifb/vb_util.h
>  delete mode 100644 drivers/staging/xgifb/vgatypes.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 4d04cebb4a71..399c36fc4db5 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -14471,11 +14471,6 @@ L:	linux-wireless at vger.kernel.org
>  S:	Supported
>  F:	drivers/staging/wilc1000/
>  
> -STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER
> -M:	Arnaud Patard <arnaud.patard at rtp-net.org>
> -S:	Odd Fixes
> -F:	drivers/staging/xgifb/
> -
>  STAGING SUBSYSTEM
>  M:	Greg Kroah-Hartman <gregkh at linuxfoundation.org>
>  T:	git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
> diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
> index 46af55acda16..c0901b96cfe4 100644
> --- a/drivers/staging/Kconfig
> +++ b/drivers/staging/Kconfig
> @@ -56,8 +56,6 @@ source "drivers/staging/iio/Kconfig"
>  
>  source "drivers/staging/sm750fb/Kconfig"
>  
> -source "drivers/staging/xgifb/Kconfig"
> -
>  source "drivers/staging/emxx_udc/Kconfig"
>  
>  source "drivers/staging/speakup/Kconfig"
> diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
> index cc5530cc996b..57c6bce13ff4 100644
> --- a/drivers/staging/Makefile
> +++ b/drivers/staging/Makefile
> @@ -20,7 +20,6 @@ obj-$(CONFIG_VT6656)		+= vt6656/
>  obj-$(CONFIG_VME_BUS)		+= vme/
>  obj-$(CONFIG_IIO)		+= iio/
>  obj-$(CONFIG_FB_SM750)		+= sm750fb/
> -obj-$(CONFIG_FB_XGI)		+= xgifb/
>  obj-$(CONFIG_USB_EMXX)		+= emxx_udc/
>  obj-$(CONFIG_SPEAKUP)		+= speakup/
>  obj-$(CONFIG_MFD_NVEC)		+= nvec/
> diff --git a/drivers/staging/xgifb/Kconfig b/drivers/staging/xgifb/Kconfig
> deleted file mode 100644
> index bb0ca5974ea0..000000000000
> --- a/drivers/staging/xgifb/Kconfig
> +++ /dev/null
> @@ -1,11 +0,0 @@
> -config FB_XGI
> -	tristate "XGI display support"
> -	depends on FB && PCI
> -	select FB_CFB_FILLRECT
> -	select FB_CFB_COPYAREA
> -	select FB_CFB_IMAGEBLIT
> -	help
> -	  This driver supports notebooks with XGI Z7,Z9,Z11 PCI chips.
> -	  Say Y if you have such a graphics card.
> -	  To compile this driver as a module, choose M here: the
> -	  module will be called xgifb.ko
> diff --git a/drivers/staging/xgifb/Makefile b/drivers/staging/xgifb/Makefile
> deleted file mode 100644
> index 964a843c4521..000000000000
> --- a/drivers/staging/xgifb/Makefile
> +++ /dev/null
> @@ -1,4 +0,0 @@
> -obj-$(CONFIG_FB_XGI)  += xgifb.o
> -
> -xgifb-y := XGI_main_26.o vb_init.o vb_setmode.o
> -
> diff --git a/drivers/staging/xgifb/TODO b/drivers/staging/xgifb/TODO
> deleted file mode 100644
> index a1e25957bf1b..000000000000
> --- a/drivers/staging/xgifb/TODO
> +++ /dev/null
> @@ -1,16 +0,0 @@
> -This drivers still needs a lot of work. I can list all cleanups to do but it's
> -going to be long. So, I'm writing "cleanups" and not the list.
> -
> -Arnaud
> -
> -TODO:
> -- clean ups
> -- sort out dup ids with SiS driver
> -- remove useless/wrong/unused code...
> -- get rid of non-linux related stuff
> -
> -This needs to become a drm driver, the fbdev subsystem doesn't take new drivers
> -anymore.
> -
> -Please send patches to:
> -Arnaud Patard <arnaud.patard at rtp-net.org>
> diff --git a/drivers/staging/xgifb/XGI_main.h b/drivers/staging/xgifb/XGI_main.h
> deleted file mode 100644
> index e19a8291cb2a..000000000000
> --- a/drivers/staging/xgifb/XGI_main.h
> +++ /dev/null
> @@ -1,365 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _XGIFB_MAIN
> -#define _XGIFB_MAIN
> -/* ------------------- Constant Definitions ------------------------- */
> -#include "XGIfb.h"
> -#include "vb_def.h"
> -
> -#define PCI_DEVICE_ID_XGI_42      0x042
> -#define PCI_DEVICE_ID_XGI_27      0x027
> -
> -static const struct pci_device_id xgifb_pci_table[] = {
> -	{PCI_DEVICE(PCI_VENDOR_ID_XGI, PCI_DEVICE_ID_XGI_20)},
> -	{PCI_DEVICE(PCI_VENDOR_ID_XGI, PCI_DEVICE_ID_XGI_27)},
> -	{PCI_DEVICE(PCI_VENDOR_ID_XGI, PCI_DEVICE_ID_XGI_40)},
> -	{PCI_DEVICE(PCI_VENDOR_ID_XGI, PCI_DEVICE_ID_XGI_42)},
> -	{0}
> -};
> -
> -MODULE_DEVICE_TABLE(pci, xgifb_pci_table);
> -
> -#define IND_XGI_SCRATCH_REG_CR30  0x30  /* CRs */
> -#define IND_XGI_SCRATCH_REG_CR31  0x31
> -#define IND_XGI_SCRATCH_REG_CR32  0x32
> -#define IND_XGI_SCRATCH_REG_CR33  0x33
> -#define IND_XGI_LCD_PANEL         0x36
> -#define IND_XGI_SCRATCH_REG_CR37  0x37
> -
> -#define XGI_DRAM_SIZE_MASK     0xF0  /*SR14 */
> -#define XGI_DRAM_SIZE_1MB      0x00
> -#define XGI_DRAM_SIZE_2MB      0x01
> -#define XGI_DRAM_SIZE_4MB      0x02
> -#define XGI_DRAM_SIZE_8MB      0x03
> -#define XGI_DRAM_SIZE_16MB     0x04
> -#define XGI_DRAM_SIZE_32MB     0x05
> -#define XGI_DRAM_SIZE_64MB     0x06
> -#define XGI_DRAM_SIZE_128MB    0x07
> -#define XGI_DRAM_SIZE_256MB    0x08
> -
> -/* ------------------- Global Variables ----------------------------- */
> -
> -/* display status */
> -static int XGIfb_crt1off;
> -static int XGIfb_forcecrt1 = -1;
> -
> -/* global flags */
> -static int XGIfb_tvmode;
> -static int enable_dstn;
> -static int XGIfb_ypan = -1;
> -
> -/* TW: CRT2 type (for overriding autodetection) */
> -static int XGIfb_crt2type = -1;
> -/* PR: Tv plug type (for overriding autodetection) */
> -static int XGIfb_tvplug = -1;
> -
> -#define MD_XGI315 1
> -
> -/* mode table */
> -static const struct _XGIbios_mode {
> -	u8 mode_no;
> -	u16 vesa_mode_no_1;  /* "XGI defined" VESA mode number */
> -	u16 vesa_mode_no_2;  /* Real VESA mode numbers */
> -	u16 xres;
> -	u16 yres;
> -	u16 bpp;
> -	u8  chipset;
> -} XGIbios_mode[] = {
> -	{ 0x56, 0x0000, 0x0000,  320,  240, 16, MD_XGI315 },
> -	{ 0x5A, 0x0000, 0x0000,  320,  480,  8, MD_XGI315 },
> -	{ 0x5B, 0x0000, 0x0000,  320,  480, 16, MD_XGI315 },
> -	{ 0x2E, 0x0101, 0x0101,  640,  480,  8, MD_XGI315 },
> -	{ 0x44, 0x0111, 0x0111,  640,  480, 16, MD_XGI315 },
> -	{ 0x62, 0x013a, 0x0112,  640,  480, 32, MD_XGI315 },
> -	{ 0x31, 0x0000, 0x0000,  720,  480,  8, MD_XGI315 },
> -	{ 0x33, 0x0000, 0x0000,  720,  480, 16, MD_XGI315 },
> -	{ 0x35, 0x0000, 0x0000,  720,  480, 32, MD_XGI315 },
> -	{ 0x32, 0x0000, 0x0000,  720,  576,  8, MD_XGI315 },
> -	{ 0x34, 0x0000, 0x0000,  720,  576, 16, MD_XGI315 },
> -	{ 0x36, 0x0000, 0x0000,  720,  576, 32, MD_XGI315 },
> -	{ 0x36, 0x0000, 0x0000,  720,  576, 32, MD_XGI315 },
> -	{ 0x70, 0x0000, 0x0000,  800,  480,  8, MD_XGI315 },
> -	{ 0x7a, 0x0000, 0x0000,  800,  480, 16, MD_XGI315 },
> -	{ 0x76, 0x0000, 0x0000,  800,  480, 32, MD_XGI315 },
> -	{ 0x30, 0x0103, 0x0103,  800,  600,  8, MD_XGI315 },
> -#define DEFAULT_MODE              17 /* index for 800x600x16 */
> -	{ 0x47, 0x0114, 0x0114,  800,  600, 16, MD_XGI315 },
> -	{ 0x63, 0x013b, 0x0115,  800,  600, 32, MD_XGI315 },
> -	{ 0x71, 0x0000, 0x0000, 1024,  576,  8, MD_XGI315 },
> -	{ 0x74, 0x0000, 0x0000, 1024,  576, 16, MD_XGI315 },
> -	{ 0x77, 0x0000, 0x0000, 1024,  576, 32, MD_XGI315 },
> -	{ 0x77, 0x0000, 0x0000, 1024,  576, 32, MD_XGI315 },
> -	{ 0x20, 0x0000, 0x0000, 1024,  600,  8, },
> -	{ 0x21, 0x0000, 0x0000, 1024,  600, 16, },
> -	{ 0x22, 0x0000, 0x0000, 1024,  600, 32, },
> -	{ 0x38, 0x0105, 0x0105, 1024,  768,  8, MD_XGI315 },
> -	{ 0x4A, 0x0117, 0x0117, 1024,  768, 16, MD_XGI315 },
> -	{ 0x64, 0x013c, 0x0118, 1024,  768, 32, MD_XGI315 },
> -	{ 0x64, 0x013c, 0x0118, 1024,  768, 32, MD_XGI315 },
> -	{ 0x23, 0x0000, 0x0000, 1152,  768,  8, },
> -	{ 0x24, 0x0000, 0x0000, 1152,  768, 16, },
> -	{ 0x25, 0x0000, 0x0000, 1152,  768, 32, },
> -	{ 0x79, 0x0000, 0x0000, 1280,  720,  8, MD_XGI315 },
> -	{ 0x75, 0x0000, 0x0000, 1280,  720, 16, MD_XGI315 },
> -	{ 0x78, 0x0000, 0x0000, 1280,  720, 32, MD_XGI315 },
> -	{ 0x23, 0x0000, 0x0000, 1280,  768,  8, MD_XGI315 },
> -	{ 0x24, 0x0000, 0x0000, 1280,  768, 16, MD_XGI315 },
> -	{ 0x25, 0x0000, 0x0000, 1280,  768, 32, MD_XGI315 },
> -	{ 0x7C, 0x0000, 0x0000, 1280,  960,  8, MD_XGI315 },
> -	{ 0x7D, 0x0000, 0x0000, 1280,  960, 16, MD_XGI315 },
> -	{ 0x7E, 0x0000, 0x0000, 1280,  960, 32, MD_XGI315 },
> -	{ 0x3A, 0x0107, 0x0107, 1280, 1024,  8, MD_XGI315 },
> -	{ 0x4D, 0x011a, 0x011a, 1280, 1024, 16, MD_XGI315 },
> -	{ 0x65, 0x013d, 0x011b, 1280, 1024, 32, MD_XGI315 },
> -	{ 0x26, 0x0000, 0x0000, 1400, 1050,  8, MD_XGI315 },
> -	{ 0x27, 0x0000, 0x0000, 1400, 1050, 16, MD_XGI315 },
> -	{ 0x28, 0x0000, 0x0000, 1400, 1050, 32, MD_XGI315 },
> -	{ 0x3C, 0x0130, 0x011c, 1600, 1200,  8, MD_XGI315 },
> -	{ 0x3D, 0x0131, 0x011e, 1600, 1200, 16, MD_XGI315 },
> -	{ 0x66, 0x013e, 0x011f, 1600, 1200, 32, MD_XGI315 },
> -	{ 0x68, 0x013f, 0x0000, 1920, 1440,  8, MD_XGI315 },
> -	{ 0x69, 0x0140, 0x0000, 1920, 1440, 16, MD_XGI315 },
> -	{ 0x6B, 0x0141, 0x0000, 1920, 1440, 32, MD_XGI315 },
> -	{ 0x6c, 0x0000, 0x0000, 2048, 1536,  8, MD_XGI315 },
> -	{ 0x6d, 0x0000, 0x0000, 2048, 1536, 16, MD_XGI315 },
> -	{ 0x6e, 0x0000, 0x0000, 2048, 1536, 32, MD_XGI315 },
> -	{ 0 },
> -};
> -
> -static const unsigned short XGI310paneltype[] = {
> -	 LCD_UNKNOWN,   LCD_800x600, LCD_1024x768, LCD_1280x1024,
> -	 LCD_640x480,  LCD_1024x600, LCD_1152x864,  LCD_1280x960,
> -	LCD_1152x768, LCD_1400x1050, LCD_1280x768, LCD_1600x1200,
> -	LCD_1024x768,  LCD_1024x768, LCD_1024x768};
> -
> -static const struct _XGI_crt2type {
> -	char name[10];
> -	int type_no;
> -	int tvplug_no;
> -} XGI_crt2type[] = {
> -	{"NONE",	0,		-1},
> -	{"LCD",		XGIFB_DISP_LCD,	-1},
> -	{"TV",		XGIFB_DISP_TV,	-1},
> -	{"VGA",		XGIFB_DISP_CRT,	-1},
> -	{"SVIDEO",	XGIFB_DISP_TV,	TVPLUG_SVIDEO},
> -	{"COMPOSITE",	XGIFB_DISP_TV,	TVPLUG_COMPOSITE},
> -	{"SCART",	XGIFB_DISP_TV,	TVPLUG_SCART},
> -	{"none",	0,		-1},
> -	{"lcd",		XGIFB_DISP_LCD,	-1},
> -	{"tv",		XGIFB_DISP_TV,	-1},
> -	{"vga",		XGIFB_DISP_CRT,	-1},
> -	{"svideo",	XGIFB_DISP_TV,	TVPLUG_SVIDEO},
> -	{"composite",	XGIFB_DISP_TV,	TVPLUG_COMPOSITE},
> -	{"scart",	XGIFB_DISP_TV,	TVPLUG_SCART},
> -	{"\0",		-1,		-1}
> -};
> -
> -/* TV standard */
> -static const struct _XGI_tvtype {
> -	char name[6];
> -	int type_no;
> -} XGI_tvtype[] = {
> -	{"PAL",		1},
> -	{"NTSC",	2},
> -	{"pal",		1},
> -	{"ntsc",	2},
> -	{"\0",	       -1}
> -};
> -
> -static const struct _XGI_vrate {
> -	u16 idx;
> -	u16 xres;
> -	u16 yres;
> -	u16 refresh;
> -} XGIfb_vrate[] = {
> -	{1,  640,  480,  60}, {2,  640,  480,  72},
> -	{3,  640,  480,  75}, {4,  640,  480,  85},
> -
> -	{5,  640,  480, 100}, {6,  640,  480, 120},
> -	{7,  640,  480, 160}, {8,  640,  480, 200},
> -
> -	{1,  720,  480,  60},
> -	{1,  720,  576,  58},
> -	{1,  800,  480,  60}, {2,  800,  480,  75}, {3,  800,  480,  85},
> -	{1,  800,  600,  60}, {2,  800,  600,  72}, {3,  800,  600,  75},
> -	{4,  800,  600,  85}, {5,  800,  600, 100},
> -	{6,  800,  600, 120}, {7,  800,  600, 160},
> -
> -	{1, 1024,  768,  60}, {2, 1024,  768,  70}, {3, 1024,  768,  75},
> -	{4, 1024,  768,  85}, {5, 1024,  768, 100}, {6, 1024,  768, 120},
> -	{1, 1024,  576,  60}, {2, 1024,  576,  75}, {3, 1024,  576,  85},
> -	{1, 1024,  600,  60},
> -	{1, 1152,  768,  60},
> -	{1, 1280,  720,  60}, {2, 1280,  720,  75}, {3, 1280,  720,  85},
> -	{1, 1280,  768,  60},
> -	{1, 1280, 1024,  60}, {2, 1280, 1024,  75}, {3, 1280, 1024,  85},
> -	{1, 1280,  960,  70},
> -	{1, 1400, 1050,  60},
> -	{1, 1600, 1200,  60}, {2, 1600, 1200,  65},
> -	{3, 1600, 1200,  70}, {4, 1600, 1200,  75},
> -
> -	{5, 1600, 1200,  85}, {6, 1600, 1200, 100},
> -	{7, 1600, 1200, 120},
> -
> -	{1, 1920, 1440,  60}, {2, 1920, 1440,  65},
> -	{3, 1920, 1440,  70}, {4, 1920, 1440,  75},
> -
> -	{5, 1920, 1440,  85}, {6, 1920, 1440, 100},
> -	{1, 2048, 1536,  60}, {2, 2048, 1536,  65},
> -	{3, 2048, 1536,  70}, {4, 2048, 1536,  75},
> -
> -	{5, 2048, 1536,  85},
> -	{0,    0,    0,   0}
> -};
> -
> -static const struct _XGI_TV_filter {
> -	u8 filter[9][4];
> -} XGI_TV_filter[] = {
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_0 */
> -	    {0x00, 0xE0, 0x10, 0x60},
> -	    {0x00, 0xEE, 0x10, 0x44},
> -	    {0x00, 0xF4, 0x10, 0x38},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xFC, 0xFB, 0x14, 0x2A},
> -	    {0x00, 0x00, 0x10, 0x20},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_1 */
> -	    {0x00, 0xE0, 0x10, 0x60},
> -	    {0x00, 0xEE, 0x10, 0x44},
> -	    {0x00, 0xF4, 0x10, 0x38},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xFC, 0xFB, 0x14, 0x2A},
> -	    {0x00, 0x00, 0x10, 0x20},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_2 */
> -	    {0xF5, 0xEE, 0x1B, 0x44},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xEB, 0x04, 0x25, 0x18},
> -	    {0xF1, 0x05, 0x1F, 0x16},
> -	    {0xF6, 0x06, 0x1A, 0x14},
> -	    {0xFA, 0x06, 0x16, 0x14},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_3 */
> -	    {0xF1, 0x04, 0x1F, 0x18},
> -	    {0xEE, 0x0D, 0x22, 0x06},
> -	    {0xF7, 0x06, 0x19, 0x14},
> -	    {0xF4, 0x0B, 0x1C, 0x0A},
> -	    {0xFA, 0x07, 0x16, 0x12},
> -	    {0xF9, 0x0A, 0x17, 0x0C},
> -	    {0x00, 0x07, 0x10, 0x12},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_4 */
> -	    {0x00, 0xE0, 0x10, 0x60},
> -	    {0x00, 0xEE, 0x10, 0x44},
> -	    {0x00, 0xF4, 0x10, 0x38},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xFC, 0xFB, 0x14, 0x2A},
> -	    {0x00, 0x00, 0x10, 0x20},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_5 */
> -	    {0xF5, 0xEE, 0x1B, 0x44},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xEB, 0x04, 0x25, 0x18},
> -	    {0xF1, 0x05, 0x1F, 0x16},
> -	    {0xF6, 0x06, 0x1A, 0x14},
> -	    {0xFA, 0x06, 0x16, 0x14},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_6 */
> -	    {0xEB, 0x04, 0x25, 0x18},
> -	    {0xE7, 0x0E, 0x29, 0x04},
> -	    {0xEE, 0x0C, 0x22, 0x08},
> -	    {0xF6, 0x0B, 0x1A, 0x0A},
> -	    {0xF9, 0x0A, 0x17, 0x0C},
> -	    {0xFC, 0x0A, 0x14, 0x0C},
> -	    {0x00, 0x08, 0x10, 0x10},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* NTSCFilter_7 */
> -	    {0xEC, 0x02, 0x24, 0x1C},
> -	    {0xF2, 0x04, 0x1E, 0x18},
> -	    {0xEB, 0x15, 0x25, 0xF6},
> -	    {0xF4, 0x10, 0x1C, 0x00},
> -	    {0xF8, 0x0F, 0x18, 0x02},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0x01, 0x06, 0x0F, 0x14},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_0 */
> -	    {0x00, 0xE0, 0x10, 0x60},
> -	    {0x00, 0xEE, 0x10, 0x44},
> -	    {0x00, 0xF4, 0x10, 0x38},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xFC, 0xFB, 0x14, 0x2A},
> -	    {0x00, 0x00, 0x10, 0x20},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_1 */
> -	    {0x00, 0xE0, 0x10, 0x60},
> -	    {0x00, 0xEE, 0x10, 0x44},
> -	    {0x00, 0xF4, 0x10, 0x38},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xFC, 0xFB, 0x14, 0x2A},
> -	    {0x00, 0x00, 0x10, 0x20},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_2 */
> -	    {0xF5, 0xEE, 0x1B, 0x44},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xF1, 0xF7, 0x01, 0x32},
> -	    {0xF5, 0xFB, 0x1B, 0x2A},
> -	    {0xF9, 0xFF, 0x17, 0x22},
> -	    {0xFB, 0x01, 0x15, 0x1E},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_3 */
> -	    {0xF5, 0xFB, 0x1B, 0x2A},
> -	    {0xEE, 0xFE, 0x22, 0x24},
> -	    {0xF3, 0x00, 0x1D, 0x20},
> -	    {0xF9, 0x03, 0x17, 0x1A},
> -	    {0xFB, 0x02, 0x14, 0x1E},
> -	    {0xFB, 0x04, 0x15, 0x18},
> -	    {0x00, 0x06, 0x10, 0x14},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_4 */
> -	    {0x00, 0xE0, 0x10, 0x60},
> -	    {0x00, 0xEE, 0x10, 0x44},
> -	    {0x00, 0xF4, 0x10, 0x38},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xFC, 0xFB, 0x14, 0x2A},
> -	    {0x00, 0x00, 0x10, 0x20},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_5 */
> -	    {0xF5, 0xEE, 0x1B, 0x44},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xF1, 0xF7, 0x1F, 0x32},
> -	    {0xF5, 0xFB, 0x1B, 0x2A},
> -	    {0xF9, 0xFF, 0x17, 0x22},
> -	    {0xFB, 0x01, 0x15, 0x1E},
> -	    {0x00, 0x04, 0x10, 0x18},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_6 */
> -	    {0xF5, 0xEE, 0x1B, 0x2A},
> -	    {0xEE, 0xFE, 0x22, 0x24},
> -	    {0xF3, 0x00, 0x1D, 0x20},
> -	    {0xF9, 0x03, 0x17, 0x1A},
> -	    {0xFB, 0x02, 0x14, 0x1E},
> -	    {0xFB, 0x04, 0x15, 0x18},
> -	    {0x00, 0x06, 0x10, 0x14},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } },
> -	{ { {0x00, 0x00, 0x00, 0x40},  /* PALFilter_7 */
> -	    {0xF5, 0xEE, 0x1B, 0x44},
> -	    {0xF8, 0xF4, 0x18, 0x38},
> -	    {0xFC, 0xFB, 0x14, 0x2A},
> -	    {0xEB, 0x05, 0x25, 0x16},
> -	    {0xF1, 0x05, 0x1F, 0x16},
> -	    {0xFA, 0x07, 0x16, 0x12},
> -	    {0x00, 0x07, 0x10, 0x12},
> -	    {0xFF, 0xFF, 0xFF, 0xFF} } }
> -};
> -
> -static int           filter = -1;
> -
> -#endif
> diff --git a/drivers/staging/xgifb/XGI_main_26.c b/drivers/staging/xgifb/XGI_main_26.c
> deleted file mode 100644
> index 217c6bb82c0d..000000000000
> --- a/drivers/staging/xgifb/XGI_main_26.c
> +++ /dev/null
> @@ -1,2084 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -/*
> - * XG20, XG21, XG40, XG42 frame buffer device
> - * for Linux kernels  2.5.x, 2.6.x
> - * Base on TW's sis fbdev code.
> - */
> -
> -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> -
> -#include <linux/sizes.h>
> -#include <linux/module.h>
> -#include <linux/pci.h>
> -
> -#include "XGI_main.h"
> -#include "vb_init.h"
> -#include "vb_util.h"
> -#include "vb_setmode.h"
> -
> -#define Index_CR_GPIO_Reg1 0x48
> -#define Index_CR_GPIO_Reg3 0x4a
> -
> -#define GPIOG_EN    BIT(6)
> -#define GPIOG_READ  BIT(1)
> -
> -static char *forcecrt2type;
> -static char *mode;
> -static int vesa = -1;
> -static unsigned int refresh_rate;
> -
> -/* -------------------- Macro definitions ---------------------------- */
> -
> -#ifdef DEBUG
> -static void dumpVGAReg(struct xgifb_video_info *xgifb_info)
> -{
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	u8 i, reg;
> -
> -	xgifb_reg_set(vb->P3c4, 0x05, 0x86);
> -
> -	for (i = 0; i < 0x4f; i++) {
> -		reg = xgifb_reg_get(vb->P3c4, i);
> -		pr_debug("o 3c4 %x\n", i);
> -		pr_debug("i 3c5 => %x\n", reg);
> -	}
> -
> -	for (i = 0; i < 0xF0; i++) {
> -		reg = xgifb_reg_get(vb->P3d4, i);
> -		pr_debug("o 3d4 %x\n", i);
> -		pr_debug("i 3d5 => %x\n", reg);
> -	}
> -}
> -#else
> -static inline void dumpVGAReg(struct xgifb_video_info *xgifb_info)
> -{
> -}
> -#endif
> -
> -/* --------------- Hardware Access Routines -------------------------- */
> -
> -static int XGIfb_mode_rate_to_dclock(struct vb_device_info *XGI_Pr,
> -				     struct xgi_hw_device_info *HwDeviceExtension,
> -				     unsigned char modeno)
> -{
> -	unsigned short ModeNo = modeno;
> -	unsigned short ModeIdIndex = 0, ClockIndex = 0;
> -	unsigned short RefreshRateTableIndex = 0;
> -
> -	InitTo330Pointer(HwDeviceExtension->jChipType, XGI_Pr);
> -
> -	XGI_SearchModeID(ModeNo, &ModeIdIndex);
> -
> -	RefreshRateTableIndex = XGI_GetRatePtrCRT2(HwDeviceExtension, ModeNo,
> -						   ModeIdIndex, XGI_Pr);
> -
> -	ClockIndex = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
> -
> -	return XGI_VCLKData[ClockIndex].CLOCK * 1000;
> -}
> -
> -static int XGIfb_mode_rate_to_ddata(struct vb_device_info *XGI_Pr,
> -				    struct xgi_hw_device_info *HwDeviceExtension,
> -				    unsigned char modeno, u32 *left_margin,
> -				    u32 *right_margin, u32 *upper_margin,
> -				    u32 *lower_margin, u32 *hsync_len,
> -				    u32 *vsync_len, u32 *sync, u32 *vmode)
> -{
> -	unsigned short ModeNo = modeno;
> -	unsigned short ModeIdIndex, index = 0;
> -	unsigned short RefreshRateTableIndex = 0;
> -
> -	unsigned short VRE, VBE, VRS, VDE;
> -	unsigned short HRE, HBE, HRS, HDE;
> -	unsigned char sr_data, cr_data, cr_data2;
> -	int B, C, D, F, temp, j;
> -
> -	InitTo330Pointer(HwDeviceExtension->jChipType, XGI_Pr);
> -	if (!XGI_SearchModeID(ModeNo, &ModeIdIndex))
> -		return 0;
> -	RefreshRateTableIndex = XGI_GetRatePtrCRT2(HwDeviceExtension, ModeNo,
> -						   ModeIdIndex, XGI_Pr);
> -	index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
> -
> -	sr_data = XGI_CRT1Table[index].CR[5];
> -
> -	HDE = XGI330_RefIndex[RefreshRateTableIndex].XRes >> 3;
> -
> -	cr_data = XGI_CRT1Table[index].CR[3];
> -
> -	/* Horizontal retrace (=sync) start */
> -	HRS = (cr_data & 0xff) | ((unsigned short)(sr_data & 0xC0) << 2);
> -	F = HRS - HDE - 3;
> -
> -	sr_data = XGI_CRT1Table[index].CR[6];
> -
> -	cr_data = XGI_CRT1Table[index].CR[2];
> -
> -	cr_data2 = XGI_CRT1Table[index].CR[4];
> -
> -	/* Horizontal blank end */
> -	HBE = (cr_data & 0x1f) | ((unsigned short)(cr_data2 & 0x80) >> 2)
> -			| ((unsigned short)(sr_data & 0x03) << 6);
> -
> -	/* Horizontal retrace (=sync) end */
> -	HRE = (cr_data2 & 0x1f) | ((sr_data & 0x04) << 3);
> -
> -	temp = HBE - ((HDE - 1) & 255);
> -	B = (temp > 0) ? temp : (temp + 256);
> -
> -	temp = HRE - ((HDE + F + 3) & 63);
> -	C = (temp > 0) ? temp : (temp + 64);
> -
> -	D = B - F - C;
> -
> -	*left_margin = D * 8;
> -	*right_margin = F * 8;
> -	*hsync_len = C * 8;
> -
> -	sr_data = XGI_CRT1Table[index].CR[14];
> -
> -	cr_data2 = XGI_CRT1Table[index].CR[9];
> -
> -	VDE = XGI330_RefIndex[RefreshRateTableIndex].YRes;
> -
> -	cr_data = XGI_CRT1Table[index].CR[10];
> -
> -	/* Vertical retrace (=sync) start */
> -	VRS = (cr_data & 0xff) | ((unsigned short)(cr_data2 & 0x04) << 6)
> -			| ((unsigned short)(cr_data2 & 0x80) << 2)
> -			| ((unsigned short)(sr_data & 0x08) << 7);
> -	F = VRS + 1 - VDE;
> -
> -	cr_data = XGI_CRT1Table[index].CR[13];
> -
> -	/* Vertical blank end */
> -	VBE = (cr_data & 0xff) | ((unsigned short)(sr_data & 0x10) << 4);
> -	temp = VBE - ((VDE - 1) & 511);
> -	B = (temp > 0) ? temp : (temp + 512);
> -
> -	cr_data = XGI_CRT1Table[index].CR[11];
> -
> -	/* Vertical retrace (=sync) end */
> -	VRE = (cr_data & 0x0f) | ((sr_data & 0x20) >> 1);
> -	temp = VRE - ((VDE + F - 1) & 31);
> -	C = (temp > 0) ? temp : (temp + 32);
> -
> -	D = B - F - C;
> -
> -	*upper_margin = D;
> -	*lower_margin = F;
> -	*vsync_len = C;
> -
> -	if (XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag & 0x8000)
> -		*sync &= ~FB_SYNC_VERT_HIGH_ACT;
> -	else
> -		*sync |= FB_SYNC_VERT_HIGH_ACT;
> -
> -	if (XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag & 0x4000)
> -		*sync &= ~FB_SYNC_HOR_HIGH_ACT;
> -	else
> -		*sync |= FB_SYNC_HOR_HIGH_ACT;
> -
> -	*vmode = FB_VMODE_NONINTERLACED;
> -	if (XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag & 0x0080) {
> -		*vmode = FB_VMODE_INTERLACED;
> -	} else {
> -		j = 0;
> -		while (XGI330_EModeIDTable[j].Ext_ModeID != 0xff) {
> -			if (XGI330_EModeIDTable[j].Ext_ModeID ==
> -			    XGI330_RefIndex[RefreshRateTableIndex].ModeID) {
> -				if (XGI330_EModeIDTable[j].Ext_ModeFlag &
> -				    DoubleScanMode) {
> -					*vmode = FB_VMODE_DOUBLE;
> -				}
> -				break;
> -			}
> -			j++;
> -		}
> -	}
> -
> -	return 1;
> -}
> -
> -void XGIRegInit(struct vb_device_info *XGI_Pr, unsigned long BaseAddr)
> -{
> -	XGI_Pr->P3c4 = BaseAddr + 0x14;
> -	XGI_Pr->P3d4 = BaseAddr + 0x24;
> -	XGI_Pr->P3c0 = BaseAddr + 0x10;
> -	XGI_Pr->P3ce = BaseAddr + 0x1e;
> -	XGI_Pr->P3c2 = BaseAddr + 0x12;
> -	XGI_Pr->P3cc = BaseAddr + 0x1c;
> -	XGI_Pr->P3ca = BaseAddr + 0x1a;
> -	XGI_Pr->P3c6 = BaseAddr + 0x16;
> -	XGI_Pr->P3c7 = BaseAddr + 0x17;
> -	XGI_Pr->P3c8 = BaseAddr + 0x18;
> -	XGI_Pr->P3c9 = BaseAddr + 0x19;
> -	XGI_Pr->P3da = BaseAddr + 0x2A;
> -	XGI_Pr->Part0Port = BaseAddr + XGI_CRT2_PORT_00;
> -	/* Digital video interface registers (LCD) */
> -	XGI_Pr->Part1Port = BaseAddr + SIS_CRT2_PORT_04;
> -	/* 301 TV Encoder registers */
> -	XGI_Pr->Part2Port = BaseAddr + SIS_CRT2_PORT_10;
> -	/* 301 Macrovision registers */
> -	XGI_Pr->Part3Port = BaseAddr + SIS_CRT2_PORT_12;
> -	/* 301 VGA2 (and LCD) registers */
> -	XGI_Pr->Part4Port = BaseAddr + SIS_CRT2_PORT_14;
> -	/* 301 palette address port registers */
> -	XGI_Pr->Part5Port = BaseAddr + SIS_CRT2_PORT_14 + 2;
> -}
> -
> -/* ------------------ Internal helper routines ----------------- */
> -
> -static int XGIfb_GetXG21DefaultLVDSModeIdx(struct xgifb_video_info *xgifb_info)
> -{
> -	int i = 0;
> -
> -	while ((XGIbios_mode[i].mode_no != 0) &&
> -	       (XGIbios_mode[i].xres <= xgifb_info->lvds_data.LVDSHDE)) {
> -		if ((XGIbios_mode[i].xres == xgifb_info->lvds_data.LVDSHDE) &&
> -		    (XGIbios_mode[i].yres == xgifb_info->lvds_data.LVDSVDE) &&
> -		    (XGIbios_mode[i].bpp == 8)) {
> -			return i;
> -		}
> -		i++;
> -	}
> -
> -	return -1;
> -}
> -
> -static void XGIfb_search_mode(struct xgifb_video_info *xgifb_info,
> -			      const char *name)
> -{
> -	unsigned int xres;
> -	unsigned int yres;
> -	unsigned int bpp;
> -	int i;
> -
> -	if (sscanf(name, "%ux%ux%u", &xres, &yres, &bpp) != 3)
> -		goto invalid_mode;
> -
> -	if (bpp == 24)
> -		bpp = 32; /* That's for people who mix up color and fb depth. */
> -
> -	for (i = 0; XGIbios_mode[i].mode_no != 0; i++)
> -		if (XGIbios_mode[i].xres == xres &&
> -		    XGIbios_mode[i].yres == yres &&
> -		    XGIbios_mode[i].bpp == bpp) {
> -			xgifb_info->mode_idx = i;
> -			return;
> -		}
> -invalid_mode:
> -	pr_info("Invalid mode '%s'\n", name);
> -}
> -
> -static void XGIfb_search_vesamode(struct xgifb_video_info *xgifb_info,
> -				  unsigned int vesamode)
> -{
> -	int i = 0;
> -
> -	if (vesamode == 0)
> -		goto invalid;
> -
> -	vesamode &= 0x1dff; /* Clean VESA mode number from other flags */
> -
> -	while (XGIbios_mode[i].mode_no != 0) {
> -		if ((XGIbios_mode[i].vesa_mode_no_1 == vesamode) ||
> -		    (XGIbios_mode[i].vesa_mode_no_2 == vesamode)) {
> -			xgifb_info->mode_idx = i;
> -			return;
> -		}
> -		i++;
> -	}
> -
> -invalid:
> -	pr_info("Invalid VESA mode 0x%x'\n", vesamode);
> -}
> -
> -static int XGIfb_validate_mode(struct xgifb_video_info *xgifb_info, int myindex)
> -{
> -	u16 xres, yres;
> -	struct xgi_hw_device_info *hw_info = &xgifb_info->hw_info;
> -	unsigned long required_mem;
> -
> -	if (xgifb_info->chip == XG21) {
> -		if (xgifb_info->display2 == XGIFB_DISP_LCD) {
> -			xres = xgifb_info->lvds_data.LVDSHDE;
> -			yres = xgifb_info->lvds_data.LVDSVDE;
> -			if (XGIbios_mode[myindex].xres > xres)
> -				return -1;
> -			if (XGIbios_mode[myindex].yres > yres)
> -				return -1;
> -			if ((XGIbios_mode[myindex].xres < xres) &&
> -			    (XGIbios_mode[myindex].yres < yres)) {
> -				if (XGIbios_mode[myindex].bpp > 8)
> -					return -1;
> -			}
> -		}
> -		goto check_memory;
> -	}
> -
> -	/* FIXME: for now, all is valid on XG27 */
> -	if (xgifb_info->chip == XG27)
> -		goto check_memory;
> -
> -	if (!(XGIbios_mode[myindex].chipset & MD_XGI315))
> -		return -1;
> -
> -	switch (xgifb_info->display2) {
> -	case XGIFB_DISP_LCD:
> -		switch (hw_info->ulCRT2LCDType) {
> -		case LCD_640x480:
> -			xres = 640;
> -			yres = 480;
> -			break;
> -		case LCD_800x600:
> -			xres = 800;
> -			yres = 600;
> -			break;
> -		case LCD_1024x600:
> -			xres = 1024;
> -			yres = 600;
> -			break;
> -		case LCD_1024x768:
> -			xres = 1024;
> -			yres = 768;
> -			break;
> -		case LCD_1152x768:
> -			xres = 1152;
> -			yres = 768;
> -			break;
> -		case LCD_1280x960:
> -			xres = 1280;
> -			yres = 960;
> -			break;
> -		case LCD_1280x768:
> -			xres = 1280;
> -			yres = 768;
> -			break;
> -		case LCD_1280x1024:
> -			xres = 1280;
> -			yres = 1024;
> -			break;
> -		case LCD_1400x1050:
> -			xres = 1400;
> -			yres = 1050;
> -			break;
> -		case LCD_1600x1200:
> -			xres = 1600;
> -			yres = 1200;
> -			break;
> -		default:
> -			xres = 0;
> -			yres = 0;
> -			break;
> -		}
> -		if (XGIbios_mode[myindex].xres > xres)
> -			return -1;
> -		if (XGIbios_mode[myindex].yres > yres)
> -			return -1;
> -		if ((hw_info->ulExternalChip == 0x01) || /* LVDS */
> -		    (hw_info->ulExternalChip == 0x05)) { /* LVDS+Chrontel */
> -			switch (XGIbios_mode[myindex].xres) {
> -			case 512:
> -				if (XGIbios_mode[myindex].yres != 512)
> -					return -1;
> -				if (hw_info->ulCRT2LCDType == LCD_1024x600)
> -					return -1;
> -				break;
> -			case 640:
> -				if ((XGIbios_mode[myindex].yres != 400) &&
> -				    (XGIbios_mode[myindex].yres	!= 480))
> -					return -1;
> -				break;
> -			case 800:
> -				if (XGIbios_mode[myindex].yres != 600)
> -					return -1;
> -				break;
> -			case 1024:
> -				if ((XGIbios_mode[myindex].yres != 600) &&
> -				    (XGIbios_mode[myindex].yres != 768))
> -					return -1;
> -				if ((XGIbios_mode[myindex].yres == 600) &&
> -				    (hw_info->ulCRT2LCDType != LCD_1024x600))
> -					return -1;
> -				break;
> -			case 1152:
> -				if ((XGIbios_mode[myindex].yres) != 768)
> -					return -1;
> -				if (hw_info->ulCRT2LCDType != LCD_1152x768)
> -					return -1;
> -				break;
> -			case 1280:
> -				if ((XGIbios_mode[myindex].yres != 768) &&
> -				    (XGIbios_mode[myindex].yres != 1024))
> -					return -1;
> -				if ((XGIbios_mode[myindex].yres == 768) &&
> -				    (hw_info->ulCRT2LCDType != LCD_1280x768))
> -					return -1;
> -				break;
> -			case 1400:
> -				if (XGIbios_mode[myindex].yres != 1050)
> -					return -1;
> -				break;
> -			case 1600:
> -				if (XGIbios_mode[myindex].yres != 1200)
> -					return -1;
> -				break;
> -			default:
> -				return -1;
> -			}
> -		} else {
> -			switch (XGIbios_mode[myindex].xres) {
> -			case 512:
> -				if (XGIbios_mode[myindex].yres != 512)
> -					return -1;
> -				break;
> -			case 640:
> -				if ((XGIbios_mode[myindex].yres != 400) &&
> -				    (XGIbios_mode[myindex].yres != 480))
> -					return -1;
> -				break;
> -			case 800:
> -				if (XGIbios_mode[myindex].yres != 600)
> -					return -1;
> -				break;
> -			case 1024:
> -				if (XGIbios_mode[myindex].yres != 768)
> -					return -1;
> -				break;
> -			case 1280:
> -				if ((XGIbios_mode[myindex].yres != 960) &&
> -				    (XGIbios_mode[myindex].yres != 1024))
> -					return -1;
> -				if (XGIbios_mode[myindex].yres == 960) {
> -					if (hw_info->ulCRT2LCDType ==
> -					    LCD_1400x1050)
> -						return -1;
> -				}
> -				break;
> -			case 1400:
> -				if (XGIbios_mode[myindex].yres != 1050)
> -					return -1;
> -				break;
> -			case 1600:
> -				if (XGIbios_mode[myindex].yres != 1200)
> -					return -1;
> -				break;
> -			default:
> -				return -1;
> -			}
> -		}
> -		break;
> -	case XGIFB_DISP_TV:
> -		switch (XGIbios_mode[myindex].xres) {
> -		case 512:
> -		case 640:
> -		case 800:
> -			break;
> -		case 720:
> -			if (xgifb_info->TV_type == TVMODE_NTSC) {
> -				if (XGIbios_mode[myindex].yres != 480)
> -					return -1;
> -			} else if (xgifb_info->TV_type == TVMODE_PAL) {
> -				if (XGIbios_mode[myindex].yres != 576)
> -					return -1;
> -			}
> -			/* LVDS/CHRONTEL does not support 720 */
> -			if (xgifb_info->hasVB == HASVB_LVDS_CHRONTEL ||
> -			    xgifb_info->hasVB == HASVB_CHRONTEL) {
> -				return -1;
> -			}
> -			break;
> -		case 1024:
> -			if (xgifb_info->TV_type == TVMODE_NTSC) {
> -				if (XGIbios_mode[myindex].bpp == 32)
> -					return -1;
> -			}
> -			break;
> -		default:
> -			return -1;
> -		}
> -		break;
> -	case XGIFB_DISP_CRT:
> -		if (XGIbios_mode[myindex].xres > 1280)
> -			return -1;
> -		break;
> -	case XGIFB_DISP_NONE:
> -		break;
> -	}
> -
> -check_memory:
> -	required_mem = XGIbios_mode[myindex].xres * XGIbios_mode[myindex].yres *
> -		       XGIbios_mode[myindex].bpp / 8;
> -	if (required_mem > xgifb_info->video_size)
> -		return -1;
> -	return myindex;
> -}
> -
> -static void XGIfb_search_crt2type(const char *name)
> -{
> -	int i = 0;
> -
> -	if (!name)
> -		return;
> -
> -	while (XGI_crt2type[i].type_no != -1) {
> -		if (!strcmp(name, XGI_crt2type[i].name)) {
> -			XGIfb_crt2type = XGI_crt2type[i].type_no;
> -			XGIfb_tvplug = XGI_crt2type[i].tvplug_no;
> -			break;
> -		}
> -		i++;
> -	}
> -	if (XGIfb_crt2type < 0)
> -		pr_info("Invalid CRT2 type: %s\n", name);
> -}
> -
> -static u8 XGIfb_search_refresh_rate(struct xgifb_video_info *xgifb_info,
> -				    unsigned int rate)
> -{
> -	u16 xres, yres;
> -	int i = 0;
> -
> -	xres = XGIbios_mode[xgifb_info->mode_idx].xres;
> -	yres = XGIbios_mode[xgifb_info->mode_idx].yres;
> -
> -	xgifb_info->rate_idx = 0;
> -
> -	while (XGIfb_vrate[i].idx != 0 && XGIfb_vrate[i].xres <= xres) {
> -		/* Skip values with xres or yres less than specified */
> -		if ((XGIfb_vrate[i].yres != yres) ||
> -		    (XGIfb_vrate[i].xres != xres)) {
> -			i++;
> -			continue;
> -		}
> -		if (XGIfb_vrate[i].refresh == rate) {
> -			xgifb_info->rate_idx = XGIfb_vrate[i].idx;
> -			break;
> -		} else if (XGIfb_vrate[i].refresh > rate) {
> -			if (XGIfb_vrate[i].refresh - rate <= 3) {
> -				pr_debug("Adjusting rate from %d up to %d\n",
> -					rate, XGIfb_vrate[i].refresh);
> -				xgifb_info->rate_idx = XGIfb_vrate[i].idx;
> -				xgifb_info->refresh_rate =
> -					XGIfb_vrate[i].refresh;
> -			} else if ((XGIfb_vrate[i].idx != 1) &&
> -				   (rate - XGIfb_vrate[i - 1].refresh <= 2)) {
> -				pr_debug("Adjusting rate from %d down to %d\n",
> -					rate, XGIfb_vrate[i - 1].refresh);
> -				xgifb_info->rate_idx = XGIfb_vrate[i - 1].idx;
> -				xgifb_info->refresh_rate =
> -					XGIfb_vrate[i - 1].refresh;
> -			}
> -			break;
> -		} else if (rate - XGIfb_vrate[i].refresh <= 2) {
> -			pr_debug("Adjusting rate from %d down to %d\n",
> -				rate, XGIfb_vrate[i].refresh);
> -			xgifb_info->rate_idx = XGIfb_vrate[i].idx;
> -			break;
> -		}
> -		i++;
> -	}
> -
> -	if (xgifb_info->rate_idx > 0)
> -		return xgifb_info->rate_idx;
> -	pr_info("Unsupported rate %d for %dx%d\n",
> -		rate, xres, yres);
> -	return 0;
> -}
> -
> -static void XGIfb_search_tvstd(const char *name)
> -{
> -	int i = 0;
> -
> -	if (!name)
> -		return;
> -
> -	while (XGI_tvtype[i].type_no != -1) {
> -		if (!strcmp(name, XGI_tvtype[i].name)) {
> -			XGIfb_tvmode = XGI_tvtype[i].type_no;
> -			break;
> -		}
> -		i++;
> -	}
> -}
> -
> -/* ----------- FBDev related routines for all series ----------- */
> -
> -static void XGIfb_bpp_to_var(struct xgifb_video_info *xgifb_info,
> -			     struct fb_var_screeninfo *var)
> -{
> -	switch (var->bits_per_pixel) {
> -	case 8:
> -		var->red.offset = 0;
> -		var->green.offset = 0;
> -		var->blue.offset = 0;
> -		var->red.length = 6;
> -		var->green.length = 6;
> -		var->blue.length = 6;
> -		xgifb_info->video_cmap_len = 256;
> -		break;
> -	case 16:
> -		var->red.offset = 11;
> -		var->red.length = 5;
> -		var->green.offset = 5;
> -		var->green.length = 6;
> -		var->blue.offset = 0;
> -		var->blue.length = 5;
> -		var->transp.offset = 0;
> -		var->transp.length = 0;
> -		xgifb_info->video_cmap_len = 16;
> -		break;
> -	case 32:
> -		var->red.offset = 16;
> -		var->red.length = 8;
> -		var->green.offset = 8;
> -		var->green.length = 8;
> -		var->blue.offset = 0;
> -		var->blue.length = 8;
> -		var->transp.offset = 24;
> -		var->transp.length = 8;
> -		xgifb_info->video_cmap_len = 16;
> -		break;
> -	}
> -}
> -
> -/* --------------------- SetMode routines ------------------------- */
> -
> -static void XGIfb_pre_setmode(struct xgifb_video_info *xgifb_info)
> -{
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	u8 cr30 = 0, cr31 = 0;
> -
> -	cr31 = xgifb_reg_get(vb->P3d4, 0x31);
> -	cr31 &= ~0x60;
> -
> -	switch (xgifb_info->display2) {
> -	case XGIFB_DISP_CRT:
> -		cr30 = SIS_VB_OUTPUT_CRT2 | SIS_SIMULTANEOUS_VIEW_ENABLE;
> -		cr31 |= SIS_DRIVER_MODE;
> -		break;
> -	case XGIFB_DISP_LCD:
> -		cr30 = SIS_VB_OUTPUT_LCD | SIS_SIMULTANEOUS_VIEW_ENABLE;
> -		cr31 |= SIS_DRIVER_MODE;
> -		break;
> -	case XGIFB_DISP_TV:
> -		if (xgifb_info->TV_type == TVMODE_HIVISION)
> -			cr30 = SIS_VB_OUTPUT_HIVISION
> -					| SIS_SIMULTANEOUS_VIEW_ENABLE;
> -		else if (xgifb_info->TV_plug == TVPLUG_SVIDEO)
> -			cr30 = SIS_VB_OUTPUT_SVIDEO
> -					| SIS_SIMULTANEOUS_VIEW_ENABLE;
> -		else if (xgifb_info->TV_plug == TVPLUG_COMPOSITE)
> -			cr30 = SIS_VB_OUTPUT_COMPOSITE
> -					| SIS_SIMULTANEOUS_VIEW_ENABLE;
> -		else if (xgifb_info->TV_plug == TVPLUG_SCART)
> -			cr30 = SIS_VB_OUTPUT_SCART
> -					| SIS_SIMULTANEOUS_VIEW_ENABLE;
> -		cr31 |= SIS_DRIVER_MODE;
> -
> -		if (XGIfb_tvmode == 1 || xgifb_info->TV_type == TVMODE_PAL)
> -			cr31 |= 0x01;
> -		else
> -			cr31 &= ~0x01;
> -		break;
> -	default: /* disable CRT2 */
> -		cr30 = 0x00;
> -		cr31 |= (SIS_DRIVER_MODE | SIS_VB_OUTPUT_DISABLE);
> -	}
> -
> -	xgifb_reg_set(vb->P3d4, IND_XGI_SCRATCH_REG_CR30, cr30);
> -	xgifb_reg_set(vb->P3d4, IND_XGI_SCRATCH_REG_CR31, cr31);
> -	xgifb_reg_set(vb->P3d4, IND_XGI_SCRATCH_REG_CR33,
> -		      (xgifb_info->rate_idx & 0x0F));
> -}
> -
> -static void XGIfb_post_setmode(struct xgifb_video_info *xgifb_info)
> -{
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	u8 reg;
> -	unsigned char doit = 1;
> -
> -	if (xgifb_info->video_bpp == 8) {
> -		/*
> -		 * We can't switch off CRT1 on LVDS/Chrontel
> -		 * in 8bpp Modes
> -		 */
> -		if ((xgifb_info->hasVB == HASVB_LVDS) ||
> -		    (xgifb_info->hasVB == HASVB_LVDS_CHRONTEL)) {
> -			doit = 0;
> -		}
> -		/*
> -		 * We can't switch off CRT1 on 301B-DH
> -		 * in 8bpp Modes if using LCD
> -		 */
> -		if (xgifb_info->display2 == XGIFB_DISP_LCD)
> -			doit = 0;
> -	}
> -
> -	/* We can't switch off CRT1 if bridge is in slave mode */
> -	if (xgifb_info->hasVB != HASVB_NONE) {
> -		reg = xgifb_reg_get(vb->Part1Port, 0x00);
> -
> -		if ((reg & 0x50) == 0x10)
> -			doit = 0;
> -
> -	} else {
> -		XGIfb_crt1off = 0;
> -	}
> -
> -	reg = xgifb_reg_get(vb->P3d4, 0x17);
> -	if ((XGIfb_crt1off) && (doit))
> -		reg &= ~0x80;
> -	else
> -		reg |= 0x80;
> -	xgifb_reg_set(vb->P3d4, 0x17, reg);
> -
> -	xgifb_reg_and(vb->P3c4, IND_SIS_RAMDAC_CONTROL, ~0x04);
> -
> -	if (xgifb_info->display2 == XGIFB_DISP_TV &&
> -	    xgifb_info->hasVB == HASVB_301) {
> -		reg = xgifb_reg_get(vb->Part4Port, 0x01);
> -
> -		if (reg < 0xB0) { /* Set filter for XGI301 */
> -			int filter_tb;
> -
> -			switch (xgifb_info->video_width) {
> -			case 320:
> -				filter_tb = (xgifb_info->TV_type ==
> -					     TVMODE_NTSC) ? 4 : 12;
> -				break;
> -			case 640:
> -				filter_tb = (xgifb_info->TV_type ==
> -					     TVMODE_NTSC) ? 5 : 13;
> -				break;
> -			case 720:
> -				filter_tb = (xgifb_info->TV_type ==
> -					     TVMODE_NTSC) ? 6 : 14;
> -				break;
> -			case 800:
> -				filter_tb = (xgifb_info->TV_type ==
> -					     TVMODE_NTSC) ? 7 : 15;
> -				break;
> -			default:
> -				filter_tb = 0;
> -				filter = -1;
> -				break;
> -			}
> -			xgifb_reg_or(vb->Part1Port, SIS_CRT2_WENABLE_315, 0x01);
> -
> -			if (xgifb_info->TV_type == TVMODE_NTSC) {
> -				xgifb_reg_and(vb->Part2Port, 0x3a, 0x1f);
> -
> -				if (xgifb_info->TV_plug == TVPLUG_SVIDEO) {
> -					xgifb_reg_and(vb->Part2Port, 0x30, 0xdf);
> -
> -				} else if (xgifb_info->TV_plug
> -						== TVPLUG_COMPOSITE) {
> -					xgifb_reg_or(vb->Part2Port, 0x30, 0x20);
> -
> -					switch (xgifb_info->video_width) {
> -					case 640:
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x35,
> -							      0xEB);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x36,
> -							      0x04);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x37,
> -							      0x25);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x38,
> -							      0x18);
> -						break;
> -					case 720:
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x35,
> -							      0xEE);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x36,
> -							      0x0C);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x37,
> -							      0x22);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x38,
> -							      0x08);
> -						break;
> -					case 800:
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x35,
> -							      0xEB);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x36,
> -							      0x15);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x37,
> -							      0x25);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x38,
> -							      0xF6);
> -						break;
> -					}
> -				}
> -
> -			} else if (xgifb_info->TV_type == TVMODE_PAL) {
> -				xgifb_reg_and(vb->Part2Port, 0x3A, 0x1F);
> -
> -				if (xgifb_info->TV_plug == TVPLUG_SVIDEO) {
> -					xgifb_reg_and(vb->Part2Port, 0x30, 0xDF);
> -
> -				} else if (xgifb_info->TV_plug
> -						== TVPLUG_COMPOSITE) {
> -					xgifb_reg_or(vb->Part2Port, 0x30, 0x20);
> -
> -					switch (xgifb_info->video_width) {
> -					case 640:
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x35,
> -							      0xF1);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x36,
> -							      0xF7);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x37,
> -							      0x1F);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x38,
> -							      0x32);
> -						break;
> -					case 720:
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x35,
> -							      0xF3);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x36,
> -							      0x00);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x37,
> -							      0x1D);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x38,
> -							      0x20);
> -						break;
> -					case 800:
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x35,
> -							      0xFC);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x36,
> -							      0xFB);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x37,
> -							      0x14);
> -						xgifb_reg_set(vb->Part2Port,
> -							      0x38,
> -							      0x2A);
> -						break;
> -					}
> -				}
> -			}
> -
> -			if ((filter >= 0) && (filter <= 7)) {
> -				const u8 *f = XGI_TV_filter[filter_tb].filter[filter];
> -
> -				pr_debug("FilterTable[%d]-%d: %*ph\n",
> -					 filter_tb, filter, 4, f);
> -				xgifb_reg_set(vb->Part2Port, 0x35, f[0]);
> -				xgifb_reg_set(vb->Part2Port, 0x36, f[1]);
> -				xgifb_reg_set(vb->Part2Port, 0x37, f[2]);
> -				xgifb_reg_set(vb->Part2Port, 0x38, f[3]);
> -			}
> -		}
> -	}
> -}
> -
> -static int XGIfb_do_set_var(struct fb_var_screeninfo *var, int isactive,
> -			    struct fb_info *info)
> -{
> -	struct xgifb_video_info *xgifb_info = info->par;
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	struct xgi_hw_device_info *hw_info = &xgifb_info->hw_info;
> -	unsigned int htotal = var->left_margin + var->xres + var->right_margin
> -			+ var->hsync_len;
> -	unsigned int vtotal = var->upper_margin + var->yres + var->lower_margin
> -			+ var->vsync_len;
> -#if defined(__BIG_ENDIAN)
> -	u8 cr_data;
> -#endif
> -	unsigned int drate = 0, hrate = 0;
> -	int found_mode = 0;
> -	int old_mode;
> -
> -	info->var.xres_virtual = var->xres_virtual;
> -	info->var.yres_virtual = var->yres_virtual;
> -	info->var.bits_per_pixel = var->bits_per_pixel;
> -
> -	if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_NONINTERLACED)
> -		vtotal <<= 1;
> -	else if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE)
> -		vtotal <<= 2;
> -
> -	if (!htotal || !vtotal) {
> -		pr_debug("Invalid 'var' information\n");
> -		return -EINVAL;
> -	}
> -	pr_debug("var->pixclock=%d, htotal=%d, vtotal=%d\n",
> -		 var->pixclock, htotal, vtotal);
> -
> -	if (var->pixclock) {
> -		drate = 1000000000 / var->pixclock;
> -		hrate = (drate * 1000) / htotal;
> -		xgifb_info->refresh_rate = (unsigned int)(hrate * 2
> -				/ vtotal);
> -	} else {
> -		xgifb_info->refresh_rate = 60;
> -	}
> -
> -	pr_debug("Change mode to %dx%dx%d-%dHz\n",
> -		 var->xres, var->yres, var->bits_per_pixel,
> -		 xgifb_info->refresh_rate);
> -
> -	old_mode = xgifb_info->mode_idx;
> -	xgifb_info->mode_idx = 0;
> -
> -	while ((XGIbios_mode[xgifb_info->mode_idx].mode_no != 0) &&
> -	       (XGIbios_mode[xgifb_info->mode_idx].xres <= var->xres)) {
> -		if ((XGIbios_mode[xgifb_info->mode_idx].xres == var->xres) &&
> -		    (XGIbios_mode[xgifb_info->mode_idx].yres == var->yres) &&
> -		    (XGIbios_mode[xgifb_info->mode_idx].bpp
> -						== var->bits_per_pixel)) {
> -			found_mode = 1;
> -			break;
> -		}
> -		xgifb_info->mode_idx++;
> -	}
> -
> -	if (found_mode)
> -		xgifb_info->mode_idx = XGIfb_validate_mode(xgifb_info,
> -							xgifb_info->mode_idx);
> -	else
> -		xgifb_info->mode_idx = -1;
> -
> -	if (xgifb_info->mode_idx < 0) {
> -		pr_err("Mode %dx%dx%d not supported\n",
> -		       var->xres, var->yres, var->bits_per_pixel);
> -		xgifb_info->mode_idx = old_mode;
> -		return -EINVAL;
> -	}
> -
> -	if (XGIfb_search_refresh_rate(xgifb_info,
> -				      xgifb_info->refresh_rate) == 0) {
> -		xgifb_info->rate_idx = 1;
> -		xgifb_info->refresh_rate = 60;
> -	}
> -
> -	if (isactive) {
> -		XGIfb_pre_setmode(xgifb_info);
> -		if (XGISetModeNew(xgifb_info, hw_info,
> -				  XGIbios_mode[xgifb_info->mode_idx].mode_no)
> -					== 0) {
> -			pr_err("Setting mode[0x%x] failed\n",
> -			       XGIbios_mode[xgifb_info->mode_idx].mode_no);
> -			return -EINVAL;
> -		}
> -		info->fix.line_length = (info->var.xres_virtual
> -				* info->var.bits_per_pixel) >> 6;
> -
> -		xgifb_reg_set(vb->P3c4, IND_SIS_PASSWORD, SIS_PASSWORD);
> -
> -		xgifb_reg_set(vb->P3d4, 0x13, (info->fix.line_length & 0x00ff));
> -		xgifb_reg_set(vb->P3c4, 0x0E,
> -			      (info->fix.line_length & 0xff00) >> 8);
> -
> -		XGIfb_post_setmode(xgifb_info);
> -
> -		pr_debug("Set new mode: %dx%dx%d-%d\n",
> -			 XGIbios_mode[xgifb_info->mode_idx].xres,
> -			 XGIbios_mode[xgifb_info->mode_idx].yres,
> -			 XGIbios_mode[xgifb_info->mode_idx].bpp,
> -			 xgifb_info->refresh_rate);
> -
> -		xgifb_info->video_bpp = XGIbios_mode[xgifb_info->mode_idx].bpp;
> -		xgifb_info->video_vwidth = info->var.xres_virtual;
> -		xgifb_info->video_width =
> -			XGIbios_mode[xgifb_info->mode_idx].xres;
> -		xgifb_info->video_vheight = info->var.yres_virtual;
> -		xgifb_info->video_height =
> -			XGIbios_mode[xgifb_info->mode_idx].yres;
> -		xgifb_info->org_x = 0;
> -		xgifb_info->org_y = 0;
> -		xgifb_info->video_linelength = info->var.xres_virtual
> -				* (xgifb_info->video_bpp >> 3);
> -		switch (xgifb_info->video_bpp) {
> -		case 8:
> -			xgifb_info->DstColor = 0x0000;
> -			xgifb_info->XGI310_AccelDepth = 0x00000000;
> -			xgifb_info->video_cmap_len = 256;
> -#if defined(__BIG_ENDIAN)
> -			cr_data = xgifb_reg_get(vb->P3d4, 0x4D);
> -			xgifb_reg_set(vb->P3d4, 0x4D, (cr_data & 0xE0));
> -#endif
> -			break;
> -		case 16:
> -			xgifb_info->DstColor = 0x8000;
> -			xgifb_info->XGI310_AccelDepth = 0x00010000;
> -#if defined(__BIG_ENDIAN)
> -			cr_data = xgifb_reg_get(vb->P3d4, 0x4D);
> -			xgifb_reg_set(vb->P3d4, 0x4D, ((cr_data & 0xE0) | 0x0B));
> -#endif
> -			xgifb_info->video_cmap_len = 16;
> -			break;
> -		case 32:
> -			xgifb_info->DstColor = 0xC000;
> -			xgifb_info->XGI310_AccelDepth = 0x00020000;
> -			xgifb_info->video_cmap_len = 16;
> -#if defined(__BIG_ENDIAN)
> -			cr_data = xgifb_reg_get(vb->P3d4, 0x4D);
> -			xgifb_reg_set(vb->P3d4, 0x4D, ((cr_data & 0xE0) | 0x15));
> -#endif
> -			break;
> -		default:
> -			xgifb_info->video_cmap_len = 16;
> -			pr_err("Unsupported depth %d\n",
> -			       xgifb_info->video_bpp);
> -			break;
> -		}
> -	}
> -	XGIfb_bpp_to_var(xgifb_info, var); /* update ARGB info */
> -
> -	dumpVGAReg(xgifb_info);
> -	return 0;
> -}
> -
> -static int XGIfb_pan_var(struct fb_var_screeninfo *var, struct fb_info *info)
> -{
> -	struct xgifb_video_info *xgifb_info = info->par;
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	unsigned int base;
> -
> -	base = var->yoffset * info->var.xres_virtual + var->xoffset;
> -
> -	/* calculate base bpp dep. */
> -	switch (info->var.bits_per_pixel) {
> -	case 16:
> -		base >>= 1;
> -		break;
> -	case 32:
> -		break;
> -	case 8:
> -	default:
> -		base >>= 2;
> -		break;
> -	}
> -
> -	xgifb_reg_set(vb->P3c4, IND_SIS_PASSWORD, SIS_PASSWORD);
> -
> -	xgifb_reg_set(vb->P3d4, 0x0D, base & 0xFF);
> -	xgifb_reg_set(vb->P3d4, 0x0C, (base >> 8) & 0xFF);
> -	xgifb_reg_set(vb->P3c4, 0x0D, (base >> 16) & 0xFF);
> -	xgifb_reg_set(vb->P3c4, 0x37, (base >> 24) & 0x03);
> -	xgifb_reg_and_or(vb->P3c4, 0x37, 0xDF, (base >> 21) & 0x04);
> -
> -	if (xgifb_info->display2 != XGIFB_DISP_NONE) {
> -		xgifb_reg_or(vb->Part1Port, SIS_CRT2_WENABLE_315, 0x01);
> -		xgifb_reg_set(vb->Part1Port, 0x06, (base & 0xFF));
> -		xgifb_reg_set(vb->Part1Port, 0x05, ((base >> 8) & 0xFF));
> -		xgifb_reg_set(vb->Part1Port, 0x04, ((base >> 16) & 0xFF));
> -		xgifb_reg_and_or(vb->Part1Port, 0x02, 0x7F,
> -				 ((base >> 24) & 0x01) << 7);
> -	}
> -	return 0;
> -}
> -
> -static int XGIfb_open(struct fb_info *info, int user)
> -{
> -	return 0;
> -}
> -
> -static int XGIfb_release(struct fb_info *info, int user)
> -{
> -	return 0;
> -}
> -
> -/* similar to sisfb_get_cmap_len */
> -static int XGIfb_get_cmap_len(const struct fb_var_screeninfo *var)
> -{
> -	return (var->bits_per_pixel == 8) ? 256 : 16;
> -}
> -
> -static int XGIfb_setcolreg(unsigned int regno, unsigned int red,
> -			   unsigned int green, unsigned int blue,
> -			   unsigned int transp, struct fb_info *info)
> -{
> -	struct xgifb_video_info *xgifb_info = info->par;
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -
> -	if (regno >= XGIfb_get_cmap_len(&info->var))
> -		return 1;
> -
> -	switch (info->var.bits_per_pixel) {
> -	case 8:
> -		outb(regno, vb->P3c8);
> -		outb((red >> 10), vb->P3c9);
> -		outb((green >> 10), vb->P3c9);
> -		outb((blue >> 10), vb->P3c9);
> -		if (xgifb_info->display2 != XGIFB_DISP_NONE) {
> -			outb(regno, vb->Part5Port);
> -			outb((red >> 8), (vb->Part5Port + 1));
> -			outb((green >> 8), (vb->Part5Port + 1));
> -			outb((blue >> 8), (vb->Part5Port + 1));
> -		}
> -		break;
> -	case 16:
> -		((u32 *)(info->pseudo_palette))[regno] = ((red & 0xf800))
> -				| ((green & 0xfc00) >> 5) | ((blue & 0xf800)
> -				>> 11);
> -		break;
> -	case 32:
> -		red >>= 8;
> -		green >>= 8;
> -		blue >>= 8;
> -		((u32 *)(info->pseudo_palette))[regno] = (red << 16) | (green
> -				<< 8) | (blue);
> -		break;
> -	}
> -	return 0;
> -}
> -
> -/* ----------- FBDev related routines for all series ---------- */
> -
> -static int XGIfb_get_fix(struct fb_fix_screeninfo *fix, int con,
> -			 struct fb_info *info)
> -{
> -	struct xgifb_video_info *xgifb_info = info->par;
> -
> -	memset(fix, 0, sizeof(struct fb_fix_screeninfo));
> -
> -	strncpy(fix->id, "XGI", sizeof(fix->id) - 1);
> -
> -	/* if register_framebuffer has been called, we must lock */
> -	if (atomic_read(&info->count))
> -		mutex_lock(&info->mm_lock);
> -
> -	fix->smem_start = xgifb_info->video_base;
> -	fix->smem_len = xgifb_info->video_size;
> -
> -	/* if register_framebuffer has been called, we can unlock */
> -	if (atomic_read(&info->count))
> -		mutex_unlock(&info->mm_lock);
> -
> -	fix->type = FB_TYPE_PACKED_PIXELS;
> -	fix->type_aux = 0;
> -	if (xgifb_info->video_bpp == 8)
> -		fix->visual = FB_VISUAL_PSEUDOCOLOR;
> -	else
> -		fix->visual = FB_VISUAL_DIRECTCOLOR;
> -	fix->xpanstep = 0;
> -	if (XGIfb_ypan)
> -		fix->ypanstep = 1;
> -	fix->ywrapstep = 0;
> -	fix->line_length = xgifb_info->video_linelength;
> -	fix->mmio_start = xgifb_info->mmio_base;
> -	fix->mmio_len = xgifb_info->mmio_size;
> -	fix->accel = FB_ACCEL_SIS_XABRE;
> -
> -	return 0;
> -}
> -
> -static int XGIfb_set_par(struct fb_info *info)
> -{
> -	int err;
> -
> -	err = XGIfb_do_set_var(&info->var, 1, info);
> -	if (err)
> -		return err;
> -	XGIfb_get_fix(&info->fix, -1, info);
> -	return 0;
> -}
> -
> -static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
> -{
> -	struct xgifb_video_info *xgifb_info = info->par;
> -	unsigned int htotal = var->left_margin + var->xres + var->right_margin
> -			+ var->hsync_len;
> -	unsigned int vtotal = 0;
> -	unsigned int drate = 0, hrate = 0;
> -	int found_mode = 0;
> -	int search_idx;
> -
> -	if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_NONINTERLACED) {
> -		vtotal = var->upper_margin + var->yres + var->lower_margin
> -				+ var->vsync_len;
> -		vtotal <<= 1;
> -	} else if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_DOUBLE) {
> -		vtotal = var->upper_margin + var->yres + var->lower_margin
> -				+ var->vsync_len;
> -		vtotal <<= 2;
> -	} else if ((var->vmode & FB_VMODE_MASK) == FB_VMODE_INTERLACED) {
> -		vtotal = var->upper_margin + (var->yres / 2)
> -				+ var->lower_margin + var->vsync_len;
> -	} else
> -		vtotal = var->upper_margin + var->yres + var->lower_margin
> -				+ var->vsync_len;
> -
> -	if (!(htotal) || !(vtotal)) {
> -		pr_debug("No valid timing data\n");
> -		return -EINVAL;
> -	}
> -
> -	if (var->pixclock && htotal && vtotal) {
> -		drate = 1000000000 / var->pixclock;
> -		hrate = (drate * 1000) / htotal;
> -		xgifb_info->refresh_rate =
> -			(unsigned int)(hrate * 2 / vtotal);
> -		pr_debug(
> -			"%s: pixclock = %d ,htotal=%d, vtotal=%d\n"
> -			"%s: drate=%d, hrate=%d, refresh_rate=%d\n",
> -			__func__, var->pixclock, htotal, vtotal,
> -			__func__, drate, hrate, xgifb_info->refresh_rate);
> -	} else {
> -		xgifb_info->refresh_rate = 60;
> -	}
> -
> -	search_idx = 0;
> -	while ((XGIbios_mode[search_idx].mode_no != 0) &&
> -	       (XGIbios_mode[search_idx].xres <= var->xres)) {
> -		if ((XGIbios_mode[search_idx].xres == var->xres) &&
> -		    (XGIbios_mode[search_idx].yres == var->yres) &&
> -		    (XGIbios_mode[search_idx].bpp == var->bits_per_pixel)) {
> -			if (XGIfb_validate_mode(xgifb_info, search_idx) > 0) {
> -				found_mode = 1;
> -				break;
> -			}
> -		}
> -		search_idx++;
> -	}
> -
> -	if (!found_mode) {
> -		pr_err("%dx%dx%d is no valid mode\n",
> -		       var->xres, var->yres, var->bits_per_pixel);
> -		search_idx = 0;
> -		while (XGIbios_mode[search_idx].mode_no != 0) {
> -			if ((var->xres <= XGIbios_mode[search_idx].xres) &&
> -			    (var->yres <= XGIbios_mode[search_idx].yres) &&
> -			    (var->bits_per_pixel ==
> -			     XGIbios_mode[search_idx].bpp)) {
> -				if (XGIfb_validate_mode(xgifb_info,
> -							search_idx) > 0) {
> -					found_mode = 1;
> -					break;
> -				}
> -			}
> -			search_idx++;
> -		}
> -		if (found_mode) {
> -			var->xres = XGIbios_mode[search_idx].xres;
> -			var->yres = XGIbios_mode[search_idx].yres;
> -			pr_debug("Adapted to mode %dx%dx%d\n",
> -				 var->xres, var->yres, var->bits_per_pixel);
> -
> -		} else {
> -			pr_err("Failed to find similar mode to %dx%dx%d\n",
> -			       var->xres, var->yres, var->bits_per_pixel);
> -			return -EINVAL;
> -		}
> -	}
> -
> -	/* Adapt RGB settings */
> -	XGIfb_bpp_to_var(xgifb_info, var);
> -
> -	if (!XGIfb_ypan) {
> -		if (var->xres != var->xres_virtual)
> -			var->xres_virtual = var->xres;
> -		if (var->yres != var->yres_virtual)
> -			var->yres_virtual = var->yres;
> -	}
> -
> -	/* Truncate offsets to maximum if too high */
> -	if (var->xoffset > var->xres_virtual - var->xres)
> -		var->xoffset = var->xres_virtual - var->xres - 1;
> -
> -	if (var->yoffset > var->yres_virtual - var->yres)
> -		var->yoffset = var->yres_virtual - var->yres - 1;
> -
> -	/* Set everything else to 0 */
> -	var->red.msb_right = 0;
> -	var->green.msb_right = 0;
> -	var->blue.msb_right = 0;
> -	var->transp.offset = 0;
> -	var->transp.length = 0;
> -	var->transp.msb_right = 0;
> -
> -	return 0;
> -}
> -
> -static int XGIfb_pan_display(struct fb_var_screeninfo *var,
> -			     struct fb_info *info)
> -{
> -	int err;
> -
> -	if (var->xoffset > (info->var.xres_virtual - info->var.xres))
> -		return -EINVAL;
> -	if (var->yoffset > (info->var.yres_virtual - info->var.yres))
> -		return -EINVAL;
> -
> -	if (var->vmode & FB_VMODE_YWRAP) {
> -		if (var->yoffset >= info->var.yres_virtual || var->xoffset)
> -			return -EINVAL;
> -	} else if (var->xoffset + info->var.xres > info->var.xres_virtual ||
> -		   var->yoffset + info->var.yres > info->var.yres_virtual) {
> -		return -EINVAL;
> -	}
> -	err = XGIfb_pan_var(var, info);
> -	if (err < 0)
> -		return err;
> -
> -	info->var.xoffset = var->xoffset;
> -	info->var.yoffset = var->yoffset;
> -	if (var->vmode & FB_VMODE_YWRAP)
> -		info->var.vmode |= FB_VMODE_YWRAP;
> -	else
> -		info->var.vmode &= ~FB_VMODE_YWRAP;
> -
> -	return 0;
> -}
> -
> -static int XGIfb_blank(int blank, struct fb_info *info)
> -{
> -	struct xgifb_video_info *xgifb_info = info->par;
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	u8 reg;
> -
> -	reg = xgifb_reg_get(vb->P3d4, 0x17);
> -
> -	if (blank > 0)
> -		reg &= 0x7f;
> -	else
> -		reg |= 0x80;
> -
> -	xgifb_reg_set(vb->P3d4, 0x17, reg);
> -	xgifb_reg_set(vb->P3c4, 0x00, 0x01); /* Synchronous Reset */
> -	xgifb_reg_set(vb->P3c4, 0x00, 0x03); /* End Reset */
> -	return 0;
> -}
> -
> -static struct fb_ops XGIfb_ops = {
> -	.owner = THIS_MODULE,
> -	.fb_open = XGIfb_open,
> -	.fb_release = XGIfb_release,
> -	.fb_check_var = XGIfb_check_var,
> -	.fb_set_par = XGIfb_set_par,
> -	.fb_setcolreg = XGIfb_setcolreg,
> -	.fb_pan_display = XGIfb_pan_display,
> -	.fb_blank = XGIfb_blank,
> -	.fb_fillrect = cfb_fillrect,
> -	.fb_copyarea = cfb_copyarea,
> -	.fb_imageblit = cfb_imageblit,
> -};
> -
> -/* ---------------- Chip generation dependent routines ---------------- */
> -
> -/* for XGI 315/550/650/740/330 */
> -
> -static int XGIfb_get_dram_size(struct xgifb_video_info *xgifb_info)
> -{
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	u8 ChannelNum, tmp;
> -	u8 reg = 0;
> -
> -	/* xorg driver sets 32MB * 1 channel */
> -	if (xgifb_info->chip == XG27)
> -		xgifb_reg_set(vb->P3c4, IND_SIS_DRAM_SIZE, 0x51);
> -
> -	reg = xgifb_reg_get(vb->P3c4, IND_SIS_DRAM_SIZE);
> -	if (!reg)
> -		return -1;
> -
> -	switch ((reg & XGI_DRAM_SIZE_MASK) >> 4) {
> -	case XGI_DRAM_SIZE_1MB:
> -		xgifb_info->video_size = 0x100000;
> -		break;
> -	case XGI_DRAM_SIZE_2MB:
> -		xgifb_info->video_size = 0x200000;
> -		break;
> -	case XGI_DRAM_SIZE_4MB:
> -		xgifb_info->video_size = 0x400000;
> -		break;
> -	case XGI_DRAM_SIZE_8MB:
> -		xgifb_info->video_size = 0x800000;
> -		break;
> -	case XGI_DRAM_SIZE_16MB:
> -		xgifb_info->video_size = 0x1000000;
> -		break;
> -	case XGI_DRAM_SIZE_32MB:
> -		xgifb_info->video_size = 0x2000000;
> -		break;
> -	case XGI_DRAM_SIZE_64MB:
> -		xgifb_info->video_size = 0x4000000;
> -		break;
> -	case XGI_DRAM_SIZE_128MB:
> -		xgifb_info->video_size = 0x8000000;
> -		break;
> -	case XGI_DRAM_SIZE_256MB:
> -		xgifb_info->video_size = 0x10000000;
> -		break;
> -	default:
> -		return -1;
> -	}
> -
> -	tmp = (reg & 0x0c) >> 2;
> -	switch (xgifb_info->chip) {
> -	case XG20:
> -	case XG21:
> -	case XG27:
> -		ChannelNum = 1;
> -		break;
> -
> -	case XG42:
> -		if (reg & 0x04)
> -			ChannelNum = 2;
> -		else
> -			ChannelNum = 1;
> -		break;
> -
> -	case XG40:
> -	default:
> -		if (tmp == 2)
> -			ChannelNum = 2;
> -		else if (tmp == 3)
> -			ChannelNum = 3;
> -		else
> -			ChannelNum = 1;
> -		break;
> -	}
> -
> -	xgifb_info->video_size = xgifb_info->video_size * ChannelNum;
> -
> -	pr_info("SR14=%x DramSzie %x ChannelNum %x\n",
> -		reg, xgifb_info->video_size, ChannelNum);
> -	return 0;
> -}
> -
> -static void XGIfb_detect_VB(struct xgifb_video_info *xgifb_info)
> -{
> -	struct vb_device_info *vb = &xgifb_info->dev_info;
> -	u8 cr32, temp = 0;
> -
> -	xgifb_info->TV_plug = 0;
> -	xgifb_info->TV_type = 0;
> -
> -	cr32 = xgifb_reg_get(vb->P3d4, IND_XGI_SCRATCH_REG_CR32);
> -
> -	if ((cr32 & SIS_CRT1) && !XGIfb_crt1off) {
> -		XGIfb_crt1off = 0;
> -	} else {
> -		if (cr32 & 0x5F)
> -			XGIfb_crt1off = 1;
> -		else
> -			XGIfb_crt1off = 0;
> -	}
> -
> -	if (!xgifb_info->display2_force) {
> -		if (cr32 & SIS_VB_TV)
> -			xgifb_info->display2 = XGIFB_DISP_TV;
> -		else if (cr32 & SIS_VB_LCD)
> -			xgifb_info->display2 = XGIFB_DISP_LCD;
> -		else if (cr32 & SIS_VB_CRT2)
> -			xgifb_info->display2 = XGIFB_DISP_CRT;
> -		else
> -			xgifb_info->display2 = XGIFB_DISP_NONE;
> -	}
> -
> -	if (XGIfb_tvplug != -1) {
> -		/* Override with option */
> -		xgifb_info->TV_plug = XGIfb_tvplug;
> -	} else if (cr32 & SIS_VB_HIVISION) {
> -		xgifb_info->TV_type = TVMODE_HIVISION;
> -		xgifb_info->TV_plug = TVPLUG_SVIDEO;
> -	} else if (cr32 & SIS_VB_SVIDEO) {
> -		xgifb_info->TV_plug = TVPLUG_SVIDEO;
> -	} else if (cr32 & SIS_VB_COMPOSITE) {
> -		xgifb_info->TV_plug = TVPLUG_COMPOSITE;
> -	} else if (cr32 & SIS_VB_SCART) {
> -		xgifb_info->TV_plug = TVPLUG_SCART;
> -	}
> -
> -	if (xgifb_info->TV_type == 0) {
> -		temp = xgifb_reg_get(vb->P3d4, 0x38);
> -		if (temp & 0x10)
> -			xgifb_info->TV_type = TVMODE_PAL;
> -		else
> -			xgifb_info->TV_type = TVMODE_NTSC;
> -	}
> -
> -	/* Copy forceCRT1 option to CRT1off if option is given */
> -	if (XGIfb_forcecrt1 != -1) {
> -		if (XGIfb_forcecrt1)
> -			XGIfb_crt1off = 0;
> -		else
> -			XGIfb_crt1off = 1;
> -	}
> -}
> -
> -static bool XGIfb_has_VB(struct xgifb_video_info *xgifb_info)
> -{
> -	u8 vb_chipid;
> -
> -	vb_chipid = xgifb_reg_get(xgifb_info->dev_info.Part4Port, 0x00);
> -	switch (vb_chipid) {
> -	case 0x01:
> -		xgifb_info->hasVB = HASVB_301;
> -		break;
> -	case 0x02:
> -		xgifb_info->hasVB = HASVB_302;
> -		break;
> -	default:
> -		xgifb_info->hasVB = HASVB_NONE;
> -		return false;
> -	}
> -	return true;
> -}
> -
> -static void XGIfb_get_VB_type(struct xgifb_video_info *xgifb_info)
> -{
> -	u8 reg;
> -
> -	if (!XGIfb_has_VB(xgifb_info)) {
> -		reg = xgifb_reg_get(xgifb_info->dev_info.P3d4,
> -				    IND_XGI_SCRATCH_REG_CR37);
> -		switch ((reg & SIS_EXTERNAL_CHIP_MASK) >> 1) {
> -		case SIS_EXTERNAL_CHIP_LVDS:
> -			xgifb_info->hasVB = HASVB_LVDS;
> -			break;
> -		case SIS_EXTERNAL_CHIP_LVDS_CHRONTEL:
> -			xgifb_info->hasVB = HASVB_LVDS_CHRONTEL;
> -			break;
> -		default:
> -			break;
> -		}
> -	}
> -}
> -
> -static int __init xgifb_optval(char *fullopt, int validx)
> -{
> -	unsigned long lres;
> -
> -	if (kstrtoul(fullopt + validx, 0, &lres) < 0 || lres > INT_MAX) {
> -		pr_err("Invalid value for option: %s\n", fullopt);
> -		return 0;
> -	}
> -	return lres;
> -}
> -
> -static int __init XGIfb_setup(char *options)
> -{
> -	char *this_opt;
> -
> -	if (!options || !*options)
> -		return 0;
> -
> -	pr_info("Options: %s\n", options);
> -
> -	while ((this_opt = strsep(&options, ",")) != NULL) {
> -		if (!*this_opt)
> -			continue;
> -
> -		if (!strncmp(this_opt, "mode:", 5)) {
> -			mode = this_opt + 5;
> -		} else if (!strncmp(this_opt, "vesa:", 5)) {
> -			vesa = xgifb_optval(this_opt, 5);
> -		} else if (!strncmp(this_opt, "vrate:", 6)) {
> -			refresh_rate = xgifb_optval(this_opt, 6);
> -		} else if (!strncmp(this_opt, "rate:", 5)) {
> -			refresh_rate = xgifb_optval(this_opt, 5);
> -		} else if (!strncmp(this_opt, "crt1off", 7)) {
> -			XGIfb_crt1off = 1;
> -		} else if (!strncmp(this_opt, "filter:", 7)) {
> -			filter = xgifb_optval(this_opt, 7);
> -		} else if (!strncmp(this_opt, "forcecrt2type:", 14)) {
> -			XGIfb_search_crt2type(this_opt + 14);
> -		} else if (!strncmp(this_opt, "forcecrt1:", 10)) {
> -			XGIfb_forcecrt1 = xgifb_optval(this_opt, 10);
> -		} else if (!strncmp(this_opt, "tvmode:", 7)) {
> -			XGIfb_search_tvstd(this_opt + 7);
> -		} else if (!strncmp(this_opt, "tvstandard:", 11)) {
> -			XGIfb_search_tvstd(this_opt + 7);
> -		} else if (!strncmp(this_opt, "dstn", 4)) {
> -			enable_dstn = 1;
> -			/* DSTN overrules forcecrt2type */
> -			XGIfb_crt2type = XGIFB_DISP_LCD;
> -		} else if (!strncmp(this_opt, "noypan", 6)) {
> -			XGIfb_ypan = 0;
> -		} else {
> -			mode = this_opt;
> -		}
> -	}
> -	return 0;
> -}
> -
> -static int xgifb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
> -{
> -	u8 reg, reg1;
> -	u8 CR48, CR38;
> -	int ret;
> -	struct fb_info *fb_info;
> -	struct xgifb_video_info *xgifb_info;
> -	struct vb_device_info *vb;
> -	struct xgi_hw_device_info *hw_info;
> -	unsigned long video_size_max;
> -
> -	fb_info = framebuffer_alloc(sizeof(*xgifb_info), &pdev->dev);
> -	if (!fb_info)
> -		return -ENOMEM;
> -
> -	xgifb_info = fb_info->par;
> -	vb = &xgifb_info->dev_info;
> -	hw_info = &xgifb_info->hw_info;
> -	xgifb_info->fb_info = fb_info;
> -	xgifb_info->chip_id = pdev->device;
> -	pci_read_config_byte(pdev,
> -			     PCI_REVISION_ID,
> -			     &xgifb_info->revision_id);
> -	hw_info->jChipRevision = xgifb_info->revision_id;
> -
> -	xgifb_info->pcibus = pdev->bus->number;
> -	xgifb_info->pcislot = PCI_SLOT(pdev->devfn);
> -	xgifb_info->pcifunc = PCI_FUNC(pdev->devfn);
> -	xgifb_info->subsysvendor = pdev->subsystem_vendor;
> -	xgifb_info->subsysdevice = pdev->subsystem_device;
> -
> -	video_size_max = pci_resource_len(pdev, 0);
> -	xgifb_info->video_base = pci_resource_start(pdev, 0);
> -	xgifb_info->mmio_base = pci_resource_start(pdev, 1);
> -	xgifb_info->mmio_size = pci_resource_len(pdev, 1);
> -	xgifb_info->vga_base = pci_resource_start(pdev, 2) + 0x30;
> -	dev_info(&pdev->dev, "Relocate IO address: %llx [%08lx]\n",
> -		 (u64)pci_resource_start(pdev, 2),
> -		 xgifb_info->vga_base);
> -
> -	if (pci_enable_device(pdev)) {
> -		ret = -EIO;
> -		goto error;
> -	}
> -
> -	if (XGIfb_crt2type != -1) {
> -		xgifb_info->display2 = XGIfb_crt2type;
> -		xgifb_info->display2_force = true;
> -	}
> -
> -	XGIRegInit(vb, xgifb_info->vga_base);
> -
> -	xgifb_reg_set(vb->P3c4,
> -		      IND_SIS_PASSWORD, SIS_PASSWORD);
> -	reg1 = xgifb_reg_get(vb->P3c4, IND_SIS_PASSWORD);
> -
> -	if (reg1 != 0xa1) { /* I/O error */
> -		dev_err(&pdev->dev, "I/O error\n");
> -		ret = -EIO;
> -		goto error_disable;
> -	}
> -
> -	switch (xgifb_info->chip_id) {
> -	case PCI_DEVICE_ID_XGI_20:
> -		xgifb_reg_or(vb->P3d4,
> -			     Index_CR_GPIO_Reg3, GPIOG_EN);
> -		CR48 = xgifb_reg_get(vb->P3d4,
> -				     Index_CR_GPIO_Reg1);
> -		if (CR48 & GPIOG_READ)
> -			xgifb_info->chip = XG21;
> -		else
> -			xgifb_info->chip = XG20;
> -		break;
> -	case PCI_DEVICE_ID_XGI_40:
> -		xgifb_info->chip = XG40;
> -		break;
> -	case PCI_DEVICE_ID_XGI_42:
> -		xgifb_info->chip = XG42;
> -		break;
> -	case PCI_DEVICE_ID_XGI_27:
> -		xgifb_info->chip = XG27;
> -		break;
> -	default:
> -		ret = -ENODEV;
> -		goto error_disable;
> -	}
> -
> -	dev_info(&pdev->dev, "chipid = %x\n", xgifb_info->chip);
> -	hw_info->jChipType = xgifb_info->chip;
> -
> -	if (XGIfb_get_dram_size(xgifb_info)) {
> -		xgifb_info->video_size = min_t(unsigned long, video_size_max,
> -					       SZ_16M);
> -	} else if (xgifb_info->video_size > video_size_max) {
> -		xgifb_info->video_size = video_size_max;
> -	}
> -
> -	/* Enable PCI_LINEAR_ADDRESSING and MMIO_ENABLE */
> -	xgifb_reg_or(vb->P3c4,
> -		     IND_SIS_PCI_ADDRESS_SET,
> -		     (SIS_PCI_ADDR_ENABLE | SIS_MEM_MAP_IO_ENABLE));
> -	/* Enable 2D accelerator engine */
> -	xgifb_reg_or(vb->P3c4,
> -		     IND_SIS_MODULE_ENABLE, SIS_ENABLE_2D);
> -
> -	hw_info->ulVideoMemorySize = xgifb_info->video_size;
> -
> -	if (!request_mem_region(xgifb_info->video_base,
> -				xgifb_info->video_size,
> -				"XGIfb FB")) {
> -		dev_err(&pdev->dev, "Unable request memory size %x\n",
> -			xgifb_info->video_size);
> -		dev_err(&pdev->dev,
> -			"Fatal error: Unable to reserve frame buffer memory. Is there another framebuffer driver active?\n");
> -		ret = -ENODEV;
> -		goto error_disable;
> -	}
> -
> -	if (!request_mem_region(xgifb_info->mmio_base,
> -				xgifb_info->mmio_size,
> -				"XGIfb MMIO")) {
> -		dev_err(&pdev->dev,
> -			"Fatal error: Unable to reserve MMIO region\n");
> -		ret = -ENODEV;
> -		goto error_0;
> -	}
> -
> -	xgifb_info->video_vbase =
> -		ioremap_wc(xgifb_info->video_base, xgifb_info->video_size);
> -	hw_info->pjVideoMemoryAddress =
> -		ioremap_wc(xgifb_info->video_base, xgifb_info->video_size);
> -	xgifb_info->mmio_vbase = ioremap(xgifb_info->mmio_base,
> -					 xgifb_info->mmio_size);
> -
> -	dev_info(&pdev->dev,
> -		 "Framebuffer at 0x%llx, mapped to 0x%p, size %dk\n",
> -		 (u64)xgifb_info->video_base,
> -		 xgifb_info->video_vbase,
> -		 xgifb_info->video_size / 1024);
> -
> -	dev_info(&pdev->dev,
> -		 "MMIO at 0x%llx, mapped to 0x%p, size %ldk\n",
> -		 (u64)xgifb_info->mmio_base, xgifb_info->mmio_vbase,
> -		 xgifb_info->mmio_size / 1024);
> -
> -	pci_set_drvdata(pdev, xgifb_info);
> -	if (!XGIInitNew(pdev))
> -		dev_err(&pdev->dev, "XGIInitNew() failed!\n");
> -
> -	xgifb_info->mtrr = -1;
> -
> -	xgifb_info->hasVB = HASVB_NONE;
> -	if ((xgifb_info->chip == XG20) ||
> -	    (xgifb_info->chip == XG27)) {
> -		xgifb_info->hasVB = HASVB_NONE;
> -	} else if (xgifb_info->chip == XG21) {
> -		CR38 = xgifb_reg_get(vb->P3d4, 0x38);
> -		if ((CR38 & 0xE0) == 0xC0)
> -			xgifb_info->display2 = XGIFB_DISP_LCD;
> -		else if ((CR38 & 0xE0) == 0x60)
> -			xgifb_info->hasVB = HASVB_CHRONTEL;
> -		else
> -			xgifb_info->hasVB = HASVB_NONE;
> -	} else {
> -		XGIfb_get_VB_type(xgifb_info);
> -	}
> -
> -	hw_info->ujVBChipID = VB_CHIP_UNKNOWN;
> -
> -	hw_info->ulExternalChip = 0;
> -
> -	switch (xgifb_info->hasVB) {
> -	case HASVB_301:
> -		reg = xgifb_reg_get(vb->Part4Port, 0x01);
> -		if (reg >= 0xE0) {
> -			hw_info->ujVBChipID = VB_CHIP_302LV;
> -			dev_info(&pdev->dev,
> -				 "XGI302LV bridge detected (revision 0x%02x)\n",
> -				 reg);
> -		} else if (reg >= 0xD0) {
> -			hw_info->ujVBChipID = VB_CHIP_301LV;
> -			dev_info(&pdev->dev,
> -				 "XGI301LV bridge detected (revision 0x%02x)\n",
> -				 reg);
> -		} else {
> -			hw_info->ujVBChipID = VB_CHIP_301;
> -			dev_info(&pdev->dev, "XGI301 bridge detected\n");
> -		}
> -		break;
> -	case HASVB_302:
> -		reg = xgifb_reg_get(vb->Part4Port, 0x01);
> -		if (reg >= 0xE0) {
> -			hw_info->ujVBChipID = VB_CHIP_302LV;
> -			dev_info(&pdev->dev,
> -				 "XGI302LV bridge detected (revision 0x%02x)\n",
> -				 reg);
> -		} else if (reg >= 0xD0) {
> -			hw_info->ujVBChipID = VB_CHIP_301LV;
> -			dev_info(&pdev->dev,
> -				 "XGI302LV bridge detected (revision 0x%02x)\n",
> -				 reg);
> -		} else if (reg >= 0xB0) {
> -			reg1 = xgifb_reg_get(vb->Part4Port,
> -					     0x23);
> -
> -			hw_info->ujVBChipID = VB_CHIP_302B;
> -
> -		} else {
> -			hw_info->ujVBChipID = VB_CHIP_302;
> -			dev_info(&pdev->dev, "XGI302 bridge detected\n");
> -		}
> -		break;
> -	case HASVB_LVDS:
> -		hw_info->ulExternalChip = 0x1;
> -		dev_info(&pdev->dev, "LVDS transmitter detected\n");
> -		break;
> -	case HASVB_TRUMPION:
> -		hw_info->ulExternalChip = 0x2;
> -		dev_info(&pdev->dev, "Trumpion Zurac LVDS scaler detected\n");
> -		break;
> -	case HASVB_CHRONTEL:
> -		hw_info->ulExternalChip = 0x4;
> -		dev_info(&pdev->dev, "Chrontel TV encoder detected\n");
> -		break;
> -	case HASVB_LVDS_CHRONTEL:
> -		hw_info->ulExternalChip = 0x5;
> -		dev_info(&pdev->dev,
> -			 "LVDS transmitter and Chrontel TV encoder detected\n");
> -		break;
> -	default:
> -		dev_info(&pdev->dev, "No or unknown bridge type detected\n");
> -		break;
> -	}
> -
> -	if (xgifb_info->hasVB != HASVB_NONE)
> -		XGIfb_detect_VB(xgifb_info);
> -	else if (xgifb_info->chip != XG21)
> -		xgifb_info->display2 = XGIFB_DISP_NONE;
> -
> -	if (xgifb_info->display2 == XGIFB_DISP_LCD) {
> -		if (!enable_dstn) {
> -			reg = xgifb_reg_get(vb->P3d4,
> -					    IND_XGI_LCD_PANEL);
> -			reg &= 0x0f;
> -			hw_info->ulCRT2LCDType = XGI310paneltype[reg];
> -		}
> -	}
> -
> -	xgifb_info->mode_idx = -1;
> -
> -	if (mode)
> -		XGIfb_search_mode(xgifb_info, mode);
> -	else if (vesa != -1)
> -		XGIfb_search_vesamode(xgifb_info, vesa);
> -
> -	if (xgifb_info->mode_idx >= 0)
> -		xgifb_info->mode_idx =
> -			XGIfb_validate_mode(xgifb_info, xgifb_info->mode_idx);
> -
> -	if (xgifb_info->mode_idx < 0) {
> -		if (xgifb_info->display2 == XGIFB_DISP_LCD &&
> -		    xgifb_info->chip == XG21)
> -			xgifb_info->mode_idx =
> -				XGIfb_GetXG21DefaultLVDSModeIdx(xgifb_info);
> -		else
> -			xgifb_info->mode_idx = DEFAULT_MODE;
> -	}
> -
> -	if (xgifb_info->mode_idx < 0) {
> -		dev_err(&pdev->dev, "No supported video mode found\n");
> -		ret = -EINVAL;
> -		goto error_1;
> -	}
> -
> -	/* set default refresh rate */
> -	xgifb_info->refresh_rate = refresh_rate;
> -	if (xgifb_info->refresh_rate == 0)
> -		xgifb_info->refresh_rate = 60;
> -	if (XGIfb_search_refresh_rate(xgifb_info, xgifb_info->refresh_rate) == 0) {
> -		xgifb_info->rate_idx = 1;
> -		xgifb_info->refresh_rate = 60;
> -	}
> -
> -	xgifb_info->video_bpp = XGIbios_mode[xgifb_info->mode_idx].bpp;
> -	xgifb_info->video_vwidth =
> -		xgifb_info->video_width =
> -			XGIbios_mode[xgifb_info->mode_idx].xres;
> -	xgifb_info->video_vheight =
> -		xgifb_info->video_height =
> -			XGIbios_mode[xgifb_info->mode_idx].yres;
> -	xgifb_info->org_x = 0;
> -	xgifb_info->org_y = 0;
> -	xgifb_info->video_linelength =
> -		xgifb_info->video_width *
> -		(xgifb_info->video_bpp >> 3);
> -	switch (xgifb_info->video_bpp) {
> -	case 8:
> -		xgifb_info->DstColor = 0x0000;
> -		xgifb_info->XGI310_AccelDepth = 0x00000000;
> -		xgifb_info->video_cmap_len = 256;
> -		break;
> -	case 16:
> -		xgifb_info->DstColor = 0x8000;
> -		xgifb_info->XGI310_AccelDepth = 0x00010000;
> -		xgifb_info->video_cmap_len = 16;
> -		break;
> -	case 32:
> -		xgifb_info->DstColor = 0xC000;
> -		xgifb_info->XGI310_AccelDepth = 0x00020000;
> -		xgifb_info->video_cmap_len = 16;
> -		break;
> -	default:
> -		xgifb_info->video_cmap_len = 16;
> -		pr_info("Unsupported depth %d\n",
> -			xgifb_info->video_bpp);
> -		break;
> -	}
> -
> -	pr_info("Default mode is %dx%dx%d (%dHz)\n",
> -		xgifb_info->video_width, xgifb_info->video_height,
> -		xgifb_info->video_bpp, xgifb_info->refresh_rate);
> -
> -	fb_info->var.red.length		= 8;
> -	fb_info->var.green.length	= 8;
> -	fb_info->var.blue.length	= 8;
> -	fb_info->var.activate		= FB_ACTIVATE_NOW;
> -	fb_info->var.height		= -1;
> -	fb_info->var.width		= -1;
> -	fb_info->var.vmode		= FB_VMODE_NONINTERLACED;
> -	fb_info->var.xres		= xgifb_info->video_width;
> -	fb_info->var.xres_virtual	= xgifb_info->video_width;
> -	fb_info->var.yres		= xgifb_info->video_height;
> -	fb_info->var.yres_virtual	= xgifb_info->video_height;
> -	fb_info->var.bits_per_pixel	= xgifb_info->video_bpp;
> -
> -	XGIfb_bpp_to_var(xgifb_info, &fb_info->var);
> -
> -	fb_info->var.pixclock = (u32)(1000000000 / XGIfb_mode_rate_to_dclock
> -				      (vb, hw_info,
> -				       XGIbios_mode[xgifb_info->mode_idx].mode_no));
> -
> -	if (XGIfb_mode_rate_to_ddata(vb, hw_info,
> -				     XGIbios_mode[xgifb_info->mode_idx].mode_no,
> -				     &fb_info->var.left_margin,
> -				     &fb_info->var.right_margin,
> -				     &fb_info->var.upper_margin,
> -				     &fb_info->var.lower_margin,
> -				     &fb_info->var.hsync_len,
> -				     &fb_info->var.vsync_len,
> -				     &fb_info->var.sync,
> -				     &fb_info->var.vmode)) {
> -		if ((fb_info->var.vmode & FB_VMODE_MASK) ==
> -		    FB_VMODE_INTERLACED) {
> -			fb_info->var.yres <<= 1;
> -			fb_info->var.yres_virtual <<= 1;
> -		} else if ((fb_info->var.vmode & FB_VMODE_MASK) ==
> -			   FB_VMODE_DOUBLE) {
> -			fb_info->var.pixclock >>= 1;
> -			fb_info->var.yres >>= 1;
> -			fb_info->var.yres_virtual >>= 1;
> -		}
> -	}
> -
> -	fb_info->flags = FBINFO_FLAG_DEFAULT;
> -	fb_info->screen_base = xgifb_info->video_vbase;
> -	fb_info->fbops = &XGIfb_ops;
> -	XGIfb_get_fix(&fb_info->fix, -1, fb_info);
> -	fb_info->pseudo_palette = xgifb_info->pseudo_palette;
> -
> -	fb_alloc_cmap(&fb_info->cmap, 256, 0);
> -
> -	xgifb_info->mtrr = arch_phys_wc_add(xgifb_info->video_base,
> -					    xgifb_info->video_size);
> -
> -	if (register_framebuffer(fb_info) < 0) {
> -		ret = -EINVAL;
> -		goto error_mtrr;
> -	}
> -
> -	dumpVGAReg(xgifb_info);
> -
> -	return 0;
> -
> -error_mtrr:
> -	arch_phys_wc_del(xgifb_info->mtrr);
> -error_1:
> -	iounmap(xgifb_info->mmio_vbase);
> -	iounmap(xgifb_info->video_vbase);
> -	release_mem_region(xgifb_info->mmio_base, xgifb_info->mmio_size);
> -error_0:
> -	release_mem_region(xgifb_info->video_base, xgifb_info->video_size);
> -error_disable:
> -	pci_disable_device(pdev);
> -error:
> -	framebuffer_release(fb_info);
> -	return ret;
> -}
> -
> -/* -------------------- PCI DEVICE HANDLING -------------------- */
> -
> -static void xgifb_remove(struct pci_dev *pdev)
> -{
> -	struct xgifb_video_info *xgifb_info = pci_get_drvdata(pdev);
> -	struct fb_info *fb_info = xgifb_info->fb_info;
> -
> -	unregister_framebuffer(fb_info);
> -	arch_phys_wc_del(xgifb_info->mtrr);
> -	iounmap(xgifb_info->mmio_vbase);
> -	iounmap(xgifb_info->video_vbase);
> -	release_mem_region(xgifb_info->mmio_base, xgifb_info->mmio_size);
> -	release_mem_region(xgifb_info->video_base, xgifb_info->video_size);
> -	pci_disable_device(pdev);
> -	framebuffer_release(fb_info);
> -}
> -
> -static struct pci_driver xgifb_driver = {
> -	.name = "xgifb",
> -	.id_table = xgifb_pci_table,
> -	.probe = xgifb_probe,
> -	.remove = xgifb_remove
> -};
> -
> -/* -------------------- MODULE -------------------- */
> -
> -module_param(mode, charp, 0000);
> -MODULE_PARM_DESC(mode,
> -		 "Selects the desired default display mode in the format XxYxDepth (eg. 1024x768x16).");
> -
> -module_param(forcecrt2type, charp, 0000);
> -MODULE_PARM_DESC(forcecrt2type,
> -		 "Force the second display output type. Possible values are NONE, LCD, TV, VGA, SVIDEO or COMPOSITE.");
> -
> -module_param(vesa, int, 0000);
> -MODULE_PARM_DESC(vesa,
> -		 "Selects the desired default display mode by VESA mode number (eg. 0x117).");
> -
> -module_param(filter, int, 0000);
> -MODULE_PARM_DESC(filter,
> -		 "Selects TV flicker filter type (only for systems with a SiS301 video bridge). Possible values 0-7. Default: [no filter]).");
> -
> -static int __init xgifb_init(void)
> -{
> -	char *option = NULL;
> -
> -	if (forcecrt2type)
> -		XGIfb_search_crt2type(forcecrt2type);
> -	if (fb_get_options("xgifb", &option))
> -		return -ENODEV;
> -	XGIfb_setup(option);
> -
> -	return pci_register_driver(&xgifb_driver);
> -}
> -
> -static void __exit xgifb_remove_module(void)
> -{
> -	pci_unregister_driver(&xgifb_driver);
> -	pr_debug("Module unloaded\n");
> -}
> -
> -MODULE_DESCRIPTION("Z7 Z9 Z9S Z11 framebuffer device driver");
> -MODULE_LICENSE("GPL");
> -MODULE_AUTHOR("XGITECH , Others");
> -module_init(xgifb_init);
> -module_exit(xgifb_remove_module);
> diff --git a/drivers/staging/xgifb/XGIfb.h b/drivers/staging/xgifb/XGIfb.h
> deleted file mode 100644
> index 982c676c16c6..000000000000
> --- a/drivers/staging/xgifb/XGIfb.h
> +++ /dev/null
> @@ -1,109 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _LINUX_XGIFB
> -#define _LINUX_XGIFB
> -#include "vgatypes.h"
> -#include "vb_struct.h"
> -
> -enum xgifb_display_type {
> -	XGIFB_DISP_NONE = 0,
> -	XGIFB_DISP_CRT,
> -	XGIFB_DISP_LCD,
> -	XGIFB_DISP_TV,
> -};
> -
> -#define HASVB_NONE	    0x00
> -#define HASVB_301	    0x01
> -#define HASVB_LVDS	    0x02
> -#define HASVB_TRUMPION	    0x04
> -#define HASVB_LVDS_CHRONTEL 0x10
> -#define HASVB_302	    0x20
> -#define HASVB_CHRONTEL	    0x80
> -
> -enum XGI_CHIP_TYPE {
> -	XG40 = 32,
> -	XG42,
> -	XG20 = 48,
> -	XG21,
> -	XG27,
> -};
> -
> -enum xgi_tvtype {
> -	TVMODE_NTSC = 0,
> -	TVMODE_PAL,
> -	TVMODE_HIVISION,
> -	TVTYPE_PALM,
> -	TVTYPE_PALN,
> -	TVTYPE_NTSCJ,
> -	TVMODE_TOTAL
> -};
> -
> -enum xgi_tv_plug {
> -	TVPLUG_UNKNOWN = 0,
> -	TVPLUG_COMPOSITE = 1,
> -	TVPLUG_SVIDEO = 2,
> -	TVPLUG_COMPOSITE_AND_SVIDEO = 3,
> -	TVPLUG_SCART = 4,
> -	TVPLUG_YPBPR_525i = 5,
> -	TVPLUG_YPBPR_525P = 6,
> -	TVPLUG_YPBPR_750P = 7,
> -	TVPLUG_YPBPR_1080i = 8,
> -	TVPLUG_TOTAL
> -};
> -
> -struct xgifb_video_info {
> -	struct fb_info *fb_info;
> -	struct xgi_hw_device_info hw_info;
> -	struct vb_device_info dev_info;
> -
> -	int mode_idx;
> -	int rate_idx;
> -
> -	u32 pseudo_palette[17];
> -
> -	int           chip_id;
> -	unsigned int  video_size;
> -	phys_addr_t   video_base;
> -	void __iomem *video_vbase;
> -	phys_addr_t   mmio_base;
> -	unsigned long mmio_size;
> -	void __iomem *mmio_vbase;
> -	unsigned long vga_base;
> -	int mtrr;
> -
> -	int    video_bpp;
> -	int    video_cmap_len;
> -	int    video_width;
> -	int    video_height;
> -	int    video_vwidth;
> -	int    video_vheight;
> -	int    org_x;
> -	int    org_y;
> -	int    video_linelength;
> -	unsigned int refresh_rate;
> -
> -	enum xgifb_display_type display2; /* the second display output type */
> -	bool display2_force;
> -	unsigned char hasVB;
> -	unsigned char TV_type;
> -	unsigned char TV_plug;
> -
> -	struct XGI21_LVDSCapStruct lvds_data;
> -
> -	enum XGI_CHIP_TYPE chip;
> -	unsigned char revision_id;
> -
> -	unsigned short DstColor;
> -	unsigned long  XGI310_AccelDepth;
> -	unsigned long  CommandReg;
> -
> -	unsigned int   pcibus;
> -	unsigned int   pcislot;
> -	unsigned int   pcifunc;
> -
> -	unsigned short subsysvendor;
> -	unsigned short subsysdevice;
> -
> -	char reserved[236];
> -};
> -
> -#endif
> diff --git a/drivers/staging/xgifb/vb_def.h b/drivers/staging/xgifb/vb_def.h
> deleted file mode 100644
> index 0311e2682d27..000000000000
> --- a/drivers/staging/xgifb/vb_def.h
> +++ /dev/null
> @@ -1,257 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _VB_DEF_
> -#define _VB_DEF_
> -#include "../../video/fbdev/sis/initdef.h"
> -
> -#define VB_XGI301C      0x0020 /* for 301C */
> -
> -#define SupportCRT2in301C       0x0100  /* for 301C */
> -#define SetCHTVOverScan         0x8000
> -
> -#define PanelResInfo            0x1F /* CR36 Panel Type/LCDResInfo */
> -#define Panel_1024x768x75        0x22
> -#define Panel_1280x1024x75       0x23
> -
> -#define PanelRef60Hz            0x00
> -#define PanelRef75Hz            0x20
> -
> -#define YPbPr525iVCLK           0x03B
> -#define YPbPr525iVCLK_2         0x03A
> -
> -#define XGI_CRT2_PORT_00        (0x00 - 0x030)
> -
> -#define SupportAllCRT2      0x0078
> -#define NoSupportTV         0x0070
> -#define NoSupportHiVisionTV 0x0060
> -#define NoSupportLCD        0x0058
> -
> -/* -------------- SetMode Stack/Scratch */
> -#define XGI_SetCRT2ToLCDA   0x0100
> -#define SetCRT2ToDualEdge   0x8000
> -
> -#define ReserveTVOption     0x0008
> -
> -#define SetTVLowResolution   0x0400
> -#define TVSimuMode           0x0800
> -#define RPLLDIV2XO           0x1000
> -#define NTSC1024x768         0x2000
> -#define SetTVLockMode        0x4000
> -
> -#define XGI_LCDVESATiming    0x0001 /* LCD Info/CR37 */
> -#define XGI_EnableLVDSDDA    0x0002
> -#define EnableScalingLCD     0x0008
> -#define SetPWDEnable         0x0004
> -#define SetLCDtoNonExpanding 0x0010
> -#define SetLCDDualLink       0x0100
> -#define SetLCDLowResolution  0x0200
> -
> -/* LCD Capability shampoo */
> -#define DefaultLCDCap        0x80ea
> -#define EnableLCD24bpp       0x0004 /* default */
> -#define LCDPolarity          0x00c0 /* default: SyncNN */
> -#define XGI_LCDDualLink      0x0100
> -#define EnableSpectrum       0x0200
> -#define PWDEnable            0x0400
> -#define EnableVBCLKDRVLOW    0x4000
> -#define EnablePLLSPLOW       0x8000
> -
> -#define AVIDEOSense          0x01   /* CR32 */
> -#define SVIDEOSense          0x02
> -#define SCARTSense           0x04
> -#define LCDSense             0x08
> -#define Monitor2Sense        0x10
> -#define Monitor1Sense        0x20
> -#define HiTVSense            0x40
> -
> -#define YPbPrSense           0x80   /* NEW SCRATCH */
> -
> -#define TVSense              0xc7
> -
> -#define YPbPrMode            0xe0
> -#define YPbPrMode525i        0x00
> -#define YPbPrMode525p        0x20
> -#define YPbPrMode750p        0x40
> -#define YPbPrMode1080i       0x60
> -
> -#define ScalingLCD           0x08
> -
> -#define SetYPbPr             0x04
> -
> -/* ---------------------- VUMA Information */
> -#define DisplayDeviceFromCMOS 0x10
> -
> -/* ---------------------- HK Evnet Definition */
> -#define XGI_ModeSwitchStatus  0xf0
> -#define ActiveCRT1            0x10
> -#define ActiveLCD             0x0020
> -#define ActiveTV              0x40
> -#define ActiveCRT2            0x80
> -
> -#define ActiveAVideo          0x01
> -#define ActiveSVideo          0x02
> -#define ActiveSCART           0x04
> -#define ActiveHiTV            0x08
> -#define ActiveYPbPr           0x10
> -
> -#define NTSC1024x768HT       1908
> -
> -#define YPbPrTV525iHT        1716 /* YPbPr */
> -#define YPbPrTV525iVT         525
> -#define YPbPrTV525pHT        1716
> -#define YPbPrTV525pVT         525
> -#define YPbPrTV750pHT        1650
> -#define YPbPrTV750pVT         750
> -
> -#define VCLK25_175           0x00
> -#define VCLK28_322           0x01
> -#define VCLK31_5             0x02
> -#define VCLK36               0x03
> -#define VCLK43_163           0x05
> -#define VCLK44_9             0x06
> -#define VCLK49_5             0x07
> -#define VCLK50               0x08
> -#define VCLK52_406           0x09
> -#define VCLK56_25            0x0A
> -#define VCLK68_179           0x0D
> -#define VCLK72_852           0x0E
> -#define VCLK75               0x0F
> -#define VCLK78_75            0x11
> -#define VCLK79_411           0x12
> -#define VCLK83_95            0x13
> -#define VCLK86_6             0x15
> -#define VCLK94_5             0x16
> -#define VCLK113_309          0x1B
> -#define VCLK116_406          0x1C
> -#define VCLK135_5            0x1E
> -#define VCLK139_054          0x1F
> -#define VCLK157_5            0x20
> -#define VCLK162              0x21
> -#define VCLK175              0x22
> -#define VCLK189              0x23
> -#define VCLK202_5            0x25
> -#define VCLK229_5            0x26
> -#define VCLK234              0x27
> -#define VCLK254_817          0x29
> -#define VCLK266_952          0x2B
> -#define VCLK269_655          0x2C
> -#define VCLK277_015          0x2E
> -#define VCLK291_132          0x30
> -#define VCLK291_766          0x31
> -#define VCLK315_195          0x33
> -#define VCLK323_586          0x34
> -#define VCLK330_615          0x35
> -#define VCLK340_477          0x37
> -#define VCLK375_847          0x38
> -#define VCLK388_631          0x39
> -#define VCLK125_999          0x51
> -#define VCLK148_5            0x52
> -#define VCLK217_325          0x55
> -#define XGI_YPbPr750pVCLK    0x57
> -
> -#define VCLK39_77            0x40
> -#define YPbPr525pVCLK        0x3A
> -#define NTSC1024VCLK         0x41
> -#define VCLK35_2             0x49 /* ; 800x480 */
> -#define VCLK122_61           0x4A
> -#define VCLK80_350           0x4B
> -#define VCLK107_385          0x4C
> -
> -#define RES320x200           0x00
> -#define RES320x240           0x01
> -#define RES400x300           0x02
> -#define RES512x384           0x03
> -#define RES640x400           0x04
> -#define RES640x480x60        0x05
> -#define RES640x480x72        0x06
> -#define RES640x480x75        0x07
> -#define RES640x480x85        0x08
> -#define RES640x480x100       0x09
> -#define RES640x480x120       0x0A
> -#define RES640x480x160       0x0B
> -#define RES640x480x200       0x0C
> -#define RES800x600x56        0x0D
> -#define RES800x600x60        0x0E
> -#define RES800x600x72        0x0F
> -#define RES800x600x75        0x10
> -#define RES800x600x85        0x11
> -#define RES800x600x100       0x12
> -#define RES800x600x120       0x13
> -#define RES800x600x160       0x14
> -#define RES1024x768x43       0x15
> -#define RES1024x768x60       0x16
> -#define RES1024x768x70       0x17
> -#define RES1024x768x75       0x18
> -#define RES1024x768x85       0x19
> -#define RES1024x768x100      0x1A
> -#define RES1024x768x120      0x1B
> -#define RES1280x1024x43      0x1C
> -#define RES1280x1024x60      0x1D
> -#define RES1280x1024x75      0x1E
> -#define RES1280x1024x85      0x1F
> -#define RES1600x1200x60      0x20
> -#define RES1600x1200x65      0x21
> -#define RES1600x1200x70      0x22
> -#define RES1600x1200x75      0x23
> -#define RES1600x1200x85      0x24
> -#define RES1600x1200x100     0x25
> -#define RES1600x1200x120     0x26
> -#define RES1920x1440x60      0x27
> -#define RES1920x1440x65      0x28
> -#define RES1920x1440x70      0x29
> -#define RES1920x1440x75      0x2A
> -#define RES1920x1440x85      0x2B
> -#define RES1920x1440x100     0x2C
> -#define RES2048x1536x60      0x2D
> -#define RES2048x1536x65      0x2E
> -#define RES2048x1536x70      0x2F
> -#define RES2048x1536x75      0x30
> -#define RES2048x1536x85      0x31
> -#define RES800x480x60        0x32
> -#define RES800x480x75        0x33
> -#define RES800x480x85        0x34
> -#define RES1024x576x60       0x35
> -#define RES1024x576x75       0x36
> -#define RES1024x576x85       0x37
> -#define RES1280x720x60       0x38
> -#define RES1280x720x75       0x39
> -#define RES1280x720x85       0x3A
> -#define RES1280x960x60       0x3B
> -#define RES720x480x60        0x3C
> -#define RES720x576x56        0x3D
> -#define RES856x480x79I       0x3E
> -#define RES856x480x60        0x3F
> -#define RES1280x768x60       0x40
> -#define RES1400x1050x60      0x41
> -#define RES1152x864x60       0x42
> -#define RES1152x864x75       0x43
> -#define RES1024x768x160      0x44
> -#define RES1280x960x75       0x45
> -#define RES1280x960x85       0x46
> -#define RES1280x960x120      0x47
> -
> -#define XG27_CR8F 0x0C
> -#define XG27_SR36 0x30
> -#define XG27_SR40 0x04
> -#define XG27_SR41 0x00
> -#define XG40_CRCF 0x13
> -#define XGI330_CRT2Data_1_2 0
> -#define XGI330_CRT2Data_4_D 0
> -#define XGI330_CRT2Data_4_E 0
> -#define XGI330_CRT2Data_4_10 0x80
> -#define XGI330_SR07 0x18
> -#define XGI330_SR1F 0
> -#define XGI330_SR23 0xf6
> -#define XGI330_SR24 0x0d
> -#define XGI330_SR31 0xc0
> -#define XGI330_SR32 0x11
> -#define XGI330_SR33 0
> -
> -extern const struct XGI_ExtStruct XGI330_EModeIDTable[];
> -extern const struct XGI_Ext2Struct XGI330_RefIndex[];
> -extern const struct XGI_CRT1TableStruct XGI_CRT1Table[];
> -extern const struct XGI_ECLKDataStruct XGI340_ECLKData[];
> -extern const struct SiS_VCLKData XGI_VCLKData[];
> -extern const unsigned char XGI340_CR6B[][4];
> -extern const unsigned char XGI340_AGPReg[];
> -
> -#endif
> diff --git a/drivers/staging/xgifb/vb_init.c b/drivers/staging/xgifb/vb_init.c
> deleted file mode 100644
> index ac1c815a3c5e..000000000000
> --- a/drivers/staging/xgifb/vb_init.c
> +++ /dev/null
> @@ -1,1367 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/delay.h>
> -#include <linux/vmalloc.h>
> -
> -#include "XGIfb.h"
> -#include "vb_def.h"
> -#include "vb_util.h"
> -#include "vb_setmode.h"
> -#include "vb_init.h"
> -static const unsigned short XGINew_DDRDRAM_TYPE340[4][2] = {
> -	{ 16, 0x45},
> -	{  8, 0x35},
> -	{  4, 0x31},
> -	{  2, 0x21} };
> -
> -static const unsigned short XGINew_DDRDRAM_TYPE20[12][2] = {
> -	{ 128, 0x5D},
> -	{ 64, 0x59},
> -	{ 64, 0x4D},
> -	{ 32, 0x55},
> -	{ 32, 0x49},
> -	{ 32, 0x3D},
> -	{ 16, 0x51},
> -	{ 16, 0x45},
> -	{ 16, 0x39},
> -	{  8, 0x41},
> -	{  8, 0x35},
> -	{  4, 0x31} };
> -
> -#define XGIFB_ROM_SIZE	65536
> -
> -static unsigned char
> -XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceExtension,
> -		       struct vb_device_info *pVBInfo)
> -{
> -	unsigned char data, temp;
> -
> -	if (HwDeviceExtension->jChipType < XG20) {
> -		data = xgifb_reg_get(pVBInfo->P3c4, 0x39) & 0x02;
> -		if (data == 0)
> -			data = (xgifb_reg_get(pVBInfo->P3c4, 0x3A) &
> -				   0x02) >> 1;
> -		return data;
> -	} else if (HwDeviceExtension->jChipType == XG27) {
> -		temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B);
> -		/* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */
> -		if (((temp & 0x88) == 0x80) || ((temp & 0x88) == 0x08))
> -			data = 0; /* DDR */
> -		else
> -			data = 1; /* DDRII */
> -		return data;
> -	} else if (HwDeviceExtension->jChipType == XG21) {
> -		/* Independent GPIO control */
> -		xgifb_reg_and(pVBInfo->P3d4, 0xB4, ~0x02);
> -		usleep_range(800, 1800);
> -		xgifb_reg_or(pVBInfo->P3d4, 0x4A, 0x80); /* Enable GPIOH read */
> -		/* GPIOF 0:DVI 1:DVO */
> -		data = xgifb_reg_get(pVBInfo->P3d4, 0x48);
> -		/*
> -		 * HOTPLUG_SUPPORT
> -		 * for current XG20 & XG21, GPIOH is floating, driver will
> -		 * fix DDR temporarily
> -		 */
> -		/* DVI read GPIOH */
> -		data &= 0x01; /* 1=DDRII, 0=DDR */
> -		/* ~HOTPLUG_SUPPORT */
> -		xgifb_reg_or(pVBInfo->P3d4, 0xB4, 0x02);
> -		return data;
> -	}
> -	data = xgifb_reg_get(pVBInfo->P3d4, 0x97) & 0x01;
> -
> -	if (data == 1)
> -		data++;
> -
> -	return data;
> -}
> -
> -static void XGINew_DDR1x_MRS_340(unsigned long P3c4,
> -				 struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_set(P3c4, 0x18, 0x01);
> -	xgifb_reg_set(P3c4, 0x19, 0x20);
> -	xgifb_reg_set(P3c4, 0x16, 0x00);
> -	xgifb_reg_set(P3c4, 0x16, 0x80);
> -
> -	usleep_range(3, 1003);
> -	xgifb_reg_set(P3c4, 0x18, 0x00);
> -	xgifb_reg_set(P3c4, 0x19, 0x20);
> -	xgifb_reg_set(P3c4, 0x16, 0x00);
> -	xgifb_reg_set(P3c4, 0x16, 0x80);
> -
> -	usleep_range(60, 1060);
> -	xgifb_reg_set(P3c4, 0x18, pVBInfo->SR18[pVBInfo->ram_type]); /* SR18 */
> -	xgifb_reg_set(P3c4, 0x19, 0x01);
> -	xgifb_reg_set(P3c4, 0x16, 0x03);
> -	xgifb_reg_set(P3c4, 0x16, 0x83);
> -	usleep_range(1, 1001);
> -	xgifb_reg_set(P3c4, 0x1B, 0x03);
> -	usleep_range(500, 1500);
> -	xgifb_reg_set(P3c4, 0x18, pVBInfo->SR18[pVBInfo->ram_type]); /* SR18 */
> -	xgifb_reg_set(P3c4, 0x19, 0x00);
> -	xgifb_reg_set(P3c4, 0x16, 0x03);
> -	xgifb_reg_set(P3c4, 0x16, 0x83);
> -	xgifb_reg_set(P3c4, 0x1B, 0x00);
> -}
> -
> -static void XGINew_SetMemoryClock(struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_set(pVBInfo->P3c4,
> -		      0x28,
> -		      pVBInfo->MCLKData[pVBInfo->ram_type].SR28);
> -	xgifb_reg_set(pVBInfo->P3c4,
> -		      0x29,
> -		      pVBInfo->MCLKData[pVBInfo->ram_type].SR29);
> -	xgifb_reg_set(pVBInfo->P3c4,
> -		      0x2A,
> -		      pVBInfo->MCLKData[pVBInfo->ram_type].SR2A);
> -
> -	xgifb_reg_set(pVBInfo->P3c4,
> -		      0x2E,
> -		      XGI340_ECLKData[pVBInfo->ram_type].SR2E);
> -	xgifb_reg_set(pVBInfo->P3c4,
> -		      0x2F,
> -		      XGI340_ECLKData[pVBInfo->ram_type].SR2F);
> -	xgifb_reg_set(pVBInfo->P3c4,
> -		      0x30,
> -		      XGI340_ECLKData[pVBInfo->ram_type].SR30);
> -}
> -
> -static void XGINew_DDRII_Bootup_XG27(
> -			struct xgi_hw_device_info *HwDeviceExtension,
> -			unsigned long P3c4, struct vb_device_info *pVBInfo)
> -{
> -	unsigned long P3d4 = P3c4 + 0x10;
> -
> -	pVBInfo->ram_type = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo);
> -	XGINew_SetMemoryClock(pVBInfo);
> -
> -	/* Set Double Frequency */
> -	xgifb_reg_set(P3d4, 0x97, pVBInfo->XGINew_CR97); /* CR97 */
> -
> -	usleep_range(200, 1200);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x00); /* Set SR18 */ /* EMRS2 */
> -	xgifb_reg_set(P3c4, 0x19, 0x80); /* Set SR19 */
> -	xgifb_reg_set(P3c4, 0x16, 0x20); /* Set SR16 */
> -	usleep_range(15, 1015);
> -	xgifb_reg_set(P3c4, 0x16, 0xA0); /* Set SR16 */
> -	usleep_range(15, 1015);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x00); /* Set SR18 */ /* EMRS3 */
> -	xgifb_reg_set(P3c4, 0x19, 0xC0); /* Set SR19 */
> -	xgifb_reg_set(P3c4, 0x16, 0x20); /* Set SR16 */
> -	usleep_range(15, 1015);
> -	xgifb_reg_set(P3c4, 0x16, 0xA0); /* Set SR16 */
> -	usleep_range(15, 1015);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x00); /* Set SR18 */ /* EMRS1 */
> -	xgifb_reg_set(P3c4, 0x19, 0x40); /* Set SR19 */
> -	xgifb_reg_set(P3c4, 0x16, 0x20); /* Set SR16 */
> -	usleep_range(30, 1030);
> -	xgifb_reg_set(P3c4, 0x16, 0xA0); /* Set SR16 */
> -	usleep_range(15, 1015);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x42); /* Set SR18 */ /* MRS, DLL Enable */
> -	xgifb_reg_set(P3c4, 0x19, 0x0A); /* Set SR19 */
> -	xgifb_reg_set(P3c4, 0x16, 0x00); /* Set SR16 */
> -	usleep_range(30, 1030);
> -	xgifb_reg_set(P3c4, 0x16, 0x00); /* Set SR16 */
> -	xgifb_reg_set(P3c4, 0x16, 0x80); /* Set SR16 */
> -
> -	xgifb_reg_set(P3c4, 0x1B, 0x04); /* Set SR1B */
> -	usleep_range(60, 1060);
> -	xgifb_reg_set(P3c4, 0x1B, 0x00); /* Set SR1B */
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x42); /* Set SR18 */ /* MRS, DLL Reset */
> -	xgifb_reg_set(P3c4, 0x19, 0x08); /* Set SR19 */
> -	xgifb_reg_set(P3c4, 0x16, 0x00); /* Set SR16 */
> -
> -	usleep_range(30, 1030);
> -	xgifb_reg_set(P3c4, 0x16, 0x83); /* Set SR16 */
> -	usleep_range(15, 1015);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x80); /* Set SR18 */ /* MRS, ODT */
> -	xgifb_reg_set(P3c4, 0x19, 0x46); /* Set SR19 */
> -	xgifb_reg_set(P3c4, 0x16, 0x20); /* Set SR16 */
> -	usleep_range(30, 1030);
> -	xgifb_reg_set(P3c4, 0x16, 0xA0); /* Set SR16 */
> -	usleep_range(15, 1015);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x00); /* Set SR18 */ /* EMRS */
> -	xgifb_reg_set(P3c4, 0x19, 0x40); /* Set SR19 */
> -	xgifb_reg_set(P3c4, 0x16, 0x20); /* Set SR16 */
> -	usleep_range(30, 1030);
> -	xgifb_reg_set(P3c4, 0x16, 0xA0); /* Set SR16 */
> -	usleep_range(15, 1015);
> -
> -	/* Set SR1B refresh control 000:close; 010:open */
> -	xgifb_reg_set(P3c4, 0x1B, 0x04);
> -	usleep_range(200, 1200);
> -}
> -
> -static void XGINew_DDR2_MRS_XG20(struct xgi_hw_device_info *HwDeviceExtension,
> -				 unsigned long P3c4,
> -				 struct vb_device_info *pVBInfo)
> -{
> -	unsigned long P3d4 = P3c4 + 0x10;
> -
> -	pVBInfo->ram_type = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo);
> -	XGINew_SetMemoryClock(pVBInfo);
> -
> -	xgifb_reg_set(P3d4, 0x97, 0x11); /* CR97 */
> -
> -	usleep_range(200, 1200);
> -	xgifb_reg_set(P3c4, 0x18, 0x00); /* EMRS2 */
> -	xgifb_reg_set(P3c4, 0x19, 0x80);
> -	xgifb_reg_set(P3c4, 0x16, 0x05);
> -	xgifb_reg_set(P3c4, 0x16, 0x85);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x00); /* EMRS3 */
> -	xgifb_reg_set(P3c4, 0x19, 0xC0);
> -	xgifb_reg_set(P3c4, 0x16, 0x05);
> -	xgifb_reg_set(P3c4, 0x16, 0x85);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x00); /* EMRS1 */
> -	xgifb_reg_set(P3c4, 0x19, 0x40);
> -	xgifb_reg_set(P3c4, 0x16, 0x05);
> -	xgifb_reg_set(P3c4, 0x16, 0x85);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x42); /* MRS1 */
> -	xgifb_reg_set(P3c4, 0x19, 0x02);
> -	xgifb_reg_set(P3c4, 0x16, 0x05);
> -	xgifb_reg_set(P3c4, 0x16, 0x85);
> -
> -	usleep_range(15, 1015);
> -	xgifb_reg_set(P3c4, 0x1B, 0x04); /* SR1B */
> -	usleep_range(30, 1030);
> -	xgifb_reg_set(P3c4, 0x1B, 0x00); /* SR1B */
> -	usleep_range(100, 1100);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x42); /* MRS1 */
> -	xgifb_reg_set(P3c4, 0x19, 0x00);
> -	xgifb_reg_set(P3c4, 0x16, 0x05);
> -	xgifb_reg_set(P3c4, 0x16, 0x85);
> -
> -	usleep_range(200, 1200);
> -}
> -
> -static void XGINew_DDR1x_MRS_XG20(unsigned long P3c4,
> -				  struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_set(P3c4, 0x18, 0x01);
> -	xgifb_reg_set(P3c4, 0x19, 0x40);
> -	xgifb_reg_set(P3c4, 0x16, 0x00);
> -	xgifb_reg_set(P3c4, 0x16, 0x80);
> -	usleep_range(60, 1060);
> -
> -	xgifb_reg_set(P3c4, 0x18, 0x00);
> -	xgifb_reg_set(P3c4, 0x19, 0x40);
> -	xgifb_reg_set(P3c4, 0x16, 0x00);
> -	xgifb_reg_set(P3c4, 0x16, 0x80);
> -	usleep_range(60, 1060);
> -	xgifb_reg_set(P3c4, 0x18, pVBInfo->SR18[pVBInfo->ram_type]); /* SR18 */
> -	xgifb_reg_set(P3c4, 0x19, 0x01);
> -	xgifb_reg_set(P3c4, 0x16, 0x03);
> -	xgifb_reg_set(P3c4, 0x16, 0x83);
> -	usleep_range(1, 1001);
> -	xgifb_reg_set(P3c4, 0x1B, 0x03);
> -	usleep_range(500, 1500);
> -	xgifb_reg_set(P3c4, 0x18, pVBInfo->SR18[pVBInfo->ram_type]); /* SR18 */
> -	xgifb_reg_set(P3c4, 0x19, 0x00);
> -	xgifb_reg_set(P3c4, 0x16, 0x03);
> -	xgifb_reg_set(P3c4, 0x16, 0x83);
> -	xgifb_reg_set(P3c4, 0x1B, 0x00);
> -}
> -
> -static void XGINew_DDR1x_DefaultRegister(
> -		struct xgi_hw_device_info *HwDeviceExtension,
> -		unsigned long Port, struct vb_device_info *pVBInfo)
> -{
> -	unsigned long P3d4 = Port, P3c4 = Port - 0x10;
> -
> -	if (HwDeviceExtension->jChipType >= XG20) {
> -		XGINew_SetMemoryClock(pVBInfo);
> -		xgifb_reg_set(P3d4,
> -			      0x82,
> -			      pVBInfo->CR40[11][pVBInfo->ram_type]); /* CR82 */
> -		xgifb_reg_set(P3d4,
> -			      0x85,
> -			      pVBInfo->CR40[12][pVBInfo->ram_type]); /* CR85 */
> -		xgifb_reg_set(P3d4,
> -			      0x86,
> -			      pVBInfo->CR40[13][pVBInfo->ram_type]); /* CR86 */
> -
> -		xgifb_reg_set(P3d4, 0x98, 0x01);
> -		xgifb_reg_set(P3d4, 0x9A, 0x02);
> -
> -		XGINew_DDR1x_MRS_XG20(P3c4, pVBInfo);
> -	} else {
> -		XGINew_SetMemoryClock(pVBInfo);
> -
> -		switch (HwDeviceExtension->jChipType) {
> -		case XG42:
> -			/* CR82 */
> -			xgifb_reg_set(P3d4,
> -				      0x82,
> -				      pVBInfo->CR40[11][pVBInfo->ram_type]);
> -			/* CR85 */
> -			xgifb_reg_set(P3d4,
> -				      0x85,
> -				      pVBInfo->CR40[12][pVBInfo->ram_type]);
> -			/* CR86 */
> -			xgifb_reg_set(P3d4,
> -				      0x86,
> -				      pVBInfo->CR40[13][pVBInfo->ram_type]);
> -			break;
> -		default:
> -			xgifb_reg_set(P3d4, 0x82, 0x88);
> -			xgifb_reg_set(P3d4, 0x86, 0x00);
> -			/* Insert read command for delay */
> -			xgifb_reg_get(P3d4, 0x86);
> -			xgifb_reg_set(P3d4, 0x86, 0x88);
> -			xgifb_reg_get(P3d4, 0x86);
> -			xgifb_reg_set(P3d4,
> -				      0x86,
> -				      pVBInfo->CR40[13][pVBInfo->ram_type]);
> -			xgifb_reg_set(P3d4, 0x82, 0x77);
> -			xgifb_reg_set(P3d4, 0x85, 0x00);
> -
> -			/* Insert read command for delay */
> -			xgifb_reg_get(P3d4, 0x85);
> -			xgifb_reg_set(P3d4, 0x85, 0x88);
> -
> -			/* Insert read command for delay */
> -			xgifb_reg_get(P3d4, 0x85);
> -			/* CR85 */
> -			xgifb_reg_set(P3d4,
> -				      0x85,
> -				      pVBInfo->CR40[12][pVBInfo->ram_type]);
> -			/* CR82 */
> -			xgifb_reg_set(P3d4,
> -				      0x82,
> -				      pVBInfo->CR40[11][pVBInfo->ram_type]);
> -			break;
> -		}
> -
> -		xgifb_reg_set(P3d4, 0x97, 0x00);
> -		xgifb_reg_set(P3d4, 0x98, 0x01);
> -		xgifb_reg_set(P3d4, 0x9A, 0x02);
> -		XGINew_DDR1x_MRS_340(P3c4, pVBInfo);
> -	}
> -}
> -
> -static void XGINew_DDR2_DefaultRegister(
> -		struct xgi_hw_device_info *HwDeviceExtension,
> -		unsigned long Port, struct vb_device_info *pVBInfo)
> -{
> -	unsigned long P3d4 = Port, P3c4 = Port - 0x10;
> -	/*
> -	 * keep following setting sequence, each setting in
> -	 * the same reg insert idle
> -	 */
> -	xgifb_reg_set(P3d4, 0x82, 0x77);
> -	xgifb_reg_set(P3d4, 0x86, 0x00);
> -	xgifb_reg_get(P3d4, 0x86); /* Insert read command for delay */
> -	xgifb_reg_set(P3d4, 0x86, 0x88);
> -	xgifb_reg_get(P3d4, 0x86); /* Insert read command for delay */
> -	/* CR86 */
> -	xgifb_reg_set(P3d4, 0x86, pVBInfo->CR40[13][pVBInfo->ram_type]);
> -	xgifb_reg_set(P3d4, 0x82, 0x77);
> -	xgifb_reg_set(P3d4, 0x85, 0x00);
> -	xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */
> -	xgifb_reg_set(P3d4, 0x85, 0x88);
> -	xgifb_reg_get(P3d4, 0x85); /* Insert read command for delay */
> -	xgifb_reg_set(P3d4,
> -		      0x85,
> -		      pVBInfo->CR40[12][pVBInfo->ram_type]); /* CR85 */
> -	if (HwDeviceExtension->jChipType == XG27)
> -		/* CR82 */
> -		xgifb_reg_set(P3d4, 0x82, pVBInfo->CR40[11][pVBInfo->ram_type]);
> -	else
> -		xgifb_reg_set(P3d4, 0x82, 0xA8); /* CR82 */
> -
> -	xgifb_reg_set(P3d4, 0x98, 0x01);
> -	xgifb_reg_set(P3d4, 0x9A, 0x02);
> -	if (HwDeviceExtension->jChipType == XG27)
> -		XGINew_DDRII_Bootup_XG27(HwDeviceExtension, P3c4, pVBInfo);
> -	else
> -		XGINew_DDR2_MRS_XG20(HwDeviceExtension, P3c4, pVBInfo);
> -}
> -
> -static void XGI_SetDRAM_Helper(unsigned long P3d4, u8 seed, u8 temp2, u8 reg,
> -			       u8 shift_factor, u8 mask1, u8 mask2)
> -{
> -	u8 j;
> -
> -	for (j = 0; j < 4; j++) {
> -		temp2 |= (((seed >> (2 * j)) & 0x03) << shift_factor);
> -		xgifb_reg_set(P3d4, reg, temp2);
> -		xgifb_reg_get(P3d4, reg);
> -		temp2 &= mask1;
> -		temp2 += mask2;
> -	}
> -}
> -
> -static void XGINew_SetDRAMDefaultRegister340(
> -		struct xgi_hw_device_info *HwDeviceExtension,
> -		unsigned long Port, struct vb_device_info *pVBInfo)
> -{
> -	unsigned char temp, temp1, temp2, temp3, j, k;
> -
> -	unsigned long P3d4 = Port, P3c4 = Port - 0x10;
> -
> -	xgifb_reg_set(P3d4, 0x6D, pVBInfo->CR40[8][pVBInfo->ram_type]);
> -	xgifb_reg_set(P3d4, 0x68, pVBInfo->CR40[5][pVBInfo->ram_type]);
> -	xgifb_reg_set(P3d4, 0x69, pVBInfo->CR40[6][pVBInfo->ram_type]);
> -	xgifb_reg_set(P3d4, 0x6A, pVBInfo->CR40[7][pVBInfo->ram_type]);
> -
> -	/* CR6B DQS fine tune delay */
> -	temp = 0xaa;
> -	XGI_SetDRAM_Helper(P3d4, temp, 0, 0x6B, 2, 0xF0, 0x10);
> -
> -	/* CR6E DQM fine tune delay */
> -	XGI_SetDRAM_Helper(P3d4, 0, 0, 0x6E, 2, 0xF0, 0x10);
> -
> -	temp3 = 0;
> -	for (k = 0; k < 4; k++) {
> -		/* CR6E_D[1:0] select channel */
> -		xgifb_reg_and_or(P3d4, 0x6E, 0xFC, temp3);
> -		XGI_SetDRAM_Helper(P3d4, 0, 0, 0x6F, 0, 0xF8, 0x08);
> -		temp3 += 0x01;
> -	}
> -
> -	xgifb_reg_set(P3d4,
> -		      0x80,
> -		      pVBInfo->CR40[9][pVBInfo->ram_type]); /* CR80 */
> -	xgifb_reg_set(P3d4,
> -		      0x81,
> -		      pVBInfo->CR40[10][pVBInfo->ram_type]); /* CR81 */
> -
> -	temp2 = 0x80;
> -	/* CR89 terminator type select */
> -	XGI_SetDRAM_Helper(P3d4, 0, temp2, 0x89, 0, 0xF0, 0x10);
> -
> -	temp = 0;
> -	temp1 = temp & 0x03;
> -	temp2 |= temp1;
> -	xgifb_reg_set(P3d4, 0x89, temp2);
> -
> -	temp = pVBInfo->CR40[3][pVBInfo->ram_type];
> -	temp1 = temp & 0x0F;
> -	temp2 = (temp >> 4) & 0x07;
> -	temp3 = temp & 0x80;
> -	xgifb_reg_set(P3d4, 0x45, temp1); /* CR45 */
> -	xgifb_reg_set(P3d4, 0x99, temp2); /* CR99 */
> -	xgifb_reg_or(P3d4, 0x40, temp3); /* CR40_D[7] */
> -	xgifb_reg_set(P3d4,
> -		      0x41,
> -		      pVBInfo->CR40[0][pVBInfo->ram_type]); /* CR41 */
> -
> -	if (HwDeviceExtension->jChipType == XG27)
> -		xgifb_reg_set(P3d4, 0x8F, XG27_CR8F); /* CR8F */
> -
> -	for (j = 0; j <= 6; j++) /* CR90 - CR96 */
> -		xgifb_reg_set(P3d4, (0x90 + j),
> -			      pVBInfo->CR40[14 + j][pVBInfo->ram_type]);
> -
> -	for (j = 0; j <= 2; j++) /* CRC3 - CRC5 */
> -		xgifb_reg_set(P3d4, (0xC3 + j),
> -			      pVBInfo->CR40[21 + j][pVBInfo->ram_type]);
> -
> -	for (j = 0; j < 2; j++) /* CR8A - CR8B */
> -		xgifb_reg_set(P3d4, (0x8A + j),
> -			      pVBInfo->CR40[1 + j][pVBInfo->ram_type]);
> -
> -	if (HwDeviceExtension->jChipType == XG42)
> -		xgifb_reg_set(P3d4, 0x8C, 0x87);
> -
> -	xgifb_reg_set(P3d4,
> -		      0x59,
> -		      pVBInfo->CR40[4][pVBInfo->ram_type]); /* CR59 */
> -
> -	xgifb_reg_set(P3d4, 0x83, 0x09); /* CR83 */
> -	xgifb_reg_set(P3d4, 0x87, 0x00); /* CR87 */
> -	xgifb_reg_set(P3d4, 0xCF, XG40_CRCF); /* CRCF */
> -	if (pVBInfo->ram_type) {
> -		xgifb_reg_set(P3c4, 0x17, 0x80); /* SR17 DDRII */
> -		if (HwDeviceExtension->jChipType == XG27)
> -			xgifb_reg_set(P3c4, 0x17, 0x02); /* SR17 DDRII */
> -
> -	} else {
> -		xgifb_reg_set(P3c4, 0x17, 0x00); /* SR17 DDR */
> -	}
> -	xgifb_reg_set(P3c4, 0x1A, 0x87); /* SR1A */
> -
> -	temp = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo);
> -	if (temp == 0) {
> -		XGINew_DDR1x_DefaultRegister(HwDeviceExtension, P3d4, pVBInfo);
> -	} else {
> -		xgifb_reg_set(P3d4, 0xB0, 0x80); /* DDRII Dual frequency mode */
> -		XGINew_DDR2_DefaultRegister(HwDeviceExtension, P3d4, pVBInfo);
> -	}
> -	xgifb_reg_set(P3c4, 0x1B, 0x03); /* SR1B */
> -}
> -
> -static unsigned short XGINew_SetDRAMSize20Reg(
> -		unsigned short dram_size,
> -		struct vb_device_info *pVBInfo)
> -{
> -	unsigned short data = 0, memsize = 0;
> -	int RankSize;
> -	unsigned char ChannelNo;
> -
> -	RankSize = dram_size * pVBInfo->ram_bus / 8;
> -	data = xgifb_reg_get(pVBInfo->P3c4, 0x13);
> -	data &= 0x80;
> -
> -	if (data == 0x80)
> -		RankSize *= 2;
> -
> -	data = 0;
> -
> -	if (pVBInfo->ram_channel == 3)
> -		ChannelNo = 4;
> -	else
> -		ChannelNo = pVBInfo->ram_channel;
> -
> -	if (ChannelNo * RankSize <= 256) {
> -		while ((RankSize >>= 1) > 0)
> -			data += 0x10;
> -
> -		memsize = data >> 4;
> -
> -		/* Fix DRAM Sizing Error */
> -		xgifb_reg_set(pVBInfo->P3c4,
> -			      0x14,
> -			      (xgifb_reg_get(pVBInfo->P3c4, 0x14) & 0x0F) |
> -				(data & 0xF0));
> -		usleep_range(15, 1015);
> -	}
> -	return memsize;
> -}
> -
> -static int XGINew_ReadWriteRest(unsigned short StopAddr,
> -				unsigned short StartAddr,
> -				struct vb_device_info *pVBInfo)
> -{
> -	int i;
> -	unsigned long Position = 0;
> -	void __iomem *fbaddr = pVBInfo->FBAddr;
> -
> -	writel(Position, fbaddr + Position);
> -
> -	for (i = StartAddr; i <= StopAddr; i++) {
> -		Position = 1 << i;
> -		writel(Position, fbaddr + Position);
> -	}
> -
> -	/* Fix #1759 Memory Size error in Multi-Adapter. */
> -	usleep_range(500, 1500);
> -
> -	Position = 0;
> -
> -	if (readl(fbaddr + Position) != Position)
> -		return 0;
> -
> -	for (i = StartAddr; i <= StopAddr; i++) {
> -		Position = 1 << i;
> -		if (readl(fbaddr + Position) != Position)
> -			return 0;
> -	}
> -	return 1;
> -}
> -
> -static unsigned char XGINew_CheckFrequence(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char data;
> -
> -	data = xgifb_reg_get(pVBInfo->P3d4, 0x97);
> -
> -	if ((data & 0x10) == 0) {
> -		data = xgifb_reg_get(pVBInfo->P3c4, 0x39);
> -		return (data & 0x02) >> 1;
> -	}
> -	return data & 0x01;
> -}
> -
> -static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension,
> -				struct vb_device_info *pVBInfo)
> -{
> -	unsigned char data;
> -
> -	switch (HwDeviceExtension->jChipType) {
> -	case XG20:
> -	case XG21:
> -		data = xgifb_reg_get(pVBInfo->P3d4, 0x97);
> -		data = data & 0x01;
> -		pVBInfo->ram_channel = 1; /* XG20 "JUST" one channel */
> -
> -		if (data == 0) { /* Single_32_16 */
> -
> -			if ((HwDeviceExtension->ulVideoMemorySize - 1)
> -					> 0x1000000) {
> -				pVBInfo->ram_bus = 32; /* 32 bits */
> -				/* 22bit + 2 rank + 32bit */
> -				xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1);
> -				xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x52);
> -				usleep_range(15, 1015);
> -
> -				if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1)
> -					return;
> -
> -				if ((HwDeviceExtension->ulVideoMemorySize - 1) >
> -				    0x800000) {
> -					/* 22bit + 1 rank + 32bit */
> -					xgifb_reg_set(pVBInfo->P3c4,
> -						      0x13,
> -						      0x31);
> -					xgifb_reg_set(pVBInfo->P3c4,
> -						      0x14,
> -						      0x42);
> -					usleep_range(15, 1015);
> -
> -					if (XGINew_ReadWriteRest(23,
> -								 23,
> -								 pVBInfo) == 1)
> -						return;
> -				}
> -			}
> -
> -			if ((HwDeviceExtension->ulVideoMemorySize - 1) >
> -			    0x800000) {
> -				pVBInfo->ram_bus = 16; /* 16 bits */
> -				/* 22bit + 2 rank + 16bit */
> -				xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1);
> -				xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x41);
> -				usleep_range(15, 1015);
> -
> -				if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1)
> -					return;
> -				xgifb_reg_set(pVBInfo->P3c4,
> -					      0x13,
> -					      0x31);
> -				usleep_range(15, 1015);
> -			}
> -
> -		} else { /* Dual_16_8 */
> -			if ((HwDeviceExtension->ulVideoMemorySize - 1) >
> -			    0x800000) {
> -				pVBInfo->ram_bus = 16; /* 16 bits */
> -				/* (0x31:12x8x2) 22bit + 2 rank */
> -				xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1);
> -				/* 0x41:16Mx16 bit */
> -				xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x41);
> -				usleep_range(15, 1015);
> -
> -				if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1)
> -					return;
> -
> -				if ((HwDeviceExtension->ulVideoMemorySize - 1) >
> -				    0x400000) {
> -					/* (0x31:12x8x2) 22bit + 1 rank */
> -					xgifb_reg_set(pVBInfo->P3c4,
> -						      0x13,
> -						      0x31);
> -					/* 0x31:8Mx16 bit */
> -					xgifb_reg_set(pVBInfo->P3c4,
> -						      0x14,
> -						      0x31);
> -					usleep_range(15, 1015);
> -
> -					if (XGINew_ReadWriteRest(22,
> -								 22,
> -								 pVBInfo) == 1)
> -						return;
> -				}
> -			}
> -
> -			if ((HwDeviceExtension->ulVideoMemorySize - 1) >
> -			    0x400000) {
> -				pVBInfo->ram_bus = 8; /* 8 bits */
> -				/* (0x31:12x8x2) 22bit + 2 rank */
> -				xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1);
> -				/* 0x30:8Mx8 bit */
> -				xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x30);
> -				usleep_range(15, 1015);
> -
> -				if (XGINew_ReadWriteRest(22, 21, pVBInfo) == 1)
> -					return;
> -
> -				/* (0x31:12x8x2) 22bit + 1 rank */
> -				xgifb_reg_set(pVBInfo->P3c4,
> -					      0x13,
> -					      0x31);
> -				usleep_range(15, 1015);
> -			}
> -		}
> -		break;
> -
> -	case XG27:
> -		pVBInfo->ram_bus = 16; /* 16 bits */
> -		pVBInfo->ram_channel = 1; /* Single channel */
> -		xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x51); /* 32Mx16 bit */
> -		break;
> -	case XG42:
> -		/*
> -		 * XG42 SR14 D[3] Reserve
> -		 * D[2] = 1, Dual Channel
> -		 * = 0, Single Channel
> -		 *
> -		 * It's Different from Other XG40 Series.
> -		 */
> -		if (XGINew_CheckFrequence(pVBInfo) == 1) { /* DDRII, DDR2x */
> -			pVBInfo->ram_bus = 32; /* 32 bits */
> -			pVBInfo->ram_channel = 2; /* 2 Channel */
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x44);
> -
> -			if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1)
> -				return;
> -
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x21);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x34);
> -			if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1)
> -				return;
> -
> -			pVBInfo->ram_channel = 1; /* Single Channel */
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x40);
> -
> -			if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1)
> -				return;
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x21);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x30);
> -		} else { /* DDR */
> -			pVBInfo->ram_bus = 64; /* 64 bits */
> -			pVBInfo->ram_channel = 1; /* 1 channels */
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x52);
> -
> -			if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1)
> -				return;
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x21);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x42);
> -		}
> -
> -		break;
> -
> -	default: /* XG40 */
> -
> -		if (XGINew_CheckFrequence(pVBInfo) == 1) { /* DDRII */
> -			pVBInfo->ram_bus = 32; /* 32 bits */
> -			pVBInfo->ram_channel = 3;
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x4C);
> -
> -			if (XGINew_ReadWriteRest(25, 23, pVBInfo) == 1)
> -				return;
> -
> -			pVBInfo->ram_channel = 2; /* 2 channels */
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x48);
> -
> -			if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1)
> -				return;
> -
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x21);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x3C);
> -
> -			if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) {
> -				pVBInfo->ram_channel = 3; /* 4 channels */
> -			} else {
> -				pVBInfo->ram_channel = 2; /* 2 channels */
> -				xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x38);
> -			}
> -		} else { /* DDR */
> -			pVBInfo->ram_bus = 64; /* 64 bits */
> -			pVBInfo->ram_channel = 2; /* 2 channels */
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x5A);
> -
> -			if (XGINew_ReadWriteRest(25, 24, pVBInfo) == 1)
> -				return;
> -			xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x21);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x4A);
> -		}
> -		break;
> -	}
> -}
> -
> -static int XGINew_DDRSizing340(struct xgi_hw_device_info *HwDeviceExtension,
> -			       struct vb_device_info *pVBInfo)
> -{
> -	u8 i, size;
> -	unsigned short memsize, start_addr;
> -	const unsigned short (*dram_table)[2];
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x15, 0x00); /* noninterleaving */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x1C, 0x00); /* nontiling */
> -	XGINew_CheckChannel(HwDeviceExtension, pVBInfo);
> -
> -	if (HwDeviceExtension->jChipType >= XG20) {
> -		dram_table = XGINew_DDRDRAM_TYPE20;
> -		size = ARRAY_SIZE(XGINew_DDRDRAM_TYPE20);
> -		start_addr = 5;
> -	} else {
> -		dram_table = XGINew_DDRDRAM_TYPE340;
> -		size = ARRAY_SIZE(XGINew_DDRDRAM_TYPE340);
> -		start_addr = 9;
> -	}
> -
> -	for (i = 0; i < size; i++) {
> -		/* SetDRAMSizingType */
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x13, 0x80, dram_table[i][1]);
> -		usleep_range(50, 1050); /* should delay 50 ns */
> -
> -		memsize = XGINew_SetDRAMSize20Reg(dram_table[i][0], pVBInfo);
> -
> -		if (memsize == 0)
> -			continue;
> -
> -		memsize += (pVBInfo->ram_channel - 2) + 20;
> -		if ((HwDeviceExtension->ulVideoMemorySize - 1) <
> -			(unsigned long)(1 << memsize))
> -			continue;
> -
> -		if (XGINew_ReadWriteRest(memsize, start_addr, pVBInfo) == 1)
> -			return 1;
> -	}
> -	return 0;
> -}
> -
> -static void XGINew_SetDRAMSize_340(struct xgifb_video_info *xgifb_info,
> -				   struct xgi_hw_device_info *HwDeviceExtension,
> -				   struct vb_device_info *pVBInfo)
> -{
> -	unsigned short data;
> -
> -	pVBInfo->FBAddr = HwDeviceExtension->pjVideoMemoryAddress;
> -
> -	XGISetModeNew(xgifb_info, HwDeviceExtension, 0x2e);
> -
> -	data = xgifb_reg_get(pVBInfo->P3c4, 0x21);
> -	/* disable read cache */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x21, (unsigned short)(data & 0xDF));
> -	XGI_DisplayOff(xgifb_info, HwDeviceExtension, pVBInfo);
> -
> -	XGINew_DDRSizing340(HwDeviceExtension, pVBInfo);
> -	data = xgifb_reg_get(pVBInfo->P3c4, 0x21);
> -	/* enable read cache */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x21, (unsigned short)(data | 0x20));
> -}
> -
> -static u8 *xgifb_copy_rom(struct pci_dev *dev, size_t *rom_size)
> -{
> -	void __iomem *rom_address;
> -	u8 *rom_copy;
> -
> -	rom_address = pci_map_rom(dev, rom_size);
> -	if (!rom_address)
> -		return NULL;
> -
> -	rom_copy = vzalloc(XGIFB_ROM_SIZE);
> -	if (!rom_copy)
> -		goto done;
> -
> -	*rom_size = min_t(size_t, *rom_size, XGIFB_ROM_SIZE);
> -	memcpy_fromio(rom_copy, rom_address, *rom_size);
> -
> -done:
> -	pci_unmap_rom(dev, rom_address);
> -	return rom_copy;
> -}
> -
> -static bool xgifb_read_vbios(struct pci_dev *pdev)
> -{
> -	struct xgifb_video_info *xgifb_info = pci_get_drvdata(pdev);
> -	u8 *vbios;
> -	unsigned long i;
> -	unsigned char j;
> -	struct XGI21_LVDSCapStruct *lvds;
> -	size_t vbios_size;
> -	int entry;
> -
> -	vbios = xgifb_copy_rom(pdev, &vbios_size);
> -	if (!vbios) {
> -		dev_err(&pdev->dev, "Video BIOS not available\n");
> -		return false;
> -	}
> -	if (vbios_size <= 0x65)
> -		goto error;
> -	/*
> -	 * The user can ignore the LVDS bit in the BIOS and force the display
> -	 * type.
> -	 */
> -	if (!(vbios[0x65] & 0x1) &&
> -	    (!xgifb_info->display2_force ||
> -	     xgifb_info->display2 != XGIFB_DISP_LCD)) {
> -		vfree(vbios);
> -		return false;
> -	}
> -	if (vbios_size <= 0x317)
> -		goto error;
> -	i = vbios[0x316] | (vbios[0x317] << 8);
> -	if (vbios_size <= i - 1)
> -		goto error;
> -	j = vbios[i - 1];
> -	if (j == 0)
> -		goto error;
> -	if (j == 0xff)
> -		j = 1;
> -
> -	/* Read the LVDS table index scratch register set by the BIOS. */
> -
> -	entry = xgifb_reg_get(xgifb_info->dev_info.P3d4, 0x36);
> -	if (entry >= j)
> -		entry = 0;
> -	i += entry * 25;
> -	lvds = &xgifb_info->lvds_data;
> -	if (vbios_size <= i + 24)
> -		goto error;
> -	lvds->LVDS_Capability	= vbios[i]	| (vbios[i + 1] << 8);
> -	lvds->LVDSHT		= vbios[i + 2]	| (vbios[i + 3] << 8);
> -	lvds->LVDSVT		= vbios[i + 4]	| (vbios[i + 5] << 8);
> -	lvds->LVDSHDE		= vbios[i + 6]	| (vbios[i + 7] << 8);
> -	lvds->LVDSVDE		= vbios[i + 8]	| (vbios[i + 9] << 8);
> -	lvds->LVDSHFP		= vbios[i + 10]	| (vbios[i + 11] << 8);
> -	lvds->LVDSVFP		= vbios[i + 12]	| (vbios[i + 13] << 8);
> -	lvds->LVDSHSYNC		= vbios[i + 14]	| (vbios[i + 15] << 8);
> -	lvds->LVDSVSYNC		= vbios[i + 16]	| (vbios[i + 17] << 8);
> -	lvds->VCLKData1		= vbios[i + 18];
> -	lvds->VCLKData2		= vbios[i + 19];
> -	lvds->PSC_S1		= vbios[i + 20];
> -	lvds->PSC_S2		= vbios[i + 21];
> -	lvds->PSC_S3		= vbios[i + 22];
> -	lvds->PSC_S4		= vbios[i + 23];
> -	lvds->PSC_S5		= vbios[i + 24];
> -	vfree(vbios);
> -	return true;
> -error:
> -	dev_err(&pdev->dev, "Video BIOS corrupted\n");
> -	vfree(vbios);
> -	return false;
> -}
> -
> -static void XGINew_ChkSenseStatus(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx = 0, temp, tempcx, CR3CData;
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x32);
> -
> -	if (temp & Monitor1Sense)
> -		tempbx |= ActiveCRT1;
> -	if (temp & LCDSense)
> -		tempbx |= ActiveLCD;
> -	if (temp & Monitor2Sense)
> -		tempbx |= ActiveCRT2;
> -	if (temp & TVSense) {
> -		tempbx |= ActiveTV;
> -		if (temp & AVIDEOSense)
> -			tempbx |= (ActiveAVideo << 8);
> -		if (temp & SVIDEOSense)
> -			tempbx |= (ActiveSVideo << 8);
> -		if (temp & SCARTSense)
> -			tempbx |= (ActiveSCART << 8);
> -		if (temp & HiTVSense)
> -			tempbx |= (ActiveHiTV << 8);
> -		if (temp & YPbPrSense)
> -			tempbx |= (ActiveYPbPr << 8);
> -	}
> -
> -	tempcx = xgifb_reg_get(pVBInfo->P3d4, 0x3d);
> -	tempcx |= (xgifb_reg_get(pVBInfo->P3d4, 0x3e) << 8);
> -
> -	if (tempbx & tempcx) {
> -		CR3CData = xgifb_reg_get(pVBInfo->P3d4, 0x3c);
> -		if (!(CR3CData & DisplayDeviceFromCMOS))
> -			tempcx = 0x1FF0;
> -	} else {
> -		tempcx = 0x1FF0;
> -	}
> -
> -	tempbx &= tempcx;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x3d, (tempbx & 0x00FF));
> -	xgifb_reg_set(pVBInfo->P3d4, 0x3e, ((tempbx & 0xFF00) >> 8));
> -}
> -
> -static void XGINew_SetModeScratch(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short temp, tempcl = 0, tempch = 0, CR31Data, CR38Data;
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x3d);
> -	temp |= xgifb_reg_get(pVBInfo->P3d4, 0x3e) << 8;
> -	temp |= (xgifb_reg_get(pVBInfo->P3d4, 0x31) & (DriverMode >> 8)) << 8;
> -
> -	if (pVBInfo->IF_DEF_CRT2Monitor == 1) {
> -		if (temp & ActiveCRT2)
> -			tempcl = SetCRT2ToRAMDAC;
> -	}
> -
> -	if (temp & ActiveLCD) {
> -		tempcl |= SetCRT2ToLCD;
> -		if (temp & DriverMode) {
> -			if (temp & ActiveTV) {
> -				tempch = SetToLCDA | EnableDualEdge;
> -				temp ^= SetCRT2ToLCD;
> -
> -				if ((temp >> 8) & ActiveAVideo)
> -					tempcl |= SetCRT2ToAVIDEO;
> -				if ((temp >> 8) & ActiveSVideo)
> -					tempcl |= SetCRT2ToSVIDEO;
> -				if ((temp >> 8) & ActiveSCART)
> -					tempcl |= SetCRT2ToSCART;
> -
> -				if (pVBInfo->IF_DEF_HiVision == 1) {
> -					if ((temp >> 8) & ActiveHiTV)
> -						tempcl |= SetCRT2ToHiVision;
> -				}
> -
> -				if (pVBInfo->IF_DEF_YPbPr == 1) {
> -					if ((temp >> 8) & ActiveYPbPr)
> -						tempch |= SetYPbPr;
> -				}
> -			}
> -		}
> -	} else {
> -		if ((temp >> 8) & ActiveAVideo)
> -			tempcl |= SetCRT2ToAVIDEO;
> -		if ((temp >> 8) & ActiveSVideo)
> -			tempcl |= SetCRT2ToSVIDEO;
> -		if ((temp >> 8) & ActiveSCART)
> -			tempcl |= SetCRT2ToSCART;
> -
> -		if (pVBInfo->IF_DEF_HiVision == 1) {
> -			if ((temp >> 8) & ActiveHiTV)
> -				tempcl |= SetCRT2ToHiVision;
> -		}
> -
> -		if (pVBInfo->IF_DEF_YPbPr == 1) {
> -			if ((temp >> 8) & ActiveYPbPr)
> -				tempch |= SetYPbPr;
> -		}
> -	}
> -
> -	tempcl |= SetSimuScanMode;
> -	if ((!(temp & ActiveCRT1)) && ((temp & ActiveLCD) ||
> -				       (temp & ActiveTV) ||
> -				       (temp & ActiveCRT2)))
> -		tempcl ^= (SetSimuScanMode | SwitchCRT2);
> -	if ((temp & ActiveLCD) && (temp & ActiveTV))
> -		tempcl ^= (SetSimuScanMode | SwitchCRT2);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x30, tempcl);
> -
> -	CR31Data = xgifb_reg_get(pVBInfo->P3d4, 0x31);
> -	CR31Data &= ~(SetNotSimuMode >> 8);
> -	if (!(temp & ActiveCRT1))
> -		CR31Data |= (SetNotSimuMode >> 8);
> -	CR31Data &= ~(DisableCRT2Display >> 8);
> -	if (!((temp & ActiveLCD) || (temp & ActiveTV) || (temp & ActiveCRT2)))
> -		CR31Data |= (DisableCRT2Display >> 8);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x31, CR31Data);
> -
> -	CR38Data = xgifb_reg_get(pVBInfo->P3d4, 0x38);
> -	CR38Data &= ~SetYPbPr;
> -	CR38Data |= tempch;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x38, CR38Data);
> -}
> -
> -static unsigned short XGINew_SenseLCD(struct xgi_hw_device_info
> -							*HwDeviceExtension,
> -				      struct vb_device_info *pVBInfo)
> -{
> -	unsigned short temp = HwDeviceExtension->ulCRT2LCDType;
> -
> -	switch (HwDeviceExtension->ulCRT2LCDType) {
> -	case LCD_640x480:
> -	case LCD_1024x600:
> -	case LCD_1152x864:
> -	case LCD_1280x960:
> -	case LCD_1152x768:
> -	case LCD_1920x1440:
> -	case LCD_2048x1536:
> -		temp = 0; /* overwrite used ulCRT2LCDType */
> -		break;
> -	case LCD_UNKNOWN: /* unknown lcd, do nothing */
> -		return 0;
> -	}
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x36, 0xF0, temp);
> -	return 1;
> -}
> -
> -static void XGINew_GetXG21Sense(struct pci_dev *pdev,
> -				struct vb_device_info *pVBInfo)
> -{
> -	struct xgifb_video_info *xgifb_info = pci_get_drvdata(pdev);
> -	unsigned char Temp;
> -
> -	if (xgifb_read_vbios(pdev)) { /* For XG21 LVDS */
> -		xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense);
> -		/* LVDS on chip */
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xC0);
> -	} else {
> -		/* Enable GPIOA/B read */
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x03, 0x03);
> -		Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0xC0;
> -		if (Temp == 0xC0) { /* DVI & DVO GPIOA/B pull high */
> -			XGINew_SenseLCD(&xgifb_info->hw_info, pVBInfo);
> -			xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense);
> -			/* Enable read GPIOF */
> -			xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x20, 0x20);
> -			if (xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0x04)
> -				Temp = 0xA0; /* Only DVO on chip */
> -			else
> -				Temp = 0x80; /* TMDS on chip */
> -			xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, Temp);
> -			/* Disable read GPIOF */
> -			xgifb_reg_and(pVBInfo->P3d4, 0x4A, ~0x20);
> -		}
> -	}
> -}
> -
> -static void XGINew_GetXG27Sense(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char Temp, bCR4A;
> -
> -	bCR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A);
> -	/* Enable GPIOA/B/C read */
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x07, 0x07);
> -	Temp = xgifb_reg_get(pVBInfo->P3d4, 0x48) & 0x07;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x4A, bCR4A);
> -
> -	if (Temp <= 0x02) {
> -		/* LVDS setting */
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xC0);
> -		xgifb_reg_set(pVBInfo->P3d4, 0x30, 0x21);
> -	} else {
> -		/* TMDS/DVO setting */
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x38, ~0xE0, 0xA0);
> -	}
> -	xgifb_reg_or(pVBInfo->P3d4, 0x32, LCDSense);
> -}
> -
> -static unsigned char GetXG21FPBits(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CR38, CR4A, temp;
> -
> -	CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A);
> -	/* enable GPIOE read */
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x10, 0x10);
> -	CR38 = xgifb_reg_get(pVBInfo->P3d4, 0x38);
> -	temp = 0;
> -	if ((CR38 & 0xE0) > 0x80) {
> -		temp = xgifb_reg_get(pVBInfo->P3d4, 0x48);
> -		temp &= 0x08;
> -		temp >>= 3;
> -	}
> -
> -	xgifb_reg_set(pVBInfo->P3d4, 0x4A, CR4A);
> -
> -	return temp;
> -}
> -
> -static unsigned char GetXG27FPBits(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CR4A, temp;
> -
> -	CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A);
> -	/* enable GPIOA/B/C read */
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x4A, ~0x03, 0x03);
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x48);
> -	if (temp > 2)
> -		temp = ((temp & 0x04) >> 1) | ((~temp) & 0x01);
> -
> -	xgifb_reg_set(pVBInfo->P3d4, 0x4A, CR4A);
> -
> -	return temp;
> -}
> -
> -static bool xgifb_bridge_is_on(struct vb_device_info *vb_info)
> -{
> -	u8 flag;
> -
> -	flag = xgifb_reg_get(vb_info->Part4Port, 0x00);
> -	return flag == 1 || flag == 2;
> -}
> -
> -unsigned char XGIInitNew(struct pci_dev *pdev)
> -{
> -	struct xgifb_video_info *xgifb_info = pci_get_drvdata(pdev);
> -	struct xgi_hw_device_info *HwDeviceExtension = &xgifb_info->hw_info;
> -	struct vb_device_info VBINF;
> -	struct vb_device_info *pVBInfo = &VBINF;
> -	unsigned char i, temp = 0, temp1;
> -
> -	pVBInfo->FBAddr = HwDeviceExtension->pjVideoMemoryAddress;
> -
> -	if (!pVBInfo->FBAddr) {
> -		dev_dbg(&pdev->dev, "pVBInfo->FBAddr == 0\n");
> -		return 0;
> -	}
> -
> -	XGIRegInit(pVBInfo, xgifb_info->vga_base);
> -
> -	outb(0x67, pVBInfo->P3c2);
> -
> -	InitTo330Pointer(HwDeviceExtension->jChipType, pVBInfo);
> -
> -	/* Openkey */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x05, 0x86);
> -
> -	/* GetXG21Sense (GPIO) */
> -	if (HwDeviceExtension->jChipType == XG21)
> -		XGINew_GetXG21Sense(pdev, pVBInfo);
> -
> -	if (HwDeviceExtension->jChipType == XG27)
> -		XGINew_GetXG27Sense(pVBInfo);
> -
> -	/* Reset Extended register */
> -
> -	for (i = 0x06; i < 0x20; i++)
> -		xgifb_reg_set(pVBInfo->P3c4, i, 0);
> -
> -	for (i = 0x21; i <= 0x27; i++)
> -		xgifb_reg_set(pVBInfo->P3c4, i, 0);
> -
> -	for (i = 0x31; i <= 0x3B; i++)
> -		xgifb_reg_set(pVBInfo->P3c4, i, 0);
> -
> -	/* Auto over driver for XG42 */
> -	if (HwDeviceExtension->jChipType == XG42)
> -		xgifb_reg_set(pVBInfo->P3c4, 0x3B, 0xC0);
> -
> -	for (i = 0x79; i <= 0x7C; i++)
> -		xgifb_reg_set(pVBInfo->P3d4, i, 0);
> -
> -	if (HwDeviceExtension->jChipType >= XG20)
> -		xgifb_reg_set(pVBInfo->P3d4, 0x97, pVBInfo->XGINew_CR97);
> -
> -	/* SetDefExt1Regs begin */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x07, XGI330_SR07);
> -	if (HwDeviceExtension->jChipType == XG27) {
> -		xgifb_reg_set(pVBInfo->P3c4, 0x40, XG27_SR40);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x41, XG27_SR41);
> -	}
> -	xgifb_reg_set(pVBInfo->P3c4, 0x11, 0x0F);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x1F, XGI330_SR1F);
> -	/* Frame buffer can read/write SR20 */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x20, 0xA0);
> -	/* H/W request for slow corner chip */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x36, 0x70);
> -	if (HwDeviceExtension->jChipType == XG27)
> -		xgifb_reg_set(pVBInfo->P3c4, 0x36, XG27_SR36);
> -
> -	if (HwDeviceExtension->jChipType < XG20) {
> -		u32 Temp;
> -
> -		/* Set AGP customize registers (in SetDefAGPRegs) Start */
> -		for (i = 0x47; i <= 0x4C; i++)
> -			xgifb_reg_set(pVBInfo->P3d4,
> -				      i,
> -				      XGI340_AGPReg[i - 0x47]);
> -
> -		for (i = 0x70; i <= 0x71; i++)
> -			xgifb_reg_set(pVBInfo->P3d4,
> -				      i,
> -				      XGI340_AGPReg[6 + i - 0x70]);
> -
> -		for (i = 0x74; i <= 0x77; i++)
> -			xgifb_reg_set(pVBInfo->P3d4,
> -				      i,
> -				      XGI340_AGPReg[8 + i - 0x74]);
> -
> -		pci_read_config_dword(pdev, 0x50, &Temp);
> -		Temp >>= 20;
> -		Temp &= 0xF;
> -
> -		if (Temp == 1)
> -			xgifb_reg_set(pVBInfo->P3d4, 0x48, 0x20); /* CR48 */
> -	} /* != XG20 */
> -
> -	/* Set PCI */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x23, XGI330_SR23);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x24, XGI330_SR24);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x25, 0);
> -
> -	if (HwDeviceExtension->jChipType < XG20) {
> -		/* Set VB */
> -		XGI_UnLockCRT2(pVBInfo);
> -		/* disable VideoCapture */
> -		xgifb_reg_and_or(pVBInfo->Part0Port, 0x3F, 0xEF, 0x00);
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x00, 0x00);
> -		/* chk if BCLK>=100MHz */
> -		temp1 = xgifb_reg_get(pVBInfo->P3d4, 0x7B);
> -
> -		xgifb_reg_set(pVBInfo->Part1Port,
> -			      0x02, XGI330_CRT2Data_1_2);
> -
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x2E, 0x08); /* use VB */
> -	} /* != XG20 */
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x27, 0x1F);
> -
> -	if ((HwDeviceExtension->jChipType == XG42) &&
> -	    XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo) != 0) {
> -		/* Not DDR */
> -		xgifb_reg_set(pVBInfo->P3c4,
> -			      0x31,
> -			      (XGI330_SR31 & 0x3F) | 0x40);
> -		xgifb_reg_set(pVBInfo->P3c4,
> -			      0x32,
> -			      (XGI330_SR32 & 0xFC) | 0x01);
> -	} else {
> -		xgifb_reg_set(pVBInfo->P3c4, 0x31, XGI330_SR31);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x32, XGI330_SR32);
> -	}
> -	xgifb_reg_set(pVBInfo->P3c4, 0x33, XGI330_SR33);
> -
> -	if (HwDeviceExtension->jChipType < XG20) {
> -		if (xgifb_bridge_is_on(pVBInfo)) {
> -			xgifb_reg_set(pVBInfo->Part2Port, 0x00, 0x1C);
> -			xgifb_reg_set(pVBInfo->Part4Port,
> -				      0x0D, XGI330_CRT2Data_4_D);
> -			xgifb_reg_set(pVBInfo->Part4Port,
> -				      0x0E, XGI330_CRT2Data_4_E);
> -			xgifb_reg_set(pVBInfo->Part4Port,
> -				      0x10, XGI330_CRT2Data_4_10);
> -			xgifb_reg_set(pVBInfo->Part4Port, 0x0F, 0x3F);
> -			XGI_LockCRT2(pVBInfo);
> -		}
> -	} /* != XG20 */
> -
> -	XGI_SenseCRT1(pVBInfo);
> -
> -	if (HwDeviceExtension->jChipType == XG21) {
> -		xgifb_reg_and_or(pVBInfo->P3d4,
> -				 0x32,
> -				 ~Monitor1Sense,
> -				 Monitor1Sense); /* Z9 default has CRT */
> -		temp = GetXG21FPBits(pVBInfo);
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x37, ~0x01, temp);
> -	}
> -	if (HwDeviceExtension->jChipType == XG27) {
> -		xgifb_reg_and_or(pVBInfo->P3d4,
> -				 0x32,
> -				 ~Monitor1Sense,
> -				 Monitor1Sense); /* Z9 default has CRT */
> -		temp = GetXG27FPBits(pVBInfo);
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x37, ~0x03, temp);
> -	}
> -
> -	pVBInfo->ram_type = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo);
> -
> -	XGINew_SetDRAMDefaultRegister340(HwDeviceExtension,
> -					 pVBInfo->P3d4,
> -					 pVBInfo);
> -
> -	XGINew_SetDRAMSize_340(xgifb_info, HwDeviceExtension, pVBInfo);
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x22, 0xfa);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x21, 0xa3);
> -
> -	XGINew_ChkSenseStatus(pVBInfo);
> -	XGINew_SetModeScratch(pVBInfo);
> -
> -	xgifb_reg_set(pVBInfo->P3d4, 0x8c, 0x87);
> -
> -	return 1;
> -} /* end of init */
> diff --git a/drivers/staging/xgifb/vb_init.h b/drivers/staging/xgifb/vb_init.h
> deleted file mode 100644
> index 2f8a70133ebd..000000000000
> --- a/drivers/staging/xgifb/vb_init.h
> +++ /dev/null
> @@ -1,6 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _VBINIT_
> -#define _VBINIT_
> -unsigned char XGIInitNew(struct pci_dev *pdev);
> -void XGIRegInit(struct vb_device_info *XGI_Pr, unsigned long BaseAddr);
> -#endif
> diff --git a/drivers/staging/xgifb/vb_setmode.c b/drivers/staging/xgifb/vb_setmode.c
> deleted file mode 100644
> index 3782f8641bf2..000000000000
> --- a/drivers/staging/xgifb/vb_setmode.c
> +++ /dev/null
> @@ -1,5528 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/delay.h>
> -#include "XGIfb.h"
> -
> -#include "vb_def.h"
> -#include "vb_init.h"
> -#include "vb_util.h"
> -#include "vb_table.h"
> -#include "vb_setmode.h"
> -
> -#define  IndexMask 0xff
> -#define TVCLKBASE_315_25 (TVCLKBASE_315 + 25)
> -
> -static const unsigned short XGINew_VGA_DAC[] = {
> -	0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
> -	0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
> -	0x00, 0x05, 0x08, 0x0B, 0x0E, 0x11, 0x14, 0x18,
> -	0x1C, 0x20, 0x24, 0x28, 0x2D, 0x32, 0x38, 0x3F,
> -	0x00, 0x10, 0x1F, 0x2F, 0x3F, 0x1F, 0x27, 0x2F,
> -	0x37, 0x3F, 0x2D, 0x31, 0x36, 0x3A, 0x3F, 0x00,
> -	0x07, 0x0E, 0x15, 0x1C, 0x0E, 0x11, 0x15, 0x18,
> -	0x1C, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x00, 0x04,
> -	0x08, 0x0C, 0x10, 0x08, 0x0A, 0x0C, 0x0E, 0x10,
> -	0x0B, 0x0C, 0x0D, 0x0F, 0x10};
> -
> -void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
> -{
> -	pVBInfo->MCLKData = XGI340New_MCLKData;
> -
> -	pVBInfo->LCDResInfo = 0;
> -	pVBInfo->LCDTypeInfo = 0;
> -	pVBInfo->LCDInfo = 0;
> -	pVBInfo->VBInfo = 0;
> -	pVBInfo->TVInfo = 0;
> -
> -	pVBInfo->SR18 = XGI340_SR18;
> -	pVBInfo->CR40 = XGI340_cr41;
> -
> -	if (ChipType < XG20)
> -		XGI_GetVBType(pVBInfo);
> -
> -	/* 310 customization related */
> -	if ((pVBInfo->VBType & VB_SIS301LV) || (pVBInfo->VBType & VB_SIS302LV))
> -		pVBInfo->LCDCapList = XGI_LCDDLCapList;
> -	else
> -		pVBInfo->LCDCapList = XGI_LCDCapList;
> -
> -	if (ChipType >= XG20)
> -		pVBInfo->XGINew_CR97 = 0x10;
> -
> -	if (ChipType == XG27) {
> -		unsigned char temp;
> -
> -		pVBInfo->MCLKData = XGI27New_MCLKData;
> -		pVBInfo->CR40 = XGI27_cr41;
> -		pVBInfo->XGINew_CR97 = 0xc1;
> -		pVBInfo->SR18 = XG27_SR18;
> -
> -		/* Z11m DDR */
> -		temp = xgifb_reg_get(pVBInfo->P3c4, 0x3B);
> -		/* SR3B[7][3]MAA15 MAA11 (Power on Trapping) */
> -		if (((temp & 0x88) == 0x80) || ((temp & 0x88) == 0x08))
> -			pVBInfo->XGINew_CR97 = 0x80;
> -	}
> -}
> -
> -static void XGI_SetSeqRegs(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char SRdata, i;
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x00, 0x03); /* Set SR0 */
> -
> -	for (i = 0; i < 4; i++) {
> -		/* Get SR1,2,3,4 from file */
> -		/* SR1 is with screen off 0x20 */
> -		SRdata = XGI330_StandTable.SR[i];
> -		/* Set SR 1 2 3 4 */
> -		xgifb_reg_set(pVBInfo->P3c4, i + 1, SRdata);
> -	}
> -}
> -
> -static void XGI_SetCRTCRegs(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CRTCdata;
> -	unsigned short i;
> -
> -	CRTCdata = xgifb_reg_get(pVBInfo->P3d4, 0x11);
> -	CRTCdata &= 0x7f;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x11, CRTCdata); /* Unlock CRTC */
> -
> -	for (i = 0; i <= 0x18; i++) {
> -		/* Get CRTC from file */
> -		CRTCdata = XGI330_StandTable.CRTC[i];
> -		xgifb_reg_set(pVBInfo->P3d4, i, CRTCdata); /* Set CRTC(3d4) */
> -	}
> -}
> -
> -static void XGI_SetATTRegs(unsigned short ModeIdIndex,
> -			   struct vb_device_info *pVBInfo)
> -{
> -	unsigned char ARdata;
> -	unsigned short i, modeflag;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	for (i = 0; i <= 0x13; i++) {
> -		ARdata = XGI330_StandTable.ATTR[i];
> -
> -		if ((modeflag & Charx8Dot) && i == 0x13) { /* ifndef Dot9 */
> -			if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
> -				ARdata = 0;
> -			} else if ((pVBInfo->VBInfo &
> -				   (SetCRT2ToTV | SetCRT2ToLCD)) &&
> -				   (pVBInfo->VBInfo & SetInSlaveMode)) {
> -				ARdata = 0;
> -			}
> -		}
> -
> -		inb(pVBInfo->P3da); /* reset 3da */
> -		outb(i, pVBInfo->P3c0); /* set index */
> -		outb(ARdata, pVBInfo->P3c0); /* set data */
> -	}
> -
> -	inb(pVBInfo->P3da); /* reset 3da */
> -	outb(0x14, pVBInfo->P3c0); /* set index */
> -	outb(0x00, pVBInfo->P3c0); /* set data */
> -	inb(pVBInfo->P3da); /* Enable Attribute */
> -	outb(0x20, pVBInfo->P3c0);
> -}
> -
> -static void XGI_SetGRCRegs(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char GRdata;
> -	unsigned short i;
> -
> -	for (i = 0; i <= 0x08; i++) {
> -		/* Get GR from file */
> -		GRdata = XGI330_StandTable.GRC[i];
> -		xgifb_reg_set(pVBInfo->P3ce, i, GRdata); /* Set GR(3ce) */
> -	}
> -
> -	if (pVBInfo->ModeType > ModeVGA) {
> -		GRdata = xgifb_reg_get(pVBInfo->P3ce, 0x05);
> -		GRdata &= 0xBF; /* 256 color disable */
> -		xgifb_reg_set(pVBInfo->P3ce, 0x05, GRdata);
> -	}
> -}
> -
> -static void XGI_ClearExt1Regs(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i;
> -
> -	for (i = 0x0A; i <= 0x0E; i++)
> -		xgifb_reg_set(pVBInfo->P3c4, i, 0x00); /* Clear SR0A-SR0E */
> -}
> -
> -static unsigned char XGI_SetDefaultVCLK(struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x31, ~0x30, 0x20);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2B, XGI_VCLKData[0].SR2B);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2C, XGI_VCLKData[0].SR2C);
> -
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x31, ~0x30, 0x10);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2B, XGI_VCLKData[1].SR2B);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2C, XGI_VCLKData[1].SR2C);
> -
> -	xgifb_reg_and(pVBInfo->P3c4, 0x31, ~0x30);
> -	return 0;
> -}
> -
> -static unsigned char XGI_AjustCRT2Rate(unsigned short ModeIdIndex,
> -				       unsigned short RefreshRateTableIndex,
> -				       unsigned short *i,
> -		struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempax, tempbx, resinfo, modeflag, infoflag;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -	tempbx = XGI330_RefIndex[RefreshRateTableIndex + (*i)].ModeID;
> -	tempax = 0;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToRAMDAC) {
> -		tempax |= SupportRAMDAC2;
> -
> -		if (pVBInfo->VBType & VB_XGI301C)
> -			tempax |= SupportCRT2in301C;
> -	}
> -
> -	/* 301b */
> -	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
> -		tempax |= SupportLCD;
> -
> -		if (pVBInfo->LCDResInfo != Panel_1280x1024 &&
> -		    pVBInfo->LCDResInfo != Panel_1280x960 &&
> -		    (pVBInfo->LCDInfo & LCDNonExpanding) &&
> -		    resinfo >= 9)
> -			return 0;
> -	}
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision) { /* for HiTV */
> -		tempax |= SupportHiVision;
> -		if ((pVBInfo->VBInfo & SetInSlaveMode) &&
> -		    ((resinfo == 4) ||
> -		     (resinfo == 3 && (pVBInfo->SetFlag & TVSimuMode)) ||
> -		     (resinfo > 7)))
> -			return 0;
> -	} else if (pVBInfo->VBInfo & (SetCRT2ToAVIDEO | SetCRT2ToSVIDEO |
> -				      SetCRT2ToSCART | SetCRT2ToYPbPr525750 |
> -				      SetCRT2ToHiVision)) {
> -		tempax |= SupportTV;
> -
> -		if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV |
> -				       VB_SIS302LV | VB_XGI301C))
> -			tempax |= SupportTV1024;
> -
> -		if (!(pVBInfo->VBInfo & TVSetPAL) &&
> -		    (modeflag & NoSupportSimuTV) &&
> -		    (pVBInfo->VBInfo & SetInSlaveMode) &&
> -		    !(pVBInfo->VBInfo & SetNotSimuMode))
> -			return 0;
> -	}
> -
> -	for (; XGI330_RefIndex[RefreshRateTableIndex + (*i)].ModeID ==
> -	       tempbx; (*i)--) {
> -		infoflag = XGI330_RefIndex[RefreshRateTableIndex + (*i)].Ext_InfoFlag;
> -		if (infoflag & tempax)
> -			return 1;
> -
> -		if ((*i) == 0)
> -			break;
> -	}
> -
> -	for ((*i) = 0;; (*i)++) {
> -		infoflag = XGI330_RefIndex[RefreshRateTableIndex + (*i)].Ext_InfoFlag;
> -		if (XGI330_RefIndex[RefreshRateTableIndex + (*i)].ModeID
> -				!= tempbx) {
> -			return 0;
> -		}
> -
> -		if (infoflag & tempax)
> -			return 1;
> -	}
> -	return 1;
> -}
> -
> -static void XGI_SetSync(unsigned short RefreshRateTableIndex,
> -			struct vb_device_info *pVBInfo)
> -{
> -	unsigned short sync, temp;
> -
> -	/* di+0x00 */
> -	sync = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag >> 8;
> -	sync &= 0xC0;
> -	temp = 0x2F;
> -	temp |= sync;
> -	outb(temp, pVBInfo->P3c2); /* Set Misc(3c2) */
> -}
> -
> -static void XGI_SetCRT1Timing_H(struct vb_device_info *pVBInfo,
> -				struct xgi_hw_device_info *HwDeviceExtension)
> -{
> -	unsigned char data, data1, pushax;
> -	unsigned short i, j;
> -
> -	/* unlock cr0-7 */
> -	data = xgifb_reg_get(pVBInfo->P3d4, 0x11);
> -	data &= 0x7F;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x11, data);
> -
> -	data = pVBInfo->TimingH.data[0];
> -	xgifb_reg_set(pVBInfo->P3d4, 0, data);
> -
> -	for (i = 0x01; i <= 0x04; i++) {
> -		data = pVBInfo->TimingH.data[i];
> -		xgifb_reg_set(pVBInfo->P3d4, (unsigned short)(i + 1), data);
> -	}
> -
> -	for (i = 0x05; i <= 0x06; i++) {
> -		data = pVBInfo->TimingH.data[i];
> -		xgifb_reg_set(pVBInfo->P3c4, (unsigned short)(i + 6), data);
> -	}
> -
> -	j = xgifb_reg_get(pVBInfo->P3c4, 0x0e);
> -	j &= 0x1F;
> -	data = pVBInfo->TimingH.data[7];
> -	data &= 0xE0;
> -	data |= j;
> -	xgifb_reg_set(pVBInfo->P3c4, 0x0e, data);
> -
> -	if (HwDeviceExtension->jChipType >= XG20) {
> -		data = xgifb_reg_get(pVBInfo->P3d4, 0x04);
> -		data = data - 1;
> -		xgifb_reg_set(pVBInfo->P3d4, 0x04, data);
> -		data = xgifb_reg_get(pVBInfo->P3d4, 0x05);
> -		data1 = data;
> -		data1 &= 0xE0;
> -		data &= 0x1F;
> -		if (data == 0) {
> -			pushax = data;
> -			data = xgifb_reg_get(pVBInfo->P3c4, 0x0c);
> -			data &= 0xFB;
> -			xgifb_reg_set(pVBInfo->P3c4, 0x0c, data);
> -			data = pushax;
> -		}
> -		data = data - 1;
> -		data |= data1;
> -		xgifb_reg_set(pVBInfo->P3d4, 0x05, data);
> -		data = xgifb_reg_get(pVBInfo->P3c4, 0x0e);
> -		data >>= 5;
> -		data = data + 3;
> -		if (data > 7)
> -			data = data - 7;
> -		data <<= 5;
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x0e, ~0xE0, data);
> -	}
> -}
> -
> -static void XGI_SetCRT1Timing_V(unsigned short ModeIdIndex,
> -				struct vb_device_info *pVBInfo)
> -{
> -	unsigned char data;
> -	unsigned short i, j;
> -
> -	for (i = 0x00; i <= 0x01; i++) {
> -		data = pVBInfo->TimingV.data[i];
> -		xgifb_reg_set(pVBInfo->P3d4, (unsigned short)(i + 6), data);
> -	}
> -
> -	for (i = 0x02; i <= 0x03; i++) {
> -		data = pVBInfo->TimingV.data[i];
> -		xgifb_reg_set(pVBInfo->P3d4, (unsigned short)(i + 0x0e), data);
> -	}
> -
> -	for (i = 0x04; i <= 0x05; i++) {
> -		data = pVBInfo->TimingV.data[i];
> -		xgifb_reg_set(pVBInfo->P3d4, (unsigned short)(i + 0x11), data);
> -	}
> -
> -	j = xgifb_reg_get(pVBInfo->P3c4, 0x0a);
> -	j &= 0xC0;
> -	data = pVBInfo->TimingV.data[6];
> -	data &= 0x3F;
> -	data |= j;
> -	xgifb_reg_set(pVBInfo->P3c4, 0x0a, data);
> -
> -	data = pVBInfo->TimingV.data[6];
> -	data &= 0x80;
> -	data >>= 2;
> -
> -	i = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	i &= DoubleScanMode;
> -	if (i)
> -		data |= 0x80;
> -
> -	j = xgifb_reg_get(pVBInfo->P3d4, 0x09);
> -	j &= 0x5F;
> -	data |= j;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x09, data);
> -}
> -
> -static void XGI_SetCRT1CRTC(unsigned short ModeIdIndex,
> -			    unsigned short RefreshRateTableIndex,
> -			    struct vb_device_info *pVBInfo,
> -			    struct xgi_hw_device_info *HwDeviceExtension)
> -{
> -	unsigned char index, data;
> -	unsigned short i;
> -
> -	/* Get index */
> -	index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
> -	index = index & IndexMask;
> -
> -	data = xgifb_reg_get(pVBInfo->P3d4, 0x11);
> -	data &= 0x7F;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x11, data); /* Unlock CRTC */
> -
> -	for (i = 0; i < 8; i++)
> -		pVBInfo->TimingH.data[i]
> -				= XGI_CRT1Table[index].CR[i];
> -
> -	for (i = 0; i < 7; i++)
> -		pVBInfo->TimingV.data[i]
> -				= XGI_CRT1Table[index].CR[i + 8];
> -
> -	XGI_SetCRT1Timing_H(pVBInfo, HwDeviceExtension);
> -
> -	XGI_SetCRT1Timing_V(ModeIdIndex, pVBInfo);
> -
> -	if (pVBInfo->ModeType > 0x03)
> -		xgifb_reg_set(pVBInfo->P3d4, 0x14, 0x4F);
> -}
> -
> -/*
> - * Function : XGI_SetXG21CRTC
> - * Input : Stand or enhance CRTC table
> - * Output : Fill CRT Hsync/Vsync to SR2E/SR2F/SR30/SR33/SR34/SR3F
> - * Description : Set LCD timing
> - */
> -static void XGI_SetXG21CRTC(unsigned short RefreshRateTableIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned char index, Tempax, Tempbx, Tempcx, Tempdx;
> -	unsigned short Temp1, Temp2, Temp3;
> -
> -	index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
> -	/* Tempax: CR4 HRS */
> -	Tempax = XGI_CRT1Table[index].CR[3];
> -	Tempcx = Tempax; /* Tempcx: HRS */
> -	/* SR2E[7:0]->HRS */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
> -
> -	Tempdx = XGI_CRT1Table[index].CR[5]; /* SRB */
> -	Tempdx &= 0xC0; /* Tempdx[7:6]: SRB[7:6] */
> -	Temp1 = Tempdx; /* Temp1[7:6]: HRS[9:8] */
> -	Temp1 <<= 2; /* Temp1[9:8]: HRS[9:8] */
> -	Temp1 |= Tempax; /* Temp1[9:0]: HRS[9:0] */
> -
> -	Tempax = XGI_CRT1Table[index].CR[4]; /* CR5 HRE */
> -	Tempax &= 0x1F; /* Tempax[4:0]: HRE[4:0] */
> -
> -	Tempbx = XGI_CRT1Table[index].CR[6]; /* SRC */
> -	Tempbx &= 0x04; /* Tempbx[2]: HRE[5] */
> -	Tempbx <<= 3; /* Tempbx[5]: HRE[5] */
> -	Tempax |= Tempbx; /* Tempax[5:0]: HRE[5:0] */
> -
> -	Temp2 = Temp1 & 0x3C0; /* Temp2[9:6]: HRS[9:6] */
> -	Temp2 |= Tempax; /* Temp2[9:0]: HRE[9:0] */
> -
> -	Tempcx &= 0x3F; /* Tempcx[5:0]: HRS[5:0] */
> -	if (Tempax < Tempcx) /* HRE < HRS */
> -		Temp2 |= 0x40; /* Temp2 + 0x40 */
> -
> -	Temp2 &= 0xFF;
> -	Tempax = (unsigned char)Temp2; /* Tempax: HRE[7:0] */
> -	Tempax <<= 2; /* Tempax[7:2]: HRE[5:0] */
> -	Tempdx >>= 6; /* Tempdx[7:6]->[1:0] HRS[9:8] */
> -	Tempax |= Tempdx; /* HRE[5:0]HRS[9:8] */
> -	/* SR2F D[7:2]->HRE, D[1:0]->HRS */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempax);
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
> -
> -	/* CR10 VRS */
> -	Tempax = XGI_CRT1Table[index].CR[10];
> -	Tempbx = Tempax; /* Tempbx: VRS */
> -	Tempax &= 0x01; /* Tempax[0]: VRS[0] */
> -	xgifb_reg_or(pVBInfo->P3c4, 0x33, Tempax); /* SR33[0]->VRS[0] */
> -	/* CR7[2][7] VRE */
> -	Tempax = XGI_CRT1Table[index].CR[9];
> -	Tempcx = Tempbx >> 1; /* Tempcx[6:0]: VRS[7:1] */
> -	Tempdx = Tempax & 0x04; /* Tempdx[2]: CR7[2] */
> -	Tempdx <<= 5; /* Tempdx[7]: VRS[8] */
> -	Tempcx |= Tempdx; /* Tempcx[7:0]: VRS[8:1] */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempcx); /* SR34[8:1]->VRS */
> -
> -	Temp1 = Tempdx; /* Temp1[7]: Tempdx[7] */
> -	Temp1 <<= 1; /* Temp1[8]: VRS[8] */
> -	Temp1 |= Tempbx; /* Temp1[8:0]: VRS[8:0] */
> -	Tempax &= 0x80;
> -	Temp2 = Tempax << 2; /* Temp2[9]: VRS[9] */
> -	Temp1 |= Temp2; /* Temp1[9:0]: VRS[9:0] */
> -	/* Tempax: SRA */
> -	Tempax = XGI_CRT1Table[index].CR[14];
> -	Tempax &= 0x08; /* Tempax[3]: VRS[3] */
> -	Temp2 = Tempax;
> -	Temp2 <<= 7; /* Temp2[10]: VRS[10] */
> -	Temp1 |= Temp2; /* Temp1[10:0]: VRS[10:0] */
> -
> -	/* Tempax: CR11 VRE */
> -	Tempax = XGI_CRT1Table[index].CR[11];
> -	Tempax &= 0x0F; /* Tempax[3:0]: VRE[3:0] */
> -	/* Tempbx: SRA */
> -	Tempbx = XGI_CRT1Table[index].CR[14];
> -	Tempbx &= 0x20; /* Tempbx[5]: VRE[5] */
> -	Tempbx >>= 1; /* Tempbx[4]: VRE[4] */
> -	Tempax |= Tempbx; /* Tempax[4:0]: VRE[4:0] */
> -	Temp2 = Temp1 & 0x7E0; /* Temp2[10:5]: VRS[10:5] */
> -	Temp2 |= Tempax; /* Temp2[10:5]: VRE[10:5] */
> -
> -	Temp3 = Temp1 & 0x1F; /* Temp3[4:0]: VRS[4:0] */
> -	if (Tempax < Temp3) /* VRE < VRS */
> -		Temp2 |= 0x20; /* VRE + 0x20 */
> -
> -	Temp2 &= 0xFF;
> -	Tempax = (unsigned char)Temp2; /* Tempax: VRE[7:0] */
> -	Tempax <<= 2; /* Tempax[7:0]; VRE[5:0]00 */
> -	Temp1 &= 0x600; /* Temp1[10:9]: VRS[10:9] */
> -	Temp1 >>= 9; /* Temp1[1:0]: VRS[10:9] */
> -	Tempbx = (unsigned char)Temp1;
> -	Tempax |= Tempbx; /* Tempax[7:0]: VRE[5:0]VRS[10:9] */
> -	Tempax &= 0x7F;
> -	/* SR3F D[7:2]->VRE D[1:0]->VRS */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x3F, Tempax);
> -}
> -
> -static void XGI_SetXG27CRTC(unsigned short RefreshRateTableIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short index, Tempax, Tempbx, Tempcx;
> -
> -	index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
> -	/* Tempax: CR4 HRS */
> -	Tempax = XGI_CRT1Table[index].CR[3];
> -	Tempbx = Tempax; /* Tempbx: HRS[7:0] */
> -	/* SR2E[7:0]->HRS */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
> -
> -	/* SR0B */
> -	Tempax = XGI_CRT1Table[index].CR[5];
> -	Tempax &= 0xC0; /* Tempax[7:6]: SR0B[7:6]: HRS[9:8] */
> -	Tempbx |= Tempax << 2; /* Tempbx: HRS[9:0] */
> -
> -	Tempax = XGI_CRT1Table[index].CR[4]; /* CR5 HRE */
> -	Tempax &= 0x1F; /* Tempax[4:0]: HRE[4:0] */
> -	Tempcx = Tempax; /* Tempcx: HRE[4:0] */
> -
> -	Tempax = XGI_CRT1Table[index].CR[6]; /* SRC */
> -	Tempax &= 0x04; /* Tempax[2]: HRE[5] */
> -	Tempax <<= 3; /* Tempax[5]: HRE[5] */
> -	Tempcx |= Tempax; /* Tempcx[5:0]: HRE[5:0] */
> -
> -	Tempbx = Tempbx & 0x3C0; /* Tempbx[9:6]: HRS[9:6] */
> -	Tempbx |= Tempcx; /* Tempbx: HRS[9:6]HRE[5:0] */
> -
> -	/* Tempax: CR4 HRS */
> -	Tempax = XGI_CRT1Table[index].CR[3];
> -	Tempax &= 0x3F; /* Tempax: HRS[5:0] */
> -	if (Tempcx <= Tempax) /* HRE[5:0] < HRS[5:0] */
> -		Tempbx += 0x40; /* Tempbx= Tempbx + 0x40 : HRE[9:0]*/
> -
> -	Tempax = XGI_CRT1Table[index].CR[5]; /* SR0B */
> -	Tempax &= 0xC0; /* Tempax[7:6]: SR0B[7:6]: HRS[9:8]*/
> -	Tempax >>= 6; /* Tempax[1:0]: HRS[9:8]*/
> -	Tempax |= (Tempbx << 2) & 0xFF; /* Tempax[7:2]: HRE[5:0] */
> -	/* SR2F [7:2][1:0]: HRE[5:0]HRS[9:8] */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempax);
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
> -
> -	/* CR10 VRS */
> -	Tempax = XGI_CRT1Table[index].CR[10];
> -	/* SR34[7:0]->VRS[7:0] */
> -	xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempax);
> -
> -	Tempcx = Tempax; /* Tempcx <= VRS[7:0] */
> -	/* CR7[7][2] VRS[9][8] */
> -	Tempax = XGI_CRT1Table[index].CR[9];
> -	Tempbx = Tempax; /* Tempbx <= CR07[7:0] */
> -	Tempax = Tempax & 0x04; /* Tempax[2]: CR7[2]: VRS[8] */
> -	Tempax >>= 2; /* Tempax[0]: VRS[8] */
> -	/* SR35[0]: VRS[8] */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x01, Tempax);
> -	Tempcx |= Tempax << 8; /* Tempcx <= VRS[8:0] */
> -	Tempcx |= (Tempbx & 0x80) << 2; /* Tempcx <= VRS[9:0] */
> -	/* Tempax: SR0A */
> -	Tempax = XGI_CRT1Table[index].CR[14];
> -	Tempax &= 0x08; /* SR0A[3] VRS[10] */
> -	Tempcx |= Tempax << 7; /* Tempcx <= VRS[10:0] */
> -
> -	/* Tempax: CR11 VRE */
> -	Tempax = XGI_CRT1Table[index].CR[11];
> -	Tempax &= 0x0F; /* Tempax[3:0]: VRE[3:0] */
> -	/* Tempbx: SR0A */
> -	Tempbx = XGI_CRT1Table[index].CR[14];
> -	Tempbx &= 0x20; /* Tempbx[5]: SR0A[5]: VRE[4] */
> -	Tempbx >>= 1; /* Tempbx[4]: VRE[4] */
> -	Tempax |= Tempbx; /* Tempax[4:0]: VRE[4:0] */
> -	Tempbx = Tempcx; /* Tempbx: VRS[10:0] */
> -	Tempbx &= 0x7E0; /* Tempbx[10:5]: VRS[10:5] */
> -	Tempbx |= Tempax; /* Tempbx: VRS[10:5]VRE[4:0] */
> -
> -	if (Tempbx <= Tempcx) /* VRE <= VRS */
> -		Tempbx |= 0x20; /* VRE + 0x20 */
> -
> -	/* Tempax: Tempax[7:0]; VRE[5:0]00 */
> -	Tempax = (Tempbx << 2) & 0xFF;
> -	/* SR3F[7:2]:VRE[5:0] */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0xFC, Tempax);
> -	Tempax = Tempcx >> 8;
> -	/* SR35[2:0]:VRS[10:8] */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x07, Tempax);
> -}
> -
> -static void XGI_SetXG27FPBits(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char temp;
> -
> -	/* D[1:0] 01: 18bit, 00: dual 12, 10: single 24 */
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x37);
> -	temp = (temp & 3) << 6;
> -	/* SR06[7]0: dual 12/1: single 24 [6] 18bit Dither <= 0 h/w recommend */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x06, ~0xc0, temp & 0x80);
> -	/* SR09[7] enable FP output, SR09[6] 1: sigle 18bits, 0: 24bits */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x09, ~0xc0, temp | 0x80);
> -}
> -
> -static void xgifb_set_lcd(int chip_id,
> -			  struct vb_device_info *pVBInfo,
> -			  unsigned short RefreshRateTableIndex)
> -{
> -	unsigned short temp;
> -
> -	xgifb_reg_set(pVBInfo->P3d4, 0x2E, 0x00);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x2F, 0x00);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x46, 0x00);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x47, 0x00);
> -
> -	if (chip_id == XG27) {
> -		temp = xgifb_reg_get(pVBInfo->P3d4, 0x37);
> -		if ((temp & 0x03) == 0) { /* dual 12 */
> -			xgifb_reg_set(pVBInfo->P3d4, 0x46, 0x13);
> -			xgifb_reg_set(pVBInfo->P3d4, 0x47, 0x13);
> -		}
> -	}
> -
> -	if (chip_id == XG27) {
> -		XGI_SetXG27FPBits(pVBInfo);
> -	} else {
> -		temp = xgifb_reg_get(pVBInfo->P3d4, 0x37);
> -		if (temp & 0x01) {
> -			/* 18 bits FP */
> -			xgifb_reg_or(pVBInfo->P3c4, 0x06, 0x40);
> -			xgifb_reg_or(pVBInfo->P3c4, 0x09, 0x40);
> -		}
> -	}
> -
> -	xgifb_reg_or(pVBInfo->P3c4, 0x1E, 0x01); /* Negative blank polarity */
> -
> -	xgifb_reg_and(pVBInfo->P3c4, 0x30, ~0x20); /* Hsync polarity */
> -	xgifb_reg_and(pVBInfo->P3c4, 0x35, ~0x80); /* Vsync polarity */
> -
> -	temp = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
> -	if (temp & 0x4000) {
> -		/* Hsync polarity */
> -		xgifb_reg_or(pVBInfo->P3c4, 0x30, 0x20);
> -	}
> -	if (temp & 0x8000) {
> -		/* Vsync polarity */
> -		xgifb_reg_or(pVBInfo->P3c4, 0x35, 0x80);
> -	}
> -}
> -
> -/*
> - * Function : XGI_UpdateXG21CRTC
> - * Input :
> - * Output : CRT1 CRTC
> - * Description : Modify CRT1 Hsync/Vsync to fix LCD mode timing
> - */
> -static void XGI_UpdateXG21CRTC(unsigned short ModeNo,
> -			       struct vb_device_info *pVBInfo,
> -			       unsigned short RefreshRateTableIndex)
> -{
> -	int index = -1;
> -
> -	xgifb_reg_and(pVBInfo->P3d4, 0x11, 0x7F); /* Unlock CR0~7 */
> -	if (ModeNo == 0x2E &&
> -	    (XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC ==
> -								RES640x480x60))
> -		index = 12;
> -	else if (ModeNo == 0x2E &&
> -		 (XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC ==
> -								RES640x480x72))
> -		index = 13;
> -	else if (ModeNo == 0x2F)
> -		index = 14;
> -	else if (ModeNo == 0x50)
> -		index = 15;
> -	else if (ModeNo == 0x59)
> -		index = 16;
> -
> -	if (index != -1) {
> -		xgifb_reg_set(pVBInfo->P3d4, 0x02,
> -			      XGI_UpdateCRT1Table[index].CR02);
> -		xgifb_reg_set(pVBInfo->P3d4, 0x03,
> -			      XGI_UpdateCRT1Table[index].CR03);
> -		xgifb_reg_set(pVBInfo->P3d4, 0x15,
> -			      XGI_UpdateCRT1Table[index].CR15);
> -		xgifb_reg_set(pVBInfo->P3d4, 0x16,
> -			      XGI_UpdateCRT1Table[index].CR16);
> -	}
> -}
> -
> -static void XGI_SetCRT1DE(unsigned short ModeIdIndex,
> -			  unsigned short RefreshRateTableIndex,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	unsigned short resindex, tempax, tempbx, tempcx, temp, modeflag;
> -
> -	unsigned char data;
> -
> -	resindex = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	tempax = XGI330_ModeResInfo[resindex].HTotal;
> -	tempbx = XGI330_ModeResInfo[resindex].VTotal;
> -
> -	if (modeflag & HalfDCLK)
> -		tempax >>= 1;
> -
> -	if (modeflag & HalfDCLK)
> -		tempax <<= 1;
> -
> -	temp = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
> -
> -	if (temp & InterlaceMode)
> -		tempbx >>= 1;
> -
> -	if (modeflag & DoubleScanMode)
> -		tempbx <<= 1;
> -
> -	tempcx = 8;
> -
> -	tempax /= tempcx;
> -	tempax -= 1;
> -	tempbx -= 1;
> -	tempcx = tempax;
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x11);
> -	data = xgifb_reg_get(pVBInfo->P3d4, 0x11);
> -	data &= 0x7F;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x11, data); /* Unlock CRTC */
> -	xgifb_reg_set(pVBInfo->P3d4, 0x01, (unsigned short)(tempcx & 0xff));
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x0b, ~0x0c,
> -			 (unsigned short)((tempcx & 0x0ff00) >> 10));
> -	xgifb_reg_set(pVBInfo->P3d4, 0x12, (unsigned short)(tempbx & 0xff));
> -	tempax = 0;
> -	tempbx >>= 8;
> -
> -	if (tempbx & 0x01)
> -		tempax |= 0x02;
> -
> -	if (tempbx & 0x02)
> -		tempax |= 0x40;
> -
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x07, ~0x42, tempax);
> -	data = xgifb_reg_get(pVBInfo->P3d4, 0x07);
> -	tempax = 0;
> -
> -	if (tempbx & 0x04)
> -		tempax |= 0x02;
> -
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x0a, ~0x02, tempax);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x11, temp);
> -}
> -
> -static void XGI_SetCRT1Offset(unsigned short ModeNo,
> -			      unsigned short ModeIdIndex,
> -			      unsigned short RefreshRateTableIndex,
> -			      struct xgi_hw_device_info *HwDeviceExtension,
> -			      struct vb_device_info *pVBInfo)
> -{
> -	unsigned short temp, ah, al, temp2, i, DisplayUnit;
> -
> -	/* GetOffset */
> -	temp = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeInfo;
> -	temp >>= 8;
> -	temp = XGI330_ScreenOffset[temp];
> -
> -	temp2 = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
> -	temp2 &= InterlaceMode;
> -
> -	if (temp2)
> -		temp <<= 1;
> -
> -	temp2 = pVBInfo->ModeType - ModeEGA;
> -
> -	switch (temp2) {
> -	case 0:
> -		temp2 = 1;
> -		break;
> -	case 1:
> -		temp2 = 2;
> -		break;
> -	case 2:
> -		temp2 = 4;
> -		break;
> -	case 3:
> -		temp2 = 4;
> -		break;
> -	case 4:
> -		temp2 = 6;
> -		break;
> -	case 5:
> -		temp2 = 8;
> -		break;
> -	default:
> -		break;
> -	}
> -
> -	if ((ModeNo >= 0x26) && (ModeNo <= 0x28))
> -		temp = temp * temp2 + temp2 / 2;
> -	else
> -		temp *= temp2;
> -
> -	/* SetOffset */
> -	DisplayUnit = temp;
> -	temp2 = temp;
> -	temp >>= 8; /* ah */
> -	temp &= 0x0F;
> -	i = xgifb_reg_get(pVBInfo->P3c4, 0x0E);
> -	i &= 0xF0;
> -	i |= temp;
> -	xgifb_reg_set(pVBInfo->P3c4, 0x0E, i);
> -
> -	temp = (unsigned char)temp2;
> -	temp &= 0xFF; /* al */
> -	xgifb_reg_set(pVBInfo->P3d4, 0x13, temp);
> -
> -	/* SetDisplayUnit */
> -	temp2 = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
> -	temp2 &= InterlaceMode;
> -	if (temp2)
> -		DisplayUnit >>= 1;
> -
> -	DisplayUnit <<= 5;
> -	ah = (DisplayUnit & 0xff00) >> 8;
> -	al = DisplayUnit & 0x00ff;
> -	if (al == 0)
> -		ah += 1;
> -	else
> -		ah += 2;
> -
> -	if (HwDeviceExtension->jChipType >= XG20)
> -		if ((ModeNo == 0x4A) | (ModeNo == 0x49))
> -			ah -= 1;
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x10, ah);
> -}
> -
> -static unsigned short XGI_GetVCLK2Ptr(unsigned short ModeIdIndex,
> -				      unsigned short RefreshRateTableIndex,
> -				      struct vb_device_info *pVBInfo)
> -{
> -	unsigned short VCLKIndex, modeflag;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) { /* 301b */
> -		if (pVBInfo->LCDResInfo != Panel_1024x768)
> -			/* LCDXlat2VCLK */
> -			VCLKIndex = VCLK108_2_315 + 5;
> -		else
> -			VCLKIndex = VCLK65_315 + 2; /* LCDXlat1VCLK */
> -	} else if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -		if (pVBInfo->SetFlag & RPLLDIV2XO)
> -			VCLKIndex = TVCLKBASE_315_25 + HiTVVCLKDIV2;
> -		else
> -			VCLKIndex = TVCLKBASE_315_25 + HiTVVCLK;
> -
> -		if (pVBInfo->SetFlag & TVSimuMode) {
> -			if (modeflag & Charx8Dot)
> -				VCLKIndex = TVCLKBASE_315_25 + HiTVSimuVCLK;
> -			else
> -				VCLKIndex = TVCLKBASE_315_25 + HiTVTextVCLK;
> -		}
> -
> -		/* 301lv */
> -		if (pVBInfo->VBType & VB_SIS301LV) {
> -			if (pVBInfo->SetFlag & RPLLDIV2XO)
> -				VCLKIndex = YPbPr525iVCLK_2;
> -			else
> -				VCLKIndex = YPbPr525iVCLK;
> -		}
> -	} else if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -		if (pVBInfo->SetFlag & RPLLDIV2XO)
> -			VCLKIndex = TVCLKBASE_315_25 + TVVCLKDIV2;
> -		else
> -			VCLKIndex = TVCLKBASE_315_25 + TVVCLK;
> -	} else { /* for CRT2 */
> -		/* di+Ext_CRTVCLK */
> -		VCLKIndex = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
> -		VCLKIndex &= IndexMask;
> -	}
> -
> -	return VCLKIndex;
> -}
> -
> -static void XGI_SetCRT1VCLK(unsigned short ModeIdIndex,
> -			    struct xgi_hw_device_info *HwDeviceExtension,
> -			    unsigned short RefreshRateTableIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned char index, data;
> -	unsigned short vclkindex;
> -
> -	if ((pVBInfo->IF_DEF_LVDS == 0) &&
> -	    (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV |
> -				VB_SIS302LV | VB_XGI301C)) &&
> -	    (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)) {
> -		vclkindex = XGI_GetVCLK2Ptr(ModeIdIndex, RefreshRateTableIndex,
> -					    pVBInfo);
> -		data = xgifb_reg_get(pVBInfo->P3c4, 0x31) & 0xCF;
> -		xgifb_reg_set(pVBInfo->P3c4, 0x31, data);
> -		data = XGI_VBVCLKData[vclkindex].Part4_A;
> -		xgifb_reg_set(pVBInfo->P3c4, 0x2B, data);
> -		data = XGI_VBVCLKData[vclkindex].Part4_B;
> -		xgifb_reg_set(pVBInfo->P3c4, 0x2C, data);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x2D, 0x01);
> -	} else {
> -		index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
> -		data = xgifb_reg_get(pVBInfo->P3c4, 0x31) & 0xCF;
> -		xgifb_reg_set(pVBInfo->P3c4, 0x31, data);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x2B, XGI_VCLKData[index].SR2B);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x2C, XGI_VCLKData[index].SR2C);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x2D, 0x01);
> -	}
> -
> -	if (HwDeviceExtension->jChipType >= XG20) {
> -		if (XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag &
> -		    HalfDCLK) {
> -			data = xgifb_reg_get(pVBInfo->P3c4, 0x2B);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x2B, data);
> -			data = xgifb_reg_get(pVBInfo->P3c4, 0x2C);
> -			index = data;
> -			index &= 0xE0;
> -			data &= 0x1F;
> -			data <<= 1;
> -			data += 1;
> -			data |= index;
> -			xgifb_reg_set(pVBInfo->P3c4, 0x2C, data);
> -		}
> -	}
> -}
> -
> -static void XGI_SetXG21FPBits(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char temp;
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x37); /* D[0] 1: 18bit */
> -	temp = (temp & 1) << 6;
> -	/* SR06[6] 18bit Dither */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x06, ~0x40, temp);
> -	/* SR09[7] enable FP output, SR09[6] 1: sigle 18bits, 0: dual 12bits */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x09, ~0xc0, temp | 0x80);
> -}
> -
> -static void XGI_SetCRT1FIFO(struct xgi_hw_device_info *HwDeviceExtension,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short data;
> -
> -	data = xgifb_reg_get(pVBInfo->P3c4, 0x3D);
> -	data &= 0xfe;
> -	xgifb_reg_set(pVBInfo->P3c4, 0x3D, data); /* disable auto-threshold */
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x08, 0x34);
> -	data = xgifb_reg_get(pVBInfo->P3c4, 0x09);
> -	data &= 0xC0;
> -	xgifb_reg_set(pVBInfo->P3c4, 0x09, data | 0x30);
> -	data = xgifb_reg_get(pVBInfo->P3c4, 0x3D);
> -	data |= 0x01;
> -	xgifb_reg_set(pVBInfo->P3c4, 0x3D, data);
> -
> -	if (HwDeviceExtension->jChipType == XG21)
> -		XGI_SetXG21FPBits(pVBInfo); /* Fix SR9[7:6] can't read back */
> -}
> -
> -static void XGI_SetVCLKState(struct xgi_hw_device_info *HwDeviceExtension,
> -			     unsigned short RefreshRateTableIndex,
> -			     struct vb_device_info *pVBInfo)
> -{
> -	unsigned short data, data2 = 0;
> -	short VCLK;
> -
> -	unsigned char index;
> -
> -	index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
> -	index &= IndexMask;
> -	VCLK = XGI_VCLKData[index].CLOCK;
> -
> -	data = xgifb_reg_get(pVBInfo->P3c4, 0x32);
> -	data &= 0xf3;
> -	if (VCLK >= 200)
> -		data |= 0x0c; /* VCLK > 200 */
> -
> -	if (HwDeviceExtension->jChipType >= XG20)
> -		data &= ~0x04; /* 2 pixel mode */
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x32, data);
> -
> -	if (HwDeviceExtension->jChipType < XG20) {
> -		data = xgifb_reg_get(pVBInfo->P3c4, 0x1F);
> -		data &= 0xE7;
> -		if (VCLK < 200)
> -			data |= 0x10;
> -		xgifb_reg_set(pVBInfo->P3c4, 0x1F, data);
> -	}
> -
> -	data2 = 0x00;
> -
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x07, 0xFC, data2);
> -	if (HwDeviceExtension->jChipType >= XG27)
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x40, 0xFC, data2 & 0x03);
> -}
> -
> -static void XGI_SetCRT1ModeRegs(struct xgi_hw_device_info *HwDeviceExtension,
> -				unsigned short ModeIdIndex,
> -				unsigned short RefreshRateTableIndex,
> -				struct vb_device_info *pVBInfo)
> -{
> -	unsigned short data, data2, data3, infoflag = 0, modeflag, resindex,
> -			xres;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	infoflag = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
> -
> -	if (xgifb_reg_get(pVBInfo->P3d4, 0x31) & 0x01)
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x1F, 0x3F, 0x00);
> -
> -	data = infoflag;
> -	data2 = 0;
> -	data2 |= 0x02;
> -	data3 = pVBInfo->ModeType - ModeVGA;
> -	data3 <<= 2;
> -	data2 |= data3;
> -	data &= InterlaceMode;
> -
> -	if (data)
> -		data2 |= 0x20;
> -
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x06, ~0x3F, data2);
> -	resindex = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -	xres = XGI330_ModeResInfo[resindex].HTotal; /* xres->ax */
> -
> -	data = 0x0000;
> -	if (infoflag & InterlaceMode) {
> -		if (xres == 1024)
> -			data = 0x0035;
> -		else if (xres == 1280)
> -			data = 0x0048;
> -	}
> -
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x19, 0xFF, data);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x19, 0xFC, 0);
> -
> -	if (modeflag & HalfDCLK)
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x01, 0xF7, 0x08);
> -
> -	data2 = 0;
> -
> -	if (modeflag & LineCompareOff)
> -		data2 |= 0x08;
> -
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0F, ~0x48, data2);
> -	data = 0x60;
> -	data = data ^ 0x60;
> -	data = data ^ 0xA0;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x21, 0x1F, data);
> -
> -	XGI_SetVCLKState(HwDeviceExtension, RefreshRateTableIndex, pVBInfo);
> -
> -	data = xgifb_reg_get(pVBInfo->P3d4, 0x31);
> -
> -	if (HwDeviceExtension->jChipType == XG27) {
> -		if (data & 0x40)
> -			data = 0x2c;
> -		else
> -			data = 0x6c;
> -		xgifb_reg_set(pVBInfo->P3d4, 0x52, data);
> -		xgifb_reg_or(pVBInfo->P3d4, 0x51, 0x10);
> -	} else if (HwDeviceExtension->jChipType >= XG20) {
> -		if (data & 0x40)
> -			data = 0x33;
> -		else
> -			data = 0x73;
> -		xgifb_reg_set(pVBInfo->P3d4, 0x52, data);
> -		xgifb_reg_set(pVBInfo->P3d4, 0x51, 0x02);
> -	} else {
> -		if (data & 0x40)
> -			data = 0x2c;
> -		else
> -			data = 0x6c;
> -		xgifb_reg_set(pVBInfo->P3d4, 0x52, data);
> -	}
> -}
> -
> -static void XGI_WriteDAC(unsigned short dl,
> -			 unsigned short ah,
> -			 unsigned short al,
> -			 unsigned short dh,
> -			 struct vb_device_info *pVBInfo)
> -{
> -	unsigned short bh, bl;
> -
> -	bh = ah;
> -	bl = al;
> -
> -	if (dl != 0) {
> -		swap(bh, dh);
> -		if (dl == 1)
> -			swap(bl, dh);
> -		else
> -			swap(bl, bh);
> -	}
> -	outb((unsigned short)dh, pVBInfo->P3c9);
> -	outb((unsigned short)bh, pVBInfo->P3c9);
> -	outb((unsigned short)bl, pVBInfo->P3c9);
> -}
> -
> -static void XGI_LoadDAC(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short data, data2, i, k, m, n, o, si, di, bx, dl, al, ah, dh;
> -	const unsigned short *table = XGINew_VGA_DAC;
> -
> -	outb(0xFF, pVBInfo->P3c6);
> -	outb(0x00, pVBInfo->P3c8);
> -
> -	for (i = 0; i < 16; i++) {
> -		data = table[i];
> -
> -		for (k = 0; k < 3; k++) {
> -			data2 = 0;
> -
> -			if (data & 0x01)
> -				data2 = 0x2A;
> -
> -			if (data & 0x02)
> -				data2 += 0x15;
> -
> -			outb(data2, pVBInfo->P3c9);
> -			data >>= 2;
> -		}
> -	}
> -
> -	for (i = 16; i < 32; i++) {
> -		data = table[i];
> -
> -		for (k = 0; k < 3; k++)
> -			outb(data, pVBInfo->P3c9);
> -	}
> -
> -	si = 32;
> -
> -	for (m = 0; m < 9; m++) {
> -		di = si;
> -		bx = si + 0x04;
> -		dl = 0;
> -
> -		for (n = 0; n < 3; n++) {
> -			for (o = 0; o < 5; o++) {
> -				dh = table[si];
> -				ah = table[di];
> -				al = table[bx];
> -				si++;
> -				XGI_WriteDAC(dl, ah, al, dh, pVBInfo);
> -			}
> -
> -			si -= 2;
> -
> -			for (o = 0; o < 3; o++) {
> -				dh = table[bx];
> -				ah = table[di];
> -				al = table[si];
> -				si--;
> -				XGI_WriteDAC(dl, ah, al, dh, pVBInfo);
> -			}
> -
> -			dl++;
> -		}
> -
> -		si += 5;
> -	}
> -}
> -
> -static void XGI_GetLVDSResInfo(unsigned short ModeIdIndex,
> -			       struct vb_device_info *pVBInfo)
> -{
> -	unsigned short resindex, xres, yres, modeflag;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -
> -	/* si+Ext_ResInfo */
> -	resindex = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -
> -	xres = XGI330_ModeResInfo[resindex].HTotal;
> -	yres = XGI330_ModeResInfo[resindex].VTotal;
> -
> -	if (modeflag & HalfDCLK)
> -		xres <<= 1;
> -
> -	if (modeflag & DoubleScanMode)
> -		yres <<= 1;
> -
> -	if (xres == 720)
> -		xres = 640;
> -
> -	pVBInfo->VGAHDE = xres;
> -	pVBInfo->HDE = xres;
> -	pVBInfo->VGAVDE = yres;
> -	pVBInfo->VDE = yres;
> -}
> -
> -static void const *XGI_GetLcdPtr(struct XGI330_LCDDataTablStruct const *table,
> -				 unsigned short ModeIdIndex,
> -				 struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i, tempdx, tempbx, modeflag;
> -
> -	tempbx = 0;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	i = 0;
> -
> -	while (table[i].PANELID != 0xff) {
> -		tempdx = pVBInfo->LCDResInfo;
> -		if (tempbx & 0x0080) { /* OEMUtil */
> -			tempbx &= ~0x0080;
> -			tempdx = pVBInfo->LCDTypeInfo;
> -		}
> -
> -		if (pVBInfo->LCDInfo & EnableScalingLCD)
> -			tempdx &= ~PanelResInfo;
> -
> -		if (table[i].PANELID == tempdx) {
> -			tempbx = table[i].MASK;
> -			tempdx = pVBInfo->LCDInfo;
> -
> -			if (modeflag & HalfDCLK)
> -				tempdx |= SetLCDLowResolution;
> -
> -			tempbx &= tempdx;
> -			if (tempbx == table[i].CAP)
> -				break;
> -		}
> -		i++;
> -	}
> -
> -	return table[i].DATAPTR;
> -}
> -
> -static struct SiS_TVData const *XGI_GetTVPtr(
> -	unsigned short ModeIdIndex,
> -	unsigned short RefreshRateTableIndex,
> -	struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i, tempdx, tempal, modeflag;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	tempal = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
> -	tempal = tempal & 0x3f;
> -	tempdx = pVBInfo->TVInfo;
> -
> -	if (pVBInfo->VBInfo & SetInSlaveMode)
> -		tempdx = tempdx | SetTVLockMode;
> -
> -	if (modeflag & HalfDCLK)
> -		tempdx = tempdx | SetTVLowResolution;
> -
> -	i = 0;
> -
> -	while (XGI_TVDataTable[i].MASK != 0xffff) {
> -		if ((tempdx & XGI_TVDataTable[i].MASK) ==
> -			XGI_TVDataTable[i].CAP)
> -			break;
> -		i++;
> -	}
> -
> -	return &XGI_TVDataTable[i].DATAPTR[tempal];
> -}
> -
> -static void XGI_GetLVDSData(unsigned short ModeIdIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	struct SiS_LVDSData const *LCDPtr;
> -
> -	if (!(pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)))
> -		return;
> -
> -	LCDPtr = XGI_GetLcdPtr(XGI_EPLLCDDataPtr, ModeIdIndex, pVBInfo);
> -	pVBInfo->VGAHT	= LCDPtr->VGAHT;
> -	pVBInfo->VGAVT	= LCDPtr->VGAVT;
> -	pVBInfo->HT	= LCDPtr->LCDHT;
> -	pVBInfo->VT	= LCDPtr->LCDVT;
> -
> -	if (pVBInfo->LCDInfo & (SetLCDtoNonExpanding | EnableScalingLCD))
> -		return;
> -
> -	if ((pVBInfo->LCDResInfo == Panel_1024x768) ||
> -	    (pVBInfo->LCDResInfo == Panel_1024x768x75)) {
> -		pVBInfo->HDE = 1024;
> -		pVBInfo->VDE = 768;
> -	} else if ((pVBInfo->LCDResInfo == Panel_1280x1024) ||
> -		   (pVBInfo->LCDResInfo == Panel_1280x1024x75)) {
> -		pVBInfo->HDE = 1280;
> -		pVBInfo->VDE = 1024;
> -	} else if (pVBInfo->LCDResInfo == Panel_1400x1050) {
> -		pVBInfo->HDE = 1400;
> -		pVBInfo->VDE = 1050;
> -	} else {
> -		pVBInfo->HDE = 1600;
> -		pVBInfo->VDE = 1200;
> -	}
> -}
> -
> -static void XGI_ModCRT1Regs(unsigned short ModeIdIndex,
> -			    struct xgi_hw_device_info *HwDeviceExtension,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i;
> -	struct XGI_LVDSCRT1HDataStruct const *LCDPtr = NULL;
> -	struct XGI_LVDSCRT1VDataStruct const *LCDPtr1 = NULL;
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
> -		LCDPtr = XGI_GetLcdPtr(xgifb_epllcd_crt1_h, ModeIdIndex,
> -				       pVBInfo);
> -
> -		for (i = 0; i < 8; i++)
> -			pVBInfo->TimingH.data[i] = LCDPtr[0].Reg[i];
> -	}
> -
> -	XGI_SetCRT1Timing_H(pVBInfo, HwDeviceExtension);
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
> -		LCDPtr1 = XGI_GetLcdPtr(xgifb_epllcd_crt1_v, ModeIdIndex,
> -					pVBInfo);
> -		for (i = 0; i < 7; i++)
> -			pVBInfo->TimingV.data[i] = LCDPtr1[0].Reg[i];
> -	}
> -
> -	XGI_SetCRT1Timing_V(ModeIdIndex, pVBInfo);
> -}
> -
> -static unsigned short XGI_GetLCDCapPtr(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char tempal, tempah, tempbl, i;
> -
> -	tempah = xgifb_reg_get(pVBInfo->P3d4, 0x36);
> -	tempal = tempah & 0x0F;
> -	tempah = tempah & 0xF0;
> -	i = 0;
> -	tempbl = pVBInfo->LCDCapList[i].LCD_ID;
> -
> -	while (tempbl != 0xFF) {
> -		if (tempbl & 0x80) { /* OEMUtil */
> -			tempal = tempah;
> -			tempbl = tempbl & ~(0x80);
> -		}
> -
> -		if (tempal == tempbl)
> -			break;
> -
> -		i++;
> -
> -		tempbl = pVBInfo->LCDCapList[i].LCD_ID;
> -	}
> -
> -	return i;
> -}
> -
> -static unsigned short XGI_GetLCDCapPtr1(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempah, tempal, tempbl, i;
> -
> -	tempal = pVBInfo->LCDResInfo;
> -	tempah = pVBInfo->LCDTypeInfo;
> -
> -	i = 0;
> -	tempbl = pVBInfo->LCDCapList[i].LCD_ID;
> -
> -	while (tempbl != 0xFF) {
> -		if ((tempbl & 0x80) && (tempbl != 0x80)) {
> -			tempal = tempah;
> -			tempbl &= ~0x80;
> -		}
> -
> -		if (tempal == tempbl)
> -			break;
> -
> -		i++;
> -		tempbl = pVBInfo->LCDCapList[i].LCD_ID;
> -	}
> -
> -	if (tempbl == 0xFF) {
> -		pVBInfo->LCDResInfo = Panel_1024x768;
> -		pVBInfo->LCDTypeInfo = 0;
> -		i = 0;
> -	}
> -
> -	return i;
> -}
> -
> -static void XGI_GetLCDSync(unsigned short *HSyncWidth,
> -			   unsigned short *VSyncWidth,
> -			   struct vb_device_info *pVBInfo)
> -{
> -	unsigned short Index;
> -
> -	Index = XGI_GetLCDCapPtr(pVBInfo);
> -	*HSyncWidth = pVBInfo->LCDCapList[Index].LCD_HSyncWidth;
> -	*VSyncWidth = pVBInfo->LCDCapList[Index].LCD_VSyncWidth;
> -}
> -
> -static void XGI_SetLVDSRegs(unsigned short ModeIdIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx, tempax, tempcx, tempdx, push1, push2, modeflag;
> -	unsigned long temp, temp1, temp2, temp3, push3;
> -	struct XGI330_LCDDataDesStruct2 const *LCDPtr1 = NULL;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	LCDPtr1 = XGI_GetLcdPtr(XGI_EPLLCDDesDataPtr, ModeIdIndex, pVBInfo);
> -
> -	XGI_GetLCDSync(&tempax, &tempbx, pVBInfo);
> -	push1 = tempbx;
> -	push2 = tempax;
> -
> -	/* GetLCDResInfo */
> -	if ((pVBInfo->LCDResInfo == Panel_1024x768) ||
> -	    (pVBInfo->LCDResInfo == Panel_1024x768x75)) {
> -		tempax = 1024;
> -		tempbx = 768;
> -	} else if ((pVBInfo->LCDResInfo == Panel_1280x1024) ||
> -		   (pVBInfo->LCDResInfo == Panel_1280x1024x75)) {
> -		tempax = 1280;
> -		tempbx = 1024;
> -	} else if (pVBInfo->LCDResInfo == Panel_1400x1050) {
> -		tempax = 1400;
> -		tempbx = 1050;
> -	} else {
> -		tempax = 1600;
> -		tempbx = 1200;
> -	}
> -
> -	if (pVBInfo->LCDInfo & SetLCDtoNonExpanding) {
> -		pVBInfo->HDE = tempax;
> -		pVBInfo->VDE = tempbx;
> -		pVBInfo->VGAHDE = tempax;
> -		pVBInfo->VGAVDE = tempbx;
> -	}
> -
> -	tempax = pVBInfo->HT;
> -
> -	tempbx = LCDPtr1->LCDHDES;
> -
> -	tempcx = pVBInfo->HDE;
> -	tempbx = tempbx & 0x0fff;
> -	tempcx += tempbx;
> -
> -	if (tempcx >= tempax)
> -		tempcx -= tempax;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x1A, tempbx & 0x07);
> -
> -	tempcx >>= 3;
> -	tempbx >>= 3;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x16,
> -		      (unsigned short)(tempbx & 0xff));
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x17,
> -		      (unsigned short)(tempcx & 0xff));
> -
> -	tempax = pVBInfo->HT;
> -
> -	tempbx = LCDPtr1->LCDHRS;
> -
> -	tempcx = push2;
> -
> -	if (pVBInfo->LCDInfo & EnableScalingLCD)
> -		tempcx = LCDPtr1->LCDHSync;
> -
> -	tempcx += tempbx;
> -
> -	if (tempcx >= tempax)
> -		tempcx -= tempax;
> -
> -	tempax = tempbx & 0x07;
> -	tempax >>= 5;
> -	tempcx >>= 3;
> -	tempbx >>= 3;
> -
> -	tempcx &= 0x1f;
> -	tempax |= tempcx;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x15, tempax);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x14,
> -		      (unsigned short)(tempbx & 0xff));
> -
> -	tempax = pVBInfo->VT;
> -	tempbx = LCDPtr1->LCDVDES;
> -	tempcx = pVBInfo->VDE;
> -
> -	tempbx = tempbx & 0x0fff;
> -	tempcx += tempbx;
> -	if (tempcx >= tempax)
> -		tempcx -= tempax;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x1b,
> -		      (unsigned short)(tempbx & 0xff));
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x1c,
> -		      (unsigned short)(tempcx & 0xff));
> -
> -	tempbx = (tempbx >> 8) & 0x07;
> -	tempcx = (tempcx >> 8) & 0x07;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x1d,
> -		      (unsigned short)((tempcx << 3) | tempbx));
> -
> -	tempax = pVBInfo->VT;
> -	tempbx = LCDPtr1->LCDVRS;
> -
> -	tempcx = push1;
> -
> -	if (pVBInfo->LCDInfo & EnableScalingLCD)
> -		tempcx = LCDPtr1->LCDVSync;
> -
> -	tempcx += tempbx;
> -	if (tempcx >= tempax)
> -		tempcx -= tempax;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x18,
> -		      (unsigned short)(tempbx & 0xff));
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x19, ~0x0f,
> -			 (unsigned short)(tempcx & 0x0f));
> -
> -	tempax = ((tempbx >> 8) & 0x07) << 3;
> -
> -	tempbx = pVBInfo->VGAVDE;
> -	if (tempbx != pVBInfo->VDE)
> -		tempax |= 0x40;
> -
> -	if (pVBInfo->LCDInfo & XGI_EnableLVDSDDA)
> -		tempax |= 0x40;
> -
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x1a, 0x07, tempax);
> -
> -	tempbx = pVBInfo->VDE;
> -	tempax = pVBInfo->VGAVDE;
> -
> -	temp = tempax; /* 0430 ylshieh */
> -	temp1 = (temp << 18) / tempbx;
> -
> -	tempdx = (unsigned short)((temp << 18) % tempbx);
> -
> -	if (tempdx != 0)
> -		temp1 += 1;
> -
> -	temp2 = temp1;
> -	push3 = temp2;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x37,	(unsigned short)(temp2 & 0xff));
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x36,	(unsigned short)((temp2 >> 8) & 0xff));
> -
> -	tempbx = (unsigned short)(temp2 >> 16);
> -	tempax = tempbx & 0x03;
> -
> -	tempbx = pVBInfo->VGAVDE;
> -	if (tempbx == pVBInfo->VDE)
> -		tempax |= 0x04;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x35, tempax);
> -
> -	if (pVBInfo->VBType & VB_XGI301C) {
> -		temp2 = push3;
> -		xgifb_reg_set(pVBInfo->Part4Port,
> -			      0x3c,
> -			      (unsigned short)(temp2 & 0xff));
> -		xgifb_reg_set(pVBInfo->Part4Port,
> -			      0x3b,
> -			      (unsigned short)((temp2 >> 8) &
> -			      0xff));
> -		tempbx = (unsigned short)(temp2 >> 16);
> -		xgifb_reg_and_or(pVBInfo->Part4Port, 0x3a, ~0xc0,
> -				 (unsigned short)((tempbx & 0xff) << 6));
> -
> -		tempcx = pVBInfo->VGAVDE;
> -		if (tempcx == pVBInfo->VDE)
> -			xgifb_reg_and_or(pVBInfo->Part4Port, 0x30, ~0x0c, 0x00);
> -		else
> -			xgifb_reg_and_or(pVBInfo->Part4Port, 0x30, ~0x0c, 0x08);
> -	}
> -
> -	tempcx = pVBInfo->VGAHDE;
> -	tempbx = pVBInfo->HDE;
> -
> -	temp1 = tempcx << 16;
> -
> -	tempax = (unsigned short)(temp1 / tempbx);
> -
> -	if ((tempbx & 0xffff) == (tempcx & 0xffff))
> -		tempax = 65535;
> -
> -	temp3 = tempax;
> -	temp1 = pVBInfo->VGAHDE << 16;
> -
> -	temp1 /= temp3;
> -	temp3 <<= 16;
> -	temp1 -= 1;
> -
> -	temp3 = (temp3 & 0xffff0000) + (temp1 & 0xffff);
> -
> -	tempax = (unsigned short)(temp3 & 0xff);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x1f, tempax);
> -
> -	temp1 = pVBInfo->VGAVDE << 18;
> -	temp1 = temp1 / push3;
> -	tempbx = (unsigned short)(temp1 & 0xffff);
> -
> -	if (pVBInfo->LCDResInfo == Panel_1024x768)
> -		tempbx -= 1;
> -
> -	tempax = ((tempbx >> 8) & 0xff) << 3;
> -	tempax |= (unsigned short)((temp3 >> 8) & 0x07);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x20,
> -		      (unsigned short)(tempax & 0xff));
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x21,
> -		      (unsigned short)(tempbx & 0xff));
> -
> -	temp3 >>= 16;
> -
> -	if (modeflag & HalfDCLK)
> -		temp3 >>= 1;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x22,
> -		      (unsigned short)((temp3 >> 8) & 0xff));
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x23,
> -		      (unsigned short)(temp3 & 0xff));
> -}
> -
> -/*
> - * Function : XGI_GETLCDVCLKPtr
> - * Input :
> - * Output : al -> VCLK Index
> - * Description :
> - */
> -static void XGI_GetLCDVCLKPtr(unsigned char *di_0, unsigned char *di_1,
> -			      struct vb_device_info *pVBInfo)
> -{
> -	unsigned short index;
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
> -		index = XGI_GetLCDCapPtr1(pVBInfo);
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToLCD) { /* LCDB */
> -			*di_0 = pVBInfo->LCDCapList[index].LCUCHAR_VCLKData1;
> -			*di_1 = pVBInfo->LCDCapList[index].LCUCHAR_VCLKData2;
> -		} else { /* LCDA */
> -			*di_0 = pVBInfo->LCDCapList[index].LCDA_VCLKData1;
> -			*di_1 = pVBInfo->LCDCapList[index].LCDA_VCLKData2;
> -		}
> -	}
> -}
> -
> -static unsigned char XGI_GetVCLKPtr(unsigned short RefreshRateTableIndex,
> -				    unsigned short ModeIdIndex,
> -				    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short index, modeflag;
> -	unsigned char tempal;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	if ((pVBInfo->SetFlag & ProgrammingCRT2) &&
> -	    !(pVBInfo->LCDInfo & EnableScalingLCD)) { /* {LCDA/LCDB} */
> -		index = XGI_GetLCDCapPtr(pVBInfo);
> -		tempal = pVBInfo->LCDCapList[index].LCD_VCLK;
> -
> -		if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA))
> -			return tempal;
> -
> -		/* {TV} */
> -		if (pVBInfo->VBType &
> -		    (VB_SIS301B |
> -		     VB_SIS302B |
> -		     VB_SIS301LV |
> -		     VB_SIS302LV |
> -		     VB_XGI301C)) {
> -			if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -				tempal = TVCLKBASE_315 + HiTVVCLKDIV2;
> -				if (!(pVBInfo->TVInfo & RPLLDIV2XO))
> -					tempal = TVCLKBASE_315 + HiTVVCLK;
> -				if (pVBInfo->TVInfo & TVSimuMode) {
> -					tempal = TVCLKBASE_315 + HiTVSimuVCLK;
> -					if (!(modeflag & Charx8Dot))
> -						tempal = TVCLKBASE_315 +
> -								HiTVTextVCLK;
> -				}
> -				return tempal;
> -			}
> -
> -			if (pVBInfo->TVInfo & TVSetYPbPr750p)
> -				return XGI_YPbPr750pVCLK;
> -
> -			if (pVBInfo->TVInfo & TVSetYPbPr525p)
> -				return YPbPr525pVCLK;
> -
> -			tempal = NTSC1024VCLK;
> -
> -			if (!(pVBInfo->TVInfo & NTSC1024x768)) {
> -				tempal = TVCLKBASE_315 + TVVCLKDIV2;
> -				if (!(pVBInfo->TVInfo & RPLLDIV2XO))
> -					tempal = TVCLKBASE_315 + TVVCLK;
> -			}
> -
> -			if (pVBInfo->VBInfo & SetCRT2ToTV)
> -				return tempal;
> -		}
> -	} /* {End of VB} */
> -
> -	inb((pVBInfo->P3ca + 0x02));
> -	return XGI330_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
> -}
> -
> -static void XGI_GetVCLKLen(unsigned char tempal, unsigned char *di_0,
> -			   unsigned char *di_1, struct vb_device_info *pVBInfo)
> -{
> -	if (pVBInfo->VBType & (VB_SIS301 | VB_SIS301B | VB_SIS302B
> -			| VB_SIS301LV | VB_SIS302LV | VB_XGI301C)) {
> -		if (!(pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) &&
> -		    (pVBInfo->SetFlag & ProgrammingCRT2)) {
> -			*di_0 = XGI_VBVCLKData[tempal].Part4_A;
> -			*di_1 = XGI_VBVCLKData[tempal].Part4_B;
> -		}
> -	} else {
> -		*di_0 = XGI_VCLKData[tempal].SR2B;
> -		*di_1 = XGI_VCLKData[tempal].SR2C;
> -	}
> -}
> -
> -static void XGI_SetCRT2ECLK(unsigned short ModeIdIndex,
> -			    unsigned short RefreshRateTableIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned char di_0, di_1, tempal;
> -	int i;
> -
> -	tempal = XGI_GetVCLKPtr(RefreshRateTableIndex, ModeIdIndex, pVBInfo);
> -	XGI_GetVCLKLen(tempal, &di_0, &di_1, pVBInfo);
> -	XGI_GetLCDVCLKPtr(&di_0, &di_1, pVBInfo);
> -
> -	for (i = 0; i < 4; i++) {
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x31, ~0x30,
> -				 (unsigned short)(0x10 * i));
> -		if (!(pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) &&
> -		    !(pVBInfo->VBInfo & SetInSlaveMode)) {
> -			xgifb_reg_set(pVBInfo->P3c4, 0x2e, di_0);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x2f, di_1);
> -		} else {
> -			xgifb_reg_set(pVBInfo->P3c4, 0x2b, di_0);
> -			xgifb_reg_set(pVBInfo->P3c4, 0x2c, di_1);
> -		}
> -	}
> -}
> -
> -static void XGI_UpdateModeInfo(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempcl, tempch, temp, tempbl, tempax;
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		tempcl = 0;
> -		tempch = 0;
> -		temp = xgifb_reg_get(pVBInfo->P3c4, 0x01);
> -
> -		if (!(temp & 0x20)) {
> -			temp = xgifb_reg_get(pVBInfo->P3d4, 0x17);
> -			if (temp & 0x80) {
> -				temp = xgifb_reg_get(pVBInfo->P3d4, 0x53);
> -				if (!(temp & 0x40))
> -					tempcl |= ActiveCRT1;
> -			}
> -		}
> -
> -		temp = xgifb_reg_get(pVBInfo->Part1Port, 0x2e);
> -		temp &= 0x0f;
> -
> -		if (!(temp == 0x08)) {
> -			/* Check ChannelA */
> -			tempax = xgifb_reg_get(pVBInfo->Part1Port, 0x13);
> -			if (tempax & 0x04)
> -				tempcl = tempcl | ActiveLCD;
> -
> -			temp &= 0x05;
> -
> -			if (!(tempcl & ActiveLCD)) {
> -				if (temp == 0x01)
> -					tempcl |= ActiveCRT2;
> -			}
> -
> -			if (temp == 0x04)
> -				tempcl |= ActiveLCD;
> -
> -			if (temp == 0x05) {
> -				temp = xgifb_reg_get(pVBInfo->Part2Port, 0x00);
> -
> -				if (!(temp & 0x08))
> -					tempch |= ActiveAVideo;
> -
> -				if (!(temp & 0x04))
> -					tempch |= ActiveSVideo;
> -
> -				if (temp & 0x02)
> -					tempch |= ActiveSCART;
> -
> -				if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -					if (temp & 0x01)
> -						tempch |= ActiveHiTV;
> -				}
> -
> -				if (pVBInfo->VBInfo & SetCRT2ToYPbPr525750) {
> -					temp = xgifb_reg_get(
> -							pVBInfo->Part2Port,
> -							0x4d);
> -
> -					if (temp & 0x10)
> -						tempch |= ActiveYPbPr;
> -				}
> -
> -				if (tempch != 0)
> -					tempcl |= ActiveTV;
> -			}
> -		}
> -
> -		temp = xgifb_reg_get(pVBInfo->P3d4, 0x3d);
> -		if (tempcl & ActiveLCD) {
> -			if ((pVBInfo->SetFlag & ReserveTVOption)) {
> -				if (temp & ActiveTV)
> -					tempcl |= ActiveTV;
> -			}
> -		}
> -		temp = tempcl;
> -		tempbl = ~XGI_ModeSwitchStatus;
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x3d, tempbl, temp);
> -
> -		if (!(pVBInfo->SetFlag & ReserveTVOption))
> -			xgifb_reg_set(pVBInfo->P3d4, 0x3e, tempch);
> -	}
> -}
> -
> -void XGI_GetVBType(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short flag, tempbx, tempah;
> -
> -	tempbx = VB_SIS302B;
> -	flag = xgifb_reg_get(pVBInfo->Part4Port, 0x00);
> -	if (flag == 0x02)
> -		goto finish;
> -
> -	tempbx = VB_SIS301;
> -	flag = xgifb_reg_get(pVBInfo->Part4Port, 0x01);
> -	if (flag < 0xB0)
> -		goto finish;
> -
> -	tempbx = VB_SIS301B;
> -	if (flag < 0xC0)
> -		goto bigger_than_0xB0;
> -
> -	tempbx = VB_XGI301C;
> -	if (flag < 0xD0)
> -		goto bigger_than_0xB0;
> -
> -	tempbx = VB_SIS301LV;
> -	if (flag < 0xE0)
> -		goto bigger_than_0xB0;
> -
> -	tempbx = VB_SIS302LV;
> -	tempah = xgifb_reg_get(pVBInfo->Part4Port, 0x39);
> -	if (tempah != 0xFF)
> -		tempbx = VB_XGI301C;
> -
> -bigger_than_0xB0:
> -	if (tempbx & (VB_SIS301B | VB_SIS302B)) {
> -		flag = xgifb_reg_get(pVBInfo->Part4Port, 0x23);
> -		if (!(flag & 0x02))
> -			tempbx = tempbx | VB_NoLCD;
> -	}
> -
> -finish:
> -	pVBInfo->VBType = tempbx;
> -}
> -
> -static void XGI_GetVBInfo(unsigned short ModeIdIndex,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempax, push, tempbx, temp, modeflag;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	pVBInfo->SetFlag = 0;
> -	pVBInfo->ModeType = modeflag & ModeTypeMask;
> -	tempbx = 0;
> -
> -	if (!(pVBInfo->VBType & 0xFFFF))
> -		return;
> -
> -	/* Check Display Device */
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x30);
> -	tempbx = tempbx | temp;
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x31);
> -	push = temp;
> -	push <<= 8;
> -	tempax = temp << 8;
> -	tempbx = tempbx | tempax;
> -	temp = SetCRT2ToDualEdge | SetCRT2ToYPbPr525750 | XGI_SetCRT2ToLCDA
> -		| SetInSlaveMode | DisableCRT2Display;
> -	temp = 0xFFFF ^ temp;
> -	tempbx &= temp;
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x38);
> -
> -	if (pVBInfo->VBType & (VB_SIS302B | VB_SIS301LV | VB_SIS302LV |
> -			       VB_XGI301C)) {
> -		if (temp & EnableDualEdge) {
> -			tempbx |= SetCRT2ToDualEdge;
> -			if (temp & SetToLCDA)
> -				tempbx |= XGI_SetCRT2ToLCDA;
> -		}
> -	}
> -
> -	if (pVBInfo->VBType & (VB_SIS301LV | VB_SIS302LV | VB_XGI301C)) {
> -		if (temp & SetYPbPr) {
> -			/* shampoo add for new scratch */
> -			temp = xgifb_reg_get(pVBInfo->P3d4, 0x35);
> -			temp &= YPbPrMode;
> -			tempbx |= SetCRT2ToHiVision;
> -
> -			if (temp != YPbPrMode1080i) {
> -				tempbx &= ~SetCRT2ToHiVision;
> -				tempbx |= SetCRT2ToYPbPr525750;
> -			}
> -		}
> -	}
> -
> -	tempax = push; /* restore CR31 */
> -
> -	temp = 0x09FC;
> -
> -	if (!(tempbx & temp)) {
> -		tempax |= DisableCRT2Display;
> -		tempbx = 0;
> -	}
> -
> -	if (!(pVBInfo->VBType & VB_NoLCD)) {
> -		if (tempbx & XGI_SetCRT2ToLCDA) {
> -			if (tempbx & SetSimuScanMode)
> -				tempbx &= (~(SetCRT2ToLCD | SetCRT2ToRAMDAC |
> -					     SwitchCRT2));
> -			else
> -				tempbx &= (~(SetCRT2ToLCD | SetCRT2ToRAMDAC |
> -					     SetCRT2ToTV | SwitchCRT2));
> -		}
> -	}
> -
> -	/* shampoo add */
> -	/* for driver abnormal */
> -	if (!(tempbx & (SwitchCRT2 | SetSimuScanMode))) {
> -		if (tempbx & SetCRT2ToRAMDAC) {
> -			tempbx &= (0xFF00 | SetCRT2ToRAMDAC |
> -				   SwitchCRT2 | SetSimuScanMode);
> -			tempbx &= (0x00FF | (~SetCRT2ToYPbPr525750));
> -		}
> -	}
> -
> -	if (!(pVBInfo->VBType & VB_NoLCD)) {
> -		if (tempbx & SetCRT2ToLCD) {
> -			tempbx &= (0xFF00 | SetCRT2ToLCD | SwitchCRT2 |
> -				   SetSimuScanMode);
> -			tempbx &= (0x00FF | (~SetCRT2ToYPbPr525750));
> -		}
> -	}
> -
> -	if (tempbx & SetCRT2ToSCART) {
> -		tempbx &= (0xFF00 | SetCRT2ToSCART | SwitchCRT2 |
> -			   SetSimuScanMode);
> -		tempbx &= (0x00FF | (~SetCRT2ToYPbPr525750));
> -	}
> -
> -	if (tempbx & SetCRT2ToYPbPr525750)
> -		tempbx &= (0xFF00 | SwitchCRT2 | SetSimuScanMode);
> -
> -	if (tempbx & SetCRT2ToHiVision)
> -		tempbx &= (0xFF00 | SetCRT2ToHiVision | SwitchCRT2 |
> -			   SetSimuScanMode);
> -
> -	if (tempax & DisableCRT2Display) { /* Set Display Device Info */
> -		if (!(tempbx & (SwitchCRT2 | SetSimuScanMode)))
> -			tempbx = DisableCRT2Display;
> -	}
> -
> -	if (!(tempbx & DisableCRT2Display)) {
> -		if (!(tempbx & DriverMode) || !(modeflag & CRT2Mode)) {
> -			if (!(tempbx & XGI_SetCRT2ToLCDA))
> -				tempbx |= (SetInSlaveMode | SetSimuScanMode);
> -		}
> -
> -		/* LCD+TV can't support in slave mode
> -		 * (Force LCDA+TV->LCDB)
> -		 */
> -		if ((tempbx & SetInSlaveMode) && (tempbx & XGI_SetCRT2ToLCDA)) {
> -			tempbx ^= (SetCRT2ToLCD | XGI_SetCRT2ToLCDA |
> -				   SetCRT2ToDualEdge);
> -			pVBInfo->SetFlag |= ReserveTVOption;
> -		}
> -	}
> -
> -	pVBInfo->VBInfo = tempbx;
> -}
> -
> -static void XGI_GetTVInfo(unsigned short ModeIdIndex,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx = 0, resinfo = 0, modeflag, index1;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -		modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -		resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -
> -		tempbx = xgifb_reg_get(pVBInfo->P3d4, 0x35);
> -		if (tempbx & TVSetPAL) {
> -			tempbx &= (SetCHTVOverScan |
> -				   TVSetPALM |
> -				   TVSetPALN |
> -				   TVSetPAL);
> -			if (tempbx & TVSetPALM)
> -				/* set to NTSC if PAL-M */
> -				tempbx &= ~TVSetPAL;
> -		} else {
> -			tempbx &= (SetCHTVOverScan |
> -				   TVSetNTSCJ |
> -				   TVSetPAL);
> -		}
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToSCART)
> -			tempbx |= TVSetPAL;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToYPbPr525750) {
> -			index1 = xgifb_reg_get(pVBInfo->P3d4, 0x35);
> -			index1 &= YPbPrMode;
> -
> -			if (index1 == YPbPrMode525i)
> -				tempbx |= TVSetYPbPr525i;
> -
> -			if (index1 == YPbPrMode525p)
> -				tempbx = tempbx | TVSetYPbPr525p;
> -			if (index1 == YPbPrMode750p)
> -				tempbx = tempbx | TVSetYPbPr750p;
> -		}
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToHiVision)
> -			tempbx = tempbx | TVSetHiVision | TVSetPAL;
> -
> -		if ((pVBInfo->VBInfo & SetInSlaveMode) &&
> -		    (!(pVBInfo->VBInfo & SetNotSimuMode)))
> -			tempbx |= TVSimuMode;
> -
> -		if (!(tempbx & TVSetPAL) && (modeflag > 13) && (resinfo == 8)) {
> -			/* NTSC 1024x768, */
> -			tempbx |= NTSC1024x768;
> -		}
> -
> -		tempbx |= RPLLDIV2XO;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -			if (pVBInfo->VBInfo & SetInSlaveMode)
> -				tempbx &= (~RPLLDIV2XO);
> -		} else if (tempbx & (TVSetYPbPr525p | TVSetYPbPr750p)) {
> -			tempbx &= (~RPLLDIV2XO);
> -		} else if (!(pVBInfo->VBType & (VB_SIS301B | VB_SIS302B |
> -						VB_SIS301LV | VB_SIS302LV |
> -						VB_XGI301C))) {
> -			if (tempbx & TVSimuMode)
> -				tempbx &= (~RPLLDIV2XO);
> -		}
> -	}
> -	pVBInfo->TVInfo = tempbx;
> -}
> -
> -static unsigned char XGI_GetLCDInfo(unsigned short ModeIdIndex,
> -				    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short temp, tempax, tempbx, resinfo = 0, LCDIdIndex;
> -
> -	pVBInfo->LCDResInfo = 0;
> -	pVBInfo->LCDTypeInfo = 0;
> -	pVBInfo->LCDInfo = 0;
> -
> -	/* si+Ext_ResInfo */
> -	resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x36); /* Get LCD Res.Info */
> -	tempbx = temp & 0x0F;
> -
> -	if (tempbx == 0)
> -		tempbx = Panel_1024x768; /* default */
> -
> -	/* LCD75 */
> -	if ((tempbx == Panel_1024x768) || (tempbx == Panel_1280x1024)) {
> -		if (pVBInfo->VBInfo & DriverMode) {
> -			tempax = xgifb_reg_get(pVBInfo->P3d4, 0x33);
> -			if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)
> -				tempax &= 0x0F;
> -			else
> -				tempax >>= 4;
> -
> -			if ((resinfo == 6) || (resinfo == 9)) {
> -				if (tempax >= 3)
> -					tempbx |= PanelRef75Hz;
> -			} else if ((resinfo == 7) || (resinfo == 8)) {
> -				if (tempax >= 4)
> -					tempbx |= PanelRef75Hz;
> -			}
> -		}
> -	}
> -
> -	pVBInfo->LCDResInfo = tempbx;
> -
> -	/* End of LCD75 */
> -
> -	if (!(pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)))
> -		return 0;
> -
> -	tempbx = 0;
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x37);
> -
> -	temp &= (ScalingLCD | LCDNonExpanding | LCDSyncBit | SetPWDEnable);
> -
> -	tempbx |= temp;
> -
> -	LCDIdIndex = XGI_GetLCDCapPtr1(pVBInfo);
> -
> -	tempax = pVBInfo->LCDCapList[LCDIdIndex].LCD_Capability;
> -
> -	if (((pVBInfo->VBType & VB_SIS302LV) ||
> -	     (pVBInfo->VBType & VB_XGI301C)) && (tempax & XGI_LCDDualLink))
> -		tempbx |= SetLCDDualLink;
> -
> -	if ((pVBInfo->LCDResInfo == Panel_1400x1050) &&
> -	    (pVBInfo->VBInfo & SetCRT2ToLCD) && (resinfo == 9) &&
> -	    !(tempbx & EnableScalingLCD))
> -		/*
> -		 * set to center in 1280x1024 LCDB
> -		 * for Panel_1400x1050
> -		 */
> -		tempbx |= SetLCDtoNonExpanding;
> -
> -	if (pVBInfo->VBInfo & SetInSlaveMode) {
> -		if (pVBInfo->VBInfo & SetNotSimuMode)
> -			tempbx |= XGI_LCDVESATiming;
> -	} else {
> -		tempbx |= XGI_LCDVESATiming;
> -	}
> -
> -	pVBInfo->LCDInfo = tempbx;
> -
> -	return 1;
> -}
> -
> -unsigned char XGI_SearchModeID(unsigned short ModeNo,
> -			       unsigned short *ModeIdIndex)
> -{
> -	for (*ModeIdIndex = 0;; (*ModeIdIndex)++) {
> -		if (XGI330_EModeIDTable[*ModeIdIndex].Ext_ModeID == ModeNo)
> -			break;
> -		if (XGI330_EModeIDTable[*ModeIdIndex].Ext_ModeID == 0xFF)
> -			return 0;
> -	}
> -
> -	return 1;
> -}
> -
> -static unsigned char XG21GPIODataTransfer(unsigned char ujDate)
> -{
> -	unsigned char ujRet = 0;
> -	unsigned char i = 0;
> -
> -	for (i = 0; i < 8; i++) {
> -		ujRet <<= 1;
> -		ujRet |= (ujDate >> i) & 1;
> -	}
> -
> -	return ujRet;
> -}
> -
> -/*
> - * output
> - *	bl[5] : LVDS signal
> - *	bl[1] : LVDS backlight
> - *	bl[0] : LVDS VDD
> - */
> -static unsigned char XGI_XG21GetPSCValue(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CR4A, temp;
> -
> -	CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A);
> -	xgifb_reg_and(pVBInfo->P3d4, 0x4A, ~0x23); /* enable GPIO write */
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x48);
> -
> -	temp = XG21GPIODataTransfer(temp);
> -	temp &= 0x23;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x4A, CR4A);
> -	return temp;
> -}
> -
> -/*
> - * output
> - *	bl[5] : LVDS signal
> - *	bl[1] : LVDS backlight
> - *	bl[0] : LVDS VDD
> - */
> -static unsigned char XGI_XG27GetPSCValue(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CR4A, CRB4, temp;
> -
> -	CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A);
> -	xgifb_reg_and(pVBInfo->P3d4, 0x4A, ~0x0C); /* enable GPIO write */
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x48);
> -
> -	temp &= 0x0C;
> -	temp >>= 2;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x4A, CR4A);
> -	CRB4 = xgifb_reg_get(pVBInfo->P3d4, 0xB4);
> -	temp |= ((CRB4 & 0x04) << 3);
> -	return temp;
> -}
> -
> -/*
> - * input
> - *	bl[5] : 1;LVDS signal on
> - *	bl[1] : 1;LVDS backlight on
> - *	bl[0] : 1:LVDS VDD on
> - *	bh: 100000b : clear bit 5, to set bit5
> - *	    000010b : clear bit 1, to set bit1
> - *	    000001b : clear bit 0, to set bit0
> - */
> -static void XGI_XG21BLSignalVDD(unsigned short tempbh, unsigned short tempbl,
> -				struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CR4A, temp;
> -
> -	CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A);
> -	tempbh &= 0x23;
> -	tempbl &= 0x23;
> -	xgifb_reg_and(pVBInfo->P3d4, 0x4A, ~tempbh); /* enable GPIO write */
> -
> -	if (tempbh & 0x20) {
> -		temp = (tempbl >> 4) & 0x02;
> -
> -		/* CR B4[1] */
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0xB4, ~0x02, temp);
> -	}
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x48);
> -
> -	temp = XG21GPIODataTransfer(temp);
> -	temp &= ~tempbh;
> -	temp |= tempbl;
> -	xgifb_reg_set(pVBInfo->P3d4, 0x48, temp);
> -}
> -
> -static void XGI_XG27BLSignalVDD(unsigned short tempbh, unsigned short tempbl,
> -				struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CR4A, temp;
> -	unsigned short tempbh0, tempbl0;
> -
> -	tempbh0 = tempbh;
> -	tempbl0 = tempbl;
> -	tempbh0 &= 0x20;
> -	tempbl0 &= 0x20;
> -	tempbh0 >>= 3;
> -	tempbl0 >>= 3;
> -
> -	if (tempbh & 0x20) {
> -		temp = (tempbl >> 4) & 0x02;
> -
> -		/* CR B4[1] */
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0xB4, ~0x02, temp);
> -	}
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0xB4, ~tempbh0, tempbl0);
> -
> -	CR4A = xgifb_reg_get(pVBInfo->P3d4, 0x4A);
> -	tempbh &= 0x03;
> -	tempbl &= 0x03;
> -	tempbh <<= 2;
> -	tempbl <<= 2; /* GPIOC,GPIOD */
> -	xgifb_reg_and(pVBInfo->P3d4, 0x4A, ~tempbh); /* enable GPIO write */
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x48, ~tempbh, tempbl);
> -}
> -
> -static void XGI_DisplayOn(struct xgifb_video_info *xgifb_info,
> -			  struct xgi_hw_device_info *pXGIHWDE,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x01, 0xDF, 0x00);
> -	if (pXGIHWDE->jChipType == XG21) {
> -		if (pVBInfo->IF_DEF_LVDS == 1) {
> -			if (!(XGI_XG21GetPSCValue(pVBInfo) & 0x1)) {
> -				/* LVDS VDD on */
> -				XGI_XG21BLSignalVDD(0x01, 0x01, pVBInfo);
> -				mdelay(xgifb_info->lvds_data.PSC_S2);
> -			}
> -			if (!(XGI_XG21GetPSCValue(pVBInfo) & 0x20))
> -				/* LVDS signal on */
> -				XGI_XG21BLSignalVDD(0x20, 0x20, pVBInfo);
> -			mdelay(xgifb_info->lvds_data.PSC_S3);
> -			/* LVDS backlight on */
> -			XGI_XG21BLSignalVDD(0x02, 0x02, pVBInfo);
> -		} else {
> -			/* DVO/DVI signal on */
> -			XGI_XG21BLSignalVDD(0x20, 0x20, pVBInfo);
> -		}
> -	}
> -
> -	if (pXGIHWDE->jChipType == XG27) {
> -		if (pVBInfo->IF_DEF_LVDS == 1) {
> -			if (!(XGI_XG27GetPSCValue(pVBInfo) & 0x1)) {
> -				/* LVDS VDD on */
> -				XGI_XG27BLSignalVDD(0x01, 0x01, pVBInfo);
> -				mdelay(xgifb_info->lvds_data.PSC_S2);
> -			}
> -			if (!(XGI_XG27GetPSCValue(pVBInfo) & 0x20))
> -				/* LVDS signal on */
> -				XGI_XG27BLSignalVDD(0x20, 0x20, pVBInfo);
> -			mdelay(xgifb_info->lvds_data.PSC_S3);
> -			/* LVDS backlight on */
> -			XGI_XG27BLSignalVDD(0x02, 0x02, pVBInfo);
> -		} else {
> -			/* DVO/DVI signal on */
> -			XGI_XG27BLSignalVDD(0x20, 0x20, pVBInfo);
> -		}
> -	}
> -}
> -
> -void XGI_DisplayOff(struct xgifb_video_info *xgifb_info,
> -		    struct xgi_hw_device_info *pXGIHWDE,
> -		    struct vb_device_info *pVBInfo)
> -{
> -	if (pXGIHWDE->jChipType == XG21) {
> -		if (pVBInfo->IF_DEF_LVDS == 1) {
> -			/* LVDS backlight off */
> -			XGI_XG21BLSignalVDD(0x02, 0x00, pVBInfo);
> -			mdelay(xgifb_info->lvds_data.PSC_S3);
> -		} else {
> -			/* DVO/DVI signal off */
> -			XGI_XG21BLSignalVDD(0x20, 0x00, pVBInfo);
> -		}
> -	}
> -
> -	if (pXGIHWDE->jChipType == XG27) {
> -		if ((XGI_XG27GetPSCValue(pVBInfo) & 0x2)) {
> -			/* LVDS backlight off */
> -			XGI_XG27BLSignalVDD(0x02, 0x00, pVBInfo);
> -			mdelay(xgifb_info->lvds_data.PSC_S3);
> -		}
> -
> -		if (pVBInfo->IF_DEF_LVDS == 0) {
> -			/* DVO/DVI signal off */
> -			XGI_XG27BLSignalVDD(0x20, 0x00, pVBInfo);
> -		}
> -	}
> -
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x01, 0xDF, 0x20);
> -}
> -
> -static void XGI_WaitDisply(struct vb_device_info *pVBInfo)
> -{
> -	while ((inb(pVBInfo->P3da) & 0x01))
> -		break;
> -
> -	while (!(inb(pVBInfo->P3da) & 0x01))
> -		break;
> -}
> -
> -static void XGI_AutoThreshold(struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_or(pVBInfo->Part1Port, 0x01, 0x40);
> -}
> -
> -static void XGI_SaveCRT2Info(unsigned short ModeNo,
> -			     struct vb_device_info *pVBInfo)
> -{
> -	unsigned short temp1, temp2;
> -
> -	/* reserve CR34 for CRT1 Mode No */
> -	xgifb_reg_set(pVBInfo->P3d4, 0x34, ModeNo);
> -	temp1 = (pVBInfo->VBInfo & SetInSlaveMode) >> 8;
> -	temp2 = ~(SetInSlaveMode >> 8);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x31, temp2, temp1);
> -}
> -
> -static void XGI_GetCRT2ResInfo(unsigned short ModeIdIndex,
> -			       struct vb_device_info *pVBInfo)
> -{
> -	unsigned short xres, yres, modeflag, resindex;
> -
> -	resindex = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -	xres = XGI330_ModeResInfo[resindex].HTotal; /* xres->ax */
> -	yres = XGI330_ModeResInfo[resindex].VTotal; /* yres->bx */
> -	/* si+St_ModeFlag */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	if (modeflag & HalfDCLK)
> -		xres *= 2;
> -
> -	if (modeflag & DoubleScanMode)
> -		yres *= 2;
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToLCD))
> -		goto exit;
> -
> -	if (pVBInfo->LCDResInfo == Panel_1600x1200) {
> -		if (!(pVBInfo->LCDInfo & XGI_LCDVESATiming)) {
> -			if (yres == 1024)
> -				yres = 1056;
> -		}
> -	}
> -
> -	if (pVBInfo->LCDResInfo == Panel_1280x1024) {
> -		if (yres == 400)
> -			yres = 405;
> -		else if (yres == 350)
> -			yres = 360;
> -
> -		if (pVBInfo->LCDInfo & XGI_LCDVESATiming) {
> -			if (yres == 360)
> -				yres = 375;
> -		}
> -	}
> -
> -	if (pVBInfo->LCDResInfo == Panel_1024x768) {
> -		if (!(pVBInfo->LCDInfo & XGI_LCDVESATiming)) {
> -			if (!(pVBInfo->LCDInfo & LCDNonExpanding)) {
> -				if (yres == 350)
> -					yres = 357;
> -				else if (yres == 400)
> -					yres = 420;
> -				else if (yres == 480)
> -					yres = 525;
> -			}
> -		}
> -	}
> -
> -	if (xres == 720)
> -		xres = 640;
> -
> -exit:
> -	pVBInfo->VGAHDE = xres;
> -	pVBInfo->HDE = xres;
> -	pVBInfo->VGAVDE = yres;
> -	pVBInfo->VDE = yres;
> -}
> -
> -static unsigned char XGI_IsLCDDualLink(struct vb_device_info *pVBInfo)
> -{
> -	if ((pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) &&
> -	    (pVBInfo->LCDInfo & SetLCDDualLink)) /* shampoo0129 */
> -		return 1;
> -
> -	return 0;
> -}
> -
> -static void XGI_GetRAMDAC2DATA(unsigned short ModeIdIndex,
> -			       unsigned short RefreshRateTableIndex,
> -			       struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempax, tempbx, temp1, temp2, modeflag = 0, tempcx,
> -			CRT1Index;
> -
> -	pVBInfo->RVBHCMAX = 1;
> -	pVBInfo->RVBHCFACT = 1;
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	CRT1Index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
> -	CRT1Index &= IndexMask;
> -	temp1 = (unsigned short)XGI_CRT1Table[CRT1Index].CR[0];
> -	temp2 = (unsigned short)XGI_CRT1Table[CRT1Index].CR[5];
> -	tempax = (temp1 & 0xFF) | ((temp2 & 0x03) << 8);
> -	tempbx = (unsigned short)XGI_CRT1Table[CRT1Index].CR[8];
> -	tempcx = (unsigned short)XGI_CRT1Table[CRT1Index].CR[14] << 8;
> -	tempcx &= 0x0100;
> -	tempcx <<= 2;
> -	tempbx |= tempcx;
> -	temp1 = (unsigned short)XGI_CRT1Table[CRT1Index].CR[9];
> -
> -	if (temp1 & 0x01)
> -		tempbx |= 0x0100;
> -
> -	if (temp1 & 0x20)
> -		tempbx |= 0x0200;
> -	tempax += 5;
> -
> -	if (modeflag & Charx8Dot)
> -		tempax *= 8;
> -	else
> -		tempax *= 9;
> -
> -	pVBInfo->VGAHT = tempax;
> -	pVBInfo->HT = tempax;
> -	tempbx++;
> -	pVBInfo->VGAVT = tempbx;
> -	pVBInfo->VT = tempbx;
> -}
> -
> -static void XGI_GetCRT2Data(unsigned short ModeIdIndex,
> -			    unsigned short RefreshRateTableIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempax = 0, tempbx = 0, modeflag, resinfo;
> -
> -	struct SiS_LCDData const *LCDPtr = NULL;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -	pVBInfo->NewFlickerMode = 0;
> -	pVBInfo->RVBHRS = 50;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToRAMDAC) {
> -		XGI_GetRAMDAC2DATA(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -		return;
> -	}
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
> -		LCDPtr = XGI_GetLcdPtr(XGI_LCDDataTable, ModeIdIndex,
> -				       pVBInfo);
> -
> -		pVBInfo->RVBHCMAX = LCDPtr->RVBHCMAX;
> -		pVBInfo->RVBHCFACT = LCDPtr->RVBHCFACT;
> -		pVBInfo->VGAHT = LCDPtr->VGAHT;
> -		pVBInfo->VGAVT = LCDPtr->VGAVT;
> -		pVBInfo->HT = LCDPtr->LCDHT;
> -		pVBInfo->VT = LCDPtr->LCDVT;
> -
> -		if (pVBInfo->LCDResInfo == Panel_1024x768) {
> -			tempax = 1024;
> -			tempbx = 768;
> -
> -			if (!(pVBInfo->LCDInfo & XGI_LCDVESATiming)) {
> -				if (pVBInfo->VGAVDE == 357)
> -					tempbx = 527;
> -				else if (pVBInfo->VGAVDE == 420)
> -					tempbx = 620;
> -				else if (pVBInfo->VGAVDE == 525)
> -					tempbx = 775;
> -				else if (pVBInfo->VGAVDE == 600)
> -					tempbx = 775;
> -			}
> -		} else if (pVBInfo->LCDResInfo == Panel_1024x768x75) {
> -			tempax = 1024;
> -			tempbx = 768;
> -		} else if (pVBInfo->LCDResInfo == Panel_1280x1024) {
> -			tempax = 1280;
> -			if (pVBInfo->VGAVDE == 360)
> -				tempbx = 768;
> -			else if (pVBInfo->VGAVDE == 375)
> -				tempbx = 800;
> -			else if (pVBInfo->VGAVDE == 405)
> -				tempbx = 864;
> -			else
> -				tempbx = 1024;
> -		} else if (pVBInfo->LCDResInfo == Panel_1280x1024x75) {
> -			tempax = 1280;
> -			tempbx = 1024;
> -		} else if (pVBInfo->LCDResInfo == Panel_1280x960) {
> -			tempax = 1280;
> -			if (pVBInfo->VGAVDE == 350)
> -				tempbx = 700;
> -			else if (pVBInfo->VGAVDE == 400)
> -				tempbx = 800;
> -			else if (pVBInfo->VGAVDE == 1024)
> -				tempbx = 960;
> -			else
> -				tempbx = 960;
> -		} else if (pVBInfo->LCDResInfo == Panel_1400x1050) {
> -			tempax = 1400;
> -			tempbx = 1050;
> -
> -			if (pVBInfo->VGAVDE == 1024) {
> -				tempax = 1280;
> -				tempbx = 1024;
> -			}
> -		} else if (pVBInfo->LCDResInfo == Panel_1600x1200) {
> -			tempax = 1600;
> -			tempbx = 1200; /* alan 10/14/2003 */
> -			if (!(pVBInfo->LCDInfo & XGI_LCDVESATiming)) {
> -				if (pVBInfo->VGAVDE == 350)
> -					tempbx = 875;
> -				else if (pVBInfo->VGAVDE == 400)
> -					tempbx = 1000;
> -			}
> -		}
> -
> -		if (pVBInfo->LCDInfo & LCDNonExpanding) {
> -			tempax = pVBInfo->VGAHDE;
> -			tempbx = pVBInfo->VGAVDE;
> -		}
> -
> -		pVBInfo->HDE = tempax;
> -		pVBInfo->VDE = tempbx;
> -		return;
> -	}
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToTV)) {
> -		struct SiS_TVData const *TVPtr;
> -
> -		TVPtr = XGI_GetTVPtr(ModeIdIndex, RefreshRateTableIndex,
> -				     pVBInfo);
> -
> -		pVBInfo->RVBHCMAX = TVPtr->RVBHCMAX;
> -		pVBInfo->RVBHCFACT = TVPtr->RVBHCFACT;
> -		pVBInfo->VGAHT = TVPtr->VGAHT;
> -		pVBInfo->VGAVT = TVPtr->VGAVT;
> -		pVBInfo->HDE = TVPtr->TVHDE;
> -		pVBInfo->VDE = TVPtr->TVVDE;
> -		pVBInfo->RVBHRS = TVPtr->RVBHRS;
> -		pVBInfo->NewFlickerMode = TVPtr->FlickerMode;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -			if (resinfo == 0x08)
> -				pVBInfo->NewFlickerMode = 0x40;
> -			else if (resinfo == 0x09)
> -				pVBInfo->NewFlickerMode = 0x40;
> -			else if (resinfo == 0x12)
> -				pVBInfo->NewFlickerMode = 0x40;
> -
> -			if (pVBInfo->VGAVDE == 350)
> -				pVBInfo->TVInfo |= TVSimuMode;
> -
> -			tempax = ExtHiTVHT;
> -			tempbx = ExtHiTVVT;
> -
> -			if (pVBInfo->VBInfo & SetInSlaveMode) {
> -				if (pVBInfo->TVInfo & TVSimuMode) {
> -					tempax = StHiTVHT;
> -					tempbx = StHiTVVT;
> -
> -					if (!(modeflag & Charx8Dot)) {
> -						tempax = StHiTextTVHT;
> -						tempbx = StHiTextTVVT;
> -					}
> -				}
> -			}
> -		} else if (pVBInfo->VBInfo & SetCRT2ToYPbPr525750) {
> -			if (pVBInfo->TVInfo & TVSetYPbPr750p) {
> -				tempax = YPbPrTV750pHT; /* Ext750pTVHT */
> -				tempbx = YPbPrTV750pVT; /* Ext750pTVVT */
> -			}
> -
> -			if (pVBInfo->TVInfo & TVSetYPbPr525p) {
> -				tempax = YPbPrTV525pHT; /* Ext525pTVHT */
> -				tempbx = YPbPrTV525pVT; /* Ext525pTVVT */
> -			} else if (pVBInfo->TVInfo & TVSetYPbPr525i) {
> -				tempax = YPbPrTV525iHT; /* Ext525iTVHT */
> -				tempbx = YPbPrTV525iVT; /* Ext525iTVVT */
> -				if (pVBInfo->TVInfo & NTSC1024x768)
> -					tempax = NTSC1024x768HT;
> -			}
> -		} else {
> -			tempax = PALHT;
> -			tempbx = PALVT;
> -			if (!(pVBInfo->TVInfo & TVSetPAL)) {
> -				tempax = NTSCHT;
> -				tempbx = NTSCVT;
> -				if (pVBInfo->TVInfo & NTSC1024x768)
> -					tempax = NTSC1024x768HT;
> -			}
> -		}
> -
> -		pVBInfo->HT = tempax;
> -		pVBInfo->VT = tempbx;
> -	}
> -}
> -
> -static void XGI_SetCRT2VCLK(unsigned short ModeIdIndex,
> -			    unsigned short RefreshRateTableIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned char di_0, di_1, tempal;
> -
> -	tempal = XGI_GetVCLKPtr(RefreshRateTableIndex, ModeIdIndex, pVBInfo);
> -	XGI_GetVCLKLen(tempal, &di_0, &di_1, pVBInfo);
> -	XGI_GetLCDVCLKPtr(&di_0, &di_1, pVBInfo);
> -
> -	if (pVBInfo->VBType & VB_SIS301) { /* shampoo 0129 */
> -		/* 301 */
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x0A, 0x10);
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x0B, di_1);
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x0A, di_0);
> -	} else { /* 301b/302b/301lv/302lv */
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x0A, di_0);
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x0B, di_1);
> -	}
> -
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x00, 0x12);
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToRAMDAC)
> -		xgifb_reg_or(pVBInfo->Part4Port, 0x12, 0x28);
> -	else
> -		xgifb_reg_or(pVBInfo->Part4Port, 0x12, 0x08);
> -}
> -
> -static unsigned short XGI_GetColorDepth(unsigned short ModeIdIndex)
> -{
> -	unsigned short ColorDepth[6] = { 1, 2, 4, 4, 6, 8 };
> -	short index;
> -	unsigned short modeflag;
> -
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	index = (modeflag & ModeTypeMask) - ModeEGA;
> -
> -	if (index < 0)
> -		index = 0;
> -
> -	return ColorDepth[index];
> -}
> -
> -static unsigned short XGI_GetOffset(unsigned short ModeNo,
> -				    unsigned short ModeIdIndex,
> -				    unsigned short RefreshRateTableIndex)
> -{
> -	unsigned short temp, colordepth, modeinfo, index, infoflag,
> -			ColorDepth[] = { 0x01, 0x02, 0x04 };
> -
> -	modeinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeInfo;
> -	infoflag = XGI330_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
> -
> -	index = (modeinfo >> 8) & 0xFF;
> -
> -	temp = XGI330_ScreenOffset[index];
> -
> -	if (infoflag & InterlaceMode)
> -		temp <<= 1;
> -
> -	colordepth = XGI_GetColorDepth(ModeIdIndex);
> -
> -	if ((ModeNo >= 0x7C) && (ModeNo <= 0x7E)) {
> -		temp = ModeNo - 0x7C;
> -		colordepth = ColorDepth[temp];
> -		temp = 0x6B;
> -		if (infoflag & InterlaceMode)
> -			temp <<= 1;
> -	}
> -	return temp * colordepth;
> -}
> -
> -static void XGI_SetCRT2Offset(unsigned short ModeNo,
> -			      unsigned short ModeIdIndex,
> -			      unsigned short RefreshRateTableIndex,
> -			      struct vb_device_info *pVBInfo)
> -{
> -	unsigned short offset;
> -	unsigned char temp;
> -
> -	if (pVBInfo->VBInfo & SetInSlaveMode)
> -		return;
> -
> -	offset = XGI_GetOffset(ModeNo, ModeIdIndex, RefreshRateTableIndex);
> -	temp = (unsigned char)(offset & 0xFF);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x07, temp);
> -	temp = (unsigned char)((offset & 0xFF00) >> 8);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x09, temp);
> -	temp = (unsigned char)(((offset >> 3) & 0xFF) + 1);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x03, temp);
> -}
> -
> -static void XGI_SetCRT2FIFO(struct vb_device_info *pVBInfo)
> -{
> -	/* threshold high ,disable auto threshold */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x01, 0x3B);
> -	/* threshold low default 04h */
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x02, ~(0x3F), 0x04);
> -}
> -
> -static void XGI_PreSetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex,
> -			     unsigned short RefreshRateTableIndex,
> -			     struct vb_device_info *pVBInfo)
> -{
> -	u8 tempcx;
> -
> -	XGI_SetCRT2Offset(ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -	XGI_SetCRT2FIFO(pVBInfo);
> -
> -	for (tempcx = 4; tempcx < 7; tempcx++)
> -		xgifb_reg_set(pVBInfo->Part1Port, tempcx, 0x0);
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x50, 0x00);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x02, 0x44); /* temp 0206 */
> -}
> -
> -static void XGI_SetGroup1(unsigned short ModeIdIndex,
> -			  unsigned short RefreshRateTableIndex,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	unsigned short temp = 0, tempax = 0, tempbx = 0, tempcx = 0,
> -			pushbx = 0, CRT1Index, modeflag;
> -
> -	CRT1Index = XGI330_RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
> -	CRT1Index &= IndexMask;
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	/* bainy change table name */
> -	if (modeflag & HalfDCLK) {
> -		/* BTVGA2HT 0x08,0x09 */
> -		temp = (pVBInfo->VGAHT / 2 - 1) & 0x0FF;
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x08, temp);
> -		temp = (((pVBInfo->VGAHT / 2 - 1) & 0xFF00) >> 8) << 4;
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x09, ~0x0F0, temp);
> -		/* BTVGA2HDEE 0x0A,0x0C */
> -		temp = (pVBInfo->VGAHDE / 2 + 16) & 0x0FF;
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x0A, temp);
> -		tempcx = ((pVBInfo->VGAHT - pVBInfo->VGAHDE) / 2) >> 2;
> -		pushbx = pVBInfo->VGAHDE / 2 + 16;
> -		tempcx >>= 1;
> -		tempbx = pushbx + tempcx; /* bx BTVGA at HRS 0x0B,0x0C */
> -		tempcx += tempbx;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToRAMDAC) {
> -			tempbx = XGI_CRT1Table[CRT1Index].CR[4];
> -			tempbx |= ((XGI_CRT1Table[CRT1Index].CR[14] &
> -						0xC0) << 2);
> -			tempbx = (tempbx - 3) << 3; /* (VGAHRS-3)*8 */
> -			tempcx = XGI_CRT1Table[CRT1Index].CR[5];
> -			tempcx &= 0x1F;
> -			temp = XGI_CRT1Table[CRT1Index].CR[15];
> -			temp = (temp & 0x04) << (5 - 2); /* VGAHRE D[5] */
> -			tempcx = ((tempcx | temp) - 3) << 3; /* (VGAHRE-3)*8 */
> -		}
> -
> -		tempbx += 4;
> -		tempcx += 4;
> -
> -		if (tempcx > (pVBInfo->VGAHT / 2))
> -			tempcx = pVBInfo->VGAHT / 2;
> -
> -		temp = tempbx & 0x00FF;
> -
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x0B, temp);
> -	} else {
> -		temp = (pVBInfo->VGAHT - 1) & 0x0FF; /* BTVGA2HT 0x08,0x09 */
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x08, temp);
> -		temp = (((pVBInfo->VGAHT - 1) & 0xFF00) >> 8) << 4;
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x09, ~0x0F0, temp);
> -		/* BTVGA2HDEE 0x0A,0x0C */
> -		temp = (pVBInfo->VGAHDE + 16) & 0x0FF;
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x0A, temp);
> -		tempcx = (pVBInfo->VGAHT - pVBInfo->VGAHDE) >> 2; /* cx */
> -		pushbx = pVBInfo->VGAHDE + 16;
> -		tempcx >>= 1;
> -		tempbx = pushbx + tempcx; /* bx BTVGA at HRS 0x0B,0x0C */
> -		tempcx += tempbx;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToRAMDAC) {
> -			tempbx = XGI_CRT1Table[CRT1Index].CR[3];
> -			tempbx |= ((XGI_CRT1Table[CRT1Index].CR[5] &
> -						0xC0) << 2);
> -			tempbx = (tempbx - 3) << 3; /* (VGAHRS-3)*8 */
> -			tempcx = XGI_CRT1Table[CRT1Index].CR[4];
> -			tempcx &= 0x1F;
> -			temp = XGI_CRT1Table[CRT1Index].CR[6];
> -			temp = (temp & 0x04) << (5 - 2); /* VGAHRE D[5] */
> -			tempcx = ((tempcx | temp) - 3) << 3; /* (VGAHRE-3)*8 */
> -			tempbx += 16;
> -			tempcx += 16;
> -		}
> -
> -		if (tempcx > pVBInfo->VGAHT)
> -			tempcx = pVBInfo->VGAHT;
> -
> -		temp = tempbx & 0x00FF;
> -		xgifb_reg_set(pVBInfo->Part1Port, 0x0B, temp);
> -	}
> -
> -	tempax = (tempax & 0x00FF) | (tempbx & 0xFF00);
> -	tempbx = pushbx;
> -	tempbx = (tempbx & 0x00FF) | ((tempbx & 0xFF00) << 4);
> -	tempax |= (tempbx & 0xFF00);
> -	temp = (tempax & 0xFF00) >> 8;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0C, temp);
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0D, temp);
> -	tempcx = pVBInfo->VGAVT - 1;
> -	temp = tempcx & 0x00FF;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0E, temp);
> -	tempbx = pVBInfo->VGAVDE - 1;
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0F, temp);
> -	temp = ((tempbx & 0xFF00) << 3) >> 8;
> -	temp |= ((tempcx & 0xFF00) >> 8);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x12, temp);
> -
> -	/* BTVGA2VRS 0x10,0x11 */
> -	tempbx = (pVBInfo->VGAVT + pVBInfo->VGAVDE) >> 1;
> -	/* BTVGA2VRE 0x11 */
> -	tempcx = ((pVBInfo->VGAVT - pVBInfo->VGAVDE) >> 4) + tempbx + 1;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToRAMDAC) {
> -		tempbx = XGI_CRT1Table[CRT1Index].CR[10];
> -		temp = XGI_CRT1Table[CRT1Index].CR[9];
> -
> -		if (temp & 0x04)
> -			tempbx |= 0x0100;
> -
> -		if (temp & 0x080)
> -			tempbx |= 0x0200;
> -
> -		temp = XGI_CRT1Table[CRT1Index].CR[14];
> -
> -		if (temp & 0x08)
> -			tempbx |= 0x0400;
> -
> -		temp = XGI_CRT1Table[CRT1Index].CR[11];
> -		tempcx = (tempcx & 0xFF00) | (temp & 0x00FF);
> -	}
> -
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x10, temp);
> -	temp = ((tempbx & 0xFF00) >> 8) << 4;
> -	temp = (tempcx & 0x000F) | (temp);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x11, temp);
> -	tempax = 0;
> -
> -	if (modeflag & DoubleScanMode)
> -		tempax |= 0x80;
> -
> -	if (modeflag & HalfDCLK)
> -		tempax |= 0x40;
> -
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x2C, ~0x0C0, tempax);
> -}
> -
> -static unsigned short XGI_GetVGAHT2(struct vb_device_info *pVBInfo)
> -{
> -	unsigned long tempax, tempbx;
> -
> -	tempbx = ((pVBInfo->VGAVT - pVBInfo->VGAVDE) * pVBInfo->RVBHCMAX)
> -			& 0xFFFF;
> -	tempax = (pVBInfo->VT - pVBInfo->VDE) * pVBInfo->RVBHCFACT;
> -	tempax = (tempax * pVBInfo->HT) / tempbx;
> -
> -	return (unsigned short)tempax;
> -}
> -
> -static void XGI_SetLockRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short push1, push2, tempax, tempbx = 0, tempcx, temp, resinfo,
> -			modeflag;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	resinfo = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -
> -	if (!(pVBInfo->VBInfo & SetInSlaveMode))
> -		return;
> -
> -	temp = 0xFF; /* set MAX HT */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x03, temp);
> -	tempcx = 0x08;
> -
> -	if (pVBInfo->VBType & (VB_SIS301LV | VB_SIS302LV | VB_XGI301C))
> -		modeflag |= Charx8Dot;
> -
> -	tempax = pVBInfo->VGAHDE; /* 0x04 Horizontal Display End */
> -
> -	if (modeflag & HalfDCLK)
> -		tempax >>= 1;
> -
> -	tempax = (tempax / tempcx) - 1;
> -	tempbx |= ((tempax & 0x00FF) << 8);
> -	temp = tempax & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x04, temp);
> -
> -	temp = (tempbx & 0xFF00) >> 8;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -		if (!(pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -				| VB_SIS302LV | VB_XGI301C)))
> -			temp += 2;
> -
> -		if ((pVBInfo->VBInfo & SetCRT2ToHiVision) &&
> -		    !(pVBInfo->VBType & VB_SIS301LV) && (resinfo == 7))
> -			temp -= 2;
> -	}
> -
> -	/* 0x05 Horizontal Display Start */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x05, temp);
> -	/* 0x06 Horizontal Blank end */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x06, 0x03);
> -
> -	if (!(pVBInfo->VBInfo & DisableCRT2Display)) { /* 030226 bainy */
> -		if (pVBInfo->VBInfo & SetCRT2ToTV)
> -			tempax = pVBInfo->VGAHT;
> -		else
> -			tempax = XGI_GetVGAHT2(pVBInfo);
> -	}
> -
> -	if (tempax >= pVBInfo->VGAHT)
> -		tempax = pVBInfo->VGAHT;
> -
> -	if (modeflag & HalfDCLK)
> -		tempax >>= 1;
> -
> -	tempax = (tempax / tempcx) - 5;
> -	tempcx = tempax; /* 20030401 0x07 horizontal Retrace Start */
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -		temp = (tempbx & 0x00FF) - 1;
> -		if (!(modeflag & HalfDCLK)) {
> -			temp -= 6;
> -			if (pVBInfo->TVInfo & TVSimuMode) {
> -				temp -= 4;
> -				temp -= 10;
> -			}
> -		}
> -	} else {
> -		tempbx = (tempbx & 0xFF00) >> 8;
> -		tempcx = (tempcx + tempbx) >> 1;
> -		temp = (tempcx & 0x00FF) + 2;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -			temp -= 1;
> -			if (!(modeflag & HalfDCLK)) {
> -				if ((modeflag & Charx8Dot)) {
> -					temp += 4;
> -					if (pVBInfo->VGAHDE >= 800)
> -						temp -= 6;
> -				}
> -			}
> -		} else if (!(modeflag & HalfDCLK)) {
> -			temp -= 4;
> -			if (pVBInfo->LCDResInfo != Panel_1280x960 &&
> -			    pVBInfo->VGAHDE >= 800) {
> -				temp -= 7;
> -				if (pVBInfo->VGAHDE >= 1280 &&
> -				    pVBInfo->LCDResInfo != Panel_1280x960 &&
> -				    (pVBInfo->LCDInfo & LCDNonExpanding))
> -					temp += 28;
> -			}
> -		}
> -	}
> -
> -	/* 0x07 Horizontal Retrace Start */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x07, temp);
> -	/* 0x08 Horizontal Retrace End */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x08, 0);
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -		if (pVBInfo->TVInfo & TVSimuMode) {
> -			if (ModeNo == 0x50) {
> -				if (pVBInfo->TVInfo == SetNTSCTV) {
> -					xgifb_reg_set(pVBInfo->Part1Port,
> -						      0x07, 0x30);
> -					xgifb_reg_set(pVBInfo->Part1Port,
> -						      0x08, 0x03);
> -				} else {
> -					xgifb_reg_set(pVBInfo->Part1Port,
> -						      0x07, 0x2f);
> -					xgifb_reg_set(pVBInfo->Part1Port,
> -						      0x08, 0x02);
> -				}
> -			}
> -		}
> -	}
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x18, 0x03); /* 0x18 SR0B */
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x19, 0xF0, 0x00);
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x09, 0xFF); /* 0x09 Set Max VT */
> -
> -	tempbx = pVBInfo->VGAVT;
> -	push1 = tempbx;
> -	tempcx = 0x121;
> -	tempbx = pVBInfo->VGAVDE; /* 0x0E Vertical Display End */
> -
> -	if (tempbx == 357)
> -		tempbx = 350;
> -	if (tempbx == 360)
> -		tempbx = 350;
> -	if (tempbx == 375)
> -		tempbx = 350;
> -	if (tempbx == 405)
> -		tempbx = 400;
> -	if (tempbx == 525)
> -		tempbx = 480;
> -
> -	push2 = tempbx;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToLCD) {
> -		if (pVBInfo->LCDResInfo == Panel_1024x768) {
> -			if (!(pVBInfo->LCDInfo & XGI_LCDVESATiming)) {
> -				if (tempbx == 350)
> -					tempbx += 5;
> -				if (tempbx == 480)
> -					tempbx += 5;
> -			}
> -		}
> -	}
> -	tempbx--;
> -	tempbx--;
> -	temp = tempbx & 0x00FF;
> -	/* 0x10 vertical Blank Start */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x10, temp);
> -	tempbx = push2;
> -	tempbx--;
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0E, temp);
> -
> -	if (tempbx & 0x0100)
> -		tempcx |= 0x0002;
> -
> -	tempax = 0x000B;
> -
> -	if (modeflag & DoubleScanMode)
> -		tempax |= 0x08000;
> -
> -	if (tempbx & 0x0200)
> -		tempcx |= 0x0040;
> -
> -	temp = (tempax & 0xFF00) >> 8;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0B, temp);
> -
> -	if (tempbx & 0x0400)
> -		tempcx |= 0x0600;
> -
> -	/* 0x11 Vertical Blank End */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x11, 0x00);
> -
> -	tempax = push1;
> -	tempax -= tempbx; /* 0x0C Vertical Retrace Start */
> -	tempax >>= 2;
> -	push1 = tempax; /* push ax */
> -
> -	if (resinfo != 0x09) {
> -		tempax <<= 1;
> -		tempbx += tempax;
> -	}
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -		if ((pVBInfo->VBType & VB_SIS301LV) &&
> -		    !(pVBInfo->TVInfo & TVSetHiVision)) {
> -			if ((pVBInfo->TVInfo & TVSimuMode) &&
> -			    (pVBInfo->TVInfo & TVSetPAL)) {
> -				if (!(pVBInfo->VBType & VB_SIS301LV) ||
> -				    !(pVBInfo->TVInfo &
> -				      (TVSetYPbPr525p |
> -				       TVSetYPbPr750p |
> -				       TVSetHiVision)))
> -					tempbx += 40;
> -			}
> -		} else {
> -			tempbx -= 10;
> -		}
> -	} else if (pVBInfo->TVInfo & TVSimuMode) {
> -		if (pVBInfo->TVInfo & TVSetPAL) {
> -			if (pVBInfo->VBType & VB_SIS301LV) {
> -				if (!(pVBInfo->TVInfo &
> -				    (TVSetYPbPr525p |
> -				     TVSetYPbPr750p |
> -				     TVSetHiVision)))
> -					tempbx += 40;
> -			} else {
> -				tempbx += 40;
> -			}
> -		}
> -	}
> -	tempax = push1;
> -	tempax >>= 2;
> -	tempax++;
> -	tempax += tempbx;
> -	push1 = tempax; /* push ax */
> -
> -	if ((pVBInfo->TVInfo & TVSetPAL)) {
> -		if (tempbx <= 513) {
> -			if (tempax >= 513)
> -				tempbx = 513;
> -		}
> -	}
> -
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0C, temp);
> -	tempbx--;
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x10, temp);
> -
> -	if (tempbx & 0x0100)
> -		tempcx |= 0x0008;
> -
> -	if (tempbx & 0x0200)
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x0B, 0x0FF, 0x20);
> -
> -	tempbx++;
> -
> -	if (tempbx & 0x0100)
> -		tempcx |= 0x0004;
> -
> -	if (tempbx & 0x0200)
> -		tempcx |= 0x0080;
> -
> -	if (tempbx & 0x0400)
> -		tempcx |= 0x0C00;
> -
> -	tempbx = push1; /* pop ax */
> -	temp = tempbx & 0x00FF;
> -	temp &= 0x0F;
> -	/* 0x0D vertical Retrace End */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0D, temp);
> -
> -	if (tempbx & 0x0010)
> -		tempcx |= 0x2000;
> -
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0A, temp); /* 0x0A CR07 */
> -	temp = (tempcx & 0x0FF00) >> 8;
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x17, temp); /* 0x17 SR0A */
> -	tempax = modeflag;
> -	temp = (tempax & 0xFF00) >> 8;
> -
> -	temp = (temp >> 1) & 0x09;
> -
> -	if (pVBInfo->VBType & (VB_SIS301LV | VB_SIS302LV | VB_XGI301C))
> -		temp |= 0x01;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x16, temp); /* 0x16 SR01 */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x0F, 0); /* 0x0F CR14 */
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x12, 0); /* 0x12 CR17 */
> -
> -	if (pVBInfo->LCDInfo & LCDRGB18Bit)
> -		temp = 0x80;
> -	else
> -		temp = 0x00;
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x1A, temp); /* 0x1A SR0E */
> -}
> -
> -static void XGI_SetGroup2(unsigned short ModeNo, unsigned short ModeIdIndex,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i, j, tempax, tempbx, tempcx, temp, push1, push2,
> -			modeflag;
> -	unsigned char const *TimingPoint;
> -
> -	unsigned long longtemp, tempeax, tempebx, temp2, tempecx;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	tempax = 0;
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToAVIDEO))
> -		tempax |= 0x0800;
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToSVIDEO))
> -		tempax |= 0x0400;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToSCART)
> -		tempax |= 0x0200;
> -
> -	if (!(pVBInfo->TVInfo & TVSetPAL))
> -		tempax |= 0x1000;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision)
> -		tempax |= 0x0100;
> -
> -	if (pVBInfo->TVInfo & (TVSetYPbPr525p | TVSetYPbPr750p))
> -		tempax &= 0xfe00;
> -
> -	tempax = (tempax & 0xff00) >> 8;
> -
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x0, tempax);
> -	TimingPoint = XGI330_NTSCTiming;
> -
> -	if (pVBInfo->TVInfo & TVSetPAL)
> -		TimingPoint = XGI330_PALTiming;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -		TimingPoint = XGI330_HiTVExtTiming;
> -
> -		if (pVBInfo->VBInfo & SetInSlaveMode)
> -			TimingPoint = XGI330_HiTVSt2Timing;
> -
> -		if (pVBInfo->SetFlag & TVSimuMode)
> -			TimingPoint = XGI330_HiTVSt1Timing;
> -
> -		if (!(modeflag & Charx8Dot))
> -			TimingPoint = XGI330_HiTVTextTiming;
> -	}
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToYPbPr525750) {
> -		if (pVBInfo->TVInfo & TVSetYPbPr525i)
> -			TimingPoint = XGI330_YPbPr525iTiming;
> -
> -		if (pVBInfo->TVInfo & TVSetYPbPr525p)
> -			TimingPoint = XGI330_YPbPr525pTiming;
> -
> -		if (pVBInfo->TVInfo & TVSetYPbPr750p)
> -			TimingPoint = XGI330_YPbPr750pTiming;
> -	}
> -
> -	for (i = 0x01, j = 0; i <= 0x2D; i++, j++)
> -		xgifb_reg_set(pVBInfo->Part2Port, i, TimingPoint[j]);
> -
> -	for (i = 0x39; i <= 0x45; i++, j++)
> -		/* di->temp2[j] */
> -		xgifb_reg_set(pVBInfo->Part2Port, i, TimingPoint[j]);
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToTV)
> -		xgifb_reg_and_or(pVBInfo->Part2Port, 0x3A, 0x1F, 0x00);
> -
> -	temp = pVBInfo->NewFlickerMode;
> -	temp &= 0x80;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x0A, 0xFF, temp);
> -
> -	if (pVBInfo->TVInfo & TVSetPAL)
> -		tempax = 520;
> -	else
> -		tempax = 440;
> -
> -	if (pVBInfo->VDE <= tempax) {
> -		tempax -= pVBInfo->VDE;
> -		tempax >>= 2;
> -		tempax = (tempax & 0x00FF) | ((tempax & 0x00FF) << 8);
> -		push1 = tempax;
> -		temp = (tempax & 0xFF00) >> 8;
> -		temp += (unsigned short)TimingPoint[0];
> -
> -		if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -				| VB_SIS302LV | VB_XGI301C)) {
> -			if (pVBInfo->VBInfo & (SetCRT2ToAVIDEO
> -					| SetCRT2ToSVIDEO | SetCRT2ToSCART
> -					| SetCRT2ToYPbPr525750)) {
> -				tempcx = pVBInfo->VGAHDE;
> -				if (tempcx >= 1024) {
> -					temp = 0x17; /* NTSC */
> -					if (pVBInfo->TVInfo & TVSetPAL)
> -						temp = 0x19; /* PAL */
> -				}
> -			}
> -		}
> -
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x01, temp);
> -		tempax = push1;
> -		temp = (tempax & 0xFF00) >> 8;
> -		temp += TimingPoint[1];
> -
> -		if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -				| VB_SIS302LV | VB_XGI301C)) {
> -			if ((pVBInfo->VBInfo & (SetCRT2ToAVIDEO
> -					| SetCRT2ToSVIDEO | SetCRT2ToSCART
> -					| SetCRT2ToYPbPr525750))) {
> -				tempcx = pVBInfo->VGAHDE;
> -				if (tempcx >= 1024) {
> -					temp = 0x1D; /* NTSC */
> -					if (pVBInfo->TVInfo & TVSetPAL)
> -						temp = 0x52; /* PAL */
> -				}
> -			}
> -		}
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x02, temp);
> -	}
> -
> -	/* 301b */
> -	tempcx = pVBInfo->HT;
> -
> -	if (XGI_IsLCDDualLink(pVBInfo))
> -		tempcx >>= 1;
> -
> -	tempcx -= 2;
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x1B, temp);
> -
> -	temp = (tempcx & 0xFF00) >> 8;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x1D, ~0x0F, temp);
> -
> -	tempcx = pVBInfo->HT >> 1;
> -	push1 = tempcx; /* push cx */
> -	tempcx += 7;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision)
> -		tempcx -= 4;
> -
> -	temp = tempcx & 0x00FF;
> -	temp <<= 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x22, 0x0F, temp);
> -
> -	tempbx = TimingPoint[j] | ((TimingPoint[j + 1]) << 8);
> -	tempbx += tempcx;
> -	push2 = tempbx;
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x24, temp);
> -	temp = (tempbx & 0xFF00) >> 8;
> -	temp <<= 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x25, 0x0F, temp);
> -
> -	tempbx = push2;
> -	tempbx = tempbx + 8;
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -		tempbx = tempbx - 4;
> -		tempcx = tempbx;
> -	}
> -
> -	temp = (tempbx & 0x00FF) << 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x29, 0x0F, temp);
> -
> -	j += 2;
> -	tempcx += (TimingPoint[j] | ((TimingPoint[j + 1]) << 8));
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x27, temp);
> -	temp = ((tempcx & 0xFF00) >> 8) << 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x28, 0x0F, temp);
> -
> -	tempcx += 8;
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision)
> -		tempcx -= 4;
> -
> -	temp = tempcx & 0xFF;
> -	temp <<= 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x2A, 0x0F, temp);
> -
> -	tempcx = push1; /* pop cx */
> -	j += 2;
> -	temp = TimingPoint[j] | ((TimingPoint[j + 1]) << 8);
> -	tempcx -= temp;
> -	temp = tempcx & 0x00FF;
> -	temp <<= 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x2D, 0x0F, temp);
> -
> -	tempcx -= 11;
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToTV)) {
> -		tempax = XGI_GetVGAHT2(pVBInfo);
> -		tempcx = tempax - 1;
> -	}
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x2E, temp);
> -
> -	tempbx = pVBInfo->VDE;
> -
> -	if (pVBInfo->VGAVDE == 360)
> -		tempbx = 746;
> -	if (pVBInfo->VGAVDE == 375)
> -		tempbx = 746;
> -	if (pVBInfo->VGAVDE == 405)
> -		tempbx = 853;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -		if (pVBInfo->VBType &
> -		    (VB_SIS301LV | VB_SIS302LV | VB_XGI301C)) {
> -			if (!(pVBInfo->TVInfo &
> -			    (TVSetYPbPr525p | TVSetYPbPr750p)))
> -				tempbx >>= 1;
> -		} else {
> -			tempbx >>= 1;
> -		}
> -	}
> -
> -	tempbx -= 2;
> -	temp = tempbx & 0x00FF;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -		if (pVBInfo->VBType & VB_SIS301LV) {
> -			if (pVBInfo->TVInfo & TVSetHiVision) {
> -				if (pVBInfo->VBInfo & SetInSlaveMode) {
> -					if (ModeNo == 0x2f)
> -						temp += 1;
> -				}
> -			}
> -		} else if (pVBInfo->VBInfo & SetInSlaveMode) {
> -			if (ModeNo == 0x2f)
> -				temp += 1;
> -		}
> -	}
> -
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x2F, temp);
> -
> -	temp = (tempcx & 0xFF00) >> 8;
> -	temp |= ((tempbx & 0xFF00) >> 8) << 6;
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToHiVision)) {
> -		if (pVBInfo->VBType & VB_SIS301LV) {
> -			if (pVBInfo->TVInfo & TVSetHiVision) {
> -				temp |= 0x10;
> -
> -				if (!(pVBInfo->VBInfo & SetCRT2ToSVIDEO))
> -					temp |= 0x20;
> -			}
> -		} else {
> -			temp |= 0x10;
> -			if (!(pVBInfo->VBInfo & SetCRT2ToSVIDEO))
> -				temp |= 0x20;
> -		}
> -	}
> -
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x30, temp);
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) { /* TV gatingno */
> -		tempbx = pVBInfo->VDE;
> -		tempcx = tempbx - 2;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -			if (!(pVBInfo->TVInfo & (TVSetYPbPr525p
> -					| TVSetYPbPr750p)))
> -				tempbx >>= 1;
> -		}
> -
> -		if (pVBInfo->VBType & (VB_SIS302LV | VB_XGI301C)) {
> -			temp = 0;
> -			if (tempcx & 0x0400)
> -				temp |= 0x20;
> -
> -			if (tempbx & 0x0400)
> -				temp |= 0x40;
> -
> -			xgifb_reg_set(pVBInfo->Part4Port, 0x10, temp);
> -		}
> -
> -		temp = (((tempbx - 3) & 0x0300) >> 8) << 5;
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x46, temp);
> -		temp = (tempbx - 3) & 0x00FF;
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x47, temp);
> -	}
> -
> -	tempbx = tempbx & 0x00FF;
> -
> -	if (!(modeflag & HalfDCLK)) {
> -		tempcx = pVBInfo->VGAHDE;
> -		if (tempcx >= pVBInfo->HDE) {
> -			tempbx |= 0x2000;
> -			tempax &= 0x00FF;
> -		}
> -	}
> -
> -	tempcx = 0x0101;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToTV) { /* 301b */
> -		if (pVBInfo->VGAHDE >= 1024) {
> -			tempcx = 0x1920;
> -			if (pVBInfo->VGAHDE >= 1280) {
> -				tempcx = 0x1420;
> -				tempbx = tempbx & 0xDFFF;
> -			}
> -		}
> -	}
> -
> -	if (!(tempbx & 0x2000)) {
> -		if (modeflag & HalfDCLK)
> -			tempcx = (tempcx & 0xFF00) | ((tempcx & 0x00FF) << 1);
> -
> -		push1 = tempbx;
> -		tempeax = pVBInfo->VGAHDE;
> -		tempebx = (tempcx & 0xFF00) >> 8;
> -		longtemp = tempeax * tempebx;
> -		tempecx = tempcx & 0x00FF;
> -		longtemp = longtemp / tempecx;
> -
> -		/* 301b */
> -		tempecx = 8 * 1024;
> -
> -		if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -				| VB_SIS302LV | VB_XGI301C)) {
> -			tempecx = tempecx * 8;
> -		}
> -
> -		longtemp = longtemp * tempecx;
> -		tempecx = pVBInfo->HDE;
> -		temp2 = longtemp % tempecx;
> -		tempeax = longtemp / tempecx;
> -		if (temp2 != 0)
> -			tempeax += 1;
> -
> -		tempax = (unsigned short)tempeax;
> -
> -		/* 301b */
> -		if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -				| VB_SIS302LV | VB_XGI301C)) {
> -			tempcx = ((tempax & 0xFF00) >> 5) >> 8;
> -		}
> -		/* end 301b */
> -
> -		tempbx = push1;
> -		tempbx = (unsigned short)(((tempeax & 0x0000FF00) & 0x1F00)
> -				| (tempbx & 0x00FF));
> -		tempax = (unsigned short)(((tempeax & 0x000000FF) << 8)
> -				| (tempax & 0x00FF));
> -		temp = (tempax & 0xFF00) >> 8;
> -	} else {
> -		temp = (tempax & 0x00FF) >> 8;
> -	}
> -
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x44, temp);
> -	temp = (tempbx & 0xFF00) >> 8;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x45, ~0x03F, temp);
> -	temp = tempcx & 0x00FF;
> -
> -	if (tempbx & 0x2000)
> -		temp = 0;
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToLCD))
> -		temp |= 0x18;
> -
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x46, ~0x1F, temp);
> -	if (pVBInfo->TVInfo & TVSetPAL) {
> -		tempbx = 0x0382;
> -		tempcx = 0x007e;
> -	} else {
> -		tempbx = 0x0369;
> -		tempcx = 0x0061;
> -	}
> -
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x4b, temp);
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x4c, temp);
> -
> -	temp = ((tempcx & 0xFF00) >> 8) & 0x03;
> -	temp <<= 2;
> -	temp |= ((tempbx & 0xFF00) >> 8) & 0x03;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToYPbPr525750) {
> -		temp |= 0x10;
> -
> -		if (pVBInfo->TVInfo & TVSetYPbPr525p)
> -			temp |= 0x20;
> -
> -		if (pVBInfo->TVInfo & TVSetYPbPr750p)
> -			temp |= 0x60;
> -	}
> -
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x4d, temp);
> -	temp = xgifb_reg_get(pVBInfo->Part2Port, 0x43); /* 301b change */
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x43, (unsigned short)(temp - 3));
> -
> -	if (!(pVBInfo->TVInfo & (TVSetYPbPr525p | TVSetYPbPr750p))) {
> -		if (pVBInfo->TVInfo & NTSC1024x768) {
> -			TimingPoint = XGI_NTSC1024AdjTime;
> -			for (i = 0x1c, j = 0; i <= 0x30; i++, j++) {
> -				xgifb_reg_set(pVBInfo->Part2Port, i,
> -					      TimingPoint[j]);
> -			}
> -			xgifb_reg_set(pVBInfo->Part2Port, 0x43, 0x72);
> -		}
> -	}
> -
> -	/* Modify for 301C PALM Support */
> -	if (pVBInfo->VBType & VB_XGI301C) {
> -		if (pVBInfo->TVInfo & TVSetPALM)
> -			xgifb_reg_and_or(pVBInfo->Part2Port, 0x4E, ~0x08,
> -					 0x08); /* PALM Mode */
> -	}
> -
> -	if (pVBInfo->TVInfo & TVSetPALM) {
> -		tempax = xgifb_reg_get(pVBInfo->Part2Port, 0x01);
> -		tempax--;
> -		xgifb_reg_and(pVBInfo->Part2Port, 0x01, tempax);
> -
> -		xgifb_reg_and(pVBInfo->Part2Port, 0x00, 0xEF);
> -	}
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision) {
> -		if (!(pVBInfo->VBInfo & SetInSlaveMode))
> -			xgifb_reg_set(pVBInfo->Part2Port, 0x0B, 0x00);
> -	}
> -}
> -
> -static void XGI_SetLCDRegs(unsigned short ModeIdIndex,
> -			   struct vb_device_info *pVBInfo)
> -{
> -	unsigned short pushbx, tempax, tempbx, tempcx, temp, tempah,
> -			tempbh, tempch;
> -
> -	struct XGI_LCDDesStruct const *LCDBDesPtr = NULL;
> -
> -	/* si+Ext_ResInfo */
> -	if (!(pVBInfo->VBInfo & SetCRT2ToLCD))
> -		return;
> -
> -	tempbx = pVBInfo->HDE; /* RHACTE=HDE-1 */
> -
> -	if (XGI_IsLCDDualLink(pVBInfo))
> -		tempbx >>= 1;
> -
> -	tempbx -= 1;
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x2C, temp);
> -	temp = (tempbx & 0xFF00) >> 8;
> -	temp <<= 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x2B, 0x0F, temp);
> -	temp = 0x01;
> -
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x0B, temp);
> -	tempbx = pVBInfo->VDE; /* RTVACTEO=(VDE-1)&0xFF */
> -	tempbx--;
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x03, temp);
> -	temp = ((tempbx & 0xFF00) >> 8) & 0x07;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x0C, ~0x07, temp);
> -
> -	tempcx = pVBInfo->VT - 1;
> -	temp = tempcx & 0x00FF; /* RVTVT=VT-1 */
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x19, temp);
> -	temp = (tempcx & 0xFF00) >> 8;
> -	temp <<= 5;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x1A, temp);
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x09, 0xF0, 0x00);
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x0A, 0xF0, 0x00);
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x17, 0xFB, 0x00);
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x18, 0xDF, 0x00);
> -
> -	/* Customized LCDB Does not add */
> -	if ((pVBInfo->VBType & VB_SIS301LV) || (pVBInfo->VBType & VB_SIS302LV))
> -		LCDBDesPtr = XGI_GetLcdPtr(xgifb_lcddldes, ModeIdIndex,
> -					   pVBInfo);
> -	else
> -		LCDBDesPtr = XGI_GetLcdPtr(XGI_LCDDesDataTable, ModeIdIndex,
> -					   pVBInfo);
> -
> -	tempah = pVBInfo->LCDResInfo;
> -	tempah &= PanelResInfo;
> -
> -	if ((tempah == Panel_1024x768) || (tempah == Panel_1024x768x75)) {
> -		tempbx = 1024;
> -		tempcx = 768;
> -	} else if ((tempah == Panel_1280x1024) ||
> -		   (tempah == Panel_1280x1024x75)) {
> -		tempbx = 1280;
> -		tempcx = 1024;
> -	} else if (tempah == Panel_1400x1050) {
> -		tempbx = 1400;
> -		tempcx = 1050;
> -	} else {
> -		tempbx = 1600;
> -		tempcx = 1200;
> -	}
> -
> -	if (pVBInfo->LCDInfo & EnableScalingLCD) {
> -		tempbx = pVBInfo->HDE;
> -		tempcx = pVBInfo->VDE;
> -	}
> -
> -	pushbx = tempbx;
> -	tempax = pVBInfo->VT;
> -	pVBInfo->LCDHDES = LCDBDesPtr->LCDHDES;
> -	pVBInfo->LCDHRS = LCDBDesPtr->LCDHRS;
> -	pVBInfo->LCDVDES = LCDBDesPtr->LCDVDES;
> -	pVBInfo->LCDVRS = LCDBDesPtr->LCDVRS;
> -	tempbx = pVBInfo->LCDVDES;
> -	tempcx += tempbx;
> -
> -	if (tempcx >= tempax)
> -		tempcx -= tempax; /* lcdvdes */
> -
> -	temp = tempbx & 0x00FF; /* RVEQ1EQ=lcdvdes */
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x05, temp);
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x06, temp);
> -	tempch = ((tempcx & 0xFF00) >> 8) & 0x07;
> -	tempbh = ((tempbx & 0xFF00) >> 8) & 0x07;
> -	tempah = tempch;
> -	tempah <<= 3;
> -	tempah |= tempbh;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x02, tempah);
> -
> -	/* getlcdsync() */
> -	XGI_GetLCDSync(&tempax, &tempbx, pVBInfo);
> -	tempcx = tempbx;
> -	tempax = pVBInfo->VT;
> -	tempbx = pVBInfo->LCDVRS;
> -
> -	tempcx += tempbx;
> -	if (tempcx >= tempax)
> -		tempcx -= tempax;
> -
> -	temp = tempbx & 0x00FF; /* RTVACTEE=lcdvrs */
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x04, temp);
> -	temp = (tempbx & 0xFF00) >> 8;
> -	temp <<= 4;
> -	temp |= (tempcx & 0x000F);
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x01, temp);
> -	tempcx = pushbx;
> -	tempax = pVBInfo->HT;
> -	tempbx = pVBInfo->LCDHDES;
> -	tempbx &= 0x0FFF;
> -
> -	if (XGI_IsLCDDualLink(pVBInfo)) {
> -		tempax >>= 1;
> -		tempbx >>= 1;
> -		tempcx >>= 1;
> -	}
> -
> -	if (pVBInfo->VBType & VB_SIS302LV)
> -		tempbx += 1;
> -
> -	if (pVBInfo->VBType & VB_XGI301C) /* tap4 */
> -		tempbx += 1;
> -
> -	tempcx += tempbx;
> -
> -	if (tempcx >= tempax)
> -		tempcx -= tempax;
> -
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x1F, temp); /* RHBLKE=lcdhdes */
> -	temp = ((tempbx & 0xFF00) >> 8) << 4;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x20, temp);
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x23, temp); /* RHEQPLE=lcdhdee */
> -	temp = (tempcx & 0xFF00) >> 8;
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x25, temp);
> -
> -	XGI_GetLCDSync(&tempax, &tempbx, pVBInfo);
> -	tempcx = tempax;
> -	tempax = pVBInfo->HT;
> -	tempbx = pVBInfo->LCDHRS;
> -	if (XGI_IsLCDDualLink(pVBInfo)) {
> -		tempax >>= 1;
> -		tempbx >>= 1;
> -		tempcx >>= 1;
> -	}
> -
> -	if (pVBInfo->VBType & VB_SIS302LV)
> -		tempbx += 1;
> -
> -	tempcx += tempbx;
> -
> -	if (tempcx >= tempax)
> -		tempcx -= tempax;
> -
> -	temp = tempbx & 0x00FF; /* RHBURSTS=lcdhrs */
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x1C, temp);
> -
> -	temp = (tempbx & 0xFF00) >> 8;
> -	temp <<= 4;
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x1D, ~0x0F0, temp);
> -	temp = tempcx & 0x00FF; /* RHSYEXP2S=lcdhre */
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x21, temp);
> -
> -	if (!(pVBInfo->LCDInfo & XGI_LCDVESATiming)) {
> -		if (pVBInfo->VGAVDE == 525) {
> -			if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B
> -					| VB_SIS301LV | VB_SIS302LV
> -					| VB_XGI301C))
> -				temp = 0xC6;
> -			else
> -				temp = 0xC4;
> -
> -			xgifb_reg_set(pVBInfo->Part2Port, 0x2f, temp);
> -			xgifb_reg_set(pVBInfo->Part2Port, 0x30, 0xB3);
> -		}
> -
> -		if (pVBInfo->VGAVDE == 420) {
> -			if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B
> -					| VB_SIS301LV | VB_SIS302LV
> -					| VB_XGI301C))
> -				temp = 0x4F;
> -			else
> -				temp = 0x4E;
> -			xgifb_reg_set(pVBInfo->Part2Port, 0x2f, temp);
> -		}
> -	}
> -}
> -
> -/*
> - * Function : XGI_GetTap4Ptr
> - * Input :
> - * Output : di -> Tap4 Reg. Setting Pointer
> - * Description :
> - */
> -static struct XGI301C_Tap4TimingStruct const
> -*XGI_GetTap4Ptr(unsigned short tempcx, struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempax, tempbx, i;
> -	struct XGI301C_Tap4TimingStruct const *Tap4TimingPtr;
> -
> -	if (tempcx == 0) {
> -		tempax = pVBInfo->VGAHDE;
> -		tempbx = pVBInfo->HDE;
> -	} else {
> -		tempax = pVBInfo->VGAVDE;
> -		tempbx = pVBInfo->VDE;
> -	}
> -
> -	if (tempax <= tempbx)
> -		return &xgifb_tap4_timing[0];
> -	Tap4TimingPtr = xgifb_ntsc_525_tap4_timing; /* NTSC */
> -
> -	if (pVBInfo->TVInfo & TVSetPAL)
> -		Tap4TimingPtr = PALTap4Timing;
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToYPbPr525750) {
> -		if ((pVBInfo->TVInfo & TVSetYPbPr525i) ||
> -		    (pVBInfo->TVInfo & TVSetYPbPr525p))
> -			Tap4TimingPtr = xgifb_ntsc_525_tap4_timing;
> -		if (pVBInfo->TVInfo & TVSetYPbPr750p)
> -			Tap4TimingPtr = YPbPr750pTap4Timing;
> -	}
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToHiVision)
> -		Tap4TimingPtr = xgifb_tap4_timing;
> -
> -	i = 0;
> -	while (Tap4TimingPtr[i].DE != 0xFFFF) {
> -		if (Tap4TimingPtr[i].DE == tempax)
> -			break;
> -		i++;
> -	}
> -	return &Tap4TimingPtr[i];
> -}
> -
> -static void XGI_SetTap4Regs(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i, j;
> -	struct XGI301C_Tap4TimingStruct const *Tap4TimingPtr;
> -
> -	if (!(pVBInfo->VBType & VB_XGI301C))
> -		return;
> -
> -	Tap4TimingPtr = XGI_GetTap4Ptr(0, pVBInfo); /* Set Horizontal Scaling */
> -	for (i = 0x80, j = 0; i <= 0xBF; i++, j++)
> -		xgifb_reg_set(pVBInfo->Part2Port, i, Tap4TimingPtr->Reg[j]);
> -
> -	if ((pVBInfo->VBInfo & SetCRT2ToTV) &&
> -	    !(pVBInfo->VBInfo & SetCRT2ToHiVision)) {
> -		/* Set Vertical Scaling */
> -		Tap4TimingPtr = XGI_GetTap4Ptr(1, pVBInfo);
> -		for (i = 0xC0, j = 0; i < 0xFF; i++, j++)
> -			xgifb_reg_set(pVBInfo->Part2Port,
> -				      i,
> -				      Tap4TimingPtr->Reg[j]);
> -	}
> -
> -	if ((pVBInfo->VBInfo & SetCRT2ToTV) &&
> -	    !(pVBInfo->VBInfo & SetCRT2ToHiVision))
> -		/* Enable V.Scaling */
> -		xgifb_reg_and_or(pVBInfo->Part2Port, 0x4E, ~0x14, 0x04);
> -	else
> -		/* Enable H.Scaling */
> -		xgifb_reg_and_or(pVBInfo->Part2Port, 0x4E, ~0x14, 0x10);
> -}
> -
> -static void XGI_SetGroup3(unsigned short ModeIdIndex,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i;
> -	unsigned char const *tempdi;
> -	unsigned short modeflag;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	xgifb_reg_set(pVBInfo->Part3Port, 0x00, 0x00);
> -	if (pVBInfo->TVInfo & TVSetPAL) {
> -		xgifb_reg_set(pVBInfo->Part3Port, 0x13, 0xFA);
> -		xgifb_reg_set(pVBInfo->Part3Port, 0x14, 0xC8);
> -	} else {
> -		xgifb_reg_set(pVBInfo->Part3Port, 0x13, 0xF5);
> -		xgifb_reg_set(pVBInfo->Part3Port, 0x14, 0xB7);
> -	}
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToTV))
> -		return;
> -
> -	if (pVBInfo->TVInfo & TVSetPALM) {
> -		xgifb_reg_set(pVBInfo->Part3Port, 0x13, 0xFA);
> -		xgifb_reg_set(pVBInfo->Part3Port, 0x14, 0xC8);
> -		xgifb_reg_set(pVBInfo->Part3Port, 0x3D, 0xA8);
> -	}
> -
> -	if ((pVBInfo->VBInfo & SetCRT2ToHiVision) || (pVBInfo->VBInfo
> -			& SetCRT2ToYPbPr525750)) {
> -		if (pVBInfo->TVInfo & TVSetYPbPr525i)
> -			return;
> -
> -		tempdi = XGI330_HiTVGroup3Data;
> -		if (pVBInfo->SetFlag & TVSimuMode) {
> -			tempdi = XGI330_HiTVGroup3Simu;
> -			if (!(modeflag & Charx8Dot))
> -				tempdi = XGI330_HiTVGroup3Text;
> -		}
> -
> -		if (pVBInfo->TVInfo & TVSetYPbPr525p)
> -			tempdi = XGI330_Ren525pGroup3;
> -
> -		if (pVBInfo->TVInfo & TVSetYPbPr750p)
> -			tempdi = XGI330_Ren750pGroup3;
> -
> -		for (i = 0; i <= 0x3E; i++)
> -			xgifb_reg_set(pVBInfo->Part3Port, i, tempdi[i]);
> -
> -		if (pVBInfo->VBType & VB_XGI301C) { /* Marcovision */
> -			if (pVBInfo->TVInfo & TVSetYPbPr525p)
> -				xgifb_reg_set(pVBInfo->Part3Port, 0x28, 0x3f);
> -		}
> -	}
> -}
> -
> -static void XGI_SetGroup4(unsigned short ModeIdIndex,
> -			  unsigned short RefreshRateTableIndex,
> -			  struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempax, tempcx, tempbx, modeflag, temp, temp2;
> -
> -	unsigned long tempebx, tempeax, templong;
> -
> -	/* si+Ext_ResInfo */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -	temp = pVBInfo->RVBHCFACT;
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x13, temp);
> -
> -	tempbx = pVBInfo->RVBHCMAX;
> -	temp = tempbx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x14, temp);
> -	temp2 = ((tempbx & 0xFF00) >> 8) << 7;
> -	tempcx = pVBInfo->VGAHT - 1;
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x16, temp);
> -
> -	temp = ((tempcx & 0xFF00) >> 8) << 3;
> -	temp2 |= temp;
> -
> -	tempcx = pVBInfo->VGAVT - 1;
> -	if (!(pVBInfo->VBInfo & SetCRT2ToTV))
> -		tempcx -= 5;
> -
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x17, temp);
> -	temp = temp2 | ((tempcx & 0xFF00) >> 8);
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x15, temp);
> -	xgifb_reg_or(pVBInfo->Part4Port, 0x0D, 0x08);
> -	tempcx = pVBInfo->VBInfo;
> -	tempbx = pVBInfo->VGAHDE;
> -
> -	if (modeflag & HalfDCLK)
> -		tempbx >>= 1;
> -
> -	if (XGI_IsLCDDualLink(pVBInfo))
> -		tempbx >>= 1;
> -
> -	if (tempcx & SetCRT2ToHiVision) {
> -		temp = 0;
> -		if (tempbx <= 1024)
> -			temp = 0xA0;
> -		if (tempbx == 1280)
> -			temp = 0xC0;
> -	} else if (tempcx & SetCRT2ToTV) {
> -		temp = 0xA0;
> -		if (tempbx <= 800)
> -			temp = 0x80;
> -	} else {
> -		temp = 0x80;
> -		if (pVBInfo->VBInfo & SetCRT2ToLCD) {
> -			temp = 0;
> -			if (tempbx > 800)
> -				temp = 0x60;
> -		}
> -	}
> -
> -	if (pVBInfo->TVInfo & (TVSetYPbPr525p | TVSetYPbPr750p)) {
> -		temp = 0x00;
> -		if (pVBInfo->VGAHDE == 1280)
> -			temp = 0x40;
> -		if (pVBInfo->VGAHDE == 1024)
> -			temp = 0x20;
> -	}
> -	xgifb_reg_and_or(pVBInfo->Part4Port, 0x0E, ~0xEF, temp);
> -
> -	tempebx = pVBInfo->VDE;
> -
> -	tempcx = pVBInfo->RVBHRS;
> -	temp = tempcx & 0x00FF;
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x18, temp);
> -
> -	tempeax = pVBInfo->VGAVDE;
> -	tempcx |= 0x04000;
> -
> -	if (tempeax <= tempebx) {
> -		tempcx = tempcx & (~0x4000);
> -		tempeax = pVBInfo->VGAVDE;
> -	} else {
> -		tempeax -= tempebx;
> -	}
> -
> -	templong = (tempeax * 256 * 1024) % tempebx;
> -	tempeax = (tempeax * 256 * 1024) / tempebx;
> -	tempebx = tempeax;
> -
> -	if (templong != 0)
> -		tempebx++;
> -
> -	temp = (unsigned short)(tempebx & 0x000000FF);
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x1B, temp);
> -
> -	temp = (unsigned short)((tempebx & 0x0000FF00) >> 8);
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x1A, temp);
> -	tempbx = (unsigned short)(tempebx >> 16);
> -	temp = tempbx & 0x00FF;
> -	temp <<= 4;
> -	temp |= ((tempcx & 0xFF00) >> 8);
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x19, temp);
> -
> -	/* 301b */
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		temp = 0x0028;
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x1C, temp);
> -		tempax = pVBInfo->VGAHDE;
> -		if (modeflag & HalfDCLK)
> -			tempax >>= 1;
> -
> -		if (XGI_IsLCDDualLink(pVBInfo))
> -			tempax >>= 1;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToLCD) {
> -			if (tempax > 800)
> -				tempax -= 800;
> -		} else if (pVBInfo->VGAHDE > 800) {
> -			if (pVBInfo->VGAHDE == 1024)
> -				tempax = (tempax * 25 / 32) - 1;
> -			else
> -				tempax = (tempax * 20 / 32) - 1;
> -		}
> -		tempax -= 1;
> -
> -		temp = (tempax & 0xFF00) >> 8;
> -		temp = (temp & 0x0003) << 4;
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x1E, temp);
> -		temp = tempax & 0x00FF;
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x1D, temp);
> -
> -		if (pVBInfo->VBInfo & (SetCRT2ToTV | SetCRT2ToHiVision)) {
> -			if (pVBInfo->VGAHDE > 800)
> -				xgifb_reg_or(pVBInfo->Part4Port, 0x1E, 0x08);
> -		}
> -		temp = 0x0036;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -			if (!(pVBInfo->TVInfo & (NTSC1024x768
> -					| TVSetYPbPr525p | TVSetYPbPr750p
> -					| TVSetHiVision))) {
> -				temp |= 0x0001;
> -				if ((pVBInfo->VBInfo & SetInSlaveMode) &&
> -				    !(pVBInfo->TVInfo & TVSimuMode))
> -					temp &= (~0x0001);
> -			}
> -		}
> -
> -		xgifb_reg_and_or(pVBInfo->Part4Port, 0x1F, 0x00C0, temp);
> -		tempbx = pVBInfo->HT;
> -		if (XGI_IsLCDDualLink(pVBInfo))
> -			tempbx >>= 1;
> -		tempbx = (tempbx >> 1) - 2;
> -		temp = ((tempbx & 0x0700) >> 8) << 3;
> -		xgifb_reg_and_or(pVBInfo->Part4Port, 0x21, 0x00C0, temp);
> -		temp = tempbx & 0x00FF;
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x22, temp);
> -	}
> -	/* end 301b */
> -
> -	XGI_SetCRT2VCLK(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -}
> -
> -static void XGINew_EnableCRT2(struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x1E, 0xFF, 0x20);
> -}
> -
> -static void XGI_SetGroup5(struct vb_device_info *pVBInfo)
> -{
> -	if (pVBInfo->ModeType == ModeVGA) {
> -		if (!(pVBInfo->VBInfo & (SetInSlaveMode | LoadDACFlag
> -				| DisableCRT2Display))) {
> -			XGINew_EnableCRT2(pVBInfo);
> -		}
> -	}
> -}
> -
> -static void XGI_DisableGatingCRT(struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x63, 0xBF, 0x00);
> -}
> -
> -static unsigned char XGI_XG21CheckLVDSMode(struct xgifb_video_info *xgifb_info,
> -					   unsigned short ModeNo,
> -					   unsigned short ModeIdIndex)
> -{
> -	unsigned short xres, yres, colordepth, modeflag, resindex;
> -
> -	resindex = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -	xres = XGI330_ModeResInfo[resindex].HTotal; /* xres->ax */
> -	yres = XGI330_ModeResInfo[resindex].VTotal; /* yres->bx */
> -	/* si+St_ModeFlag */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	if (!(modeflag & Charx8Dot)) {
> -		xres /= 9;
> -		xres *= 8;
> -	}
> -
> -	if ((ModeNo > 0x13) && (modeflag & HalfDCLK))
> -		xres *= 2;
> -
> -	if ((ModeNo > 0x13) && (modeflag & DoubleScanMode))
> -		yres *= 2;
> -
> -	if (xres > xgifb_info->lvds_data.LVDSHDE)
> -		return 0;
> -
> -	if (yres > xgifb_info->lvds_data.LVDSVDE)
> -		return 0;
> -
> -	if (xres != xgifb_info->lvds_data.LVDSHDE ||
> -	    yres != xgifb_info->lvds_data.LVDSVDE) {
> -		colordepth = XGI_GetColorDepth(ModeIdIndex);
> -		if (colordepth > 2)
> -			return 0;
> -	}
> -	return 1;
> -}
> -
> -static void xgifb_set_lvds(struct xgifb_video_info *xgifb_info,
> -			   int chip_id,
> -			   unsigned short ModeIdIndex,
> -			   struct vb_device_info *pVBInfo)
> -{
> -	unsigned char temp, Miscdata;
> -	unsigned short xres, yres, modeflag, resindex;
> -	unsigned short LVDSHT, LVDSHBS, LVDSHRS, LVDSHRE, LVDSHBE;
> -	unsigned short LVDSVT, LVDSVBS, LVDSVRS, LVDSVRE, LVDSVBE;
> -	unsigned short value;
> -
> -	temp = (unsigned char)((xgifb_info->lvds_data.LVDS_Capability &
> -				(LCDPolarity << 8)) >> 8);
> -	temp &= LCDPolarity;
> -	Miscdata = inb(pVBInfo->P3cc);
> -
> -	outb((Miscdata & 0x3F) | temp, pVBInfo->P3c2);
> -
> -	temp = xgifb_info->lvds_data.LVDS_Capability & LCDPolarity;
> -	/* SR35[7] FP VSync polarity */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x80, temp & 0x80);
> -	/* SR30[5] FP HSync polarity */
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x30, ~0x20, (temp & 0x40) >> 1);
> -
> -	if (chip_id == XG27)
> -		XGI_SetXG27FPBits(pVBInfo);
> -	else
> -		XGI_SetXG21FPBits(pVBInfo);
> -
> -	resindex = XGI330_EModeIDTable[ModeIdIndex].Ext_RESINFO;
> -	xres = XGI330_ModeResInfo[resindex].HTotal; /* xres->ax */
> -	yres = XGI330_ModeResInfo[resindex].VTotal; /* yres->bx */
> -	/* si+St_ModeFlag */
> -	modeflag = XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
> -
> -	if (!(modeflag & Charx8Dot))
> -		xres = xres * 8 / 9;
> -
> -	LVDSHT = xgifb_info->lvds_data.LVDSHT;
> -
> -	LVDSHBS = xres + (xgifb_info->lvds_data.LVDSHDE - xres) / 2;
> -
> -	if (LVDSHBS > LVDSHT)
> -		LVDSHBS -= LVDSHT;
> -
> -	LVDSHRS = LVDSHBS + xgifb_info->lvds_data.LVDSHFP;
> -	if (LVDSHRS > LVDSHT)
> -		LVDSHRS -= LVDSHT;
> -
> -	LVDSHRE = LVDSHRS + xgifb_info->lvds_data.LVDSHSYNC;
> -	if (LVDSHRE > LVDSHT)
> -		LVDSHRE -= LVDSHT;
> -
> -	LVDSHBE = LVDSHBS + LVDSHT - xgifb_info->lvds_data.LVDSHDE;
> -
> -	LVDSVT = xgifb_info->lvds_data.LVDSVT;
> -
> -	LVDSVBS = yres + (xgifb_info->lvds_data.LVDSVDE - yres) / 2;
> -	if (modeflag & DoubleScanMode)
> -		LVDSVBS += yres / 2;
> -
> -	if (LVDSVBS > LVDSVT)
> -		LVDSVBS -= LVDSVT;
> -
> -	LVDSVRS = LVDSVBS + xgifb_info->lvds_data.LVDSVFP;
> -	if (LVDSVRS > LVDSVT)
> -		LVDSVRS -= LVDSVT;
> -
> -	LVDSVRE = LVDSVRS + xgifb_info->lvds_data.LVDSVSYNC;
> -	if (LVDSVRE > LVDSVT)
> -		LVDSVRE -= LVDSVT;
> -
> -	LVDSVBE = LVDSVBS + LVDSVT - xgifb_info->lvds_data.LVDSVDE;
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x11);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x11, temp & 0x7f); /* Unlock CRTC */
> -
> -	if (!(modeflag & Charx8Dot))
> -		xgifb_reg_or(pVBInfo->P3c4, 0x1, 0x1);
> -
> -	/* HT SR0B[1:0] CR00 */
> -	value = (LVDSHT >> 3) - 5;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0B, ~0x03, (value & 0x300) >> 8);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x0, (value & 0xFF));
> -
> -	/* HBS SR0B[5:4] CR02 */
> -	value = (LVDSHBS >> 3) - 1;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0B, ~0x30, (value & 0x300) >> 4);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x2, (value & 0xFF));
> -
> -	/* HBE SR0C[1:0] CR05[7] CR03[4:0] */
> -	value = (LVDSHBE >> 3) - 1;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0C, ~0x03, (value & 0xC0) >> 6);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x05, ~0x80, (value & 0x20) << 2);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x03, ~0x1F, value & 0x1F);
> -
> -	/* HRS SR0B[7:6] CR04 */
> -	value = (LVDSHRS >> 3) + 2;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0B, ~0xC0, (value & 0x300) >> 2);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x4, (value & 0xFF));
> -
> -	/* Panel HRS SR2F[1:0] SR2E[7:0]  */
> -	value--;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x2F, ~0x03, (value & 0x300) >> 8);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2E, (value & 0xFF));
> -
> -	/* HRE SR0C[2] CR05[4:0] */
> -	value = (LVDSHRE >> 3) + 2;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0C, ~0x04, (value & 0x20) >> 3);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x05, ~0x1F, value & 0x1F);
> -
> -	/* Panel HRE SR2F[7:2]  */
> -	value--;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x2F, ~0xFC, value << 2);
> -
> -	/* VT SR0A[0] CR07[5][0] CR06 */
> -	value = LVDSVT - 2;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0A, ~0x01, (value & 0x400) >> 10);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x07, ~0x20, (value & 0x200) >> 4);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x07, ~0x01, (value & 0x100) >> 8);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x06, (value & 0xFF));
> -
> -	/* VBS SR0A[2] CR09[5] CR07[3] CR15 */
> -	value = LVDSVBS - 1;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0A, ~0x04, (value & 0x400) >> 8);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x09, ~0x20, (value & 0x200) >> 4);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x07, ~0x08, (value & 0x100) >> 5);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x15, (value & 0xFF));
> -
> -	/* VBE SR0A[4] CR16 */
> -	value = LVDSVBE - 1;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0A, ~0x10, (value & 0x100) >> 4);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x16, (value & 0xFF));
> -
> -	/* VRS SR0A[3] CR7[7][2] CR10 */
> -	value = LVDSVRS - 1;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0A, ~0x08, (value & 0x400) >> 7);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x07, ~0x80, (value & 0x200) >> 2);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x07, ~0x04, (value & 0x100) >> 6);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x10, (value & 0xFF));
> -
> -	if (chip_id == XG27) {
> -		/* Panel VRS SR35[2:0] SR34[7:0] */
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x07,
> -				 (value & 0x700) >> 8);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x34, value & 0xFF);
> -	} else {
> -		/* Panel VRS SR3F[1:0] SR34[7:0] SR33[0] */
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0x03,
> -				 (value & 0x600) >> 9);
> -		xgifb_reg_set(pVBInfo->P3c4, 0x34, (value >> 1) & 0xFF);
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x33, ~0x01, value & 0x01);
> -	}
> -
> -	/* VRE SR0A[5] CR11[3:0] */
> -	value = LVDSVRE - 1;
> -	xgifb_reg_and_or(pVBInfo->P3c4, 0x0A, ~0x20, (value & 0x10) << 1);
> -	xgifb_reg_and_or(pVBInfo->P3d4, 0x11, ~0x0F, value & 0x0F);
> -
> -	/* Panel VRE SR3F[7:2] */
> -	if (chip_id == XG27)
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0xFC,
> -				 (value << 2) & 0xFC);
> -	else
> -		/* SR3F[7] has to be 0, h/w bug */
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0xFC,
> -				 (value << 2) & 0x7C);
> -
> -	for (temp = 0, value = 0; temp < 3; temp++) {
> -		xgifb_reg_and_or(pVBInfo->P3c4, 0x31, ~0x30, value);
> -		xgifb_reg_set(pVBInfo->P3c4,
> -			      0x2B, xgifb_info->lvds_data.VCLKData1);
> -		xgifb_reg_set(pVBInfo->P3c4,
> -			      0x2C, xgifb_info->lvds_data.VCLKData2);
> -		value += 0x10;
> -	}
> -
> -	if (!(modeflag & Charx8Dot)) {
> -		inb(pVBInfo->P3da); /* reset 3da */
> -		outb(0x13, pVBInfo->P3c0); /* set index */
> -		/* set data, panning = 0, shift left 1 dot*/
> -		outb(0x00, pVBInfo->P3c0);
> -
> -		inb(pVBInfo->P3da); /* Enable Attribute */
> -		outb(0x20, pVBInfo->P3c0);
> -
> -		inb(pVBInfo->P3da); /* reset 3da */
> -	}
> -}
> -
> -/*
> - * Function : XGI_IsLCDON
> - * Input :
> - * Output : 0 : Skip PSC Control
> - * 1: Disable PSC
> - * Description :
> - */
> -static unsigned char XGI_IsLCDON(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempax;
> -
> -	tempax = pVBInfo->VBInfo;
> -	if (tempax & SetCRT2ToDualEdge)
> -		return 0;
> -	else if (tempax & (DisableCRT2Display | SwitchCRT2 | SetSimuScanMode))
> -		return 1;
> -
> -	return 0;
> -}
> -
> -static void XGI_DisableBridge(struct xgifb_video_info *xgifb_info,
> -			      struct xgi_hw_device_info *HwDeviceExtension,
> -			      struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempah = 0;
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		tempah = 0x3F;
> -		if (!(pVBInfo->VBInfo &
> -		    (DisableCRT2Display | SetSimuScanMode))) {
> -			if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
> -				if (pVBInfo->VBInfo & SetCRT2ToDualEdge)
> -					tempah = 0x7F; /* Disable Channel A */
> -			}
> -		}
> -
> -		/* disable part4_1f */
> -		xgifb_reg_and(pVBInfo->Part4Port, 0x1F, tempah);
> -
> -		if (pVBInfo->VBType & (VB_SIS302LV | VB_XGI301C)) {
> -			if (((pVBInfo->VBInfo &
> -			      (SetCRT2ToLCD | XGI_SetCRT2ToLCDA))) ||
> -				(XGI_IsLCDON(pVBInfo)))
> -				/* LVDS Driver power down */
> -				xgifb_reg_or(pVBInfo->Part4Port, 0x30, 0x80);
> -		}
> -
> -		if (pVBInfo->VBInfo & (DisableCRT2Display | XGI_SetCRT2ToLCDA |
> -				       SetSimuScanMode))
> -			XGI_DisplayOff(xgifb_info, HwDeviceExtension, pVBInfo);
> -
> -		if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)
> -			/* Power down */
> -			xgifb_reg_and(pVBInfo->Part1Port, 0x1e, 0xdf);
> -
> -		/* disable TV as primary VGA swap */
> -		xgifb_reg_and(pVBInfo->P3c4, 0x32, 0xdf);
> -
> -		if ((pVBInfo->VBInfo & (SetSimuScanMode | SetCRT2ToDualEdge)))
> -			xgifb_reg_and(pVBInfo->Part2Port, 0x00, 0xdf);
> -
> -		if ((pVBInfo->VBInfo &
> -			(DisableCRT2Display | SetSimuScanMode)) ||
> -		    (!(pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) &&
> -		    (pVBInfo->VBInfo &
> -			(SetCRT2ToRAMDAC | SetCRT2ToLCD | SetCRT2ToTV))))
> -			xgifb_reg_or(pVBInfo->Part1Port, 0x00, 0x80);
> -
> -		if ((pVBInfo->VBInfo &
> -			(DisableCRT2Display | SetSimuScanMode)) ||
> -		    (!(pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)) ||
> -		    (pVBInfo->VBInfo &
> -			(SetCRT2ToRAMDAC | SetCRT2ToLCD | SetCRT2ToTV))) {
> -			/* save Part1 index 0 */
> -			tempah = xgifb_reg_get(pVBInfo->Part1Port, 0x00);
> -			/* BTDAC = 1, avoid VB reset */
> -			xgifb_reg_or(pVBInfo->Part1Port, 0x00, 0x10);
> -			/* disable CRT2 */
> -			xgifb_reg_and(pVBInfo->Part1Port, 0x1E, 0xDF);
> -			/* restore Part1 index 0 */
> -			xgifb_reg_set(pVBInfo->Part1Port, 0x00, tempah);
> -		}
> -	} else { /* {301} */
> -		if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToTV)) {
> -			xgifb_reg_or(pVBInfo->Part1Port, 0x00, 0x80);
> -			/* Disable CRT2 */
> -			xgifb_reg_and(pVBInfo->Part1Port, 0x1E, 0xDF);
> -			/* Disable TV asPrimary VGA swap */
> -			xgifb_reg_and(pVBInfo->P3c4, 0x32, 0xDF);
> -		}
> -
> -		if (pVBInfo->VBInfo & (DisableCRT2Display | XGI_SetCRT2ToLCDA
> -				| SetSimuScanMode))
> -			XGI_DisplayOff(xgifb_info, HwDeviceExtension, pVBInfo);
> -	}
> -}
> -
> -/*
> - * Function : XGI_GetTVPtrIndex
> - * Input :
> - * Output :
> - * Description : bx 0 : ExtNTSC
> - * 1 : StNTSC
> - * 2 : ExtPAL
> - * 3 : StPAL
> - * 4 : ExtHiTV
> - * 5 : StHiTV
> - * 6 : Ext525i
> - * 7 : St525i
> - * 8 : Ext525p
> - * 9 : St525p
> - * A : Ext750p
> - * B : St750p
> - */
> -static unsigned short XGI_GetTVPtrIndex(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx = 0;
> -
> -	if (pVBInfo->TVInfo & TVSetPAL)
> -		tempbx = 2;
> -	if (pVBInfo->TVInfo & TVSetHiVision)
> -		tempbx = 4;
> -	if (pVBInfo->TVInfo & TVSetYPbPr525i)
> -		tempbx = 6;
> -	if (pVBInfo->TVInfo & TVSetYPbPr525p)
> -		tempbx = 8;
> -	if (pVBInfo->TVInfo & TVSetYPbPr750p)
> -		tempbx = 10;
> -	if (pVBInfo->TVInfo & TVSimuMode)
> -		tempbx++;
> -
> -	return tempbx;
> -}
> -
> -/*
> - * Function : XGI_GetTVPtrIndex2
> - * Input :
> - * Output : bx 0 : NTSC
> - * 1 : PAL
> - * 2 : PALM
> - * 3 : PALN
> - * 4 : NTSC1024x768
> - * 5 : PAL-M 1024x768
> - * 6-7: reserved
> - * cl 0 : YFilter1
> - * 1 : YFilter2
> - * ch 0 : 301A
> - * 1 : 301B/302B/301LV/302LV
> - * Description :
> - */
> -static void XGI_GetTVPtrIndex2(unsigned short *tempbx,
> -			       unsigned char *tempcl,
> -			       unsigned char *tempch,
> -			       struct vb_device_info *pVBInfo)
> -{
> -	*tempbx = 0;
> -	*tempcl = 0;
> -	*tempch = 0;
> -
> -	if (pVBInfo->TVInfo & TVSetPAL)
> -		*tempbx = 1;
> -
> -	if (pVBInfo->TVInfo & TVSetPALM)
> -		*tempbx = 2;
> -
> -	if (pVBInfo->TVInfo & TVSetPALN)
> -		*tempbx = 3;
> -
> -	if (pVBInfo->TVInfo & NTSC1024x768) {
> -		*tempbx = 4;
> -		if (pVBInfo->TVInfo & TVSetPALM)
> -			*tempbx = 5;
> -	}
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		if (!(pVBInfo->VBInfo & SetInSlaveMode) || (pVBInfo->TVInfo
> -				& TVSimuMode)) {
> -			*tempbx += 8;
> -			*tempcl += 1;
> -		}
> -	}
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C))
> -		(*tempch)++;
> -}
> -
> -static void XGI_SetDelayComp(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char tempah, tempbl, tempbh;
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA
> -				| SetCRT2ToTV | SetCRT2ToRAMDAC)) {
> -			tempbh = 0;
> -			tempbl = XGI301TVDelay;
> -
> -			if (pVBInfo->VBInfo & SetCRT2ToDualEdge)
> -				tempbl >>= 4;
> -			if (pVBInfo->VBInfo &
> -			    (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
> -				tempbh = XGI301LCDDelay;
> -
> -				if (!(pVBInfo->VBInfo & XGI_SetCRT2ToLCDA))
> -					tempbl = tempbh;
> -			}
> -
> -			tempbl &= 0x0F;
> -			tempbh &= 0xF0;
> -			tempah = xgifb_reg_get(pVBInfo->Part1Port, 0x2D);
> -
> -			if (pVBInfo->VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToLCD
> -					| SetCRT2ToTV)) { /* Channel B */
> -				tempah &= 0xF0;
> -				tempah |= tempbl;
> -			}
> -
> -			if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
> -				/* Channel A */
> -				tempah &= 0x0F;
> -				tempah |= tempbh;
> -			}
> -			xgifb_reg_set(pVBInfo->Part1Port, 0x2D, tempah);
> -		}
> -	}
> -}
> -
> -static void XGI_SetLCDCap_A(unsigned short tempcx,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	unsigned short temp;
> -
> -	temp = xgifb_reg_get(pVBInfo->P3d4, 0x37);
> -
> -	if (temp & LCDRGB18Bit) {
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x19, 0x0F,
> -				 /* Enable Dither */
> -				 (unsigned short)(0x20 | (tempcx & 0x00C0)));
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x1A, 0x7F, 0x80);
> -	} else {
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x19, 0x0F,
> -				 (unsigned short)(0x30 | (tempcx & 0x00C0)));
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x1A, 0x7F, 0x00);
> -	}
> -}
> -
> -/*
> - * Function : XGI_SetLCDCap_B
> - * Input : cx -> LCD Capability
> - * Output :
> - * Description :
> - */
> -static void XGI_SetLCDCap_B(unsigned short tempcx,
> -			    struct vb_device_info *pVBInfo)
> -{
> -	if (tempcx & EnableLCD24bpp) { /* 24bits */
> -		xgifb_reg_and_or(pVBInfo->Part2Port, 0x1A, 0xE0,
> -				 (unsigned short)(((tempcx & 0x00ff) >> 6) | 0x0c));
> -	} else {
> -		xgifb_reg_and_or(pVBInfo->Part2Port, 0x1A, 0xE0,
> -				 (unsigned short)(((tempcx & 0x00ff) >> 6) | 0x18));
> -				  /* Enable Dither */
> -	}
> -}
> -
> -static void XGI_LongWait(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short i;
> -
> -	i = xgifb_reg_get(pVBInfo->P3c4, 0x1F);
> -
> -	if (!(i & 0xC0)) {
> -		for (i = 0; i < 0xFFFF; i++) {
> -			if (!(inb(pVBInfo->P3da) & 0x08))
> -				break;
> -		}
> -
> -		for (i = 0; i < 0xFFFF; i++) {
> -			if ((inb(pVBInfo->P3da) & 0x08))
> -				break;
> -		}
> -	}
> -}
> -
> -static void SetSpectrum(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short index;
> -
> -	index = XGI_GetLCDCapPtr(pVBInfo);
> -
> -	/* disable down spectrum D[4] */
> -	xgifb_reg_and(pVBInfo->Part4Port, 0x30, 0x8F);
> -	XGI_LongWait(pVBInfo);
> -	xgifb_reg_or(pVBInfo->Part4Port, 0x30, 0x20); /* reset spectrum */
> -	XGI_LongWait(pVBInfo);
> -
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x31,
> -		      pVBInfo->LCDCapList[index].Spectrum_31);
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x32,
> -		      pVBInfo->LCDCapList[index].Spectrum_32);
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x33,
> -		      pVBInfo->LCDCapList[index].Spectrum_33);
> -	xgifb_reg_set(pVBInfo->Part4Port, 0x34,
> -		      pVBInfo->LCDCapList[index].Spectrum_34);
> -	XGI_LongWait(pVBInfo);
> -	xgifb_reg_or(pVBInfo->Part4Port, 0x30, 0x40); /* enable spectrum */
> -}
> -
> -static void XGI_SetLCDCap(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempcx;
> -
> -	tempcx = pVBInfo->LCDCapList[XGI_GetLCDCapPtr(pVBInfo)].LCD_Capability;
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV |
> -		VB_SIS302LV | VB_XGI301C)) {
> -		if (pVBInfo->VBType &
> -		    (VB_SIS301LV | VB_SIS302LV | VB_XGI301C)) {
> -			/* Set 301LV Capability */
> -			xgifb_reg_set(pVBInfo->Part4Port, 0x24,
> -				      (unsigned char)(tempcx & 0x1F));
> -		}
> -		/* VB Driving */
> -		xgifb_reg_and_or(pVBInfo->Part4Port, 0x0D,
> -				 ~((EnableVBCLKDRVLOW | EnablePLLSPLOW) >> 8),
> -				 (unsigned short)((tempcx & (EnableVBCLKDRVLOW |
> -				 EnablePLLSPLOW)) >> 8));
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToLCD)
> -			XGI_SetLCDCap_B(tempcx, pVBInfo);
> -		else if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)
> -			XGI_SetLCDCap_A(tempcx, pVBInfo);
> -
> -		if (pVBInfo->VBType & (VB_SIS302LV | VB_XGI301C)) {
> -			if (tempcx & EnableSpectrum)
> -				SetSpectrum(pVBInfo);
> -		}
> -	} else {
> -		/* LVDS,CH7017 */
> -		XGI_SetLCDCap_A(tempcx, pVBInfo);
> -	}
> -}
> -
> -/*
> - * Function : XGI_SetAntiFlicker
> - * Input :
> - * Output :
> - * Description : Set TV Customized Param.
> - */
> -static void XGI_SetAntiFlicker(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx;
> -
> -	unsigned char tempah;
> -
> -	if (pVBInfo->TVInfo & (TVSetYPbPr525p | TVSetYPbPr750p))
> -		return;
> -
> -	tempbx = XGI_GetTVPtrIndex(pVBInfo);
> -	tempbx &= 0xFE;
> -	tempah = TVAntiFlickList[tempbx];
> -	tempah <<= 4;
> -
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x0A, 0x8F, tempah);
> -}
> -
> -static void XGI_SetEdgeEnhance(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx;
> -
> -	unsigned char tempah;
> -
> -	tempbx = XGI_GetTVPtrIndex(pVBInfo);
> -	tempbx &= 0xFE;
> -	tempah = TVEdgeList[tempbx];
> -	tempah <<= 5;
> -
> -	xgifb_reg_and_or(pVBInfo->Part2Port, 0x3A, 0x1F, tempah);
> -}
> -
> -static void XGI_SetPhaseIncr(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx;
> -
> -	unsigned char tempcl, tempch;
> -
> -	unsigned long tempData;
> -
> -	XGI_GetTVPtrIndex2(&tempbx, &tempcl, &tempch, pVBInfo); /* bx, cl, ch */
> -	tempData = TVPhaseList[tempbx];
> -
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x31, (unsigned short)(tempData
> -			& 0x000000FF));
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x32, (unsigned short)((tempData
> -			& 0x0000FF00) >> 8));
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x33, (unsigned short)((tempData
> -			& 0x00FF0000) >> 16));
> -	xgifb_reg_set(pVBInfo->Part2Port, 0x34, (unsigned short)((tempData
> -			& 0xFF000000) >> 24));
> -}
> -
> -static void XGI_SetYFilter(unsigned short ModeIdIndex,
> -			   struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbx, index;
> -	unsigned char const *filterPtr;
> -	unsigned char tempcl, tempch, tempal;
> -
> -	XGI_GetTVPtrIndex2(&tempbx, &tempcl, &tempch, pVBInfo); /* bx, cl, ch */
> -
> -	switch (tempbx) {
> -	case 0x00:
> -	case 0x04:
> -		filterPtr = NTSCYFilter1;
> -		break;
> -
> -	case 0x01:
> -		filterPtr = PALYFilter1;
> -		break;
> -
> -	case 0x02:
> -	case 0x05:
> -	case 0x0D:
> -	case 0x03:
> -		filterPtr = xgifb_palmn_yfilter1;
> -		break;
> -
> -	case 0x08:
> -	case 0x0C:
> -	case 0x0A:
> -	case 0x0B:
> -	case 0x09:
> -		filterPtr = xgifb_yfilter2;
> -		break;
> -
> -	default:
> -		return;
> -	}
> -
> -	tempal = XGI330_EModeIDTable[ModeIdIndex].VB_ExtTVYFilterIndex;
> -	if (tempcl == 0)
> -		index = tempal * 4;
> -	else
> -		index = tempal * 7;
> -
> -	if ((tempcl == 0) && (tempch == 1)) {
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x35, 0);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x36, 0);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x37, 0);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x38, filterPtr[index++]);
> -	} else {
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x35, filterPtr[index++]);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x36, filterPtr[index++]);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x37, filterPtr[index++]);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x38, filterPtr[index++]);
> -	}
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x48, filterPtr[index++]);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x49, filterPtr[index++]);
> -		xgifb_reg_set(pVBInfo->Part2Port, 0x4A, filterPtr[index++]);
> -	}
> -}
> -
> -/*
> - * Function : XGI_OEM310Setting
> - * Input :
> - * Output :
> - * Description : Customized Param. for 301
> - */
> -static void XGI_OEM310Setting(unsigned short ModeIdIndex,
> -			      struct vb_device_info *pVBInfo)
> -{
> -	XGI_SetDelayComp(pVBInfo);
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA))
> -		XGI_SetLCDCap(pVBInfo);
> -
> -	if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -		XGI_SetPhaseIncr(pVBInfo);
> -		XGI_SetYFilter(ModeIdIndex, pVBInfo);
> -		XGI_SetAntiFlicker(pVBInfo);
> -
> -		if (pVBInfo->VBType & VB_SIS301)
> -			XGI_SetEdgeEnhance(pVBInfo);
> -	}
> -}
> -
> -/*
> - * Function : XGI_SetCRT2ModeRegs
> - * Input :
> - * Output :
> - * Description : Origin code for crt2group
> - */
> -static void XGI_SetCRT2ModeRegs(struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempbl;
> -	short tempcl;
> -
> -	unsigned char tempah;
> -
> -	tempah = 0;
> -	if (!(pVBInfo->VBInfo & DisableCRT2Display)) {
> -		tempah = xgifb_reg_get(pVBInfo->Part1Port, 0x00);
> -		tempah &= ~0x10; /* BTRAMDAC */
> -		tempah |= 0x40; /* BTRAM */
> -
> -		if (pVBInfo->VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToTV
> -				| SetCRT2ToLCD)) {
> -			tempah = 0x40; /* BTDRAM */
> -			tempcl = pVBInfo->ModeType;
> -			tempcl -= ModeVGA;
> -			if (tempcl >= 0) {
> -				/* BT Color */
> -				tempah = 0x008 >> tempcl;
> -				if (tempah == 0)
> -					tempah = 1;
> -				tempah |= 0x040;
> -			}
> -			if (pVBInfo->VBInfo & SetInSlaveMode)
> -				tempah ^= 0x50; /* BTDAC */
> -		}
> -	}
> -
> -	xgifb_reg_set(pVBInfo->Part1Port, 0x00, tempah);
> -	tempah = 0x08;
> -	tempbl = 0xf0;
> -
> -	if (pVBInfo->VBInfo & DisableCRT2Display)
> -		goto reg_and_or;
> -
> -	tempah = 0x00;
> -	tempbl = 0xff;
> -
> -	if (!(pVBInfo->VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToTV |
> -				 SetCRT2ToLCD | XGI_SetCRT2ToLCDA)))
> -		goto reg_and_or;
> -
> -	if ((pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) &&
> -	    (!(pVBInfo->VBInfo & SetSimuScanMode))) {
> -		tempbl &= 0xf7;
> -		tempah |= 0x01;
> -		goto reg_and_or;
> -	}
> -
> -	if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
> -		tempbl &= 0xf7;
> -		tempah |= 0x01;
> -	}
> -
> -	if (!(pVBInfo->VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToTV | SetCRT2ToLCD)))
> -		goto reg_and_or;
> -
> -	tempbl &= 0xf8;
> -	tempah = 0x01;
> -
> -	if (!(pVBInfo->VBInfo & SetInSlaveMode))
> -		tempah |= 0x02;
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToRAMDAC)) {
> -		tempah = tempah ^ 0x05;
> -		if (!(pVBInfo->VBInfo & SetCRT2ToLCD))
> -			tempah = tempah ^ 0x01;
> -	}
> -
> -	if (!(pVBInfo->VBInfo & SetCRT2ToDualEdge))
> -		tempah |= 0x08;
> -
> -reg_and_or:
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x2e, tempbl, tempah);
> -
> -	if (pVBInfo->VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToTV | SetCRT2ToLCD
> -			| XGI_SetCRT2ToLCDA)) {
> -		tempah &= (~0x08);
> -		if ((pVBInfo->ModeType == ModeVGA) && !(pVBInfo->VBInfo
> -				& SetInSlaveMode)) {
> -			tempah |= 0x010;
> -		}
> -		tempah |= 0x080;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -			tempah |= 0x020;
> -			if (pVBInfo->VBInfo & DriverMode)
> -				tempah = tempah ^ 0x20;
> -		}
> -
> -		xgifb_reg_and_or(pVBInfo->Part4Port, 0x0D, ~0x0BF, tempah);
> -		tempah = 0;
> -
> -		if (pVBInfo->LCDInfo & SetLCDDualLink)
> -			tempah |= 0x40;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToTV) {
> -			if (pVBInfo->TVInfo & RPLLDIV2XO)
> -				tempah |= 0x40;
> -		}
> -
> -		if ((pVBInfo->LCDResInfo == Panel_1280x1024) ||
> -		    (pVBInfo->LCDResInfo == Panel_1280x1024x75))
> -			tempah |= 0x80;
> -
> -		if (pVBInfo->LCDResInfo == Panel_1280x960)
> -			tempah |= 0x80;
> -
> -		xgifb_reg_set(pVBInfo->Part4Port, 0x0C, tempah);
> -	}
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		tempah = 0;
> -		tempbl = 0xfb;
> -
> -		if (pVBInfo->VBInfo & SetCRT2ToDualEdge) {
> -			tempbl = 0xff;
> -			if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)
> -				tempah |= 0x04; /* shampoo 0129 */
> -		}
> -
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x13, tempbl, tempah);
> -		tempah = 0x00;
> -		tempbl = 0xcf;
> -		if (!(pVBInfo->VBInfo & DisableCRT2Display)) {
> -			if (pVBInfo->VBInfo & SetCRT2ToDualEdge)
> -				tempah |= 0x30;
> -		}
> -
> -		xgifb_reg_and_or(pVBInfo->Part1Port, 0x2c, tempbl, tempah);
> -		tempah = 0;
> -		tempbl = 0x3f;
> -
> -		if (!(pVBInfo->VBInfo & DisableCRT2Display)) {
> -			if (pVBInfo->VBInfo & SetCRT2ToDualEdge)
> -				tempah |= 0xc0;
> -		}
> -		xgifb_reg_and_or(pVBInfo->Part4Port, 0x21, tempbl, tempah);
> -	}
> -
> -	tempah = 0;
> -	tempbl = 0x7f;
> -	if (!(pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)) {
> -		tempbl = 0xff;
> -		if (!(pVBInfo->VBInfo & SetCRT2ToDualEdge))
> -			tempah |= 0x80;
> -	}
> -
> -	xgifb_reg_and_or(pVBInfo->Part4Port, 0x23, tempbl, tempah);
> -
> -	if (pVBInfo->VBType & (VB_SIS302LV | VB_XGI301C)) {
> -		if (pVBInfo->LCDInfo & SetLCDDualLink) {
> -			xgifb_reg_or(pVBInfo->Part4Port, 0x27, 0x20);
> -			xgifb_reg_or(pVBInfo->Part4Port, 0x34, 0x10);
> -		}
> -	}
> -}
> -
> -void XGI_UnLockCRT2(struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x2f, 0xFF, 0x01);
> -}
> -
> -void XGI_LockCRT2(struct vb_device_info *pVBInfo)
> -{
> -	xgifb_reg_and_or(pVBInfo->Part1Port, 0x2F, 0xFE, 0x00);
> -}
> -
> -unsigned short XGI_GetRatePtrCRT2(struct xgi_hw_device_info *pXGIHWDE,
> -				  unsigned short ModeNo,
> -				  unsigned short ModeIdIndex,
> -				  struct vb_device_info *pVBInfo)
> -{
> -	static const u8 LCDARefreshIndex[] = {
> -		0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00 };
> -
> -	unsigned short RefreshRateTableIndex, i, index, temp;
> -
> -	index = xgifb_reg_get(pVBInfo->P3d4, 0x33);
> -	index >>= pVBInfo->SelectCRT2Rate;
> -	index &= 0x0F;
> -
> -	if (pVBInfo->LCDInfo & LCDNonExpanding)
> -		index = 0;
> -
> -	if (index > 0)
> -		index--;
> -
> -	if (pVBInfo->SetFlag & ProgrammingCRT2) {
> -		if (pVBInfo->VBInfo & (SetCRT2ToLCD | XGI_SetCRT2ToLCDA)) {
> -			temp = LCDARefreshIndex[pVBInfo->LCDResInfo & 0x07];
> -
> -			if (index > temp)
> -				index = temp;
> -		}
> -	}
> -
> -	RefreshRateTableIndex = XGI330_EModeIDTable[ModeIdIndex].REFindex;
> -	ModeNo = XGI330_RefIndex[RefreshRateTableIndex].ModeID;
> -	if (pXGIHWDE->jChipType >= XG20) { /* for XG20, XG21, XG27 */
> -		if ((XGI330_RefIndex[RefreshRateTableIndex].XRes == 800) &&
> -		    (XGI330_RefIndex[RefreshRateTableIndex].YRes == 600)) {
> -			index++;
> -		}
> -		/* do the similar adjustment like XGISearchCRT1Rate() */
> -		if ((XGI330_RefIndex[RefreshRateTableIndex].XRes == 1024) &&
> -		    (XGI330_RefIndex[RefreshRateTableIndex].YRes == 768)) {
> -			index++;
> -		}
> -		if ((XGI330_RefIndex[RefreshRateTableIndex].XRes == 1280) &&
> -		    (XGI330_RefIndex[RefreshRateTableIndex].YRes == 1024)) {
> -			index++;
> -		}
> -	}
> -
> -	i = 0;
> -	do {
> -		if (XGI330_RefIndex[RefreshRateTableIndex + i].ModeID != ModeNo)
> -			break;
> -		temp = XGI330_RefIndex[RefreshRateTableIndex + i].Ext_InfoFlag;
> -		temp &= ModeTypeMask;
> -		if (temp < pVBInfo->ModeType)
> -			break;
> -		i++;
> -		index--;
> -
> -	} while (index != 0xFFFF);
> -	if (!(pVBInfo->VBInfo & SetCRT2ToRAMDAC)) {
> -		if (pVBInfo->VBInfo & SetInSlaveMode) {
> -			temp = XGI330_RefIndex[RefreshRateTableIndex + i - 1].Ext_InfoFlag;
> -			if (temp & InterlaceMode)
> -				i++;
> -		}
> -	}
> -	i--;
> -	if ((pVBInfo->SetFlag & ProgrammingCRT2)) {
> -		temp = XGI_AjustCRT2Rate(ModeIdIndex, RefreshRateTableIndex,
> -					 &i, pVBInfo);
> -	}
> -	return RefreshRateTableIndex + i;
> -}
> -
> -static void XGI_SetLCDAGroup(unsigned short ModeNo, unsigned short ModeIdIndex,
> -			     struct xgi_hw_device_info *HwDeviceExtension,
> -			     struct vb_device_info *pVBInfo)
> -{
> -	unsigned short RefreshRateTableIndex;
> -
> -	pVBInfo->SetFlag |= ProgrammingCRT2;
> -	RefreshRateTableIndex = XGI_GetRatePtrCRT2(HwDeviceExtension, ModeNo,
> -						   ModeIdIndex, pVBInfo);
> -	XGI_GetLVDSResInfo(ModeIdIndex, pVBInfo);
> -	XGI_GetLVDSData(ModeIdIndex, pVBInfo);
> -	XGI_ModCRT1Regs(ModeIdIndex, HwDeviceExtension, pVBInfo);
> -	XGI_SetLVDSRegs(ModeIdIndex, pVBInfo);
> -	XGI_SetCRT2ECLK(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -}
> -
> -static unsigned char XGI_SetCRT2Group301(unsigned short ModeNo,
> -					 struct xgi_hw_device_info *HwDeviceExtension,
> -					 struct vb_device_info *pVBInfo)
> -{
> -	unsigned short ModeIdIndex, RefreshRateTableIndex;
> -
> -	pVBInfo->SetFlag |= ProgrammingCRT2;
> -	XGI_SearchModeID(ModeNo, &ModeIdIndex);
> -	pVBInfo->SelectCRT2Rate = 4;
> -	RefreshRateTableIndex = XGI_GetRatePtrCRT2(HwDeviceExtension, ModeNo,
> -						   ModeIdIndex, pVBInfo);
> -	XGI_SaveCRT2Info(ModeNo, pVBInfo);
> -	XGI_GetCRT2ResInfo(ModeIdIndex, pVBInfo);
> -	XGI_GetCRT2Data(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -	XGI_PreSetGroup1(ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -	XGI_SetGroup1(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -	XGI_SetLockRegs(ModeNo, ModeIdIndex, pVBInfo);
> -	XGI_SetGroup2(ModeNo, ModeIdIndex, pVBInfo);
> -	XGI_SetLCDRegs(ModeIdIndex, pVBInfo);
> -	XGI_SetTap4Regs(pVBInfo);
> -	XGI_SetGroup3(ModeIdIndex, pVBInfo);
> -	XGI_SetGroup4(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -	XGI_SetCRT2VCLK(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -	XGI_SetGroup5(pVBInfo);
> -	XGI_AutoThreshold(pVBInfo);
> -	return 1;
> -}
> -
> -void XGI_SenseCRT1(struct vb_device_info *pVBInfo)
> -{
> -	unsigned char CRTCData[17] = { 0x5F, 0x4F, 0x50, 0x82, 0x55, 0x81,
> -			0x0B, 0x3E, 0xE9, 0x0B, 0xDF, 0xE7, 0x04, 0x00, 0x00,
> -			0x05, 0x00 };
> -
> -	unsigned char SR01 = 0, SR1F = 0, SR07 = 0, SR06 = 0;
> -
> -	unsigned char CR17, CR63, SR31;
> -	unsigned short temp;
> -
> -	int i;
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x05, 0x86);
> -
> -	/* to fix XG42 single LCD sense to CRT+LCD */
> -	xgifb_reg_set(pVBInfo->P3d4, 0x57, 0x4A);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x53, (xgifb_reg_get(
> -			pVBInfo->P3d4, 0x53) | 0x02));
> -
> -	SR31 = xgifb_reg_get(pVBInfo->P3c4, 0x31);
> -	CR63 = xgifb_reg_get(pVBInfo->P3d4, 0x63);
> -	SR01 = xgifb_reg_get(pVBInfo->P3c4, 0x01);
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x01, (unsigned char)(SR01 & 0xDF));
> -	xgifb_reg_set(pVBInfo->P3d4, 0x63, (unsigned char)(CR63 & 0xBF));
> -
> -	CR17 = xgifb_reg_get(pVBInfo->P3d4, 0x17);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x17, (unsigned char)(CR17 | 0x80));
> -
> -	SR1F = xgifb_reg_get(pVBInfo->P3c4, 0x1F);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x1F, (unsigned char)(SR1F | 0x04));
> -
> -	SR07 = xgifb_reg_get(pVBInfo->P3c4, 0x07);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x07, (unsigned char)(SR07 & 0xFB));
> -	SR06 = xgifb_reg_get(pVBInfo->P3c4, 0x06);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x06, (unsigned char)(SR06 & 0xC3));
> -
> -	xgifb_reg_set(pVBInfo->P3d4, 0x11, 0x00);
> -
> -	for (i = 0; i < 8; i++)
> -		xgifb_reg_set(pVBInfo->P3d4, (unsigned short)i, CRTCData[i]);
> -
> -	for (i = 8; i < 11; i++)
> -		xgifb_reg_set(pVBInfo->P3d4, (unsigned short)(i + 8),
> -			      CRTCData[i]);
> -
> -	for (i = 11; i < 13; i++)
> -		xgifb_reg_set(pVBInfo->P3d4, (unsigned short)(i + 4),
> -			      CRTCData[i]);
> -
> -	for (i = 13; i < 16; i++)
> -		xgifb_reg_set(pVBInfo->P3c4, (unsigned short)(i - 3),
> -			      CRTCData[i]);
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x0E, (unsigned char)(CRTCData[16]
> -		      & 0xE0));
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x31, 0x00);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2B, 0x1B);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x2C, 0xE1);
> -
> -	outb(0x00, pVBInfo->P3c8);
> -
> -	for (i = 0; i < 256 * 3; i++)
> -		outb(0x0F, (pVBInfo->P3c8 + 1)); /* DAC_TEST_PARMS */
> -
> -	mdelay(1);
> -
> -	XGI_WaitDisply(pVBInfo);
> -	temp = inb(pVBInfo->P3c2);
> -
> -	if (temp & 0x10)
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x32, 0xDF, 0x20);
> -	else
> -		xgifb_reg_and_or(pVBInfo->P3d4, 0x32, 0xDF, 0x00);
> -
> -	/* avoid display something, set BLACK DAC if not restore DAC */
> -	outb(0x00, pVBInfo->P3c8);
> -
> -	for (i = 0; i < 256 * 3; i++)
> -		outb(0, (pVBInfo->P3c8 + 1));
> -
> -	xgifb_reg_set(pVBInfo->P3c4, 0x01, SR01);
> -	xgifb_reg_set(pVBInfo->P3d4, 0x63, CR63);
> -	xgifb_reg_set(pVBInfo->P3c4, 0x31, SR31);
> -
> -	xgifb_reg_set(pVBInfo->P3d4, 0x53, (xgifb_reg_get(
> -			pVBInfo->P3d4, 0x53) & 0xFD));
> -	xgifb_reg_set(pVBInfo->P3c4, 0x1F, (unsigned char)SR1F);
> -}
> -
> -static void XGI_EnableBridge(struct xgifb_video_info *xgifb_info,
> -			     struct xgi_hw_device_info *HwDeviceExtension,
> -			     struct vb_device_info *pVBInfo)
> -{
> -	unsigned short tempah;
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		if (pVBInfo->VBInfo & SetCRT2ToDualEdge)
> -			/* Power on */
> -			xgifb_reg_set(pVBInfo->Part1Port, 0x1E, 0x20);
> -
> -		if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToTV |
> -				       SetCRT2ToRAMDAC)) {
> -			tempah = xgifb_reg_get(pVBInfo->P3c4, 0x32);
> -			tempah &= 0xDF;
> -			if (pVBInfo->VBInfo & SetInSlaveMode) {
> -				if (!(pVBInfo->VBInfo & SetCRT2ToRAMDAC))
> -					tempah |= 0x20;
> -			}
> -			xgifb_reg_set(pVBInfo->P3c4, 0x32, tempah);
> -			xgifb_reg_or(pVBInfo->P3c4, 0x1E, 0x20);
> -
> -			tempah = xgifb_reg_get(pVBInfo->Part1Port, 0x2E);
> -
> -			if (!(tempah & 0x80))
> -				xgifb_reg_or(pVBInfo->Part1Port, 0x2E, 0x80);
> -			xgifb_reg_and(pVBInfo->Part1Port, 0x00, 0x7F);
> -		}
> -
> -		if (!(pVBInfo->VBInfo & DisableCRT2Display)) {
> -			xgifb_reg_and_or(pVBInfo->Part2Port, 0x00, ~0xE0,
> -					 0x20); /* shampoo 0129 */
> -			if (pVBInfo->VBType & (VB_SIS302LV | VB_XGI301C)) {
> -				if (pVBInfo->VBInfo &
> -					(SetCRT2ToLCD | XGI_SetCRT2ToLCDA))
> -					 /* LVDS PLL power on */
> -					xgifb_reg_and(pVBInfo->Part4Port, 0x2A,
> -						      0x7F);
> -				/* LVDS Driver power on */
> -				xgifb_reg_and(pVBInfo->Part4Port, 0x30, 0x7F);
> -			}
> -		}
> -
> -		tempah = 0x00;
> -
> -		if (!(pVBInfo->VBInfo & DisableCRT2Display)) {
> -			tempah = 0xc0;
> -
> -			if (!(pVBInfo->VBInfo & SetSimuScanMode) &&
> -			    (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) &&
> -			    (pVBInfo->VBInfo & SetCRT2ToDualEdge)) {
> -				tempah = tempah & 0x40;
> -				if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA)
> -					tempah = tempah ^ 0xC0;
> -			}
> -		}
> -
> -		/* EnablePart4_1F */
> -		xgifb_reg_or(pVBInfo->Part4Port, 0x1F, tempah);
> -
> -		XGI_DisableGatingCRT(pVBInfo);
> -		XGI_DisplayOn(xgifb_info, HwDeviceExtension, pVBInfo);
> -	} /* 301 */
> -	else { /* LVDS */
> -		if (pVBInfo->VBInfo & (SetCRT2ToTV | SetCRT2ToLCD
> -				| XGI_SetCRT2ToLCDA))
> -			/* enable CRT2 */
> -			xgifb_reg_or(pVBInfo->Part1Port, 0x1E, 0x20);
> -
> -		tempah = xgifb_reg_get(pVBInfo->Part1Port, 0x2E);
> -		if (!(tempah & 0x80))
> -			xgifb_reg_or(pVBInfo->Part1Port, 0x2E, 0x80);
> -
> -		xgifb_reg_and(pVBInfo->Part1Port, 0x00, 0x7F);
> -		XGI_DisplayOn(xgifb_info, HwDeviceExtension, pVBInfo);
> -	} /* End of VB */
> -}
> -
> -static void XGI_SetCRT1Group(struct xgifb_video_info *xgifb_info,
> -			     struct xgi_hw_device_info *HwDeviceExtension,
> -			     unsigned short ModeNo, unsigned short ModeIdIndex,
> -			     struct vb_device_info *pVBInfo)
> -{
> -	unsigned short RefreshRateTableIndex, temp;
> -
> -	XGI_SetSeqRegs(pVBInfo);
> -	outb(XGI330_StandTable.MISC, pVBInfo->P3c2);
> -	XGI_SetCRTCRegs(pVBInfo);
> -	XGI_SetATTRegs(ModeIdIndex, pVBInfo);
> -	XGI_SetGRCRegs(pVBInfo);
> -	XGI_ClearExt1Regs(pVBInfo);
> -
> -	if (HwDeviceExtension->jChipType == XG27) {
> -		if (pVBInfo->IF_DEF_LVDS == 0)
> -			XGI_SetDefaultVCLK(pVBInfo);
> -	}
> -
> -	temp = ~ProgrammingCRT2;
> -	pVBInfo->SetFlag &= temp;
> -	pVBInfo->SelectCRT2Rate = 0;
> -
> -	if (pVBInfo->VBType & (VB_SIS301B | VB_SIS302B | VB_SIS301LV
> -			| VB_SIS302LV | VB_XGI301C)) {
> -		if (pVBInfo->VBInfo & (SetSimuScanMode | XGI_SetCRT2ToLCDA
> -				| SetInSlaveMode)) {
> -			pVBInfo->SetFlag |= ProgrammingCRT2;
> -		}
> -	}
> -
> -	RefreshRateTableIndex = XGI_GetRatePtrCRT2(HwDeviceExtension, ModeNo,
> -						   ModeIdIndex, pVBInfo);
> -	if (RefreshRateTableIndex != 0xFFFF) {
> -		XGI_SetSync(RefreshRateTableIndex, pVBInfo);
> -		XGI_SetCRT1CRTC(ModeIdIndex, RefreshRateTableIndex,
> -				pVBInfo, HwDeviceExtension);
> -		XGI_SetCRT1DE(ModeIdIndex, RefreshRateTableIndex, pVBInfo);
> -		XGI_SetCRT1Offset(ModeNo, ModeIdIndex, RefreshRateTableIndex,
> -				  HwDeviceExtension, pVBInfo);
> -		XGI_SetCRT1VCLK(ModeIdIndex, HwDeviceExtension,
> -				RefreshRateTableIndex, pVBInfo);
> -	}
> -
> -	if (HwDeviceExtension->jChipType >= XG21) {
> -		temp = xgifb_reg_get(pVBInfo->P3d4, 0x38);
> -		if (temp & 0xA0) {
> -			if (HwDeviceExtension->jChipType == XG27)
> -				XGI_SetXG27CRTC(RefreshRateTableIndex, pVBInfo);
> -			else
> -				XGI_SetXG21CRTC(RefreshRateTableIndex, pVBInfo);
> -
> -			XGI_UpdateXG21CRTC(ModeNo, pVBInfo,
> -					   RefreshRateTableIndex);
> -
> -			xgifb_set_lcd(HwDeviceExtension->jChipType,
> -				      pVBInfo, RefreshRateTableIndex);
> -
> -			if (pVBInfo->IF_DEF_LVDS == 1)
> -				xgifb_set_lvds(xgifb_info,
> -					       HwDeviceExtension->jChipType,
> -					       ModeIdIndex, pVBInfo);
> -		}
> -	}
> -
> -	pVBInfo->SetFlag &= (~ProgrammingCRT2);
> -	XGI_SetCRT1FIFO(HwDeviceExtension, pVBInfo);
> -	XGI_SetCRT1ModeRegs(HwDeviceExtension, ModeIdIndex,
> -			    RefreshRateTableIndex, pVBInfo);
> -	XGI_LoadDAC(pVBInfo);
> -}
> -
> -unsigned char XGISetModeNew(struct xgifb_video_info *xgifb_info,
> -			    struct xgi_hw_device_info *HwDeviceExtension,
> -			    unsigned short ModeNo)
> -{
> -	unsigned short ModeIdIndex;
> -	struct vb_device_info VBINF;
> -	struct vb_device_info *pVBInfo = &VBINF;
> -
> -	pVBInfo->IF_DEF_LVDS = 0;
> -
> -	if (HwDeviceExtension->jChipType >= XG20)
> -		pVBInfo->VBType = 0; /* set VBType default 0 */
> -
> -	XGIRegInit(pVBInfo, xgifb_info->vga_base);
> -
> -	/* for x86 Linux, XG21 LVDS */
> -	if (HwDeviceExtension->jChipType == XG21) {
> -		if ((xgifb_reg_get(pVBInfo->P3d4, 0x38) & 0xE0) == 0xC0)
> -			pVBInfo->IF_DEF_LVDS = 1;
> -	}
> -	if (HwDeviceExtension->jChipType == XG27) {
> -		if ((xgifb_reg_get(pVBInfo->P3d4, 0x38) & 0xE0) == 0xC0) {
> -			if (xgifb_reg_get(pVBInfo->P3d4, 0x30) & 0x20)
> -				pVBInfo->IF_DEF_LVDS = 1;
> -		}
> -	}
> -
> -	InitTo330Pointer(HwDeviceExtension->jChipType, pVBInfo);
> -	if (ModeNo & 0x80)
> -		ModeNo = ModeNo & 0x7F;
> -	xgifb_reg_set(pVBInfo->P3c4, 0x05, 0x86);
> -
> -	if (HwDeviceExtension->jChipType < XG20)
> -		XGI_UnLockCRT2(pVBInfo);
> -
> -	XGI_SearchModeID(ModeNo, &ModeIdIndex);
> -
> -	if (HwDeviceExtension->jChipType < XG20) {
> -		XGI_GetVBInfo(ModeIdIndex, pVBInfo);
> -		XGI_GetTVInfo(ModeIdIndex, pVBInfo);
> -		XGI_GetLCDInfo(ModeIdIndex, pVBInfo);
> -		XGI_DisableBridge(xgifb_info, HwDeviceExtension, pVBInfo);
> -
> -		if (pVBInfo->VBInfo & (SetSimuScanMode | XGI_SetCRT2ToLCDA) ||
> -		    !(pVBInfo->VBInfo & SwitchCRT2)) {
> -			XGI_SetCRT1Group(xgifb_info, HwDeviceExtension, ModeNo,
> -					 ModeIdIndex, pVBInfo);
> -
> -			if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
> -				XGI_SetLCDAGroup(ModeNo, ModeIdIndex,
> -						 HwDeviceExtension, pVBInfo);
> -			}
> -		}
> -
> -		if (pVBInfo->VBInfo & (SetSimuScanMode | SwitchCRT2)) {
> -			switch (HwDeviceExtension->ujVBChipID) {
> -			case VB_CHIP_301: /* fall through */
> -			case VB_CHIP_302:
> -				/* add for CRT2 */
> -				XGI_SetCRT2Group301(ModeNo, HwDeviceExtension,
> -						    pVBInfo);
> -				break;
> -
> -			default:
> -				break;
> -			}
> -		}
> -
> -		XGI_SetCRT2ModeRegs(pVBInfo);
> -		XGI_OEM310Setting(ModeIdIndex, pVBInfo); /* 0212 */
> -		XGI_EnableBridge(xgifb_info, HwDeviceExtension, pVBInfo);
> -	} /* !XG20 */
> -	else {
> -		if (pVBInfo->IF_DEF_LVDS == 1)
> -			if (!XGI_XG21CheckLVDSMode(xgifb_info, ModeNo,
> -						   ModeIdIndex))
> -				return 0;
> -
> -		pVBInfo->ModeType =
> -			XGI330_EModeIDTable[ModeIdIndex].Ext_ModeFlag
> -			& ModeTypeMask;
> -
> -		pVBInfo->SetFlag = 0;
> -		pVBInfo->VBInfo = DisableCRT2Display;
> -
> -		XGI_DisplayOff(xgifb_info, HwDeviceExtension, pVBInfo);
> -
> -		XGI_SetCRT1Group(xgifb_info, HwDeviceExtension, ModeNo,
> -				 ModeIdIndex, pVBInfo);
> -
> -		XGI_DisplayOn(xgifb_info, HwDeviceExtension, pVBInfo);
> -	}
> -
> -	XGI_UpdateModeInfo(pVBInfo);
> -
> -	if (HwDeviceExtension->jChipType < XG20)
> -		XGI_LockCRT2(pVBInfo);
> -
> -	return 1;
> -}
> diff --git a/drivers/staging/xgifb/vb_setmode.h b/drivers/staging/xgifb/vb_setmode.h
> deleted file mode 100644
> index 5904ed1f2686..000000000000
> --- a/drivers/staging/xgifb/vb_setmode.h
> +++ /dev/null
> @@ -1,24 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _VBSETMODE_
> -#define _VBSETMODE_
> -
> -void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo);
> -void XGI_UnLockCRT2(struct vb_device_info *pVBInfo);
> -void XGI_LockCRT2(struct vb_device_info *pVBInfo);
> -void XGI_DisplayOff(struct xgifb_video_info *xgifb_info,
> -		    struct xgi_hw_device_info *pXGIHWDE,
> -		    struct vb_device_info *pVBInfo);
> -void XGI_GetVBType(struct vb_device_info *pVBInfo);
> -void XGI_SenseCRT1(struct vb_device_info *pVBInfo);
> -unsigned char XGISetModeNew(struct xgifb_video_info *xgifb_info,
> -			    struct xgi_hw_device_info *HwDeviceExtension,
> -			    unsigned short ModeNo);
> -
> -unsigned char XGI_SearchModeID(unsigned short ModeNo,
> -			       unsigned short *ModeIdIndex);
> -unsigned short XGI_GetRatePtrCRT2(struct xgi_hw_device_info *pXGIHWDE,
> -				  unsigned short ModeNo,
> -				  unsigned short ModeIdIndex,
> -				  struct vb_device_info *pVBInfo);
> -
> -#endif
> diff --git a/drivers/staging/xgifb/vb_struct.h b/drivers/staging/xgifb/vb_struct.h
> deleted file mode 100644
> index e256f72f6d8a..000000000000
> --- a/drivers/staging/xgifb/vb_struct.h
> +++ /dev/null
> @@ -1,165 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _VB_STRUCT_
> -#define _VB_STRUCT_
> -#include "../../video/fbdev/sis/vstruct.h"
> -
> -struct XGI_LVDSCRT1HDataStruct {
> -	unsigned char Reg[8];
> -};
> -
> -struct XGI_LVDSCRT1VDataStruct {
> -	unsigned char Reg[7];
> -};
> -
> -struct XGI_ExtStruct {
> -	unsigned char Ext_ModeID;
> -	unsigned short Ext_ModeFlag;
> -	unsigned short Ext_ModeInfo;
> -	unsigned char Ext_RESINFO;
> -	unsigned char VB_ExtTVYFilterIndex;
> -	unsigned char REFindex;
> -};
> -
> -struct XGI_Ext2Struct {
> -	unsigned short Ext_InfoFlag;
> -	unsigned char Ext_CRT1CRTC;
> -	unsigned char Ext_CRTVCLK;
> -	unsigned char Ext_CRT2CRTC;
> -	unsigned char Ext_CRT2CRTC2;
> -	unsigned char  ModeID;
> -	unsigned short XRes;
> -	unsigned short YRes;
> -};
> -
> -struct XGI_ECLKDataStruct {
> -	unsigned char SR2E, SR2F, SR30;
> -	unsigned short CLOCK;
> -};
> -
> -/*add for new UNIVGABIOS*/
> -struct XGI_LCDDesStruct {
> -	unsigned short LCDHDES;
> -	unsigned short LCDHRS;
> -	unsigned short LCDVDES;
> -	unsigned short LCDVRS;
> -};
> -
> -struct XGI330_LCDDataDesStruct2 {
> -	unsigned short LCDHDES;
> -	unsigned short LCDHRS;
> -	unsigned short LCDVDES;
> -	unsigned short LCDVRS;
> -	unsigned short LCDHSync;
> -	unsigned short LCDVSync;
> -};
> -
> -struct XGI330_LCDDataTablStruct {
> -	unsigned char  PANELID;
> -	unsigned short MASK;
> -	unsigned short CAP;
> -	void const *DATAPTR;
> -};
> -
> -struct XGI330_TVDataTablStruct {
> -	unsigned short MASK;
> -	unsigned short CAP;
> -	struct SiS_TVData const *DATAPTR;
> -};
> -
> -struct XGI_TimingHStruct {
> -	unsigned char data[8];
> -};
> -
> -struct XGI_TimingVStruct {
> -	unsigned char data[7];
> -};
> -
> -struct XGI_XG21CRT1Struct {
> -	unsigned char ModeID, CR02, CR03, CR15, CR16;
> -};
> -
> -struct XGI330_LCDCapStruct {
> -	unsigned char	LCD_ID;
> -	unsigned short	LCD_Capability;
> -	unsigned char	LCD_HSyncWidth;
> -	unsigned char	LCD_VSyncWidth;
> -	unsigned char	LCD_VCLK;
> -	unsigned char	LCDA_VCLKData1;
> -	unsigned char	LCDA_VCLKData2;
> -	unsigned char	LCUCHAR_VCLKData1;
> -	unsigned char	LCUCHAR_VCLKData2;
> -	unsigned char	Spectrum_31;
> -	unsigned char	Spectrum_32;
> -	unsigned char	Spectrum_33;
> -	unsigned char	Spectrum_34;
> -};
> -
> -struct XGI21_LVDSCapStruct {
> -	unsigned short LVDS_Capability;
> -	unsigned short LVDSHT;
> -	unsigned short LVDSVT;
> -	unsigned short LVDSHDE;
> -	unsigned short LVDSVDE;
> -	unsigned short LVDSHFP;
> -	unsigned short LVDSVFP;
> -	unsigned short LVDSHSYNC;
> -	unsigned short LVDSVSYNC;
> -	unsigned char  VCLKData1;
> -	unsigned char  VCLKData2;
> -	unsigned char  PSC_S1; /* Duration between CPL on and signal on */
> -	unsigned char  PSC_S2; /* Duration signal on and Vdd on */
> -	unsigned char  PSC_S3; /* Duration between CPL off and signal off */
> -	unsigned char  PSC_S4; /* Duration signal off and Vdd off */
> -	unsigned char  PSC_S5;
> -};
> -
> -struct XGI_CRT1TableStruct {
> -	unsigned char CR[16];
> -};
> -
> -struct XGI301C_Tap4TimingStruct {
> -	unsigned short DE;
> -	unsigned char  Reg[64];   /* C0-FF */
> -};
> -
> -struct vb_device_info {
> -	unsigned long   P3c4, P3d4, P3c0, P3ce, P3c2, P3cc;
> -	unsigned long   P3ca, P3c6, P3c7, P3c8, P3c9, P3da;
> -	unsigned long   Part0Port, Part1Port, Part2Port;
> -	unsigned long   Part3Port, Part4Port, Part5Port;
> -	unsigned short   RVBHCFACT, RVBHCMAX, RVBHRS;
> -	unsigned short   VGAVT, VGAHT, VGAVDE, VGAHDE;
> -	unsigned short   VT, HT, VDE, HDE;
> -	unsigned short   LCDHRS, LCDVRS, LCDHDES, LCDVDES;
> -
> -	unsigned short   ModeType;
> -	unsigned short   IF_DEF_LVDS;
> -	unsigned short   IF_DEF_CRT2Monitor;
> -	unsigned short   IF_DEF_YPbPr;
> -	unsigned short   IF_DEF_HiVision;
> -	unsigned short   LCDResInfo, LCDTypeInfo, VBType;/*301b*/
> -	unsigned short   VBInfo, TVInfo, LCDInfo;
> -	unsigned short   SetFlag;
> -	unsigned short   NewFlickerMode;
> -	unsigned short   SelectCRT2Rate;
> -
> -	void __iomem *FBAddr;
> -
> -	unsigned char const *SR18;
> -	unsigned char const (*CR40)[3];
> -
> -	struct SiS_MCLKData const *MCLKData;
> -
> -	unsigned char   XGINew_CR97;
> -
> -	struct XGI330_LCDCapStruct const *LCDCapList;
> -
> -	struct XGI_TimingHStruct TimingH;
> -	struct XGI_TimingVStruct TimingV;
> -
> -	int ram_type;
> -	int ram_channel;
> -	int ram_bus;
> -};  /* _struct vb_device_info */
> -
> -#endif /* _VB_STRUCT_ */
> diff --git a/drivers/staging/xgifb/vb_table.h b/drivers/staging/xgifb/vb_table.h
> deleted file mode 100644
> index 42ecf7fe6766..000000000000
> --- a/drivers/staging/xgifb/vb_table.h
> +++ /dev/null
> @@ -1,2513 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _VB_TABLE_
> -#define _VB_TABLE_
> -static const struct SiS_MCLKData XGI340New_MCLKData[] = {
> -	{0x16, 0x01, 0x01, 166},
> -	{0x19, 0x02, 0x01, 124},
> -	{0x7C, 0x08, 0x01, 200},
> -};
> -
> -static const struct SiS_MCLKData XGI27New_MCLKData[] = {
> -	{0x5c, 0x23, 0x01, 166},
> -	{0x19, 0x02, 0x01, 124},
> -	{0x7C, 0x08, 0x80, 200},
> -};
> -
> -const struct XGI_ECLKDataStruct XGI340_ECLKData[] = {
> -	{0x5c, 0x23, 0x01, 166},
> -	{0x55, 0x84, 0x01, 123},
> -	{0x7C, 0x08, 0x01, 200},
> -};
> -
> -static const unsigned char XG27_SR18[3] = {
> -	0x32, 0x32, 0x42 /* SR18 */
> -};
> -
> -static const unsigned char XGI340_SR18[3] = {
> -	0x31, 0x42, 0x42 /* SR18 */
> -};
> -
> -static const unsigned char XGI340_cr41[24][3] = {
> -	{0x20, 0x50, 0x60}, /* 0 CR41 */
> -	{0xc4, 0x40, 0x84}, /* 1 CR8A */
> -	{0xc4, 0x40, 0x84}, /* 2 CR8B */
> -	{0xb5, 0xa4, 0xa4},
> -	{0xf0, 0xf0, 0xf0},
> -	{0x90, 0x90, 0x24}, /* 5 CR68 */
> -	{0x77, 0x77, 0x44}, /* 6 CR69 */
> -	{0x77, 0x77, 0x44}, /* 7 CR6A */
> -	{0xff, 0xff, 0xff}, /* 8 CR6D */
> -	{0x55, 0x55, 0x55}, /* 9 CR80 */
> -	{0x00, 0x00, 0x00}, /* 10 CR81 */
> -	{0x88, 0xa8, 0x48}, /* 11 CR82 */
> -	{0x44, 0x44, 0x77}, /* 12 CR85 */
> -	{0x48, 0x48, 0x88}, /* 13 CR86 */
> -	{0x54, 0x54, 0x44}, /* 14 CR90 */
> -	{0x54, 0x54, 0x44}, /* 15 CR91 */
> -	{0x0a, 0x0a, 0x07}, /* 16 CR92 */
> -	{0x44, 0x44, 0x44}, /* 17 CR93 */
> -	{0x10, 0x10, 0x0A}, /* 18 CR94 */
> -	{0x11, 0x11, 0x0a}, /* 19 CR95 */
> -	{0x05, 0x05, 0x05}, /* 20 CR96 */
> -	{0xf0, 0xf0, 0xf0}, /* 21 CRC3 */
> -	{0x05, 0x00, 0x02}, /* 22 CRC4 */
> -	{0x00, 0x00, 0x00}  /* 23 CRC5 */
> -};
> -
> -static const unsigned char XGI27_cr41[24][3] = {
> -	{0x20, 0x40, 0x60}, /* 0 CR41 */
> -	{0xC4, 0x40, 0x84}, /* 1 CR8A */
> -	{0xC4, 0x40, 0x84}, /* 2 CR8B */
> -	{0xB3, 0x13, 0xa4}, /* 3 CR40[7],
> -			     *   CR99[2:0],
> -			     *   CR45[3:0]
> -			     */
> -	{0xf0, 0xf5, 0xf0}, /* 4 CR59 */
> -	{0x90, 0x90, 0x24}, /* 5 CR68 */
> -	{0x77, 0x67, 0x44}, /* 6 CR69 */
> -	{0x77, 0x77, 0x44}, /* 7 CR6A */
> -	{0xff, 0xff, 0xff}, /* 8 CR6D */
> -	{0x55, 0x55, 0x55}, /* 9 CR80 */
> -	{0x00, 0x00, 0x00}, /* 10 CR81 */
> -	{0x88, 0xcc, 0x48}, /* 11 CR82 */
> -	{0x44, 0x88, 0x77}, /* 12 CR85 */
> -	{0x48, 0x88, 0x88}, /* 13 CR86 */
> -	{0x54, 0x32, 0x44}, /* 14 CR90 */
> -	{0x54, 0x33, 0x44}, /* 15 CR91 */
> -	{0x0a, 0x07, 0x07}, /* 16 CR92 */
> -	{0x44, 0x63, 0x44}, /* 17 CR93 */
> -	{0x10, 0x14, 0x0A}, /* 18 CR94 */
> -	{0x11, 0x0B, 0x0C}, /* 19 CR95 */
> -	{0x05, 0x22, 0x05}, /* 20 CR96 */
> -	{0xf0, 0xf0, 0x00}, /* 21 CRC3 */
> -	{0x05, 0x00, 0x02}, /* 22 CRC4 */
> -	{0x00, 0x00, 0x00}  /* 23 CRC5 */
> -};
> -
> -/* CR47,CR48,CR49,CR4A,CR4B,CR4C,CR70,CR71,CR74,CR75,CR76,CR77 */
> -const unsigned char XGI340_AGPReg[12] = {
> -	0x28, 0x23, 0x00, 0x20, 0x00, 0x20,
> -	0x00, 0x05, 0xd0, 0x10, 0x10, 0x00
> -};
> -
> -const struct XGI_ExtStruct XGI330_EModeIDTable[] = {
> -	{0x2e, 0x0a1b, 0x0306, 0x06, 0x05, 0x06},
> -	{0x2f, 0x0a1b, 0x0305, 0x05, 0x05, 0x05},
> -	{0x30, 0x2a1b, 0x0407, 0x07, 0x07, 0x0e},
> -	{0x31, 0x0a1b, 0x030d, 0x0d, 0x06, 0x3d},
> -	{0x32, 0x0a1b, 0x0a0e, 0x0e, 0x06, 0x3e},
> -	{0x33, 0x0a1d, 0x0a0d, 0x0d, 0x06, 0x3d},
> -	{0x34, 0x2a1d, 0x0a0e, 0x0e, 0x06, 0x3e},
> -	{0x35, 0x0a1f, 0x0a0d, 0x0d, 0x06, 0x3d},
> -	{0x36, 0x2a1f, 0x0a0e, 0x0e, 0x06, 0x3e},
> -	{0x38, 0x0a1b, 0x0508, 0x08, 0x00, 0x16},
> -	{0x3a, 0x0e3b, 0x0609, 0x09, 0x00, 0x1e},
> -	{0x3c, 0x0e3b, 0x070a, 0x0a, 0x00, 0x22}, /* mode 1600x1200
> -						   * add CRT2MODE [2003/10/07]
> -						   */
> -	{0x3d, 0x0e7d, 0x070a, 0x0a, 0x00, 0x22}, /* mode 1600x1200
> -						   * add CRT2MODE
> -						   */
> -	{0x40, 0x9a1c, 0x0000, 0x00, 0x04, 0x00},
> -	{0x41, 0x9a1d, 0x0000, 0x00, 0x04, 0x00},
> -	{0x43, 0x0a1c, 0x0306, 0x06, 0x05, 0x06},
> -	{0x44, 0x0a1d, 0x0306, 0x06, 0x05, 0x06},
> -	{0x46, 0x2a1c, 0x0407, 0x07, 0x07, 0x0e},
> -	{0x47, 0x2a1d, 0x0407, 0x07, 0x07, 0x0e},
> -	{0x49, 0x0a3c, 0x0508, 0x08, 0x00, 0x16},
> -	{0x4a, 0x0a3d, 0x0508, 0x08, 0x00, 0x16},
> -	{0x4c, 0x0e7c, 0x0609, 0x09, 0x00, 0x1e},
> -	{0x4d, 0x0e7d, 0x0609, 0x09, 0x00, 0x1e},
> -	{0x50, 0x9a1b, 0x0001, 0x01, 0x04, 0x02},
> -	{0x51, 0xba1b, 0x0103, 0x03, 0x07, 0x03},
> -	{0x52, 0x9a1b, 0x0204, 0x04, 0x00, 0x04},
> -	{0x56, 0x9a1d, 0x0001, 0x01, 0x04, 0x02},
> -	{0x57, 0xba1d, 0x0103, 0x03, 0x07, 0x03},
> -	{0x58, 0x9a1d, 0x0204, 0x04, 0x00, 0x04},
> -	{0x59, 0x9a1b, 0x0000, 0x00, 0x04, 0x00},
> -	{0x5A, 0x021b, 0x0014, 0x01, 0x04, 0x3f},
> -	{0x5B, 0x0a1d, 0x0014, 0x01, 0x04, 0x3f},
> -	{0x5d, 0x0a1d, 0x0305, 0x05, 0x07, 0x05},
> -	{0x62, 0x0a3f, 0x0306, 0x06, 0x05, 0x06},
> -	{0x63, 0x2a3f, 0x0407, 0x07, 0x07, 0x0e},
> -	{0x64, 0x0a7f, 0x0508, 0x08, 0x00, 0x16},
> -	{0x65, 0x0eff, 0x0609, 0x09, 0x00, 0x1e},
> -	{0x66, 0x0eff, 0x070a, 0x0a, 0x00, 0x22}, /* mode 1600x1200
> -						   * add CRT2MODE
> -						   */
> -	{0x68, 0x067b, 0x080b, 0x0b, 0x00, 0x29},
> -	{0x69, 0x06fd, 0x080b, 0x0b, 0x00, 0x29},
> -	{0x6b, 0x07ff, 0x080b, 0x0b, 0x00, 0x29},
> -	{0x6c, 0x067b, 0x090c, 0x0c, 0x00, 0x2f},
> -	{0x6d, 0x06fd, 0x090c, 0x0c, 0x00, 0x2f},
> -	{0x6e, 0x07ff, 0x090c, 0x0c, 0x00, 0x2f},
> -	{0x70, 0x2a1b, 0x0410, 0x10, 0x07, 0x34},
> -	{0x71, 0x0a1b, 0x0511, 0x11, 0x00, 0x37},
> -	{0x74, 0x0a1d, 0x0511, 0x11, 0x00, 0x37},
> -	{0x75, 0x0a3d, 0x0612, 0x12, 0x00, 0x3a},
> -	{0x76, 0x2a1f, 0x0410, 0x10, 0x07, 0x34},
> -	{0x77, 0x0a1f, 0x0511, 0x11, 0x00, 0x37},
> -	{0x78, 0x0a3f, 0x0612, 0x12, 0x00, 0x3a},
> -	{0x79, 0x0a3b, 0x0612, 0x12, 0x00, 0x3a},
> -	{0x7a, 0x2a1d, 0x0410, 0x10, 0x07, 0x34},
> -	{0x7b, 0x0e3b, 0x060f, 0x0f, 0x00, 0x1d},
> -	{0x7c, 0x0e7d, 0x060f, 0x0f, 0x00, 0x1d},
> -	{0x7d, 0x0eff, 0x060f, 0x0f, 0x00, 0x1d},
> -	{0x20, 0x0e3b, 0x0D16, 0x16, 0x00, 0x43},
> -	{0x21, 0x0e7d, 0x0D16, 0x16, 0x00, 0x43},
> -	{0x22, 0x0eff, 0x0D16, 0x16, 0x00, 0x43},
> -	{0x23, 0x0e3b, 0x0614, 0x14, 0x00, 0x41},
> -	{0x24, 0x0e7d, 0x0614, 0x14, 0x00, 0x41},
> -	{0x25, 0x0eff, 0x0614, 0x14, 0x00, 0x41},
> -	{0x26, 0x063b, 0x0c15, 0x15, 0x00, 0x42},
> -	{0x27, 0x067d, 0x0c15, 0x15, 0x00, 0x42},
> -	{0x28, 0x06ff, 0x0c15, 0x15, 0x00, 0x42},
> -	{0xff, 0x0000, 0x0000, 0x00, 0x00, 0x00}
> -};
> -
> -static const struct SiS_StandTable_S XGI330_StandTable = {
> -/* ExtVGATable */
> -	0x00, 0x00, 0x00, 0x0000,
> -	{0x21, 0x0f, 0x00, 0x0e}, /* 0x21 = 0x01 | (0x20 = screen off) */
> -	 0x23,
> -	{0x5f, 0x4f, 0x50, 0x82, 0x54, 0x80, 0x0b, 0x3e,
> -	 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> -	 0xea, 0x8c, 0xdf, 0x28, 0x40, 0xe7, 0x04, 0xa3,
> -	 0xff},
> -	{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
> -	 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
> -	 0x01, 0x00, 0x00, 0x00},
> -	{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0f,
> -	 0xff}
> -};
> -
> -static const struct XGI_XG21CRT1Struct XGI_UpdateCRT1Table[] = {
> -	{0x01, 0x27, 0x91, 0x8f, 0xc0},	/* 00 */
> -	{0x03, 0x4f, 0x83, 0x8f, 0xc0},	/* 01 */
> -	{0x05, 0x27, 0x91, 0x8f, 0xc0},	/* 02 */
> -	{0x06, 0x4f, 0x83, 0x8f, 0xc0},	/* 03 */
> -	{0x07, 0x4f, 0x83, 0x8f, 0xc0},	/* 04 */
> -	{0x0d, 0x27, 0x91, 0x8f, 0xc0},	/* 05 */
> -	{0x0e, 0x4f, 0x83, 0x8f, 0xc0},	/* 06 */
> -	{0x0f, 0x4f, 0x83, 0x5d, 0xc0},	/* 07 */
> -	{0x10, 0x4f, 0x83, 0x5d, 0xc0},	/* 08 */
> -	{0x11, 0x4f, 0x83, 0xdf, 0x0c},	/* 09 */
> -	{0x12, 0x4f, 0x83, 0xdf, 0x0c},	/* 10 */
> -	{0x13, 0x4f, 0x83, 0x8f, 0xc0},	/* 11 */
> -	{0x2e, 0x4f, 0x83, 0xdf, 0x0c},	/* 12 */
> -	{0x2e, 0x4f, 0x87, 0xdf, 0xc0},	/* 13 */
> -	{0x2f, 0x4f, 0x83, 0x8f, 0xc0},	/* 14 */
> -	{0x50, 0x27, 0x91, 0xdf, 0x0c},	/* 15 */
> -	{0x59, 0x27, 0x91, 0x8f, 0xc0}	/* 16 */
> -};
> -
> -const struct XGI_CRT1TableStruct XGI_CRT1Table[] = {
> -	{ {0x2d, 0x28, 0x90, 0x2c, 0x90, 0x00, 0x04, 0x00,
> -	  0xbf, 0x1f, 0x9c, 0x8e, 0x96, 0xb9, 0x30} }, /* 0x0 */
> -	{ {0x2d, 0x28, 0x90, 0x2c, 0x90, 0x00, 0x04, 0x00,
> -	  0x0b, 0x3e, 0xe9, 0x8b, 0xe7, 0x04, 0x00} }, /* 0x1 */
> -	{ {0x3D, 0x31, 0x81, 0x37, 0x1F, 0x00, 0x05, 0x00,
> -	  0x72, 0xF0, 0x58, 0x8C, 0x57, 0x73, 0xA0} }, /* 0x2 */
> -	{ {0x4F, 0x3F, 0x93, 0x45, 0x0D, 0x00, 0x01, 0x00,
> -	  0x24, 0xF5, 0x02, 0x88, 0xFF, 0x25, 0x90} }, /* 0x3 */
> -	{ {0x5F, 0x50, 0x82, 0x55, 0x81, 0x00, 0x05, 0x00,
> -	  0xBF, 0x1F, 0x9C, 0x8E, 0x96, 0xB9, 0x30} }, /* 0x4 */
> -	{ {0x5F, 0x50, 0x82, 0x55, 0x81, 0x00, 0x05, 0x00,
> -	  0x0B, 0x3E, 0xE9, 0x8B, 0xE7, 0x04, 0x00} }, /* 0x5 */
> -	{ {0x63, 0x50, 0x86, 0x56, 0x9B, 0x00, 0x01, 0x00,
> -	  0x06, 0x3E, 0xE8, 0x8B, 0xE7, 0xFF, 0x10} }, /* 0x6 */
> -	{ {0x64, 0x4F, 0x88, 0x55, 0x9D, 0x00, 0x01, 0x00,
> -	  0xF2, 0x1F, 0xE0, 0x83, 0xDF, 0xF3, 0x10} }, /* 0x7 */
> -	{ {0x63, 0x4F, 0x87, 0x5A, 0x81, 0x00, 0x05, 0x00,
> -	  0xFB, 0x1F, 0xE0, 0x83, 0xDF, 0xFC, 0x10} }, /* 0x8 */
> -	{ {0x65, 0x4F, 0x89, 0x58, 0x80, 0x00, 0x05, 0x60,
> -	  0xFB, 0x1F, 0xE0, 0x83, 0xDF, 0xFC, 0x80} }, /* 0x9 */
> -	{ {0x65, 0x4F, 0x89, 0x58, 0x80, 0x00, 0x05, 0x60,
> -	  0x01, 0x3E, 0xE0, 0x83, 0xDF, 0x02, 0x80} }, /* 0xa */
> -	{ {0x67, 0x4F, 0x8B, 0x58, 0x81, 0x00, 0x05, 0x60,
> -	  0x0D, 0x3E, 0xE0, 0x83, 0xDF, 0x0E, 0x90} }, /* 0xb */
> -	{ {0x65, 0x4F, 0x89, 0x57, 0x9F, 0x00, 0x01, 0x00,
> -	  0xFB, 0x1F, 0xE6, 0x8A, 0xDF, 0xFC, 0x10} }, /* 0xc */
> -	/* 0D (800x600,56Hz) */
> -	{ {0x7B, 0x63, 0x9F, 0x6A, 0x93, 0x00, 0x05, 0x00,
> -	/* (VCLK 36.0MHz) */
> -	  0x6F, 0xF0, 0x58, 0x8A, 0x57, 0x70, 0xA0} },
> -	/* 0E (800x600,60Hz) */
> -	{ {0x7F, 0x63, 0x83, 0x6C, 0x1C, 0x00, 0x06, 0x00,
> -	/* (VCLK 40.0MHz) */
> -	  0x72, 0xF0, 0x58, 0x8C, 0x57, 0x73, 0xA0} },
> -	/* 0F (800x600,72Hz) */
> -	{ {0x7D, 0x63, 0x81, 0x6E, 0x1D, 0x00, 0x06, 0x00,
> -	/* (VCLK 50.0MHz) */
> -	  0x98, 0xF0, 0x7C, 0x82, 0x57, 0x99, 0x80} },
> -	/* 10 (800x600,75Hz) */
> -	{ {0x7F, 0x63, 0x83, 0x69, 0x13, 0x00, 0x06, 0x00,
> -	/* (VCLK 49.5MHz) */
> -	  0x6F, 0xF0, 0x58, 0x8B, 0x57, 0x70, 0xA0} },
> -	/* 11 (800x600,85Hz) */
> -	{ {0x7E, 0x63, 0x82, 0x6B, 0x13, 0x00, 0x06, 0x00,
> -	/* (VCLK 56.25MHz) */
> -	  0x75, 0xF0, 0x58, 0x8B, 0x57, 0x76, 0xA0} },
> -	/* 12 (800x600,100Hz) */
> -	{ {0x81, 0x63, 0x85, 0x6D, 0x18, 0x00, 0x06, 0x60,
> -	/* (VCLK 75.8MHz) */
> -	  0x7A, 0xF0, 0x58, 0x8B, 0x57, 0x7B, 0xA0} },
> -	/* 13 (800x600,120Hz) */
> -	{ {0x83, 0x63, 0x87, 0x6E, 0x19, 0x00, 0x06, 0x60,
> -	/* (VCLK 79.411MHz) */
> -	  0x81, 0xF0, 0x58, 0x8B, 0x57, 0x82, 0xA0} },
> -	/* 14 (800x600,160Hz) */
> -	{ {0x85, 0x63, 0x89, 0x6F, 0x1A, 0x00, 0x06, 0x60,
> -	/* (VCLK 105.822MHz) */
> -	  0x91, 0xF0, 0x58, 0x8B, 0x57, 0x92, 0xA0} },
> -	{ {0x99, 0x7F, 0x9D, 0x84, 0x1A, 0x00, 0x02, 0x00,
> -	  0x96, 0x1F, 0x7F, 0x83, 0x7F, 0x97, 0x10} }, /* 0x15 */
> -	{ {0xA3, 0x7F, 0x87, 0x86, 0x97, 0x00, 0x02, 0x00,
> -	  0x24, 0xF5, 0x02, 0x88, 0xFF, 0x25, 0x90} }, /* 0x16 */
> -	{ {0xA1, 0x7F, 0x85, 0x86, 0x97, 0x00, 0x02, 0x00,
> -	  0x24, 0xF5, 0x02, 0x88, 0xFF, 0x25, 0x90} }, /* 0x17 */
> -	{ {0x9F, 0x7F, 0x83, 0x85, 0x91, 0x00, 0x02, 0x00,
> -	  0x1E, 0xF5, 0x00, 0x83, 0xFF, 0x1F, 0x90} }, /* 0x18 */
> -	{ {0xA7, 0x7F, 0x8B, 0x89, 0x95, 0x00, 0x02, 0x00,
> -	  0x26, 0xF5, 0x00, 0x83, 0xFF, 0x27, 0x90} }, /* 0x19 */
> -	{ {0xA9, 0x7F, 0x8D, 0x8C, 0x9A, 0x00, 0x02, 0x62,
> -	  0x2C, 0xF5, 0x00, 0x83, 0xFF, 0x2D, 0x14} }, /* 0x1a */
> -	{ {0xAB, 0x7F, 0x8F, 0x8D, 0x9B, 0x00, 0x02, 0x62,
> -	  0x35, 0xF5, 0x00, 0x83, 0xFF, 0x36, 0x14} }, /* 0x1b */
> -	{ {0xCF, 0x9F, 0x93, 0xB2, 0x01, 0x00, 0x03, 0x00,
> -	  0x14, 0xBA, 0x00, 0x83, 0xFF, 0x15, 0x00} }, /* 0x1c */
> -	{ {0xCE, 0x9F, 0x92, 0xA9, 0x17, 0x00, 0x07, 0x00,
> -	  0x28, 0x5A, 0x00, 0x83, 0xFF, 0x29, 0x89} }, /* 0x1d */
> -	{ {0xCE, 0x9F, 0x92, 0xA5, 0x17, 0x00, 0x07, 0x00,
> -	  0x28, 0x5A, 0x00, 0x83, 0xFF, 0x29, 0x89} }, /* 0x1e */
> -	{ {0xD3, 0x9F, 0x97, 0xAB, 0x1F, 0x00, 0x07, 0x00,
> -	  0x2E, 0x5A, 0x00, 0x83, 0xFF, 0x2F, 0x89} }, /* 0x1f */
> -	{ {0x09, 0xC7, 0x8D, 0xD3, 0x0B, 0x01, 0x04, 0x00,
> -	  0xE0, 0x10, 0xB0, 0x83, 0xAF, 0xE1, 0x2F} }, /* 0x20 */
> -	{ {0x09, 0xC7, 0x8D, 0xD3, 0x0B, 0x01, 0x04, 0x00,
> -	  0xE0, 0x10, 0xB0, 0x83, 0xAF, 0xE1, 0x2F} }, /* 0x21 */
> -	{ {0x09, 0xC7, 0x8D, 0xD3, 0x0B, 0x01, 0x04, 0x00,
> -	  0xE0, 0x10, 0xB0, 0x83, 0xAF, 0xE1, 0x2F} }, /* 0x22 */
> -	{ {0x09, 0xC7, 0x8D, 0xD3, 0x0B, 0x01, 0x04, 0x00,
> -	  0xE0, 0x10, 0xB0, 0x83, 0xAF, 0xE1, 0x2F} }, /* 0x23 */
> -	{ {0x09, 0xC7, 0x8D, 0xD3, 0x0B, 0x01, 0x04, 0x00,
> -	  0xE0, 0x10, 0xB0, 0x83, 0xAF, 0xE1, 0x2F} }, /* 0x24 */
> -	{ {0x09, 0xC7, 0x8D, 0xD3, 0x0B, 0x01, 0x04, 0x00,
> -	  0xE0, 0x10, 0xB0, 0x83, 0xAF, 0xE1, 0x2F} }, /* 0x25 */
> -	{ {0x09, 0xC7, 0x8D, 0xD3, 0x0B, 0x01, 0x04, 0x00,
> -	  0xE0, 0x10, 0xB0, 0x83, 0xAF, 0xE1, 0x2F} }, /* 0x26 */
> -	{ {0x40, 0xEF, 0x84, 0x03, 0x1D, 0x41, 0x01, 0x00,
> -	  0xDA, 0x1F, 0xA0, 0x83, 0x9F, 0xDB, 0x1F} }, /* 0x27 */
> -	{ {0x43, 0xEF, 0x87, 0x06, 0x00, 0x41, 0x05, 0x62,
> -	  0xD4, 0x1F, 0xA0, 0x83, 0x9F, 0xD5, 0x9F} }, /* 0x28 */
> -	{ {0x45, 0xEF, 0x89, 0x07, 0x01, 0x41, 0x05, 0x62,
> -	  0xD9, 0x1F, 0xA0, 0x83, 0x9F, 0xDA, 0x9F} }, /* 0x29 */
> -	{ {0x40, 0xEF, 0x84, 0x03, 0x1D, 0x41, 0x01, 0x00,
> -	  0xDA, 0x1F, 0xA0, 0x83, 0x9F, 0xDB, 0x1F} }, /* 0x2a */
> -	{ {0x40, 0xEF, 0x84, 0x03, 0x1D, 0x41, 0x01, 0x00,
> -	  0xDA, 0x1F, 0xA0, 0x83, 0x9F, 0xDB, 0x1F} }, /* 0x2b */
> -	{ {0x40, 0xEF, 0x84, 0x03, 0x1D, 0x41, 0x01, 0x00,
> -	  0xDA, 0x1F, 0xA0, 0x83, 0x9F, 0xDB, 0x1F} }, /* 0x2c */
> -	{ {0x59, 0xFF, 0x9D, 0x17, 0x13, 0x41, 0x05, 0x44,
> -	  0x33, 0xBA, 0x00, 0x83, 0xFF, 0x34, 0x0F} }, /* 0x2d */
> -	{ {0x5B, 0xFF, 0x9F, 0x18, 0x14, 0x41, 0x05, 0x44,
> -	  0x38, 0xBA, 0x00, 0x83, 0xFF, 0x39, 0x0F} }, /* 0x2e */
> -	{ {0x5B, 0xFF, 0x9F, 0x18, 0x14, 0x41, 0x05, 0x44,
> -	  0x3D, 0xBA, 0x00, 0x83, 0xFF, 0x3E, 0x0F} }, /* 0x2f */
> -	{ {0x5D, 0xFF, 0x81, 0x19, 0x95, 0x41, 0x05, 0x44,
> -	  0x41, 0xBA, 0x00, 0x84, 0xFF, 0x42, 0x0F} }, /* 0x30 */
> -	{ {0x55, 0xFF, 0x99, 0x0D, 0x0C, 0x41, 0x05, 0x00,
> -	  0x3E, 0xBA, 0x00, 0x84, 0xFF, 0x3F, 0x0F} }, /* 0x31 */
> -	{ {0x7F, 0x63, 0x83, 0x6C, 0x1C, 0x00, 0x06, 0x00,
> -	  0x72, 0xBA, 0x27, 0x8B, 0xDF, 0x73, 0x80} }, /* 0x32 */
> -	{ {0x7F, 0x63, 0x83, 0x69, 0x13, 0x00, 0x06, 0x00,
> -	  0x6F, 0xBA, 0x26, 0x89, 0xDF, 0x6F, 0x80} }, /* 0x33 */
> -	{ {0x7F, 0x63, 0x82, 0x6B, 0x13, 0x00, 0x06, 0x00,
> -	  0x75, 0xBA, 0x29, 0x8C, 0xDF, 0x75, 0x80} }, /* 0x34 */
> -	{ {0xA3, 0x7F, 0x87, 0x86, 0x97, 0x00, 0x02, 0x00,
> -	  0x24, 0xF1, 0xAF, 0x85, 0x3F, 0x25, 0xB0} }, /* 0x35 */
> -	{ {0x9F, 0x7F, 0x83, 0x85, 0x91, 0x00, 0x02, 0x00,
> -	  0x1E, 0xF1, 0xAD, 0x81, 0x3F, 0x1F, 0xB0} }, /* 0x36 */
> -	{ {0xA7, 0x7F, 0x88, 0x89, 0x15, 0x00, 0x02, 0x00,
> -	  0x26, 0xF1, 0xB1, 0x85, 0x3F, 0x27, 0xB0} }, /* 0x37 */
> -	{ {0xCE, 0x9F, 0x92, 0xA9, 0x17, 0x00, 0x07, 0x00,
> -	  0x28, 0xC4, 0x7A, 0x8E, 0xCF, 0x29, 0xA1} }, /* 0x38 */
> -	{ {0xCE, 0x9F, 0x92, 0xA5, 0x17, 0x00, 0x07, 0x00,
> -	  0x28, 0xD4, 0x7A, 0x8E, 0xCF, 0x29, 0xA1} }, /* 0x39 */
> -	{ {0xD3, 0x9F, 0x97, 0xAB, 0x1F, 0x00, 0x07, 0x00,
> -	  0x2E, 0xD4, 0x7D, 0x81, 0xCF, 0x2F, 0xA1} }, /* 0x3a */
> -	{ {0xDC, 0x9F, 0x00, 0xAB, 0x19, 0x00, 0x07, 0x00,
> -	  0xE6, 0xEF, 0xC0, 0xC3, 0xBF, 0xE7, 0x90} }, /* 0x3b */
> -	{ {0x6B, 0x59, 0x8F, 0x5E, 0x8C, 0x00, 0x05, 0x00,
> -	  0x0B, 0x3E, 0xE9, 0x8B, 0xE7, 0x04, 0x00} }, /* 0x3c */
> -	{ {0x7B, 0x63, 0x9F, 0x6A, 0x93, 0x00, 0x05, 0x00,
> -	  0x6F, 0xF0, 0x58, 0x8A, 0x57, 0x70, 0xA0} }, /* 0x3d */
> -	{ {0x86, 0x6A, 0x8a, 0x74, 0x06, 0x00, 0x02, 0x00,
> -	  0x8c, 0x15, 0x4f, 0x83, 0xef, 0x8d, 0x30} }, /* 0x3e */
> -	{ {0x81, 0x6A, 0x85, 0x70, 0x00, 0x00, 0x02, 0x00,
> -	  0x0f, 0x3e, 0xeb, 0x8e, 0xdf, 0x10, 0x00} }, /* 0x3f */
> -	{ {0xCE, 0x9F, 0x92, 0xA9, 0x17, 0x00, 0x07, 0x00,
> -	  0x20, 0xF5, 0x03, 0x88, 0xFF, 0x21, 0x90} }, /* 0x40 */
> -	{ {0xE6, 0xAE, 0x8A, 0xBD, 0x90, 0x00, 0x03, 0x00,
> -	  0x3D, 0x10, 0x1A, 0x8D, 0x19, 0x3E, 0x2F} }, /* 0x41 */
> -	{ {0xB9, 0x8F, 0x9D, 0x9B, 0x8A, 0x00, 0x06, 0x00,
> -	  0x7D, 0xFF, 0x60, 0x83, 0x5F, 0x7E, 0x90} }, /* 0x42 */
> -	{ {0xC3, 0x8F, 0x87, 0x9B, 0x0B, 0x00, 0x07, 0x00,
> -	  0x82, 0xFF, 0x60, 0x83, 0x5F, 0x83, 0x90} },  /* 0x43 */
> -	{ {0xAD, 0x7F, 0x91, 0x8E, 0x9C, 0x00, 0x02, 0x82,
> -	  0x49, 0xF5, 0x00, 0x83, 0xFF, 0x4A, 0x90} },  /* 0x44 */
> -	{ {0xCD, 0x9F, 0x91, 0xA7, 0x19, 0x00, 0x07, 0x60,
> -	  0xE6, 0xFF, 0xC0, 0x83, 0xBF, 0xE7, 0x90} },  /* 0x45 */
> -	{ {0xD3, 0x9F, 0x97, 0xAB, 0x1F, 0x00, 0x07, 0x60,
> -	  0xF1, 0xFF, 0xC0, 0x83, 0xBF, 0xF2, 0x90} },  /* 0x46 */
> -	{ {0xD7, 0x9F, 0x9B, 0xAC, 0x1E, 0x00, 0x07, 0x00,
> -	  0x03, 0xDE, 0xC0, 0x84, 0xBF, 0x04, 0x90} }  /* 0x47 */
> -};
> -
> -/*add for new UNIVGABIOS*/
> -static const struct SiS_LCDData XGI_StLCD1024x768Data[] = {
> -	{62,  25, 800,  546, 1344, 806},
> -	{32,  15, 930,  546, 1344, 806},
> -	{62,  25, 800,  546, 1344, 806}, /*chiawenfordot9->dot8*/
> -	{104, 45, 945,  496, 1344, 806},
> -	{62,  25, 800,  546, 1344, 806},
> -	{31,  18, 1008, 624, 1344, 806},
> -	{1,   1,  1344, 806, 1344, 806}
> -};
> -
> -static const struct SiS_LCDData XGI_ExtLCD1024x768Data[] = {
> -	{42, 25, 1536, 419, 1344, 806},
> -	{48, 25, 1536, 369, 1344, 806},
> -	{42, 25, 1536, 419, 1344, 806},
> -	{48, 25, 1536, 369, 1344, 806},
> -	{12, 5,  896,  500, 1344, 806},
> -	{42, 25, 1024, 625, 1344, 806},
> -	{1,  1,  1344, 806, 1344, 806},
> -	{12, 5,  896,  500, 1344, 806},
> -	{42, 25, 1024, 625, 1344, 806},
> -	{1,  1,  1344, 806, 1344, 806},
> -	{12, 5,  896,  500, 1344, 806},
> -	{42, 25, 1024, 625, 1344, 806},
> -	{1,  1,  1344, 806, 1344, 806}
> -};
> -
> -static const struct SiS_LCDData XGI_CetLCD1024x768Data[] = {
> -	{1, 1, 1344, 806, 1344, 806}, /* ; 00 (320x200,320x400,
> -				       *       640x200,640x400)
> -				       */
> -	{1, 1, 1344, 806, 1344, 806}, /* 01 (320x350,640x350) */
> -	{1, 1, 1344, 806, 1344, 806}, /* 02 (360x400,720x400) */
> -	{1, 1, 1344, 806, 1344, 806}, /* 03 (720x350) */
> -	{1, 1, 1344, 806, 1344, 806}, /* 04 (640x480x60Hz) */
> -	{1, 1, 1344, 806, 1344, 806}, /* 05 (800x600x60Hz) */
> -	{1, 1, 1344, 806, 1344, 806}  /* 06 (1024x768x60Hz) */
> -};
> -
> -static const struct SiS_LCDData XGI_StLCD1280x1024Data[] = {
> -	{22,  5,  800,  510,  1650, 1088},
> -	{22,  5,  800,  510,  1650, 1088},
> -	{176, 45, 900,  510,  1650, 1088},
> -	{176, 45, 900,  510,  1650, 1088},
> -	{22,  5,  800,  510,  1650, 1088},
> -	{13,  5,  1024, 675,  1560, 1152},
> -	{16,  9,  1266, 804,  1688, 1072},
> -	{1,   1,  1688, 1066, 1688, 1066}
> -};
> -
> -static const struct SiS_LCDData XGI_ExtLCD1280x1024Data[] = {
> -	{211, 60,  1024, 501,  1688, 1066},
> -	{211, 60,  1024, 508,  1688, 1066},
> -	{211, 60,  1024, 501,  1688, 1066},
> -	{211, 60,  1024, 508,  1688, 1066},
> -	{211, 60,  1024, 500,  1688, 1066},
> -	{211, 75,  1024, 625,  1688, 1066},
> -	{211, 120, 1280, 798,  1688, 1066},
> -	{1,   1,   1688, 1066, 1688, 1066}
> -};
> -
> -static const struct SiS_LCDData XGI_CetLCD1280x1024Data[] = {
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 00 (320x200,320x400,
> -					 *     640x200,640x400)
> -					 */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 01 (320x350,640x350) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 02 (360x400,720x400) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 03 (720x350) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 04 (640x480x60Hz) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 05 (800x600x60Hz) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 06 (1024x768x60Hz) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* 07 (1280x1024x60Hz) */
> -	{1, 1, 1688, 1066, 1688, 1066}  /* 08 (1400x1050x60Hz) */
> -};
> -
> -static const struct SiS_LCDData xgifb_lcd_1400x1050[] = {
> -	{211, 100, 2100, 408,  1688, 1066}, /* 00 (320x200,320x400,
> -					     *     640x200,640x400)
> -					     */
> -	{211, 64,  1536, 358,  1688, 1066}, /* 01 (320x350,640x350) */
> -	{211, 100, 2100, 408,  1688, 1066}, /* 02 (360x400,720x400) */
> -	{211, 64,  1536, 358,  1688, 1066}, /* 03 (720x350) */
> -	{211, 48,  840,  488,  1688, 1066}, /* 04 (640x480x60Hz) */
> -	{211, 72,  1008, 609,  1688, 1066}, /* 05 (800x600x60Hz) */
> -	{211, 128, 1400, 776,  1688, 1066}, /* 06 (1024x768x60Hz) */
> -	{1,   1,   1688, 1066, 1688, 1066}, /* 07 (1280x1024x60Hz
> -					     *    w/o Scaling)
> -					     */
> -	{1,   1,   1688, 1066, 1688, 1066}  /* 08 (1400x1050x60Hz) */
> -};
> -
> -static const struct SiS_LCDData XGI_ExtLCD1600x1200Data[] = {
> -	{4,  1,  1620, 420,  2160, 1250}, /* 00 (320x200,320x400,
> -					   *     640x200,640x400)
> -					   */
> -	{27, 7,  1920, 375,  2160, 1250}, /* 01 (320x350,640x350) */
> -	{4,  1,  1620, 420,  2160, 1250}, /* 02 (360x400,720x400)*/
> -	{27, 7,  1920, 375,  2160, 1250}, /* 03 (720x350) */
> -	{27, 4,  800,  500,  2160, 1250}, /* 04 (640x480x60Hz) */
> -	{4,  1,  1080, 625,  2160, 1250}, /* 05 (800x600x60Hz) */
> -	{5,  2,  1350, 800,  2160, 1250}, /* 06 (1024x768x60Hz) */
> -	{27, 16, 1500, 1064, 2160, 1250}, /* 07 (1280x1024x60Hz) */
> -	{9,  7,  1920, 1106, 2160, 1250}, /* 08 (1400x1050x60Hz) */
> -	{1,  1,  2160, 1250, 2160, 1250}  /* 09 (1600x1200x60Hz) ;302lv */
> -};
> -
> -static const struct SiS_LCDData XGI_StLCD1600x1200Data[] = {
> -	{27,  4,  800,  500,  2160, 1250}, /* 00 (320x200,320x400,
> -					    *     640x200,640x400)
> -					    */
> -	{27,  4,  800,  500,  2160, 1250}, /* 01 (320x350,640x350) */
> -	{27,  4,  800,  500,  2160, 1250}, /* 02 (360x400,720x400) */
> -	{27,  4,  800,  500,  2160, 1250}, /* 03 (720x350) */
> -	{27,  4,  800,  500,  2160, 1250}, /* 04 (320x240,640x480) */
> -	{4,   1,  1080, 625,  2160, 1250}, /* 05 (400x300,800x600) */
> -	{5,   2,  1350, 800,  2160, 1250}, /* 06 (512x384,1024x768) */
> -	{135, 88, 1600, 1100, 2160, 1250}, /* 07 (1280x1024) */
> -	{1,   1,  1800, 1500, 2160, 1250}, /* 08 (1400x1050) */
> -	{1,   1,  2160, 1250, 2160, 1250}  /* 09 (1600x1200) */
> -};
> -
> -#define XGI_CetLCD1400x1050Data XGI_CetLCD1280x1024Data
> -
> -static const struct SiS_LCDData XGI_NoScalingData[] = {
> -	{1, 1, 800,  449,  800,  449},
> -	{1, 1, 800,  449,  800,  449},
> -	{1, 1, 900,  449,  900,  449},
> -	{1, 1, 900,  449,  900,  449},
> -	{1, 1, 800,  525,  800,  525},
> -	{1, 1, 1056, 628,  1056, 628},
> -	{1, 1, 1344, 806,  1344, 806},
> -	{1, 1, 1688, 1066, 1688, 1066}
> -};
> -
> -static const struct SiS_LCDData XGI_ExtLCD1024x768x75Data[] = {
> -	{42, 25, 1536, 419, 1344, 806}, /* ; 00 (320x200,320x400,
> -					 *       640x200,640x400)
> -					 */
> -	{48, 25, 1536, 369, 1344, 806}, /* ; 01 (320x350,640x350) */
> -	{42, 25, 1536, 419, 1344, 806}, /* ; 02 (360x400,720x400) */
> -	{48, 25, 1536, 369, 1344, 806}, /* ; 03 (720x350) */
> -	{8,  5,  1312, 500, 1312, 800}, /* ; 04 (640x480x75Hz) */
> -	{41, 25, 1024, 625, 1312, 800}, /* ; 05 (800x600x75Hz) */
> -	{1,  1,  1312, 800, 1312, 800}  /* ; 06 (1024x768x75Hz) */
> -};
> -
> -static const struct SiS_LCDData XGI_CetLCD1024x768x75Data[] = {
> -	{1, 1, 1312, 800, 1312, 800}, /* ; 00 (320x200,320x400,
> -				       *       640x200,640x400)
> -				       */
> -	{1, 1, 1312, 800, 1312, 800}, /* ; 01 (320x350,640x350) */
> -	{1, 1, 1312, 800, 1312, 800}, /* ; 02 (360x400,720x400) */
> -	{1, 1, 1312, 800, 1312, 800}, /* ; 03 (720x350) */
> -	{1, 1, 1312, 800, 1312, 800}, /* ; 04 (640x480x75Hz) */
> -	{1, 1, 1312, 800, 1312, 800}, /* ; 05 (800x600x75Hz) */
> -	{1, 1, 1312, 800, 1312, 800}  /* ; 06 (1024x768x75Hz) */
> -};
> -
> -static const struct SiS_LCDData xgifb_lcd_1280x1024x75[] = {
> -	{211, 60,  1024, 501,  1688, 1066}, /* ; 00 (320x200,320x400,
> -					     *       640x200,640x400)
> -					     */
> -	{211, 60,  1024, 508,  1688, 1066}, /* ; 01 (320x350,640x350) */
> -	{211, 60,  1024, 501,  1688, 1066}, /* ; 02 (360x400,720x400) */
> -	{211, 60,  1024, 508,  1688, 1066}, /* ; 03 (720x350) */
> -	{211, 45,  768,  498,  1688, 1066}, /* ; 04 (640x480x75Hz) */
> -	{211, 75,  1024, 625,  1688, 1066}, /* ; 05 (800x600x75Hz) */
> -	{211, 120, 1280, 798,  1688, 1066}, /* ; 06 (1024x768x75Hz) */
> -	{1,   1,   1688, 1066, 1688, 1066}  /* ; 07 (1280x1024x75Hz) */
> -};
> -
> -#define XGI_CetLCD1280x1024x75Data XGI_CetLCD1280x1024Data
> -
> -static const struct SiS_LCDData XGI_NoScalingDatax75[] = {
> -	{1, 1, 800,  449,  800,  449},  /* ; 00 (320x200, 320x400,
> -					 *       640x200, 640x400)
> -					 */
> -	{1, 1, 800,  449,  800,  449},  /* ; 01 (320x350, 640x350) */
> -	{1, 1, 900,  449,  900,  449},  /* ; 02 (360x400, 720x400) */
> -	{1, 1, 900,  449,  900,  449},  /* ; 03 (720x350) */
> -	{1, 1, 840,  500,  840,  500},  /* ; 04 (640x480x75Hz) */
> -	{1, 1, 1056, 625,  1056, 625},  /* ; 05 (800x600x75Hz) */
> -	{1, 1, 1312, 800,  1312, 800},  /* ; 06 (1024x768x75Hz) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* ; 07 (1280x1024x75Hz) */
> -	{1, 1, 1688, 1066, 1688, 1066}, /* ; 08 (1400x1050x75Hz)*/
> -	{1, 1, 2160, 1250, 2160, 1250}, /* ; 09 (1600x1200x75Hz) */
> -	{1, 1, 1688, 806,  1688, 806}   /* ; 0A (1280x768x75Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_ExtLCDDes1024x768Data[] = {
> -	{9, 1057, 0,   771}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1057, 0,   771}, /* ; 01 (320x350,640x350) */
> -	{9, 1057, 0,   771}, /* ; 02 (360x400,720x400) */
> -	{9, 1057, 0,   771}, /* ; 03 (720x350) */
> -	{9, 1057, 0,   771}, /* ; 04 (640x480x60Hz) */
> -	{9, 1057, 0,   771}, /* ; 05 (800x600x60Hz) */
> -	{9, 1057, 805, 770}  /* ; 06 (1024x768x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_StLCDDes1024x768Data[] = {
> -	{9, 1057, 737, 703}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1057, 686, 651}, /* ; 01 (320x350,640x350) */
> -	{9, 1057, 737, 703}, /* ; 02 (360x400,720x400) */
> -	{9, 1057, 686, 651}, /* ; 03 (720x350) */
> -	{9, 1057, 776, 741}, /* ; 04 (640x480x60Hz) */
> -	{9, 1057, 0,   771}, /* ; 05 (800x600x60Hz) */
> -	{9, 1057, 805, 770}  /* ; 06 (1024x768x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_CetLCDDes1024x768Data[] = {
> -	{1152, 856,  622, 587}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1152, 856,  597, 562}, /* ; 01 (320x350,640x350) */
> -	{1152, 856,  622, 587}, /* ; 02 (360x400,720x400) */
> -	{1152, 856,  597, 562}, /* ; 03 (720x350) */
> -	{1152, 856,  662, 627}, /* ; 04 (640x480x60Hz) */
> -	{1232, 936,  722, 687}, /* ; 05 (800x600x60Hz) */
> -	{0,    1048, 805, 770}  /* ; 06 (1024x768x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_ExtLCDDLDes1280x1024Data[] = {
> -	{18, 1346, 981,  940},  /* 00 (320x200,320x400,640x200,640x400) */
> -	{18, 1346, 926,  865},  /* 01 (320x350,640x350) */
> -	{18, 1346, 981,  940},  /* 02 (360x400,720x400) */
> -	{18, 1346, 926,  865},  /* 03 (720x350) */
> -	{18, 1346, 0,    1025}, /* 04 (640x480x60Hz) */
> -	{18, 1346, 0,    1025}, /* 05 (800x600x60Hz) */
> -	{18, 1346, 1065, 1024}, /* 06 (1024x768x60Hz) */
> -	{18, 1346, 1065, 1024}  /* 07 (1280x1024x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_StLCDDLDes1280x1024Data[] = {
> -	{18, 1346, 970,  907},  /* 00 (320x200,320x400,640x200,640x400) */
> -	{18, 1346, 917,  854},  /* 01 (320x350,640x350) */
> -	{18, 1346, 970,  907},  /* 02 (360x400,720x400) */
> -	{18, 1346, 917,  854},  /* 03 (720x350) */
> -	{18, 1346, 0,    1025}, /* 04 (640x480x60Hz) */
> -	{18, 1346, 0,    1025}, /* 05 (800x600x60Hz) */
> -	{18, 1346, 1065, 1024}, /* 06 (1024x768x60Hz) */
> -	{18, 1346, 1065, 1024}  /* 07 (1280x1024x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_CetLCDDLDes1280x1024Data[] = {
> -	{1368, 1008, 752,  711}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{1368, 1008, 729,  688}, /* 01 (320x350,640x350) */
> -	{1368, 1008, 752,  711}, /* 02 (360x400,720x400) */
> -	{1368, 1008, 729,  688}, /* 03 (720x350) */
> -	{1368, 1008, 794,  753}, /* 04 (640x480x60Hz) */
> -	{1448, 1068, 854,  813}, /* 05 (800x600x60Hz) */
> -	{1560, 1200, 938,  897}, /* 06 (1024x768x60Hz) */
> -	{18,   1346, 1065, 1024} /* 07 (1280x1024x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_ExtLCDDes1280x1024Data[] = {
> -	{9, 1337, 981,  940},  /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1337, 926,  884},  /* ; 01 (320x350,640x350) alan, 2003/09/30 */
> -	{9, 1337, 981,  940},  /* ; 02 (360x400,720x400) */
> -	{9, 1337, 926,  884},  /* ; 03 (720x350) alan, 2003/09/30 */
> -	{9, 1337, 0,    1025}, /* ; 04 (640x480x60Hz) */
> -	{9, 1337, 0,    1025}, /* ; 05 (800x600x60Hz) */
> -	{9, 1337, 1065, 1024}, /* ; 06 (1024x768x60Hz) */
> -	{9, 1337, 1065, 1024}  /* ; 07 (1280x1024x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_StLCDDes1280x1024Data[] = {
> -	{9, 1337, 970,  907},  /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1337, 917,  854},  /* ; 01 (320x350,640x350) */
> -	{9, 1337, 970,  907},  /* ; 02 (360x400,720x400) */
> -	{9, 1337, 917,  854},  /* ; 03 (720x350) */
> -	{9, 1337, 0,    1025}, /* ; 04 (640x480x60Hz) */
> -	{9, 1337, 0,    1025}, /* ; 05 (800x600x60Hz) */
> -	{9, 1337, 1065, 1024}, /* ; 06 (1024x768x60Hz) */
> -	{9, 1337, 1065, 1024}  /* ; 07 (1280x1024x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_CetLCDDes1280x1024Data[] = {
> -	{1368, 1008, 752,  711}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{1368, 1008, 729,  688}, /* 01 (320x350,640x350) */
> -	{1368, 1008, 752,  711}, /* 02 (360x400,720x400) */
> -	{1368, 1008, 729,  688}, /* 03 (720x350) */
> -	{1368, 1008, 794,  753}, /* 04 (640x480x60Hz) */
> -	{1448, 1068, 854,  813}, /* 05 (800x600x60Hz) */
> -	{1560, 1200, 938,  897}, /* 06 (1024x768x60Hz) */
> -	{9,    1337, 1065, 1024} /* 07 (1280x1024x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct xgifb_lcddldes_1400x1050[] = {
> -	{18,   1464, 0,    1051}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{18,   1464, 0,    1051}, /* 01 (320x350,640x350) */
> -	{18,   1464, 0,    1051}, /* 02 (360x400,720x400) */
> -	{18,   1464, 0,    1051}, /* 03 (720x350) */
> -	{18,   1464, 0,    1051}, /* 04 (640x480x60Hz) */
> -	{18,   1464, 0,    1051}, /* 05 (800x600x60Hz) */
> -	{18,   1464, 0,    1051}, /* 06 (1024x768x60Hz) */
> -	{1646, 1406, 1053, 1038}, /* 07 (1280x1024x60Hz) */
> -	{18,   1464, 0,    1051}  /* 08 (1400x1050x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct xgifb_lcddes_1400x1050[] = {
> -	{9,    1455, 0,    1051}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{9,    1455, 0,    1051}, /* 01 (320x350,640x350) */
> -	{9,    1455, 0,    1051}, /* 02 (360x400,720x400) */
> -	{9,    1455, 0,    1051}, /* 03 (720x350) */
> -	{9,    1455, 0,    1051}, /* 04 (640x480x60Hz) */
> -	{9,    1455, 0,    1051}, /* 05 (800x600x60Hz) */
> -	{9,    1455, 0,    1051}, /* 06 (1024x768x60Hz) */
> -	{1637, 1397, 1053, 1038}, /* 07 (1280x1024x60Hz) */
> -	{9,    1455, 0,    1051}  /* 08 (1400x1050x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_CetLCDDes1400x1050Data[] = {
> -	{1308, 1068, 781,  766},  /* 00 (320x200,320x400,640x200,640x400) */
> -	{1308, 1068, 781,  766},  /* 01 (320x350,640x350) */
> -	{1308, 1068, 781,  766},  /* 02 (360x400,720x400) */
> -	{1308, 1068, 781,  766},  /* 03 (720x350) */
> -	{1308, 1068, 781,  766},  /* 04 (640x480x60Hz) */
> -	{1388, 1148, 841,  826},  /* 05 (800x600x60Hz) */
> -	{1490, 1250, 925,  910},  /* 06 (1024x768x60Hz) */
> -	{1646, 1406, 1053, 1038}, /* 07 (1280x1024x60Hz) */
> -	{18,   1464, 0,    1051}  /* 08 (1400x1050x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_CetLCDDes1400x1050Data2[] = {
> -	{0, 1448, 0, 1051}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{0, 1448, 0, 1051}, /* 01 (320x350,640x350) */
> -	{0, 1448, 0, 1051}, /* 02 (360x400,720x400) */
> -	{0, 1448, 0, 1051}, /* 03 (720x350) */
> -	{0, 1448, 0, 1051}  /* 04 (640x480x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_ExtLCDDLDes1600x1200Data[] = {
> -	{18, 1682, 0, 1201}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{18, 1682, 0, 1201}, /* 01 (320x350,640x350) */
> -	{18, 1682, 0, 1201}, /* 02 (360x400,720x400) */
> -	{18, 1682, 0, 1201}, /* 03 (720x350) */
> -	{18, 1682, 0, 1201}, /* 04 (640x480x60Hz) */
> -	{18, 1682, 0, 1201}, /* 05 (800x600x60Hz) */
> -	{18, 1682, 0, 1201}, /* 06 (1024x768x60Hz) */
> -	{18, 1682, 0, 1201}, /* 07 (1280x1024x60Hz) */
> -	{18, 1682, 0, 1201}, /* 08 (1400x1050x60Hz) */
> -	{18, 1682, 0, 1201}  /* 09 (1600x1200x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_StLCDDLDes1600x1200Data[] = {
> -	{18, 1682, 1150, 1101}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{18, 1682, 1083, 1034}, /* 01 (320x350,640x350) */
> -	{18, 1682, 1150, 1101}, /* 02 (360x400,720x400) */
> -	{18, 1682, 1083, 1034}, /* 03 (720x350) */
> -	{18, 1682, 0,    1201}, /* 04 (640x480x60Hz) */
> -	{18, 1682, 0,    1201}, /* 05 (800x600x60Hz) */
> -	{18, 1682, 0,    1201}, /* 06 (1024x768x60Hz) */
> -	{18, 1682, 1232, 1183}, /* 07 (1280x1024x60Hz) */
> -	{18, 1682, 0,    1201}, /* 08 (1400x1050x60Hz) */
> -	{18, 1682, 0,    1201} /* 09 (1600x1200x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_ExtLCDDes1600x1200Data[] = {
> -	{9, 1673, 0, 1201}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1673, 0, 1201}, /* 01 (320x350,640x350) */
> -	{9, 1673, 0, 1201}, /* 02 (360x400,720x400) */
> -	{9, 1673, 0, 1201}, /* 03 (720x350) */
> -	{9, 1673, 0, 1201}, /* 04 (640x480x60Hz) */
> -	{9, 1673, 0, 1201}, /* 05 (800x600x60Hz) */
> -	{9, 1673, 0, 1201}, /* 06 (1024x768x60Hz) */
> -	{9, 1673, 0, 1201}, /* 07 (1280x1024x60Hz) */
> -	{9, 1673, 0, 1201}, /* 08 (1400x1050x60Hz) */
> -	{9, 1673, 0, 1201}  /* 09 (1600x1200x60Hz) */
> -};
> -
> -static const struct XGI_LCDDesStruct XGI_StLCDDes1600x1200Data[] = {
> -	{9, 1673, 1150, 1101}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1673, 1083, 1034}, /* 01 (320x350,640x350) */
> -	{9, 1673, 1150, 1101}, /* 02 (360x400,720x400) */
> -	{9, 1673, 1083, 1034}, /* 03 (720x350) */
> -	{9, 1673, 0,    1201}, /* 04 (640x480x60Hz) */
> -	{9, 1673, 0,    1201}, /* 05 (800x600x60Hz) */
> -	{9, 1673, 0,    1201}, /* 06 (1024x768x60Hz) */
> -	{9, 1673, 1232, 1183}, /* 07 (1280x1024x60Hz) */
> -	{9, 1673, 0,    1201}, /* 08 (1400x1050x60Hz) */
> -	{9, 1673, 0,    1201}  /* 09 (1600x1200x60Hz) */
> -};
> -
> -static const struct XGI330_LCDDataDesStruct2  XGI_NoScalingDesData[] = {
> -	{9, 657,  448, 405,  96,   2}, /* 00 (320x200,320x400,
> -					*     640x200,640x400)
> -					*/
> -	{9, 657,  448, 355,  96,   2}, /* 01 (320x350,640x350) */
> -	{9, 657,  448, 405,  96,   2}, /* 02 (360x400,720x400) */
> -	{9, 657,  448, 355,  96,   2}, /* 03 (720x350) */
> -	{9, 657,  1,   483,  96,   2}, /* 04 (640x480x60Hz) */
> -	{9, 849,  627, 600,  128,  4}, /* 05 (800x600x60Hz) */
> -	{9, 1057, 805, 770,  0136, 6}, /* 06 (1024x768x60Hz) */
> -	{9, 1337, 0,   1025, 112,  3}, /* 07 (1280x1024x60Hz) */
> -	{9, 1457, 0,   1051, 112,  3}, /* 08 (1400x1050x60Hz)*/
> -	{9, 1673, 0,   1201, 192,  3}, /* 09 (1600x1200x60Hz) */
> -	{9, 1337, 0,   771,  112,  6}  /* 0A (1280x768x60Hz) */
> -};
> -
> -/* ;;1024x768x75Hz */
> -static const struct XGI_LCDDesStruct xgifb_lcddes_1024x768x75[] = {
> -	{9, 1049, 0, 769}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1049, 0, 769}, /* ; 01 (320x350,640x350) */
> -	{9, 1049, 0, 769}, /* ; 02 (360x400,720x400) */
> -	{9, 1049, 0, 769}, /* ; 03 (720x350) */
> -	{9, 1049, 0, 769}, /* ; 04 (640x480x75Hz) */
> -	{9, 1049, 0, 769}, /* ; 05 (800x600x75Hz) */
> -	{9, 1049, 0, 769}  /* ; 06 (1024x768x75Hz) */
> -};
> -
> -/* ;;1024x768x75Hz */
> -static const struct XGI_LCDDesStruct XGI_CetLCDDes1024x768x75Data[] = {
> -	{1152, 856,  622, 587}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1152, 856,  597, 562}, /* ; 01 (320x350,640x350) */
> -	{1192, 896,  622, 587}, /* ; 02 (360x400,720x400) */
> -	{1192, 896,  597, 562}, /* ; 03 (720x350) */
> -	{1129, 857,  656, 625}, /* ; 04 (640x480x75Hz) */
> -	{1209, 937,  716, 685}, /* ; 05 (800x600x75Hz) */
> -	{9,    1049, 0,   769}	/* ; 06 (1024x768x75Hz) */
> -};
> -
> -/* ;;1280x1024x75Hz */
> -static const struct XGI_LCDDesStruct xgifb_lcddldes_1280x1024x75[] = {
> -	{18, 1314, 0, 1025}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{18, 1314, 0, 1025}, /* ; 01 (320x350,640x350) */
> -	{18, 1314, 0, 1025}, /* ; 02 (360x400,720x400) */
> -	{18, 1314, 0, 1025}, /* ; 03 (720x350) */
> -	{18, 1314, 0, 1025}, /* ; 04 (640x480x60Hz) */
> -	{18, 1314, 0, 1025}, /* ; 05 (800x600x60Hz) */
> -	{18, 1314, 0, 1025}, /* ; 06 (1024x768x60Hz) */
> -	{18, 1314, 0, 1025}  /* ; 07 (1280x1024x60Hz) */
> -};
> -
> -/* 1280x1024x75Hz */
> -static const struct XGI_LCDDesStruct XGI_CetLCDDLDes1280x1024x75Data[] = {
> -	{1368, 1008, 752, 711}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1368, 1008, 729, 688}, /* ; 01 (320x350,640x350) */
> -	{1408, 1048, 752, 711}, /* ; 02 (360x400,720x400) */
> -	{1408, 1048, 729, 688}, /* ; 03 (720x350) */
> -	{1377, 985,  794, 753}, /* ; 04 (640x480x75Hz) */
> -	{1457, 1065, 854, 813}, /* ; 05 (800x600x75Hz) */
> -	{1569, 1177, 938, 897}, /* ; 06 (1024x768x75Hz) */
> -	{18,   1314, 0,   1025} /* ; 07 (1280x1024x75Hz) */
> -};
> -
> -/* ;;1280x1024x75Hz */
> -static const struct XGI_LCDDesStruct xgifb_lcddes_1280x1024x75[] = {
> -	{9, 1305, 0, 1025}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{9, 1305, 0, 1025}, /* ; 01 (320x350,640x350) */
> -	{9, 1305, 0, 1025}, /* ; 02 (360x400,720x400) */
> -	{9, 1305, 0, 1025}, /* ; 03 (720x350) */
> -	{9, 1305, 0, 1025}, /* ; 04 (640x480x60Hz) */
> -	{9, 1305, 0, 1025}, /* ; 05 (800x600x60Hz) */
> -	{9, 1305, 0, 1025}, /* ; 06 (1024x768x60Hz) */
> -	{9, 1305, 0, 1025}  /* ; 07 (1280x1024x60Hz) */
> -};
> -
> -/* 1280x1024x75Hz */
> -static const struct XGI_LCDDesStruct XGI_CetLCDDes1280x1024x75Data[] = {
> -	{1368, 1008, 752, 711}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1368, 1008, 729, 688}, /* ; 01 (320x350,640x350) */
> -	{1408, 1048, 752, 711}, /* ; 02 (360x400,720x400) */
> -	{1408, 1048, 729, 688}, /* ; 03 (720x350) */
> -	{1377, 985,  794, 753}, /* ; 04 (640x480x75Hz) */
> -	{1457, 1065, 854, 813}, /* ; 05 (800x600x75Hz) */
> -	{1569, 1177, 938, 897}, /* ; 06 (1024x768x75Hz) */
> -	{9,    1305, 0,   1025} /* ; 07 (1280x1024x75Hz) */
> -};
> -
> -/* Scaling LCD 75Hz */
> -static const struct XGI330_LCDDataDesStruct2 XGI_NoScalingDesDatax75[] =  {
> -	{9, 657,  448, 405,  96,  2}, /* ; 00 (320x200,320x400,
> -				       *       640x200,640x400)
> -				       */
> -	{9, 657,  448, 355,  96,  2}, /* ; 01 (320x350,640x350) */
> -	{9, 738,  448, 405,  108, 2}, /* ; 02 (360x400,720x400) */
> -	{9, 738,  448, 355,  108, 2}, /* ; 03 (720x350) */
> -	{9, 665,  0,   481,  64,  3}, /* ; 04 (640x480x75Hz) */
> -	{9, 825,  0,   601,  80,  3}, /* ; 05 (800x600x75Hz) */
> -	{9, 1049, 0,   769,  96,  3}, /* ; 06 (1024x768x75Hz) */
> -	{9, 1305, 0,   1025, 144, 3}, /* ; 07 (1280x1024x75Hz) */
> -	{9, 1457, 0,   1051, 112, 3}, /* ; 08 (1400x1050x60Hz)*/
> -	{9, 1673, 0,   1201, 192, 3}, /* ; 09 (1600x1200x75Hz) */
> -	{9, 1337, 0,   771,  112, 6}  /* ; 0A (1280x768x60Hz) */
> -};
> -
> -static const struct SiS_TVData XGI_StPALData[] = {
> -	{1, 1, 864, 525, 1270, 400, 100, 0, 760},
> -	{1, 1, 864, 525, 1270, 350, 100, 0, 760},
> -	{1, 1, 864, 525, 1270, 400,   0, 0, 720},
> -	{1, 1, 864, 525, 1270, 350,   0, 0, 720},
> -	{1, 1, 864, 525, 1270, 480,  50, 0, 760},
> -	{1, 1, 864, 525, 1270, 600,  50, 0,   0}
> -};
> -
> -static const struct SiS_TVData XGI_ExtPALData[] = {
> -	{2,  1, 1080, 463, 1270, 500,  50, 0,  50},
> -	{15, 7, 1152, 413, 1270, 500,  50, 0,  50},
> -	{2,  1, 1080, 463, 1270, 500,  50, 0,  50},
> -	{15, 7, 1152, 413, 1270, 500,  50, 0,  50},
> -	{2,  1,  900, 543, 1270, 500,   0, 0,  50},
> -	{4,  3, 1080, 663, 1270, 500, 438, 0, 438},
> -	{1,  1, 1125, 831, 1270, 500, 686, 0, 686}, /*301b*/
> -	{3,  2, 1080, 619, 1270, 540, 438, 0, 438}
> -};
> -
> -static const struct SiS_TVData XGI_StNTSCData[] = {
> -	{1, 1, 858, 525, 1270, 400, 50, 0, 760},
> -	{1, 1, 858, 525, 1270, 350, 50, 0, 640},
> -	{1, 1, 858, 525, 1270, 400,  0, 0, 720},
> -	{1, 1, 858, 525, 1270, 350,  0, 0, 720},
> -	{1, 1, 858, 525, 1270, 480,  0, 0, 760}
> -};
> -
> -static const struct SiS_TVData XGI_ExtNTSCData[] = {
> -	{9,     5, 1001, 453, 1270, 420, 171, 0, 171},
> -	{12,    5,  858, 403, 1270, 420, 171, 0, 171},
> -	{9,     5, 1001, 453, 1270, 420, 171, 0, 171},
> -	{12,    5,  858, 403, 1270, 420, 171, 0, 171},
> -	{143,  80,  836, 523, 1270, 420, 224, 0,   0},
> -	{143, 120, 1008, 643, 1270, 420,   0, 1,   0},
> -	{1,     1, 1120, 821, 1516, 420,   0, 1,   0}, /*301b*/
> -	{2,     1,  858, 503, 1584, 480,   0, 1,   0},
> -	{3,     2, 1001, 533, 1270, 420,   0, 0,   0}
> -};
> -
> -static const struct SiS_TVData XGI_St1HiTVData[] = {
> -	{1, 1, 892,  563, 690,  800, 0,     0, 0}, /* 00 (320x200,320x400,
> -						    *     640x200,640x400)
> -						    */
> -	{1, 1, 892,  563, 690,  700, 0,     0, 0}, /* 01 (320x350,640x350) */
> -	{1, 1, 1000, 563, 785,  800, 0,     0, 0}, /* 02 (360x400,720x400) */
> -	{1, 1, 1000, 563, 785,  700, 0,     0, 0}, /* 03 (720x350) */
> -	{1, 1, 892,  563, 690,  960, 0,     0, 0}, /* 04 (320x240,640x480) */
> -	{8, 5, 1050, 683, 1648, 960, 0x150, 1, 0}  /* 05 (400x300,800x600) */
> -};
> -
> -static const struct SiS_TVData XGI_St2HiTVData[] = {
> -	{3, 1, 840,  483, 1648, 960, 0x032, 0, 0}, /* 00 (320x200,320x400,
> -						    *     640x200,640x400)
> -						    */
> -	{1, 1, 892,  563, 690,  700, 0,     0, 0}, /* 01 (320x350,640x350) */
> -	{3, 1, 840,  483, 1648, 960, 0x032, 0, 0}, /* 02 (360x400,720x400) */
> -	{1, 1, 1000, 563, 785,  700, 0,     0, 0}, /* 03 (720x350) */
> -	{5, 2, 840,  563, 1648, 960, 0x08D, 1, 0}, /* 04 (320x240,640x480) */
> -	{8, 5, 1050, 683, 1648, 960, 0x17C, 1, 0}  /* 05 (400x300,800x600) */
> -};
> -
> -static const struct SiS_TVData XGI_ExtHiTVData[] = {
> -	{6,  1,  840,  563,  1632, 960, 0,     0, 0}, /* 00 (320x200,320x400,
> -						       *     640x200,640x400)
> -						       */
> -	{3,  1,  960,  563,  1632, 960, 0,     0, 0}, /* 01 (320x350,640x350) */
> -	{3,  1,  840,  483,  1632, 960, 0,     0, 0}, /* 02 (360x400,720x400) */
> -	{3,  1,  960,  563,  1632, 960, 0,     0, 0}, /* 03 (720x350) */
> -	{5,  1,  840,  563,  1648, 960, 0x166, 1, 0}, /* 04 (320x240,640x480) */
> -	{16, 5,  1050, 683,  1648, 960, 0x143, 1, 0}, /* 05 (400x300,800x600) */
> -	{25, 12, 1260, 851,  1648, 960, 0x032, 0, 0}, /* 06 (512x384,1024x768)*/
> -	{5,  4,  1575, 1124, 1648, 960, 0x128, 0, 0}, /* 07 (1280x1024) */
> -	{4,  1,  1050, 563,  1548, 960, 0x143, 1, 0}, /* 08 (800x480) */
> -	{5,  2,  1400, 659,  1648, 960, 0x032, 0, 0}, /* 09 (1024x576) */
> -	{8,  5,  1750, 803,  1648, 960, 0x128, 0, 0}  /* 0A (1280x720) */
> -};
> -
> -static const struct SiS_TVData XGI_ExtYPbPr525iData[] = {
> -	{  9,  5,  1001, 453, 1270, 420, 171,   0, 171},
> -	{ 12,  5,   858, 403, 1270, 420, 171,   0, 171},
> -	{  9,  5,  1001, 453, 1270, 420, 171,   0, 171},
> -	{ 12,  5,   858, 403, 1270, 420, 171,   0, 171},
> -	{143,  80,  836, 523, 1250, 420, 224,   0,   0},
> -	{143, 120, 1008, 643, 1250, 420,   0,   1,   0},
> -	{ 1,    1, 1120, 821, 1516, 420,   0,   1,   0}, /*301b*/
> -	{  2,   1,  858, 503, 1584, 480,   0,   1,   0},
> -	{  3,   2, 1001, 533, 1250, 420,   0,   0,   0}
> -};
> -
> -static const struct SiS_TVData XGI_StYPbPr525iData[] = {
> -	{1, 1, 858, 525, 1270, 400, 50, 0, 760},
> -	{1, 1, 858, 525, 1270, 350, 50, 0, 640},
> -	{1, 1, 858, 525, 1270, 400,  0, 0, 720},
> -	{1, 1, 858, 525, 1270, 350,  0, 0, 720},
> -	{1, 1, 858, 525, 1270, 480,  0, 0, 760},
> -};
> -
> -static const struct SiS_TVData XGI_ExtYPbPr525pData[] = {
> -	{  9,   5,  1001, 453, 1270, 420, 171, 0, 171},
> -	{ 12,   5,   858, 403, 1270, 420, 171, 0, 171},
> -	{  9,   5,  1001, 453, 1270, 420, 171, 0, 171},
> -	{ 12,   5,   858, 403, 1270, 420, 171, 0, 171},
> -	{143,  80,   836, 523, 1270, 420, 224, 0,   0},
> -	{143, 120,  1008, 643, 1270, 420,   0, 1,   0},
> -	{ 1,    1,  1120, 821, 1516, 420,   0, 1,   0}, /*301b*/
> -	{  2,   1,   858, 503, 1584, 480,   0, 1,   0},
> -	{  3,   2,  1001, 533, 1270, 420,   0, 0,   0}
> -};
> -
> -static const struct SiS_TVData XGI_StYPbPr525pData[] = {
> -	{1, 1, 1716, 525, 1270, 400, 50, 0, 760},
> -	{1, 1, 1716, 525, 1270, 350, 50, 0, 640},
> -	{1, 1, 1716, 525, 1270, 400,  0, 0, 720},
> -	{1, 1, 1716, 525, 1270, 350,  0, 0, 720},
> -	{1, 1, 1716, 525, 1270, 480,  0, 0, 760},
> -};
> -
> -static const struct SiS_TVData XGI_ExtYPbPr750pData[] = {
> -	{ 3, 1,  935, 470, 1130, 680,  50, 0, 0}, /* 00 (320x200,320x400,
> -						   *     640x200,640x400)
> -						   */
> -	{24, 7,  935, 420, 1130, 680,  50, 0, 0}, /* 01 (320x350,640x350) */
> -	{ 3, 1,  935, 470, 1130, 680,  50, 0, 0}, /* 02 (360x400,720x400) */
> -	{24, 7,  935, 420, 1130, 680,  50, 0, 0}, /* 03 (720x350) */
> -	{ 2, 1, 1100, 590, 1130, 640,  50, 0, 0}, /* 04 (320x240,640x480) */
> -	{ 3, 2, 1210, 690, 1130, 660,  50, 0, 0}, /* 05 (400x300,800x600) */
> -	{ 1, 1, 1375, 878, 1130, 640, 638, 0, 0}, /* 06 (1024x768) */
> -	{ 2, 1,  858, 503, 1130, 480,   0, 1, 0}, /* 07 (720x480) */
> -	{ 5, 4, 1815, 570, 1130, 660,  50, 0, 0},
> -	{ 5, 3, 1100, 686, 1130, 640,  50, 1, 0},
> -	{10, 9, 1320, 830, 1130, 640,  50, 0, 0}
> -};
> -
> -static const struct SiS_TVData XGI_StYPbPr750pData[] = {
> -	{1, 1, 1650, 750, 1280, 400, 50, 0, 760},
> -	{1, 1, 1650, 750, 1280, 350, 50, 0, 640},
> -	{1, 1, 1650, 750, 1280, 400,  0, 0, 720},
> -	{1, 1, 1650, 750, 1280, 350,  0, 0, 720},
> -	{1, 1, 1650, 750, 1280, 480,  0, 0, 760},
> -};
> -
> -static const unsigned char XGI330_NTSCTiming[] = {
> -	0x17, 0x1d, 0x03, 0x09, 0x05, 0x06, 0x0c, 0x0c,
> -	0x94, 0x49, 0x01, 0x0a, 0x06, 0x0d, 0x04, 0x0a,
> -	0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x1b,
> -	0x0c, 0x50, 0x00, 0x97, 0x00, 0xda, 0x4a, 0x17,
> -	0x7d, 0x05, 0x4b, 0x00, 0x00, 0xe2, 0x00, 0x02,
> -	0x03, 0x0a, 0x65, 0x9d, 0x08, 0x92, 0x8f, 0x40,
> -	0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x50,
> -	0x00, 0x40, 0x44, 0x00, 0xdb, 0x02, 0x3b, 0x00
> -};
> -
> -static const unsigned char XGI330_PALTiming[] = {
> -	0x21, 0x5A, 0x35, 0x6e, 0x04, 0x38, 0x3d, 0x70,
> -	0x94, 0x49, 0x01, 0x12, 0x06, 0x3e, 0x35, 0x6d,
> -	0x06, 0x14, 0x3e, 0x35, 0x6d, 0x00, 0x45, 0x2b,
> -	0x70, 0x50, 0x00, 0x9b, 0x00, 0xd9, 0x5d, 0x17,
> -	0x7d, 0x05, 0x45, 0x00, 0x00, 0xe8, 0x00, 0x02,
> -	0x0d, 0x00, 0x68, 0xb0, 0x0b, 0x92, 0x8f, 0x40,
> -	0x60, 0x80, 0x14, 0x90, 0x8c, 0x60, 0x14, 0x63,
> -	0x00, 0x40, 0x3e, 0x00, 0xe1, 0x02, 0x28, 0x00
> -};
> -
> -static const unsigned char XGI330_HiTVExtTiming[] = {
> -	0x2D, 0x60, 0x2C, 0x5F, 0x08, 0x31, 0x3A, 0x64,
> -	0x28, 0x02, 0x01, 0x3D, 0x06, 0x3E, 0x35, 0x6D,
> -	0x06, 0x14, 0x3E, 0x35, 0x6D, 0x00, 0xC5, 0x3F,
> -	0x64, 0x90, 0x33, 0x8C, 0x18, 0x36, 0x3E, 0x13,
> -	0x2A, 0xDE, 0x2A, 0x44, 0x40, 0x2A, 0x44, 0x40,
> -	0x8E, 0x8E, 0x82, 0x07, 0x0B,
> -	0x92, 0x0F, 0x40, 0x60, 0x80, 0x14, 0x90, 0x8C,
> -	0x60, 0x14, 0x3D, 0x63, 0x4F,
> -	0x27, 0x00, 0xfc, 0xff, 0x6a, 0x00
> -};
> -
> -static const unsigned char XGI330_HiTVSt1Timing[] = {
> -	0x32, 0x65, 0x2C, 0x5F, 0x08, 0x31, 0x3A, 0x65,
> -	0x28, 0x02, 0x01, 0x3D, 0x06, 0x3E, 0x35, 0x6D,
> -	0x06, 0x14, 0x3E, 0x35, 0x6D, 0x00, 0xC5, 0x3F,
> -	0x65, 0x90, 0x7B, 0xA8, 0x03, 0xF0, 0x87, 0x03,
> -	0x11, 0x15, 0x11, 0xCF, 0x10, 0x11, 0xCF, 0x10,
> -	0x35, 0x35, 0x3B, 0x69, 0x1D,
> -	0x92, 0x0F, 0x40, 0x60, 0x80, 0x14, 0x90, 0x8C,
> -	0x60, 0x04, 0x86, 0xAF, 0x5D,
> -	0x0E, 0x00, 0xfc, 0xff, 0x2d, 0x00
> -};
> -
> -static const unsigned char XGI330_HiTVSt2Timing[] = {
> -	0x32, 0x65, 0x2C, 0x5F, 0x08, 0x31, 0x3A, 0x64,
> -	0x28, 0x02, 0x01, 0x3D, 0x06, 0x3E, 0x35, 0x6D,
> -	0x06, 0x14, 0x3E, 0x35, 0x6D, 0x00, 0xC5, 0x3F,
> -	0x64, 0x90, 0x33, 0x8C, 0x18, 0x36, 0x3E, 0x13,
> -	0x2A, 0xDE, 0x2A, 0x44, 0x40, 0x2A, 0x44, 0x40,
> -	0x8E, 0x8E, 0x82, 0x07, 0x0B,
> -	0x92, 0x0F, 0x40, 0x60, 0x80, 0x14, 0x90, 0x8C,
> -	0x60, 0x14, 0x3D, 0x63, 0x4F,
> -	0x27, 0x00, 0xFC, 0xff, 0x6a, 0x00
> -};
> -
> -static const unsigned char XGI330_HiTVTextTiming[] = {
> -	0x32, 0x65, 0x2C, 0x5F, 0x08, 0x31, 0x3A, 0x65,
> -	0x28, 0x02, 0x01, 0x3D, 0x06, 0x3E, 0x35, 0x6D,
> -	0x06, 0x14, 0x3E, 0x35, 0x6D, 0x00, 0xC5, 0x3F,
> -	0x65, 0x90, 0xE7, 0xBC, 0x03, 0x0C, 0x97, 0x03,
> -	0x14, 0x78, 0x14, 0x08, 0x20, 0x14, 0x08, 0x20,
> -	0xC8, 0xC8, 0x3B, 0xD2, 0x26,
> -	0x92, 0x0F, 0x40, 0x60, 0x80, 0x14, 0x90, 0x8C,
> -	0x60, 0x04, 0x96, 0x72, 0x5C,
> -	0x11, 0x00, 0xFC, 0xFF, 0x32, 0x00
> -};
> -
> -static const unsigned char XGI330_YPbPr750pTiming[] = {
> -	0x30, 0x1d, 0xe8, 0x09, 0x09, 0xed, 0x0c, 0x0c,
> -	0x98, 0x0a, 0x01, 0x0c, 0x06, 0x0d, 0x04, 0x0a,
> -	0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
> -	0xed, 0x50, 0x70, 0x9f, 0x16, 0x59, 0x60, 0x13,
> -	0x27, 0x0b, 0x27, 0xfc, 0x30, 0x27, 0x1c, 0xb0,
> -	0x4b, 0x4b, 0x6f, 0x2f, 0x63,
> -	0x92, 0x0F, 0x40, 0x60, 0x80, 0x14, 0x90, 0x8C,
> -	0x60, 0x14, 0x73, 0x00, 0x40,
> -	0x11, 0x00, 0xfc, 0xff, 0x32, 0x00
> -};
> -
> -static const unsigned char XGI330_YPbPr525pTiming[] = {
> -	0x3E, 0x11, 0x06, 0x09, 0x0b, 0x0c, 0x0c, 0x0c,
> -	0x98, 0x0a, 0x01, 0x0d, 0x06, 0x0d, 0x04, 0x0a,
> -	0x06, 0x14, 0x0d, 0x04, 0x0a, 0x00, 0x85, 0x3f,
> -	0x0c, 0x50, 0xb2, 0x9f, 0x16, 0x59, 0x4f, 0x13,
> -	0xad, 0x11, 0xad, 0x1d, 0x40, 0x8a, 0x3d, 0xb8,
> -	0x51, 0x5e, 0x60, 0x49, 0x7d,
> -	0x92, 0x0F, 0x40, 0x60, 0x80, 0x14, 0x90, 0x8C,
> -	0x60, 0x14, 0x4B, 0x43, 0x41,
> -	0x11, 0x00, 0xFC, 0xFF, 0x32, 0x00
> -};
> -
> -static const unsigned char XGI330_YPbPr525iTiming[] = {
> -	0x1B, 0x21, 0x03, 0x09, 0x05, 0x06, 0x0C, 0x0C,
> -	0x94, 0x49, 0x01, 0x0A, 0x06, 0x0D, 0x04, 0x0A,
> -	0x06, 0x14, 0x0D, 0x04, 0x0A, 0x00, 0x85, 0x1B,
> -	0x0C, 0x50, 0x00, 0x97, 0x00, 0xDA, 0x4A, 0x17,
> -	0x7D, 0x05, 0x4B, 0x00, 0x00, 0xE2, 0x00, 0x02,
> -	0x03, 0x0A, 0x65, 0x9D, 0x08,
> -	0x92, 0x8F, 0x40, 0x60, 0x80, 0x14, 0x90, 0x8C,
> -	0x60, 0x14, 0x4B, 0x00, 0x40,
> -	0x44, 0x00, 0xDB, 0x02, 0x3B, 0x00
> -};
> -
> -static const unsigned char XGI330_HiTVGroup3Data[] = {
> -	0x00, 0x1A, 0x22, 0x63, 0x62, 0x22, 0x08, 0x5F,
> -	0x05, 0x21, 0xB2, 0xB2, 0x55, 0x77, 0x2A, 0xA6,
> -	0x25, 0x2F, 0x47, 0xFA, 0xC8, 0xFF, 0x8E, 0x20,
> -	0x8C, 0x6E, 0x60, 0x2E, 0x58, 0x48, 0x72, 0x44,
> -	0x56, 0x36, 0x4F, 0x6E, 0x3F, 0x80, 0x00, 0x80,
> -	0x4F, 0x7F, 0x03, 0xA8, 0x7D, 0x20, 0x1A, 0xA9,
> -	0x14, 0x05, 0x03, 0x7E, 0x64, 0x31, 0x14, 0x75,
> -	0x18, 0x05, 0x18, 0x05, 0x4C, 0xA8, 0x01
> -};
> -
> -static const unsigned char XGI330_HiTVGroup3Simu[] = {
> -	0x00, 0x1A, 0x22, 0x63, 0x62, 0x22, 0x08, 0x95,
> -	0xDB, 0x20, 0xB8, 0xB8, 0x55, 0x47, 0x2A, 0xA6,
> -	0x25, 0x2F, 0x47, 0xFA, 0xC8, 0xFF, 0x8E, 0x20,
> -	0x8C, 0x6E, 0x60, 0x15, 0x26, 0xD3, 0xE4, 0x11,
> -	0x56, 0x36, 0x4F, 0x6E, 0x3F, 0x80, 0x00, 0x80,
> -	0x67, 0x36, 0x01, 0x47, 0x0E, 0x10, 0xBE, 0xB4,
> -	0x01, 0x05, 0x03, 0x7E, 0x65, 0x31, 0x14, 0x75,
> -	0x18, 0x05, 0x18, 0x05, 0x4C, 0xA8, 0x01
> -};
> -
> -static const unsigned char XGI330_HiTVGroup3Text[] = {
> -	0x00, 0x1A, 0x22, 0x63, 0x62, 0x22, 0x08, 0xA7,
> -	0xF5, 0x20, 0xCE, 0xCE, 0x55, 0x47, 0x2A, 0xA6,
> -	0x25, 0x2F, 0x47, 0xFA, 0xC8, 0xFF, 0x8E, 0x20,
> -	0x8C, 0x6E, 0x60, 0x18, 0x2C, 0x0C, 0x20, 0x22,
> -	0x56, 0x36, 0x4F, 0x6E, 0x3F, 0x80, 0x00, 0x80,
> -	0x93, 0x3C, 0x01, 0x50, 0x2F, 0x10, 0xF4, 0xCA,
> -	0x01, 0x05, 0x03, 0x7E, 0x65, 0x31, 0x14, 0x75,
> -	0x18, 0x05, 0x18, 0x05, 0x4C, 0xA8, 0x01
> -};
> -
> -static const unsigned char XGI330_Ren525pGroup3[] = {
> -	0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x13,
> -	0xB1, 0x41, 0x62, 0x62, 0xFF, 0xF4, 0x45, 0xa6,
> -	0x25, 0x2F, 0x67, 0xF6, 0xbf, 0xFF, 0x8E, 0x20,
> -	0xAC, 0xDA, 0x60, 0xFe, 0x6A, 0x9A, 0x06, 0x10,
> -	0xd1, 0x04, 0x18, 0x0a, 0xFF, 0x80, 0x00, 0x80,
> -	0x3c, 0x77, 0x00, 0xEF, 0xE0, 0x10, 0xB0, 0xE0,
> -	0x10, 0x4F, 0x0F, 0x0F, 0x05, 0x0F, 0x08, 0x6E,
> -	0x1a, 0x1F, 0x25, 0x2a, 0x4C, 0xAA, 0x01
> -};
> -
> -static const unsigned char XGI330_Ren750pGroup3[] = {
> -	0x00, 0x14, 0x15, 0x25, 0x55, 0x15, 0x0b, 0x7a,
> -	0x54, 0x41, 0xE7, 0xE7, 0xFF, 0xF4, 0x45, 0xa6,
> -	0x25, 0x2F, 0x67, 0xF6, 0xbf, 0xFF, 0x8E, 0x20,
> -	0xAC, 0x6A, 0x60, 0x2b, 0x52, 0xCD, 0x61, 0x10,
> -	0x51, 0x04, 0x18, 0x0a, 0x1F, 0x80, 0x00, 0x80,
> -	0xFF, 0xA4, 0x04, 0x2B, 0x94, 0x21, 0x72, 0x94,
> -	0x26, 0x05, 0x01, 0x0F, 0xed, 0x0F, 0x0A, 0x64,
> -	0x18, 0x1D, 0x23, 0x28, 0x4C, 0xAA, 0x01
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1024x768Data_1[] = {
> -	{ 960, 438, 1344, 806},	/* 00 (320x200,320x400,640x200,640x400) */
> -	{ 960, 388, 1344, 806},	/* 01 (320x350,640x350) */
> -	{1040, 438, 1344, 806},	/* 02 (360x400,720x400) */
> -	{1040, 388, 1344, 806},	/* 03 (720x350) */
> -	{ 960, 518, 1344, 806},	/* 04 (320x240,640x480) */
> -	{1120, 638, 1344, 806},	/* 05 (400x300,800x600) */
> -	{1344, 806, 1344, 806}	/* 06 (512x384,1024x768) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1024x768Data_2[] = {
> -	{1344, 806, 1344, 806},
> -	{1344, 806, 1344, 806},
> -	{1344, 806, 1344, 806},
> -	{1344, 806, 1344, 806},
> -	{1344, 806, 1344, 806},
> -	{1344, 806, 1344, 806},
> -	{1344, 806, 1344, 806},
> -	{800,  449, 1280, 801},
> -	{800,  525, 1280, 813}
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1280x1024Data_1[] = {
> -	{1048, 442,  1688, 1066},
> -	{1048, 392,  1688, 1066},
> -	{1048, 442,  1688, 1066},
> -	{1048, 392,  1688, 1066},
> -	{1048, 522,  1688, 1066},
> -	{1208, 642,  1688, 1066},
> -	{1432, 810,  1688, 1066},
> -	{1688, 1066, 1688, 1066}
> -};
> -
> -#define XGI_LVDS1280x1024Data_2 XGI_LVDS1024x768Data_2
> -
> -static const struct SiS_LVDSData XGI_LVDS1400x1050Data_1[] = {
> -	{928,   416, 1688, 1066},
> -	{928,   366, 1688, 1066},
> -	{928,   416, 1688, 1066},
> -	{928,   366, 1688, 1066},
> -	{928,   496, 1688, 1066},
> -	{1088,  616, 1688, 1066},
> -	{1312,  784, 1688, 1066},
> -	{1568, 1040, 1688, 1066},
> -	{1688, 1066, 1688, 1066}
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1400x1050Data_2[] = {
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066},
> -	{1688, 1066, 1688, 1066}
> -};
> -
> -/* ;;[ycchen] 12/05/02 LCDHTxLCDVT=2048x1320 */
> -static const struct SiS_LVDSData XGI_LVDS1600x1200Data_1[] = {
> -	{1088, 520,  2048, 1320}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{1088, 470,  2048, 1320}, /* 01 (320x350,640x350) */
> -	{1088, 520,  2048, 1320}, /* 02 (360x400,720x400) */
> -	{1088, 470,  2048, 1320}, /* 03 (720x350) */
> -	{1088, 600,  2048, 1320}, /* 04 (320x240,640x480) */
> -	{1248, 720,  2048, 1320}, /* 05 (400x300,800x600) */
> -	{1472, 888,  2048, 1320}, /* 06 (512x384,1024x768) */
> -	{1728, 1144, 2048, 1320}, /* 07 (640x512,1280x1024) */
> -	{1848, 1170, 2048, 1320}, /* 08 (1400x1050) */
> -	{2048, 1320, 2048, 1320}  /* 09 (1600x1200) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDSNoScalingData[] = {
> -	{ 800,  449,  800,  449}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{ 800,  449,  800,  449}, /* 01 (320x350,640x350) */
> -	{ 800,  449,  800,  449}, /* 02 (360x400,720x400) */
> -	{ 800,  449,  800,  449}, /* 03 (720x350) */
> -	{ 800,  525,  800,  525}, /* 04 (640x480x60Hz) */
> -	{1056,  628, 1056,  628}, /* 05 (800x600x60Hz) */
> -	{1344,  806, 1344,  806}, /* 06 (1024x768x60Hz) */
> -	{1688, 1066, 1688, 1066}, /* 07 (1280x1024x60Hz) */
> -	{1688, 1066, 1688, 1066}, /* 08 (1400x1050x60Hz) */
> -	{2160, 1250, 2160, 1250}, /* 09 (1600x1200x60Hz) */
> -	{1688,  806, 1688,  806}  /* 0A (1280x768x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1024x768Data_1x75[] = {
> -	{ 960, 438, 1312, 800}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{ 960, 388, 1312, 800}, /* 01 (320x350,640x350) */
> -	{1040, 438, 1312, 800}, /* 02 (360x400,720x400) */
> -	{1040, 388, 1312, 800}, /* 03 (720x350) */
> -	{ 928, 512, 1312, 800}, /* 04 (320x240,640x480) */
> -	{1088, 632, 1312, 800}, /* 05 (400x300,800x600) */
> -	{1312, 800, 1312, 800}, /* 06 (512x384,1024x768) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1024x768Data_2x75[] = {
> -	{1312, 800, 1312, 800}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1312, 800, 1312, 800}, /* ; 01 (320x350,640x350) */
> -	{1312, 800, 1312, 800}, /* ; 02 (360x400,720x400) */
> -	{1312, 800, 1312, 800}, /* ; 03 (720x350) */
> -	{1312, 800, 1312, 800}, /* ; 04 (320x240,640x480) */
> -	{1312, 800, 1312, 800}, /* ; 05 (400x300,800x600) */
> -	{1312, 800, 1312, 800}, /* ; 06 (512x384,1024x768) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1280x1024Data_1x75[] = {
> -	{1048,  442, 1688, 1066  }, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1048,  392, 1688, 1066  }, /* ; 01 (320x350,640x350) */
> -	{1128,  442, 1688, 1066  }, /* ; 02 (360x400,720x400) */
> -	{1128,  392, 1688, 1066  }, /* ; 03 (720x350) */
> -	{1048,  522, 1688, 1066  }, /* ; 04 (320x240,640x480) */
> -	{1208,  642, 1688, 1066  }, /* ; 05 (400x300,800x600) */
> -	{1432,  810, 1688, 1066  }, /* ; 06 (512x384,1024x768) */
> -	{1688, 1066, 1688, 1066 },  /* ; 06; 07 (640x512,1280x1024) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1280x1024Data_2x75[] = {
> -	{1688, 1066, 1688, 1066 }, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1688, 1066, 1688, 1066 }, /* ; 01 (320x350,640x350) */
> -	{1688, 1066, 1688, 1066 }, /* ; 02 (360x400,720x400) */
> -	{1688, 1066, 1688, 1066 }, /* ; 03 (720x350) */
> -	{1688, 1066, 1688, 1066 }, /* ; 04 (320x240,640x480) */
> -	{1688, 1066, 1688, 1066 }, /* ; 05 (400x300,800x600) */
> -	{1688, 1066, 1688, 1066 }, /* ; 06 (512x384,1024x768) */
> -	{1688, 1066, 1688, 1066 }, /* ; 06; 07 (640x512,1280x1024) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDSNoScalingDatax75[] = {
> -	{ 800,  449,  800, 449},  /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{ 800,  449,  800, 449},  /* ; 01 (320x350,640x350) */
> -	{ 900,  449,  900, 449},  /* ; 02 (360x400,720x400) */
> -	{ 900,  449,  900, 449},  /* ; 03 (720x350) */
> -	{ 800,  500,  800, 500},  /* ; 04 (640x480x75Hz) */
> -	{1056,  625, 1056, 625},  /* ; 05 (800x600x75Hz) */
> -	{1312,  800, 1312, 800},  /* ; 06 (1024x768x75Hz) */
> -	{1688, 1066, 1688, 1066}, /* ; 07 (1280x1024x75Hz) */
> -	{1688, 1066, 1688, 1066}, /* ; 08 (1400x1050x75Hz)
> -				   * ;;[ycchen] 12/19/02
> -				   */
> -	{2160, 1250, 2160, 1250}, /* ; 09 (1600x1200x75Hz) */
> -	{1688,  806, 1688, 806},  /* ; 0A (1280x768x75Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1024x768Des_1[] = {
> -	{0, 1048,   0, 771}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{0, 1048,   0, 771}, /* 01 (320x350,640x350) */
> -	{0, 1048,   0, 771}, /* 02 (360x400,720x400) */
> -	{0, 1048,   0, 771}, /* 03 (720x350) */
> -	{0, 1048,   0, 771}, /* 04 (640x480x60Hz) */
> -	{0, 1048,   0, 771}, /* 05 (800x600x60Hz) */
> -	{0, 1048, 805, 770}  /* 06 (1024x768x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1024x768Des_2[] = {
> -	{1142,  856, 622, 587}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{1142,  856, 597, 562}, /* 01 (320x350,640x350) */
> -	{1142,  856, 622, 587}, /* 02 (360x400,720x400) */
> -	{1142,  856, 597, 562}, /* 03 (720x350) */
> -	{1142, 1048, 722, 687}, /* 04 (640x480x60Hz) */
> -	{1232,  936, 722, 687}, /* 05 (800x600x60Hz) */
> -	{   0, 1048, 805, 771}  /* 06 (1024x768x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1024x768Des_3[] = {
> -	{320, 24, 622, 587}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{320, 24, 597, 562}, /* 01 (320x350,640x350) */
> -	{320, 24, 622, 587}, /* 02 (360x400,720x400) */
> -	{320, 24, 597, 562}, /* 03 (720x350) */
> -	{320, 24, 722, 687}  /* 04 (640x480x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1280x1024Des_1[] = {
> -	{0, 1328,    0, 1025}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{0, 1328,    0, 1025}, /* 01 (320x350,640x350) */
> -	{0, 1328,    0, 1025}, /* 02 (360x400,720x400) */
> -	{0, 1328,    0, 1025}, /* 03 (720x350) */
> -	{0, 1328,    0, 1025}, /* 04 (640x480x60Hz) */
> -	{0, 1328,    0, 1025}, /* 05 (800x600x60Hz) */
> -	{0, 1328,    0, 1025}, /* 06 (1024x768x60Hz) */
> -	{0, 1328, 1065, 1024}  /* 07 (1280x1024x60Hz) */
> -};
> -
> - /* The Display setting for DE Mode Panel */
> -static const struct SiS_LVDSData XGI_LVDS1280x1024Des_2[] = {
> -	{1368, 1008, 752, 711}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{1368, 1008, 729, 688}, /* 01 (320x350,640x350) */
> -	{1408, 1048, 752, 711}, /* 02 (360x400,720x400) */
> -	{1408, 1048, 729, 688}, /* 03 (720x350) */
> -	{1368, 1008, 794, 753}, /* 04 (640x480x60Hz) */
> -	{1448, 1068, 854, 813}, /* 05 (800x600x60Hz) */
> -	{1560, 1200, 938, 897}, /* 06 (1024x768x60Hz) */
> -	{0000, 1328,   0, 1025} /* 07 (1280x1024x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1400x1050Des_1[] = {
> -	{0, 1448, 0, 1051}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{0, 1448, 0, 1051}, /* 01 (320x350,640x350) */
> -	{0, 1448, 0, 1051}, /* 02 (360x400,720x400) */
> -	{0, 1448, 0, 1051}, /* 03 (720x350) */
> -	{0, 1448, 0, 1051}, /* 04 (640x480x60Hz) */
> -	{0, 1448, 0, 1051}, /* 05 (800x600x60Hz) */
> -	{0, 1448, 0, 1051}, /* 06 (1024x768x60Hz) */
> -	{0, 1448, 0, 1051}, /* 07 (1280x1024x60Hz) */
> -	{0, 1448, 0, 1051}  /* 08 (1400x1050x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1400x1050Des_2[] = {
> -	{1308, 1068,  781,  766}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{1308, 1068,  781,  766}, /* 01 (320x350,640x350) */
> -	{1308, 1068,  781,  766}, /* 02 (360x400,720x400) */
> -	{1308, 1068,  781,  766}, /* 03 (720x350) */
> -	{1308, 1068,  781,  766}, /* 04 (640x480x60Hz) */
> -	{1388, 1148,  841,  826}, /* 05 (800x600x60Hz) */
> -	{1490, 1250,  925,  910}, /* 06 (1024x768x60Hz) */
> -	{1608, 1368, 1053, 1038}, /* 07 (1280x1024x60Hz) */
> -	{   0, 1448,    0, 1051}  /* 08 (1400x1050x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1600x1200Des_1[] = {
> -	{0, 1664, 0, 1201}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{0, 1664, 0, 1201}, /* 01 (320x350,640x350) */
> -	{0, 1664, 0, 1201}, /* 02 (360x400,720x400) */
> -	{0, 1664, 0, 1201}, /* 03 (720x350) */
> -	{0, 1664, 0, 1201}, /* 04 (640x480x60Hz) */
> -	{0, 1664, 0, 1201}, /* 05 (800x600x60Hz) */
> -	{0, 1664, 0, 1201}, /* 06 (1024x768x60Hz) */
> -	{0, 1664, 0, 1201}, /* 07 (1280x1024x60Hz) */
> -	{0, 1664, 0, 1201}, /* 08 (1400x1050x60Hz) */
> -	{0, 1664, 0, 1201}  /* 09 (1600x1200x60Hz) */
> -};
> -
> -static const struct XGI330_LCDDataDesStruct2  XGI_LVDSNoScalingDesData[] = {
> -	{0,  648,  448,  405,  96, 2}, /* 00 (320x200,320x400,
> -					*     640x200,640x400)
> -					*/
> -	{0,  648,  448,  355,  96, 2}, /* 01 (320x350,640x350) */
> -	{0,  648,  448,  405,  96, 2}, /* 02 (360x400,720x400) */
> -	{0,  648,  448,  355,  96, 2}, /* 03 (720x350) */
> -	{0,  648,    1,  483,  96, 2}, /* 04 (640x480x60Hz) */
> -	{0,  840,  627,  600, 128, 4}, /* 05 (800x600x60Hz) */
> -	{0, 1048,  805,  770, 136, 6}, /* 06 (1024x768x60Hz) */
> -	{0, 1328,    0, 1025, 112, 3}, /* 07 (1280x1024x60Hz) */
> -	{0, 1438,    0, 1051, 112, 3}, /* 08 (1400x1050x60Hz)*/
> -	{0, 1664,    0, 1201, 192, 3}, /* 09 (1600x1200x60Hz) */
> -	{0, 1328,    0, 0771, 112, 6}  /* 0A (1280x768x60Hz) */
> -};
> -
> -/* ; 1024x768 Full-screen */
> -static const struct SiS_LVDSData XGI_LVDS1024x768Des_1x75[] = {
> -	{0, 1040, 0, 769}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{0, 1040, 0, 769}, /* ; 01 (320x350,640x350) */
> -	{0, 1040, 0, 769}, /* ; 02 (360x400,720x400) */
> -	{0, 1040, 0, 769}, /* ; 03 (720x350) */
> -	{0, 1040, 0, 769}, /* ; 04 (640x480x75Hz) */
> -	{0, 1040, 0, 769}, /* ; 05 (800x600x75Hz) */
> -	{0, 1040, 0, 769}  /* ; 06 (1024x768x75Hz) */
> -};
> -
> -/* ; 1024x768 center-screen (Enh. Mode) */
> -static const struct SiS_LVDSData XGI_LVDS1024x768Des_2x75[] = {
> -	{1142,  856, 622, 587}, /* 00 (320x200,320x400,640x200,640x400) */
> -	{1142,  856, 597, 562}, /* 01 (320x350,640x350) */
> -	{1142,  856, 622, 587}, /* 02 (360x400,720x400) */
> -	{1142,  856, 597, 562}, /* 03 (720x350) */
> -	{1142, 1048, 722, 687}, /* 04 (640x480x60Hz) */
> -	{1232,  936, 722, 687}, /* 05 (800x600x60Hz) */
> -	{   0, 1048, 805, 771}  /* 06 (1024x768x60Hz) */
> -};
> -
> -/* ; 1024x768 center-screen (St.Mode) */
> -static const struct SiS_LVDSData XGI_LVDS1024x768Des_3x75[] =  {
> -	{320, 24, 622, 587}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{320, 24, 597, 562}, /* ; 01 (320x350,640x350) */
> -	{320, 24, 622, 587}, /* ; 02 (360x400,720x400) */
> -	{320, 24, 597, 562}, /* ; 03 (720x350) */
> -	{320, 24, 722, 687}  /* ; 04 (640x480x60Hz) */
> -};
> -
> -static const struct SiS_LVDSData XGI_LVDS1280x1024Des_1x75[] = {
> -	{0, 1296, 0, 1025}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{0, 1296, 0, 1025}, /* ; 01 (320x350,640x350) */
> -	{0, 1296, 0, 1025}, /* ; 02 (360x400,720x400) */
> -	{0, 1296, 0, 1025}, /* ; 03 (720x350) */
> -	{0, 1296, 0, 1025}, /* ; 04 (640x480x75Hz) */
> -	{0, 1296, 0, 1025}, /* ; 05 (800x600x75Hz) */
> -	{0, 1296, 0, 1025}, /* ; 06 (1024x768x75Hz) */
> -	{0, 1296, 0, 1025}  /* ; 07 (1280x1024x75Hz) */
> -};
> -
> -/* The Display setting for DE Mode Panel */
> -/* Set DE as default */
> -static const struct SiS_LVDSData XGI_LVDS1280x1024Des_2x75[] = {
> -	{1368,  976, 752,  711}, /* ; 00 (320x200,320x400,640x200,640x400) */
> -	{1368,  976, 729,  688}, /* ; 01 (320x350,640x350) */
> -	{1408,  976, 752,  711}, /* ; 02 (360x400,720x400) */
> -	{1408,  976, 729,  688}, /* ; 03 (720x350) */
> -	{1368,  976, 794,  753}, /* ; 04 (640x480x75Hz) */
> -	{1448, 1036, 854,  813}, /* ; 05 (800x600x75Hz) */
> -	{1560, 1168, 938,  897}, /* ; 06 (1024x768x75Hz) */
> -	{   0, 1296,   0, 1025}  /* ; 07 (1280x1024x75Hz) */
> -};
> -
> -/* Scaling LCD 75Hz */
> -static const struct XGI330_LCDDataDesStruct2 XGI_LVDSNoScalingDesDatax75[] = {
> -	{0,  648, 448,  405,  96, 2}, /* ; 00 (320x200,320x400,
> -				       *       640x200,640x400)
> -				       */
> -	{0,  648, 448,  355,  96, 2}, /* ; 01 (320x350,640x350) */
> -	{0,  729, 448,  405, 108, 2}, /* ; 02 (360x400,720x400) */
> -	{0,  729, 448,  355, 108, 2}, /* ; 03 (720x350) */
> -	{0,  656,   0,  481,  64, 3}, /* ; 04 (640x480x75Hz) */
> -	{0,  816,   0,  601,  80, 3}, /* ; 05 (800x600x75Hz) */
> -	{0, 1040,   0,  769,  96, 3}, /* ; 06 (1024x768x75Hz) */
> -	{0, 1296,   0, 1025, 144, 3}, /* ; 07 (1280x1024x75Hz) */
> -	{0, 1448,   0, 1051, 112, 3}, /* ; 08 (1400x1050x75Hz) */
> -	{0, 1664,   0, 1201, 192, 3}, /* ; 09 (1600x1200x75Hz) */
> -	{0, 1328,   0,  771, 112, 6}  /* ; 0A (1280x768x75Hz) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct  XGI_LVDSCRT11024x768_1_H[] = {
> -	{ {0x4B, 0x27, 0x8F, 0x32, 0x1B, 0x00, 0x45, 0x00} }, /* 00 (320x) */
> -	{ {0x4B, 0x27, 0x8F, 0x2B, 0x03, 0x00, 0x44, 0x00} }, /* 01 (360x) */
> -	{ {0x55, 0x31, 0x99, 0x46, 0x1D, 0x00, 0x55, 0x00} }, /* 02 (400x) */
> -	{ {0x63, 0x3F, 0x87, 0x4A, 0x93, 0x00, 0x01, 0x00} }, /* 03 (512x) */
> -	{ {0x73, 0x4F, 0x97, 0x55, 0x86, 0x00, 0x05, 0x00} }, /* 04 (640x) */
> -	{ {0x73, 0x4F, 0x97, 0x55, 0x86, 0x00, 0x05, 0x00} }, /* 05 (720x) */
> -	{ {0x87, 0x63, 0x8B, 0x69, 0x1A, 0x00, 0x26, 0x00} }, /* 06 (800x) */
> -	{ {0xA3, 0x7F, 0x87, 0x86, 0x97, 0x00, 0x02, 0x00} }  /* 07 (1024x) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct  XGI_LVDSCRT11280x1024_1_H[] = {
> -	{ {0x56, 0x27, 0x9A, 0x30, 0x1E, 0x00, 0x05, 0x00 } }, /* 00 (320x) */
> -	{ {0x56, 0x27, 0x9A, 0x30, 0x1E, 0x00, 0x05, 0x00 } }, /* 01 (360x) */
> -	{ {0x60, 0x31, 0x84, 0x3A, 0x88, 0x00, 0x01, 0x00 } }, /* 02 (400x) */
> -	{ {0x6E, 0x3F, 0x92, 0x48, 0x96, 0x00, 0x01, 0x00 } }, /* 03 (512x) */
> -	{ {0x7E, 0x4F, 0x82, 0x58, 0x06, 0x00, 0x06, 0x00 } }, /* 04 (640x) */
> -	{ {0x7E, 0x4F, 0x82, 0x58, 0x06, 0x00, 0x06, 0x00 } }, /* 05 (720x) */
> -	{ {0x92, 0x63, 0x96, 0x6C, 0x1A, 0x00, 0x06, 0x00 } }, /* 06 (800x) */
> -	{ {0xAE, 0x7F, 0x92, 0x88, 0x96, 0x00, 0x02, 0x00 } }, /* 07 (1024x) */
> -	{ {0xCE, 0x9F, 0x92, 0xA8, 0x16, 0x00, 0x07, 0x00 } }  /* 08 (1280x) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct  XGI_LVDSCRT11024x768_2_H[] = {
> -	{ {0x63, 0x27, 0x87, 0x3B, 0x8C, 0x00, 0x01, 0x00} }, /* 00 (320x) */
> -	{ {0x63, 0x27, 0x87, 0x3B, 0x8C, 0x00, 0x01, 0x00} }, /* 01 (360x) */
> -	{ {0x63, 0x31, 0x87, 0x3D, 0x8E, 0x00, 0x01, 0x00} }, /* 02 (400x) */
> -	{ {0x63, 0x3F, 0x87, 0x45, 0x96, 0x00, 0x01, 0x00} }, /* 03 (512x) */
> -	{ {0xA3, 0x4F, 0x87, 0x6E, 0x9F, 0x00, 0x06, 0x00} }, /* 04 (640x) */
> -	{ {0xA3, 0x4F, 0x87, 0x6E, 0x9F, 0x00, 0x06, 0x00} }, /* 05 (720x) */
> -	{ {0xA3, 0x63, 0x87, 0x78, 0x89, 0x00, 0x02, 0x00} }, /* 06 (800x) */
> -	{ {0xA3, 0x7F, 0x87, 0x86, 0x97, 0x00, 0x02, 0x00} }  /* 07 (1024x) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct  XGI_LVDSCRT11280x1024_2_H[] = {
> -	{ {0x7E, 0x3B, 0x9A, 0x44, 0x12, 0x00, 0x01, 0x00} }, /* 00 (320x) */
> -	{ {0x7E, 0x3B, 0x9A, 0x44, 0x12, 0x00, 0x01, 0x00} }, /* 01 (360x) */
> -	{ {0x7E, 0x40, 0x84, 0x49, 0x91, 0x00, 0x01, 0x00} }, /* 02 (400x) */
> -	{ {0x7E, 0x47, 0x93, 0x50, 0x9E, 0x00, 0x01, 0x00} }, /* 03 (512x) */
> -	{ {0xCE, 0x77, 0x8A, 0x80, 0x8E, 0x00, 0x02, 0x00} }, /* 04 (640x) */
> -	{ {0xCE, 0x77, 0x8A, 0x80, 0x8E, 0x00, 0x02, 0x00} }, /* 05 (720x) */
> -	{ {0xCE, 0x81, 0x94, 0x8A, 0x98, 0x00, 0x02, 0x00} }, /* 06 (800x) */
> -	{ {0xCE, 0x8F, 0x82, 0x98, 0x06, 0x00, 0x07, 0x00} }, /* 07 (1024x) */
> -	{ {0xCE, 0x9F, 0x92, 0xA8, 0x16, 0x00, 0x07, 0x00} }  /* 08 (1280x) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct XGI_LVDSCRT11400x1050_1_H[] = {
> -	{ {0x47, 0x27, 0x8B, 0x2C, 0x1A, 0x00, 0x05, 0x00} }, /* 00 (320x) */
> -	{ {0x47, 0x27, 0x8B, 0x30, 0x1E, 0x00, 0x05, 0x00} }, /* 01 (360x) */
> -	{ {0x51, 0x31, 0x95, 0x36, 0x04, 0x00, 0x01, 0x00} }, /* 02 (400x) */
> -	{ {0x5F, 0x3F, 0x83, 0x44, 0x92, 0x00, 0x01, 0x00} }, /* 03 (512x) */
> -	{ {0x6F, 0x4F, 0x93, 0x54, 0x82, 0x00, 0x05, 0x00} }, /* 04 (640x) */
> -	{ {0x6F, 0x4F, 0x93, 0x54, 0x82, 0x00, 0x05, 0x00} }, /* 05 (720x) */
> -	{ {0x83, 0x63, 0x87, 0x68, 0x16, 0x00, 0x06, 0x00} }, /* 06 (800x) */
> -	{ {0x9F, 0x7F, 0x83, 0x84, 0x92, 0x00, 0x02, 0x00} }, /* 07 (1024x) */
> -	{ {0xBF, 0x9F, 0x83, 0xA4, 0x12, 0x00, 0x07, 0x00} }, /* 08 (1280x) */
> -	{ {0xCE, 0xAE, 0x92, 0xB3, 0x01, 0x00, 0x03, 0x00} }  /* 09 (1400x) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct XGI_LVDSCRT11400x1050_2_H[] = {
> -	{ {0x76, 0x3F, 0x83, 0x45, 0x8C, 0x00, 0x41, 0x00} }, /* 00 (320x) */
> -	{ {0x76, 0x3F, 0x83, 0x45, 0x8C, 0x00, 0x41, 0x00} }, /* 01 (360x) */
> -	{ {0x76, 0x31, 0x9A, 0x48, 0x9F, 0x00, 0x41, 0x00} }, /* 02 (400x) */
> -	{ {0x76, 0x3F, 0x9A, 0x4F, 0x96, 0x00, 0x41, 0x00} }, /* 03 (512x) */
> -	{ {0xCE, 0x7E, 0x82, 0x87, 0x9E, 0x00, 0x02, 0x00} }, /* 04 (640x) */
> -	{ {0xCE, 0x7E, 0x82, 0x87, 0x9E, 0x00, 0x02, 0x00} }, /* 05 (720x) */
> -	{ {0xCE, 0x63, 0x92, 0x96, 0x04, 0x00, 0x07, 0x00} }, /* 06 (800x) */
> -	{ {0xCE, 0x7F, 0x92, 0xA4, 0x12, 0x00, 0x07, 0x00} }, /* 07 (1024x) */
> -	{ {0xCE, 0x9F, 0x92, 0xB4, 0x02, 0x00, 0x03, 0x00} }, /* 08 (1280x) */
> -	{ {0xCE, 0xAE, 0x92, 0xBC, 0x0A, 0x00, 0x03, 0x00} }  /* 09 (1400x) */
> -};
> -
> -/* ;302lv channelA [ycchen] 12/05/02 LCDHT=2048 */
> -/* ; CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct XGI_LVDSCRT11600x1200_1_H[] = {
> -	{ {0x5B, 0x27, 0x9F, 0x32, 0x0A, 0x00, 0x01, 0x00} }, /* 00 (320x) */
> -	{ {0x5B, 0x27, 0x9F, 0x32, 0x0A, 0x00, 0x01, 0x00} }, /* 01 (360x) */
> -	{ {0x65, 0x31, 0x89, 0x3C, 0x94, 0x00, 0x01, 0x00} }, /* 02 (400x) */
> -	{ {0x73, 0x3F, 0x97, 0x4A, 0x82, 0x00, 0x05, 0x00} }, /* 03 (512x) */
> -	{ {0x83, 0x4F, 0x87, 0x51, 0x09, 0x00, 0x06, 0x00} }, /* 04 (640x) */
> -	{ {0x83, 0x4F, 0x87, 0x51, 0x09, 0x00, 0x06, 0x00} }, /* 05 (720x) */
> -	{ {0x97, 0x63, 0x9B, 0x65, 0x1D, 0x00, 0x06, 0xF0} }, /* 06 (800x) */
> -	{ {0xB3, 0x7F, 0x97, 0x81, 0x99, 0x00, 0x02, 0x00} }, /* 07 (1024x) */
> -	{ {0xD3, 0x9F, 0x97, 0xA1, 0x19, 0x00, 0x07, 0x00} }, /* 08 (1280x) */
> -	{ {0xE2, 0xAE, 0x86, 0xB9, 0x91, 0x00, 0x03, 0x00} }, /* 09 (1400x) */
> -	{ {0xFB, 0xC7, 0x9F, 0xC9, 0x81, 0x00, 0x07, 0x00} }  /* 0A (1600x) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A+CR09(5->7) */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11024x768_1_V[] = {
> -	{ {0x97, 0x1F, 0x60, 0x87, 0x5D, 0x83, 0x10} }, /* 00 (x350) */
> -	{ {0xB4, 0x1F, 0x92, 0x89, 0x8F, 0xB5, 0x30} }, /* 01 (x400) */
> -	{ {0x04, 0x3E, 0xE2, 0x89, 0xDF, 0x05, 0x00} }, /* 02 (x480) */
> -	{ {0x7C, 0xF0, 0x5A, 0x8F, 0x57, 0x7D, 0xA0} }, /* 03 (x600) */
> -	{ {0x24, 0xF5, 0x02, 0x88, 0xFF, 0x25, 0x90} }  /* 04 (x768) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11024x768_2_V[] = {
> -	{ {0x24, 0xBB, 0x31, 0x87, 0x5D, 0x25, 0x30} }, /* 00 (x350) */
> -	{ {0x24, 0xBB, 0x4A, 0x80, 0x8F, 0x25, 0x30} }, /* 01 (x400) */
> -	{ {0x24, 0xBB, 0x72, 0x88, 0xDF, 0x25, 0x30} }, /* 02 (x480) */
> -	{ {0x24, 0xF1, 0xAE, 0x84, 0x57, 0x25, 0xB0} }, /* 03 (x600) */
> -	{ {0x24, 0xF5, 0x02, 0x88, 0xFF, 0x25, 0x90} }  /* 04 (x768) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11280x1024_1_V[] = {
> -	{ {0x86, 0x1F, 0x5E, 0x82, 0x5D, 0x87, 0x00} }, /* 00 (x350) */
> -	{ {0xB8, 0x1F, 0x90, 0x84, 0x8F, 0xB9, 0x30} }, /* 01 (x400) */
> -	{ {0x08, 0x3E, 0xE0, 0x84, 0xDF, 0x09, 0x00} }, /* 02 (x480) */
> -	{ {0x80, 0xF0, 0x58, 0x8C, 0x57, 0x81, 0xA0} }, /* 03 (x600) */
> -	{ {0x28, 0xF5, 0x00, 0x84, 0xFF, 0x29, 0x90} }, /* 04 (x768) */
> -	{ {0x28, 0x5A, 0x13, 0x87, 0xFF, 0x29, 0xA9} }  /* 05 (x1024) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11280x1024_2_V[] = {
> -	{ {0x28, 0xD2, 0xAF, 0x83, 0xAE, 0xD8, 0xA1} }, /* 00 (x350) */
> -	{ {0x28, 0xD2, 0xC8, 0x8C, 0xC7, 0xF2, 0x81} }, /* 01 (x400) */
> -	{ {0x28, 0xD2, 0xF0, 0x84, 0xEF, 0x1A, 0xB1} }, /* 02 (x480) */
> -	{ {0x28, 0xDE, 0x2C, 0x8F, 0x2B, 0x56, 0x91} }, /* 03 (x600) */
> -	{ {0x28, 0xDE, 0x80, 0x83, 0x7F, 0xAA, 0x91} }, /* 04 (x768) */
> -	{ {0x28, 0x5A, 0x13, 0x87, 0xFF, 0x29, 0xA9} }  /* 05 (x1024) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11400x1050_1_V[] = {
> -	{ {0x6C, 0x1F, 0x60, 0x84, 0x5D, 0x6D, 0x10} }, /* 00 (x350) */
> -	{ {0x9E, 0x1F, 0x93, 0x86, 0x8F, 0x9F, 0x30} }, /* 01 (x400) */
> -	{ {0xEE, 0x1F, 0xE2, 0x86, 0xDF, 0xEF, 0x10} }, /* 02 (x480) */
> -	{ {0x66, 0xF0, 0x5A, 0x8e, 0x57, 0x67, 0xA0} }, /* 03 (x600) */
> -	{ {0x0E, 0xF5, 0x02, 0x86, 0xFF, 0x0F, 0x90} }, /* 04 (x768) */
> -	{ {0x0E, 0x5A, 0x02, 0x86, 0xFF, 0x0F, 0x89} }, /* 05 (x1024) */
> -	{ {0x28, 0x10, 0x1A, 0x80, 0x19, 0x29, 0x0F} }  /* 06 (x1050) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11400x1050_2_V[] = {
> -	{ {0x28, 0x92, 0xB6, 0x83, 0xB5, 0xCF, 0x81} }, /* 00 (x350) */
> -	{ {0x28, 0x92, 0xD5, 0x82, 0xD4, 0xEE, 0x81} }, /* 01 (x400) */
> -	{ {0x28, 0x92, 0xFD, 0x8A, 0xFC, 0x16, 0xB1} }, /* 02 (x480) */
> -	{ {0x28, 0xD4, 0x39, 0x86, 0x57, 0x29, 0x81} }, /* 03 (x600) */
> -	{ {0x28, 0xD4, 0x8D, 0x9A, 0xFF, 0x29, 0xA1} }, /* 04 (x768) */
> -	{ {0x28, 0x5A, 0x0D, 0x9A, 0xFF, 0x29, 0xA9} }, /* 05 (x1024) */
> -	{ {0x28, 0x10, 0x1A, 0x87, 0x19, 0x29, 0x8F} }  /* 06 (x1050) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A+CR09(5->7) */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11600x1200_1_V[] = {
> -	{ {0xd4, 0x1F, 0x81, 0x84, 0x5D, 0xd5, 0x10} }, /* 00 (x350) */
> -	{ {0x06, 0x3e, 0xb3, 0x86, 0x8F, 0x07, 0x20} }, /* 01 (x400) */
> -	{ {0x56, 0xba, 0x03, 0x86, 0xDF, 0x57, 0x00} }, /* 02 (x480) */
> -	{ {0xce, 0xF0, 0x7b, 0x8e, 0x57, 0xcf, 0xa0} }, /* 03 (x600) */
> -	{ {0x76, 0xF5, 0x23, 0x86, 0xFF, 0x77, 0x90} }, /* 04 (x768) */
> -	{ {0x76, 0x5A, 0x23, 0x86, 0xFF, 0x77, 0x89} }, /* 05 (x1024) */
> -	{ {0x90, 0x10, 0x1A, 0x8E, 0x19, 0x91, 0x2F} }, /* 06 (x1050) */
> -	{ {0x26, 0x11, 0xd3, 0x86, 0xaF, 0x27, 0x3f} }  /* 07 (x1200) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct XGI_LVDSCRT11024x768_1_Hx75[] = {
> -	{ {0x4B, 0x27, 0x8F, 0x32, 0x1B, 0x00, 0x45, 0x00} },/* ; 00 (320x) */
> -	{ {0x4B, 0x27, 0x8F, 0x2B, 0x03, 0x00, 0x44, 0x00} },/* ; 01 (360x) */
> -	{ {0x55, 0x31, 0x99, 0x46, 0x1D, 0x00, 0x55, 0x00} },/* ; 02 (400x) */
> -	{ {0x63, 0x3F, 0x87, 0x4A, 0x93, 0x00, 0x01, 0x00} },/* ; 03 (512x) */
> -	{ {0x6F, 0x4F, 0x93, 0x54, 0x80, 0x00, 0x05, 0x00} },/* ; 04 (640x) */
> -	{ {0x6F, 0x4F, 0x93, 0x54, 0x80, 0x00, 0x05, 0x00} },/* ; 05 (720x) */
> -	{ {0x83, 0x63, 0x87, 0x68, 0x14, 0x00, 0x26, 0x00} },/* ; 06 (800x) */
> -	{ {0x9F, 0x7F, 0x83, 0x85, 0x91, 0x00, 0x02, 0x00} } /* ; 07 (1024x) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A+CR09(5->7) */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11024x768_1_Vx75[] = {
> -	{ {0x97, 0x1F, 0x60, 0x87, 0x5D, 0x83, 0x10} },/* ; 00 (x350) */
> -	{ {0xB4, 0x1F, 0x92, 0x89, 0x8F, 0xB5, 0x30} },/* ; 01 (x400) */
> -	{ {0xFE, 0x1F, 0xE0, 0x84, 0xDF, 0xFF, 0x10} },/* ; 02 (x480) */
> -	{ {0x76, 0xF0, 0x58, 0x8C, 0x57, 0x77, 0xA0} },/* ; 03 (x600) */
> -	{ {0x1E, 0xF5, 0x00, 0x83, 0xFF, 0x1F, 0x90} } /* ; 04 (x768) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct XGI_LVDSCRT11024x768_2_Hx75[] = {
> -	{ {0x63, 0x27, 0x87, 0x3B, 0x8C, 0x00, 0x01, 0x00} },/* ; 00 (320x) */
> -	{ {0x63, 0x27, 0x87, 0x3B, 0x8C, 0x00, 0x01, 0x00} },/* ; 01 (360x) */
> -	{ {0x63, 0x31, 0x87, 0x3D, 0x8E, 0x00, 0x01, 0x00} },/* ; 02 (400x) */
> -	{ {0x63, 0x3F, 0x87, 0x45, 0x96, 0x00, 0x01, 0x00} },/* ; 03 (512x) */
> -	{ {0xA3, 0x4F, 0x87, 0x6E, 0x9F, 0x00, 0x06, 0x00} },/* ; 04 (640x) */
> -	{ {0xA3, 0x4F, 0x87, 0x6E, 0x9F, 0x00, 0x06, 0x00} },/* ; 05 (720x) */
> -	{ {0xA3, 0x63, 0x87, 0x78, 0x89, 0x00, 0x02, 0x00} },/* ; 06 (800x) */
> -	{ {0xA3, 0x7F, 0x87, 0x86, 0x97, 0x00, 0x02, 0x00} } /* ; 07 (1024x) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11024x768_2_Vx75[] = {
> -	{ {0x24, 0xBB, 0x31, 0x87, 0x5D, 0x25, 0x30} },/* ; 00 (x350) */
> -	{ {0x24, 0xBB, 0x4A, 0x80, 0x8F, 0x25, 0x30} },/* ; 01 (x400) */
> -	{ {0x24, 0xBB, 0x72, 0x88, 0xDF, 0x25, 0x30} },/* ; 02 (x480) */
> -	{ {0x24, 0xF1, 0xAE, 0x84, 0x57, 0x25, 0xB0} },/* ; 03 (x600) */
> -	{ {0x24, 0xF5, 0x02, 0x88, 0xFF, 0x25, 0x90} } /* ; 04 (x768) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct XGI_LVDSCRT11280x1024_1_Hx75[] = {
> -	{ {0x56, 0x27, 0x9A, 0x30, 0x1E, 0x00, 0x05, 0x00} },/* ; 00 (320x) */
> -	{ {0x56, 0x27, 0x9A, 0x30, 0x1E, 0x00, 0x05, 0x00} },/* ; 01 (360x) */
> -	{ {0x60, 0x31, 0x84, 0x3A, 0x88, 0x00, 0x01, 0x00} },/* ; 02 (400x) */
> -	{ {0x6E, 0x3F, 0x92, 0x48, 0x96, 0x00, 0x01, 0x00} },/* ; 03 (512x) */
> -	{ {0x7E, 0x4F, 0x82, 0x54, 0x06, 0x00, 0x06, 0x00} },/* ; 04 (640x) */
> -	{ {0x7E, 0x4F, 0x82, 0x54, 0x06, 0x00, 0x06, 0x00} },/* ; 05 (720x) */
> -	{ {0x92, 0x63, 0x96, 0x68, 0x1A, 0x00, 0x06, 0x00} },/* ; 06 (800x) */
> -	{ {0xAE, 0x7F, 0x92, 0x84, 0x96, 0x00, 0x02, 0x00} },/* ; 07 (1024x) */
> -	{ {0xCE, 0x9F, 0x92, 0xA5, 0x17, 0x00, 0x07, 0x00} } /* ; 08 (1280x) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11280x1024_1_Vx75[] = {
> -	{ {0x86, 0xD1, 0xBC, 0x80, 0xBB, 0xE5, 0x00} },/* ; 00 (x350) */
> -	{ {0xB8, 0x1F, 0x90, 0x84, 0x8F, 0xB9, 0x30} },/* ; 01 (x400) */
> -	{ {0x08, 0x3E, 0xE0, 0x84, 0xDF, 0x09, 0x00} },/* ; 02 (x480) */
> -	{ {0x80, 0xF0, 0x58, 0x8C, 0x57, 0x81, 0xA0} },/* ; 03 (x600) */
> -	{ {0x28, 0xF5, 0x00, 0x84, 0xFF, 0x29, 0x90} },/* ; 04 (x768) */
> -	{ {0x28, 0x5A, 0x13, 0x87, 0xFF, 0x29, 0xA9} } /* ; 05 (x1024) */
> -};
> -
> -/* CR00,CR02,CR03,CR04,CR05,SR0B,SR0C,SR0E */
> -static const struct XGI_LVDSCRT1HDataStruct XGI_LVDSCRT11280x1024_2_Hx75[] = {
> -	{ {0x7E, 0x3B, 0x9A, 0x44, 0x12, 0x00, 0x01, 0x00} },/* ; 00 (320x) */
> -	{ {0x7E, 0x3B, 0x9A, 0x44, 0x12, 0x00, 0x01, 0x00} },/* ; 01 (360x) */
> -	{ {0x7E, 0x40, 0x84, 0x49, 0x91, 0x00, 0x01, 0x00} },/* ; 02 (400x) */
> -	{ {0x7E, 0x47, 0x93, 0x50, 0x9E, 0x00, 0x01, 0x00} },/* ; 03 (512x) */
> -	{ {0xCE, 0x77, 0x8A, 0x80, 0x8E, 0x00, 0x02, 0x00} },/* ; 04 (640x) */
> -	{ {0xCE, 0x77, 0x8A, 0x80, 0x8E, 0x00, 0x02, 0x00} },/* ; 05 (720x) */
> -	{ {0xCE, 0x81, 0x94, 0x8A, 0x98, 0x00, 0x02, 0x00} },/* ; 06 (800x) */
> -	{ {0xCE, 0x8F, 0x82, 0x98, 0x06, 0x00, 0x07, 0x00} },/* ; 07 (1024x) */
> -	{ {0xCE, 0x9F, 0x92, 0xA8, 0x16, 0x00, 0x07, 0x00} } /* ; 08 (1280x) */
> -};
> -
> -/* CR06,CR07,CR10,CR11,CR15,CR16,SR0A */
> -static const struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11280x1024_2_Vx75[] = {
> -	{ {0x28, 0xD2, 0xAF, 0x83, 0xAE, 0xD8, 0xA1} },/* ; 00 (x350) */
> -	{ {0x28, 0xD2, 0xC8, 0x8C, 0xC7, 0xF2, 0x81} },/* ; 01 (x400) */
> -	{ {0x28, 0xD2, 0xF0, 0x84, 0xEF, 0x1A, 0xB1} },/* ; 02 (x480) */
> -	{ {0x28, 0xDE, 0x2C, 0x8F, 0x2B, 0x56, 0x91} },/* ; 03 (x600) */
> -	{ {0x28, 0xDE, 0x80, 0x83, 0x7F, 0xAA, 0x91} },/* ; 04 (x768) */
> -	{ {0x28, 0x5A, 0x13, 0x87, 0xFF, 0x29, 0xA9} } /* ; 05 (x1024) */
> -};
> -
> -/*add for new UNIVGABIOS*/
> -static const struct XGI330_LCDDataTablStruct XGI_LCDDataTable[] = {
> -	{Panel_1024x768, 0x0019, 0x0001, XGI_ExtLCD1024x768Data },
> -	{Panel_1024x768, 0x0019, 0x0000, XGI_StLCD1024x768Data },
> -	{Panel_1024x768, 0x0018, 0x0010, XGI_CetLCD1024x768Data },
> -	{Panel_1280x1024, 0x0019, 0x0001, XGI_ExtLCD1280x1024Data },
> -	{Panel_1280x1024, 0x0019, 0x0000, XGI_StLCD1280x1024Data },
> -	{Panel_1280x1024, 0x0018, 0x0010, XGI_CetLCD1280x1024Data },
> -	{Panel_1400x1050, 0x0019, 0x0001, xgifb_lcd_1400x1050 },
> -	{Panel_1400x1050, 0x0019, 0x0000, xgifb_lcd_1400x1050 },
> -	{Panel_1400x1050, 0x0018, 0x0010, XGI_CetLCD1400x1050Data },
> -	{Panel_1600x1200, 0x0019, 0x0001, XGI_ExtLCD1600x1200Data },
> -	{Panel_1600x1200, 0x0019, 0x0000, XGI_StLCD1600x1200Data },
> -	{PanelRef60Hz, 0x0008, 0x0008, XGI_NoScalingData },
> -	{Panel_1024x768x75, 0x0019, 0x0001, XGI_ExtLCD1024x768x75Data },
> -	{Panel_1024x768x75, 0x0019, 0x0000, XGI_ExtLCD1024x768x75Data },
> -	{Panel_1024x768x75, 0x0018, 0x0010, XGI_CetLCD1024x768x75Data },
> -	{Panel_1280x1024x75, 0x0019, 0x0001, xgifb_lcd_1280x1024x75 },
> -	{Panel_1280x1024x75, 0x0019, 0x0000, xgifb_lcd_1280x1024x75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0010, XGI_CetLCD1280x1024x75Data },
> -	{PanelRef75Hz, 0x0008, 0x0008, XGI_NoScalingDatax75 },
> -	{0xFF, 0x0000, 0x0000, NULL } /* End of table */
> -};
> -
> -static const struct XGI330_LCDDataTablStruct XGI_LCDDesDataTable[] = {
> -	{Panel_1024x768, 0x0019, 0x0001, XGI_ExtLCDDes1024x768Data },
> -	{Panel_1024x768, 0x0019, 0x0000, XGI_StLCDDes1024x768Data },
> -	{Panel_1024x768, 0x0018, 0x0010, XGI_CetLCDDes1024x768Data },
> -	{Panel_1280x1024, 0x0019, 0x0001, XGI_ExtLCDDes1280x1024Data },
> -	{Panel_1280x1024, 0x0019, 0x0000, XGI_StLCDDes1280x1024Data },
> -	{Panel_1280x1024, 0x0018, 0x0010, XGI_CetLCDDes1280x1024Data },
> -	{Panel_1400x1050, 0x0019, 0x0001, xgifb_lcddes_1400x1050 },
> -	{Panel_1400x1050, 0x0019, 0x0000, xgifb_lcddes_1400x1050 },
> -	{Panel_1400x1050, 0x0418, 0x0010, XGI_CetLCDDes1400x1050Data },
> -	{Panel_1400x1050, 0x0418, 0x0410, XGI_CetLCDDes1400x1050Data2 },
> -	{Panel_1600x1200, 0x0019, 0x0001, XGI_ExtLCDDes1600x1200Data },
> -	{Panel_1600x1200, 0x0019, 0x0000, XGI_StLCDDes1600x1200Data },
> -	{PanelRef60Hz, 0x0008, 0x0008, XGI_NoScalingDesData },
> -	{Panel_1024x768x75, 0x0019, 0x0001, xgifb_lcddes_1024x768x75 },
> -	{Panel_1024x768x75, 0x0019, 0x0000, xgifb_lcddes_1024x768x75 },
> -	{Panel_1024x768x75, 0x0018, 0x0010, XGI_CetLCDDes1024x768x75Data },
> -	{Panel_1280x1024x75, 0x0019, 0x0001, xgifb_lcddes_1280x1024x75 },
> -	{Panel_1280x1024x75, 0x0019, 0x0000, xgifb_lcddes_1280x1024x75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0010, XGI_CetLCDDes1280x1024x75Data },
> -	{PanelRef75Hz, 0x0008, 0x0008, XGI_NoScalingDesDatax75 },
> -	{0xFF, 0x0000, 0x0000, NULL }
> -};
> -
> -static const struct XGI330_LCDDataTablStruct xgifb_lcddldes[] = {
> -	{Panel_1024x768, 0x0019, 0x0001, XGI_ExtLCDDes1024x768Data },
> -	{Panel_1024x768, 0x0019, 0x0000, XGI_StLCDDes1024x768Data },
> -	{Panel_1024x768, 0x0018, 0x0010, XGI_CetLCDDes1024x768Data },
> -	{Panel_1280x1024, 0x0019, 0x0001, XGI_ExtLCDDLDes1280x1024Data },
> -	{Panel_1280x1024, 0x0019, 0x0000, XGI_StLCDDLDes1280x1024Data },
> -	{Panel_1280x1024, 0x0018, 0x0010, XGI_CetLCDDLDes1280x1024Data },
> -	{Panel_1400x1050, 0x0019, 0x0001, xgifb_lcddldes_1400x1050 },
> -	{Panel_1400x1050, 0x0019, 0x0000, xgifb_lcddldes_1400x1050 },
> -	{Panel_1400x1050, 0x0418, 0x0010, XGI_CetLCDDes1400x1050Data },
> -	{Panel_1400x1050, 0x0418, 0x0410, XGI_CetLCDDes1400x1050Data2 },
> -	{Panel_1600x1200, 0x0019, 0x0001, XGI_ExtLCDDLDes1600x1200Data },
> -	{Panel_1600x1200, 0x0019, 0x0000, XGI_StLCDDLDes1600x1200Data },
> -	{PanelRef60Hz, 0x0008, 0x0008, XGI_NoScalingDesData },
> -	{Panel_1024x768x75, 0x0019, 0x0001, xgifb_lcddes_1024x768x75 },
> -	{Panel_1024x768x75, 0x0019, 0x0000, xgifb_lcddes_1024x768x75 },
> -	{Panel_1024x768x75, 0x0018, 0x0010, XGI_CetLCDDes1024x768x75Data },
> -	{Panel_1280x1024x75, 0x0019, 0x0001, xgifb_lcddldes_1280x1024x75 },
> -	{Panel_1280x1024x75, 0x0019, 0x0000, xgifb_lcddldes_1280x1024x75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0010, XGI_CetLCDDLDes1280x1024x75Data },
> -	{PanelRef75Hz, 0x0008, 0x0008, XGI_NoScalingDesDatax75 },
> -	{0xFF, 0x0000, 0x0000, NULL }
> -};
> -
> -static const struct XGI330_LCDDataTablStruct xgifb_epllcd_crt1_h[] = {
> -	{Panel_1024x768, 0x0018, 0x0000, XGI_LVDSCRT11024x768_1_H },
> -	{Panel_1024x768, 0x0018, 0x0010, XGI_LVDSCRT11024x768_2_H },
> -	{Panel_1280x1024, 0x0018, 0x0000, XGI_LVDSCRT11280x1024_1_H },
> -	{Panel_1280x1024, 0x0018, 0x0010, XGI_LVDSCRT11280x1024_2_H },
> -	{Panel_1400x1050, 0x0018, 0x0000, XGI_LVDSCRT11400x1050_1_H },
> -	{Panel_1400x1050, 0x0018, 0x0010, XGI_LVDSCRT11400x1050_2_H },
> -	{Panel_1600x1200, 0x0018, 0x0000, XGI_LVDSCRT11600x1200_1_H },
> -	{Panel_1024x768x75, 0x0018, 0x0000, XGI_LVDSCRT11024x768_1_Hx75 },
> -	{Panel_1024x768x75, 0x0018, 0x0010, XGI_LVDSCRT11024x768_2_Hx75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0000, XGI_LVDSCRT11280x1024_1_Hx75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0010, XGI_LVDSCRT11280x1024_2_Hx75 },
> -	{0xFF, 0x0000, 0x0000, NULL }
> -};
> -
> -static const struct XGI330_LCDDataTablStruct xgifb_epllcd_crt1_v[] = {
> -	{Panel_1024x768, 0x0018, 0x0000, XGI_LVDSCRT11024x768_1_V },
> -	{Panel_1024x768, 0x0018, 0x0010, XGI_LVDSCRT11024x768_2_V },
> -	{Panel_1280x1024, 0x0018, 0x0000, XGI_LVDSCRT11280x1024_1_V },
> -	{Panel_1280x1024, 0x0018, 0x0010, XGI_LVDSCRT11280x1024_2_V },
> -	{Panel_1400x1050, 0x0018, 0x0000, XGI_LVDSCRT11400x1050_1_V },
> -	{Panel_1400x1050, 0x0018, 0x0010, XGI_LVDSCRT11400x1050_2_V },
> -	{Panel_1600x1200, 0x0018, 0x0000, XGI_LVDSCRT11600x1200_1_V },
> -	{Panel_1024x768x75, 0x0018, 0x0000, XGI_LVDSCRT11024x768_1_Vx75 },
> -	{Panel_1024x768x75, 0x0018, 0x0010, XGI_LVDSCRT11024x768_2_Vx75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0000, XGI_LVDSCRT11280x1024_1_Vx75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0010, XGI_LVDSCRT11280x1024_2_Vx75 },
> -	{0xFF, 0x0000, 0x0000, NULL }
> -};
> -
> -static const struct XGI330_LCDDataTablStruct XGI_EPLLCDDataPtr[] = {
> -	{Panel_1024x768, 0x0018, 0x0000, XGI_LVDS1024x768Data_1 },
> -	{Panel_1024x768, 0x0018, 0x0010, XGI_LVDS1024x768Data_2 },
> -	{Panel_1280x1024, 0x0018, 0x0000, XGI_LVDS1280x1024Data_1 },
> -	{Panel_1280x1024, 0x0018, 0x0010, XGI_LVDS1280x1024Data_2 },
> -	{Panel_1400x1050, 0x0018, 0x0000, XGI_LVDS1400x1050Data_1 },
> -	{Panel_1400x1050, 0x0018, 0x0010, XGI_LVDS1400x1050Data_2 },
> -	{Panel_1600x1200, 0x0018, 0x0000, XGI_LVDS1600x1200Data_1 },
> -	{PanelRef60Hz, 0x0008, 0x0008, XGI_LVDSNoScalingData },
> -	{Panel_1024x768x75, 0x0018, 0x0000, XGI_LVDS1024x768Data_1x75 },
> -	{Panel_1024x768x75, 0x0018, 0x0010, XGI_LVDS1024x768Data_2x75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0000, XGI_LVDS1280x1024Data_1x75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0010, XGI_LVDS1280x1024Data_2x75 },
> -	{PanelRef75Hz, 0x0008, 0x0008, XGI_LVDSNoScalingDatax75 },
> -	{0xFF, 0x0000, 0x0000, NULL }
> -};
> -
> -static const struct XGI330_LCDDataTablStruct XGI_EPLLCDDesDataPtr[] = {
> -	{Panel_1024x768, 0x0018, 0x0000, XGI_LVDS1024x768Des_1 },
> -	{Panel_1024x768, 0x0618, 0x0410, XGI_LVDS1024x768Des_3 },
> -	{Panel_1024x768, 0x0018, 0x0010, XGI_LVDS1024x768Des_2 },
> -	{Panel_1280x1024, 0x0018, 0x0000, XGI_LVDS1280x1024Des_1 },
> -	{Panel_1280x1024, 0x0018, 0x0010, XGI_LVDS1280x1024Des_2 },
> -	{Panel_1400x1050, 0x0018, 0x0000, XGI_LVDS1400x1050Des_1 },
> -	{Panel_1400x1050, 0x0018, 0x0010, XGI_LVDS1400x1050Des_2 },
> -	{Panel_1600x1200, 0x0018, 0x0000, XGI_LVDS1600x1200Des_1 },
> -	{PanelRef60Hz, 0x0008, 0x0008, XGI_LVDSNoScalingDesData },
> -	{Panel_1024x768x75, 0x0018, 0x0000, XGI_LVDS1024x768Des_1x75 },
> -	{Panel_1024x768x75, 0x0618, 0x0410, XGI_LVDS1024x768Des_3x75 },
> -	{Panel_1024x768x75, 0x0018, 0x0010, XGI_LVDS1024x768Des_2x75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0000, XGI_LVDS1280x1024Des_1x75 },
> -	{Panel_1280x1024x75, 0x0018, 0x0010, XGI_LVDS1280x1024Des_2x75 },
> -	{PanelRef75Hz, 0x0008, 0x0008, XGI_LVDSNoScalingDesDatax75 },
> -	{0xFF, 0x0000, 0x0000, NULL }
> -};
> -
> -static const struct XGI330_TVDataTablStruct XGI_TVDataTable[] = {
> -	{0x09E1, 0x0001, XGI_ExtPALData},
> -	{0x09E1, 0x0000, XGI_ExtNTSCData},
> -	{0x09E1, 0x0801, XGI_StPALData},
> -	{0x09E1, 0x0800, XGI_StNTSCData},
> -	{0x49E0, 0x0100, XGI_ExtHiTVData},
> -	{0x49E0, 0x4100, XGI_St2HiTVData},
> -	{0x49E0, 0x4900, XGI_St1HiTVData},
> -	{0x09E0, 0x0020, XGI_ExtYPbPr525iData},
> -	{0x09E0, 0x0040, XGI_ExtYPbPr525pData},
> -	{0x09E0, 0x0080, XGI_ExtYPbPr750pData},
> -	{0x09E0, 0x0820, XGI_StYPbPr525iData},
> -	{0x09E0, 0x0840, XGI_StYPbPr525pData},
> -	{0x09E0, 0x0880, XGI_StYPbPr750pData},
> -	{0xffff, 0x0000, XGI_ExtNTSCData},
> -};
> -
> -/* Dual link only */
> -static const struct XGI330_LCDCapStruct XGI_LCDDLCapList[] = {
> -/* LCDCap1024x768 */
> -	{Panel_1024x768, DefaultLCDCap, 0x88, 0x06, VCLK65_315,
> -	0x6C, 0xC3, 0x35, 0x62,
> -	0x0A, 0xC0, 0x28, 0x10},
> -/* LCDCap1280x1024 */
> -	{Panel_1280x1024, XGI_LCDDualLink + DefaultLCDCap,
> -	0x70, 0x03, VCLK108_2_315,
> -	0x70, 0x44, 0xF8, 0x2F,
> -	0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCap1400x1050 */
> -	{Panel_1400x1050, XGI_LCDDualLink + DefaultLCDCap,
> -	0x70, 0x03, VCLK108_2_315,
> -	 0x70, 0x44, 0xF8, 0x2F,
> -	 0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCap1600x1200 */
> -	{Panel_1600x1200, XGI_LCDDualLink + DefaultLCDCap,
> -	0xC0, 0x03, VCLK162,
> -	 0x43, 0x22, 0x70, 0x24,
> -	 0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCap1024x768x75 */
> -	{Panel_1024x768x75, DefaultLCDCap, 0x60, 0, VCLK78_75,
> -	 0x2B, 0x61, 0x2B, 0x61,
> -	 0x0A, 0xC0, 0x28, 0x10},
> -/* LCDCap1280x1024x75 */
> -	{Panel_1280x1024x75, XGI_LCDDualLink + DefaultLCDCap,
> -	 0x90, 0x03, VCLK135_5,
> -	 0x54, 0x42, 0x4A, 0x61,
> -	 0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCapDefault */
> -	{0xFF, DefaultLCDCap, 0x88, 0x06, VCLK65_315,
> -	0x6C, 0xC3, 0x35, 0x62,
> -	0x0A, 0xC0, 0x28, 0x10}
> -};
> -
> -static const struct XGI330_LCDCapStruct XGI_LCDCapList[] = {
> -/* LCDCap1024x768 */
> -	{Panel_1024x768, DefaultLCDCap, 0x88, 0x06, VCLK65_315,
> -	0x6C, 0xC3, 0x35, 0x62,
> -	0x0A, 0xC0, 0x28, 0x10},
> -/* LCDCap1280x1024 */
> -	{Panel_1280x1024, DefaultLCDCap,
> -	0x70, 0x03, VCLK108_2_315,
> -	0x70, 0x44, 0xF8, 0x2F,
> -	0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCap1400x1050 */
> -	{Panel_1400x1050, DefaultLCDCap,
> -	 0x70, 0x03, VCLK108_2_315,
> -	 0x70, 0x44, 0xF8, 0x2F,
> -	 0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCap1600x1200 */
> -	{Panel_1600x1200, DefaultLCDCap,
> -	 0xC0, 0x03, VCLK162,
> -	 0x5A, 0x23, 0x5A, 0x23,
> -	 0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCap1024x768x75 */
> -	{Panel_1024x768x75, DefaultLCDCap, 0x60, 0, VCLK78_75,
> -	 0x2B, 0x61, 0x2B, 0x61,
> -	 0x0A, 0xC0, 0x28, 0x10},
> -/* LCDCap1280x1024x75 */
> -	{Panel_1280x1024x75, DefaultLCDCap,
> -	 0x90, 0x03, VCLK135_5,
> -	 0x54, 0x42, 0x4A, 0x61,
> -	 0x0A, 0xC0, 0x30, 0x10},
> -/* LCDCapDefault */
> -	{0xFF, DefaultLCDCap, 0x88, 0x06, VCLK65_315,
> -	0x6C, 0xC3, 0x35, 0x62,
> -	0x0A, 0xC0, 0x28, 0x10}
> -};
> -
> -const struct XGI_Ext2Struct XGI330_RefIndex[] = {
> -	{Mode32Bpp + SupportAllCRT2 + SyncPN, RES320x200, VCLK25_175,
> -	0x00, 0x10, 0x59, 320, 200},/* 00 */
> -	{Mode32Bpp + SupportAllCRT2 + SyncPN, RES320x200, VCLK25_175,
> -	0x00, 0x10, 0x00, 320, 400},/* 01 */
> -	{Mode32Bpp + SupportAllCRT2 + SyncNN, RES320x240, VCLK25_175,
> -	0x04, 0x20, 0x50, 320, 240},/* 02 */
> -	{Mode32Bpp + SupportAllCRT2 + SyncPP, RES400x300, VCLK40,
> -	0x05, 0x32, 0x51, 400, 300},/* 03 */
> -	{Mode32Bpp + NoSupportTV + SyncNN + SupportTV1024, RES512x384,
> -	VCLK65_315, 0x06, 0x43, 0x52, 512, 384},/* 04 */
> -	{Mode32Bpp + SupportAllCRT2 + SyncPN, RES640x400, VCLK25_175,
> -	0x00, 0x14, 0x2f, 640, 400},/* 05 */
> -	{Mode32Bpp + SupportAllCRT2 + SyncNN, RES640x480x60, VCLK25_175,
> -	0x04, 0x24, 0x2e, 640, 480},/* 06 640x480x60Hz (LCD 640x480x60z) */
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncNN, RES640x480x72, VCLK31_5,
> -	0x04, 0x24, 0x2e, 640, 480},/* 07 640x480x72Hz (LCD 640x480x70Hz) */
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncNN, RES640x480x75, VCLK31_5,
> -	0x47, 0x24, 0x2e, 640, 480},/* 08 640x480x75Hz (LCD 640x480x75Hz) */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncNN, RES640x480x85, VCLK36,
> -	0x8A, 0x24, 0x2e, 640, 480},/* 09 640x480x85Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES640x480x100, VCLK43_163,
> -	0x00, 0x24, 0x2e, 640, 480},/* 0a 640x480x100Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES640x480x120, VCLK52_406,
> -	0x00, 0x24, 0x2e, 640, 480},/* 0b 640x480x120Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES640x480x160, VCLK72_852,
> -	0x00, 0x24, 0x2e, 640, 480},/* 0c 640x480x160Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncNN, RES640x480x200, VCLK86_6,
> -	0x00, 0x24, 0x2e, 640, 480},/* 0d 640x480x200Hz */
> -	{Mode32Bpp + NoSupportLCD + SyncPP, RES800x600x56, VCLK36,
> -	0x05, 0x36, 0x6a, 800, 600},/* 0e 800x600x56Hz */
> -	{Mode32Bpp + NoSupportTV + SyncPP, RES800x600x60, VCLK40,
> -	0x05, 0x36, 0x6a, 800, 600},/* 0f 800x600x60Hz (LCD 800x600x60Hz) */
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncPP, RES800x600x72, VCLK50,
> -	0x48, 0x36, 0x6a, 800, 600},/* 10 800x600x72Hz (LCD 800x600x70Hz) */
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncPP, RES800x600x75, VCLK49_5,
> -	0x8B, 0x36, 0x6a, 800, 600},/* 11 800x600x75Hz (LCD 800x600x75Hz) */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES800x600x85, VCLK56_25,
> -	0x00, 0x36, 0x6a, 800, 600},/* 12 800x600x85Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES800x600x100, VCLK68_179,
> -	0x00, 0x36, 0x6a, 800, 600},/* 13 800x600x100Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES800x600x120, VCLK83_95,
> -	0x00, 0x36, 0x6a, 800, 600},/* 14 800x600x120Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES800x600x160, VCLK116_406,
> -	0x00, 0x36, 0x6a, 800, 600},/* 15 800x600x160Hz */
> -	{Mode32Bpp + InterlaceMode + SyncPP, RES1024x768x43, VCLK44_9,
> -	0x00, 0x47, 0x37, 1024, 768},/* 16 1024x768x43Hz */
> -	/* 17 1024x768x60Hz (LCD 1024x768x60Hz) */
> -	{Mode32Bpp + NoSupportTV + SyncNN + SupportTV1024, RES1024x768x60,
> -	VCLK65_315, 0x06, 0x47, 0x37, 1024, 768},
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncNN, RES1024x768x70, VCLK75,
> -	0x49, 0x47, 0x37, 1024, 768},/* 18 1024x768x70Hz (LCD 1024x768x70Hz) */
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncPP, RES1024x768x75, VCLK78_75,
> -	0x00, 0x47, 0x37, 1024, 768},/* 19 1024x768x75Hz (LCD 1024x768x75Hz) */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES1024x768x85, VCLK94_5,
> -	0x8C, 0x47, 0x37, 1024, 768},/* 1a 1024x768x85Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES1024x768x100, VCLK113_309,
> -	0x00, 0x47, 0x37, 1024, 768},/* 1b 1024x768x100Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES1024x768x120, VCLK139_054,
> -	0x00, 0x47, 0x37, 1024, 768},/* 1c 1024x768x120Hz */
> -	{Mode32Bpp + SupportLCD + SyncPP, RES1280x960x60, VCLK108_2_315,
> -	0x08, 0x58, 0x7b, 1280, 960},/* 1d 1280x960x60Hz */
> -	{Mode32Bpp + InterlaceMode + SyncPP, RES1280x1024x43, VCLK78_75,
> -	0x00, 0x58, 0x3a, 1280, 1024},/* 1e 1280x1024x43Hz */
> -	{Mode32Bpp + NoSupportTV + SyncPP, RES1280x1024x60, VCLK108_2_315,
> -	0x07, 0x58, 0x3a, 1280, 1024},/*1f 1280x1024x60Hz (LCD 1280x1024x60Hz)*/
> -	{Mode32Bpp + NoSupportTV + SyncPP, RES1280x1024x75, VCLK135_5,
> -	0x00, 0x58, 0x3a, 1280, 1024},/*20 1280x1024x75Hz (LCD 1280x1024x75Hz)*/
> -	{Mode32Bpp + SyncPP, RES1280x1024x85, VCLK157_5,
> -	0x00, 0x58, 0x3a, 1280, 1024},/* 21 1280x1024x85Hz */
> -	/* 22 1600x1200x60Hz */
> -	{Mode32Bpp + SupportLCD + SyncPP + SupportCRT2in301C,
> -	RES1600x1200x60, VCLK162, 0x09, 0x7A, 0x3c, 1600, 1200},
> -	{Mode32Bpp + SyncPP + SupportCRT2in301C, RES1600x1200x65, VCLK175,
> -	0x00, 0x69, 0x3c, 1600, 1200},/* 23 1600x1200x65Hz */
> -	{Mode32Bpp + SyncPP + SupportCRT2in301C, RES1600x1200x70, VCLK189,
> -	0x00, 0x69, 0x3c, 1600, 1200},/* 24 1600x1200x70Hz */
> -	{Mode32Bpp + SyncPP + SupportCRT2in301C, RES1600x1200x75, VCLK202_5,
> -	0x00, 0x69, 0x3c, 1600, 1200},/* 25 1600x1200x75Hz */
> -	{Mode32Bpp + SyncPP, RES1600x1200x85, VCLK229_5,
> -	0x00, 0x69, 0x3c, 1600, 1200},/* 26 1600x1200x85Hz */
> -	{Mode32Bpp + SyncPP, RES1600x1200x100, VCLK269_655,
> -	0x00, 0x69, 0x3c, 1600, 1200},/* 27 1600x1200x100Hz */
> -	{Mode32Bpp + SyncPP, RES1600x1200x120, VCLK323_586,
> -	0x00, 0x69, 0x3c, 1600, 1200},/* 28 1600x1200x120Hz */
> -	{Mode32Bpp + SupportLCD + SyncNP, RES1920x1440x60, VCLK234,
> -	0x00, 0x00, 0x68, 1920, 1440},/* 29 1920x1440x60Hz */
> -	{Mode32Bpp + SyncPN, RES1920x1440x65, VCLK254_817,
> -	0x00, 0x00, 0x68, 1920, 1440},/* 2a 1920x1440x65Hz */
> -	{Mode32Bpp + SyncPN, RES1920x1440x70, VCLK277_015,
> -	0x00, 0x00, 0x68, 1920, 1440},/* 2b 1920x1440x70Hz */
> -	{Mode32Bpp + SyncPN, RES1920x1440x75, VCLK291_132,
> -	0x00, 0x00, 0x68, 1920, 1440},/* 2c 1920x1440x75Hz */
> -	{Mode32Bpp + SyncPN, RES1920x1440x85, VCLK330_615,
> -	0x00, 0x00, 0x68, 1920, 1440},/* 2d 1920x1440x85Hz */
> -	{Mode16Bpp + SyncPN, RES1920x1440x100, VCLK388_631,
> -	0x00, 0x00, 0x68, 1920, 1440},/* 2e 1920x1440x100Hz */
> -	{Mode32Bpp + SupportLCD + SyncPN, RES2048x1536x60, VCLK266_952,
> -	0x00, 0x00, 0x6c, 2048, 1536},/* 2f 2048x1536x60Hz */
> -	{Mode32Bpp + SyncPN, RES2048x1536x65, VCLK291_766,
> -	0x00, 0x00, 0x6c, 2048, 1536},/* 30 2048x1536x65Hz */
> -	{Mode32Bpp + SyncPN, RES2048x1536x70, VCLK315_195,
> -	0x00, 0x00, 0x6c, 2048, 1536},/* 31 2048x1536x70Hz */
> -	{Mode32Bpp + SyncPN, RES2048x1536x75, VCLK340_477,
> -	0x00, 0x00, 0x6c, 2048, 1536},/* 32 2048x1536x75Hz */
> -	{Mode16Bpp + SyncPN, RES2048x1536x85, VCLK375_847,
> -	0x00, 0x00, 0x6c, 2048, 1536},/* 33 2048x1536x85Hz */
> -	{Mode32Bpp + SupportHiVision + SupportRAMDAC2 +
> -	 SyncPP + SupportYPbPr750p, RES800x480x60, VCLK39_77,
> -	 0x08, 0x00, 0x70, 800, 480},/* 34 800x480x60Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES800x480x75, VCLK49_5,
> -	0x08, 0x00, 0x70, 800, 480},/* 35 800x480x75Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES800x480x85, VCLK56_25,
> -	0x08, 0x00, 0x70, 800, 480},/* 36 800x480x85Hz */
> -	{Mode32Bpp + SupportHiVision + SupportRAMDAC2 +
> -	 SyncPP + SupportYPbPr750p, RES1024x576x60, VCLK65_315,
> -	 0x09, 0x00, 0x71, 1024, 576},/* 37 1024x576x60Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES1024x576x75, VCLK78_75,
> -	0x09, 0x00, 0x71, 1024, 576},/* 38 1024x576x75Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES1024x576x85, VCLK94_5,
> -	0x09, 0x00, 0x71, 1024, 576},/* 39 1024x576x85Hz */
> -	{Mode32Bpp + SupportHiVision + SupportRAMDAC2 +
> -	SyncPP + SupportYPbPr750p, RES1280x720x60, VCLK108_2_315,
> -	0x0A, 0x00, 0x75, 1280, 720},/* 3a 1280x720x60Hz*/
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES1280x720x75, VCLK135_5,
> -	0x0A, 0x00, 0x75, 1280, 720},/* 3b 1280x720x75Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES1280x720x85, VCLK157_5,
> -	0x0A, 0x00, 0x75, 1280, 720},/* 3c 1280x720x85Hz */
> -	{Mode32Bpp + SupportTV + SyncNN, RES720x480x60, VCLK28_322,
> -	0x06, 0x00, 0x31,  720, 480},/* 3d 720x480x60Hz */
> -	{Mode32Bpp + SupportTV + SyncPP, RES720x576x56, VCLK36,
> -	0x06, 0x00, 0x32, 720, 576},/* 3e 720x576x56Hz */
> -	{Mode32Bpp + InterlaceMode + NoSupportLCD + SyncPP, RES856x480x79I,
> -	VCLK35_2, 0x00, 0x00, 0x00,  856, 480},/* 3f 856x480x79I */
> -	{Mode32Bpp + NoSupportLCD + SyncNN, RES856x480x60, VCLK35_2,
> -	0x00, 0x00, 0x00,  856, 480},/* 40 856x480x60Hz */
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncPP, RES1280x768x60,
> -	VCLK79_411, 0x08, 0x48, 0x23, 1280, 768},/* 41 1280x768x60Hz */
> -	{Mode32Bpp + NoSupportHiVisionTV + SyncPP, RES1400x1050x60,
> -	VCLK122_61, 0x08, 0x69, 0x26, 1400, 1050},/* 42 1400x1050x60Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES1152x864x60, VCLK80_350,
> -	0x37, 0x00, 0x20, 1152, 864},/* 43 1152x864x60Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPP, RES1152x864x75, VCLK107_385,
> -	0x37, 0x00, 0x20, 1152, 864},/* 44 1152x864x75Hz */
> -	{Mode32Bpp + SupportLCD + SupportRAMDAC2 + SyncPP, RES1280x960x75,
> -	VCLK125_999, 0x3A, 0x88, 0x7b, 1280, 960},/* 45 1280x960x75Hz */
> -	{Mode32Bpp + SupportLCD + SupportRAMDAC2 + SyncPP, RES1280x960x85,
> -	VCLK148_5, 0x0A, 0x88, 0x7b, 1280, 960},/* 46 1280x960x85Hz */
> -	{Mode32Bpp + SupportLCD + SupportRAMDAC2 + SyncPP, RES1280x960x120,
> -	VCLK217_325, 0x3A, 0x88, 0x7b, 1280, 960},/* 47 1280x960x120Hz */
> -	{Mode32Bpp + SupportRAMDAC2 + SyncPN, RES1024x768x160, VCLK139_054,
> -	0x30, 0x47, 0x37, 1024, 768},/* 48 1024x768x160Hz */
> -};
> -
> -static const unsigned char XGI330_ScreenOffset[] = {
> -	0x14, 0x19, 0x20, 0x28, 0x32, 0x40,
> -	0x50, 0x64, 0x78, 0x80, 0x2d, 0x35,
> -	0x57, 0x48
> -};
> -
> -static const struct SiS_ModeResInfo_S XGI330_ModeResInfo[] = {
> -	{ 320,  200, 8,  8},
> -	{ 320,  240, 8,  8},
> -	{ 320,  400, 8,  8},
> -	{ 400,  300, 8,  8},
> -	{ 512,  384, 8,  8},
> -	{ 640,  400, 8, 16},
> -	{ 640,  480, 8, 16},
> -	{ 800,  600, 8, 16},
> -	{1024,  768, 8, 16},
> -	{1280, 1024, 8, 16},
> -	{1600, 1200, 8, 16},
> -	{1920, 1440, 8, 16},
> -	{2048, 1536, 8, 16},
> -	{ 720,  480, 8, 16},
> -	{ 720,  576, 8, 16},
> -	{1280,  960, 8, 16},
> -	{ 800,  480, 8, 16},
> -	{1024,  576, 8, 16},
> -	{1280,  720, 8, 16},
> -	{ 856,  480, 8, 16},
> -	{1280,  768, 8, 16},
> -	{1400, 1050, 8, 16},
> -	{1152,  864, 8, 16}
> -};
> -
> -const struct SiS_VCLKData XGI_VCLKData[] = {
> -	/* SR2B,SR2C,SR2D */
> -	{0x1B, 0xE1,  25}, /* 00 (25.175MHz) */
> -	{0x4E, 0xE4,  28}, /* 01 (28.322MHz) */
> -	{0x57, 0xE4,  31}, /* 02 (31.500MHz) */
> -	{0xC3, 0xC8,  36}, /* 03 (36.000MHz) */
> -	{0x42, 0xE2,  40}, /* 04 (40.000MHz) */
> -	{0xFE, 0xCD,  43}, /* 05 (43.163MHz) */
> -	{0x5D, 0xC4,  44}, /* 06 (44.900MHz) */
> -	{0x52, 0xE2,  49}, /* 07 (49.500MHz) */
> -	{0x53, 0xE2,  50}, /* 08 (50.000MHz) */
> -	{0x74, 0x67,  52}, /* 09 (52.406MHz) */
> -	{0x6D, 0x66,  56}, /* 0A (56.250MHz) */
> -	{0x6C, 0xC3,  65}, /* 0B (65.000MHz) */
> -	{0x46, 0x44,  67}, /* 0C (67.765MHz) */
> -	{0xB1, 0x46,  68}, /* 0D (68.179MHz) */
> -	{0xD3, 0x4A,  72}, /* 0E (72.852MHz) */
> -	{0x29, 0x61,  75}, /* 0F (75.000MHz) */
> -	{0x6E, 0x46,  76}, /* 10 (75.800MHz) */
> -	{0x2B, 0x61,  78}, /* 11 (78.750MHz) */
> -	{0x31, 0x42,  79}, /* 12 (79.411MHz) */
> -	{0xAB, 0x44,  83}, /* 13 (83.950MHz) */
> -	{0x46, 0x25,  84}, /* 14 (84.800MHz) */
> -	{0x78, 0x29,  86}, /* 15 (86.600MHz) */
> -	{0x62, 0x44,  94}, /* 16 (94.500MHz) */
> -	{0x2B, 0x41, 104}, /* 17 (104.998MHz) */
> -	{0x3A, 0x23, 105}, /* 18 (105.882MHz) */
> -	{0x70, 0x44, 108}, /* 19 (107.862MHz) */
> -	{0x3C, 0x23, 109}, /* 1A (109.175MHz) */
> -	{0x5E, 0x43, 113}, /* 1B (113.309MHz) */
> -	{0xBC, 0x44, 116}, /* 1C (116.406MHz) */
> -	{0xE0, 0x46, 132}, /* 1D (132.258MHz) */
> -	{0x54, 0x42, 135}, /* 1E (135.500MHz) */
> -	{0x9C, 0x22, 139}, /* 1F (139.275MHz) */
> -	{0x41, 0x22, 157}, /* 20 (157.500MHz) */
> -	{0x70, 0x24, 162}, /* 21 (161.793MHz) */
> -	{0x30, 0x21, 175}, /* 22 (175.000MHz) */
> -	{0x4E, 0x22, 189}, /* 23 (188.520MHz) */
> -	{0xDE, 0x26, 194}, /* 24 (194.400MHz) */
> -	{0x62, 0x06, 202}, /* 25 (202.500MHz) */
> -	{0x3F, 0x03, 229}, /* 26 (229.500MHz) */
> -	{0xB8, 0x06, 234}, /* 27 (233.178MHz) */
> -	{0x34, 0x02, 253}, /* 28 (252.699MHz) */
> -	{0x58, 0x04, 255}, /* 29 (254.817MHz) */
> -	{0x24, 0x01, 265}, /* 2A (265.728MHz) */
> -	{0x9B, 0x02, 267}, /* 2B (266.952MHz) */
> -	{0x70, 0x05, 270}, /* 2C (269.65567MHz) */
> -	{0x25, 0x01, 272}, /* 2D (272.04199MHz) */
> -	{0x9C, 0x02, 277}, /* 2E (277.015MHz) */
> -	{0x27, 0x01, 286}, /* 2F (286.359985MHz) */
> -	{0xB3, 0x04, 291}, /* 30 (291.13266MHz) */
> -	{0xBC, 0x05, 292}, /* 31 (291.766MHz) */
> -	{0xF6, 0x0A, 310}, /* 32 (309.789459MHz) */
> -	{0x95, 0x01, 315}, /* 33 (315.195MHz) */
> -	{0xF0, 0x09, 324}, /* 34 (323.586792MHz) */
> -	{0xFE, 0x0A, 331}, /* 35 (330.615631MHz) */
> -	{0xF3, 0x09, 332}, /* 36 (332.177612MHz) */
> -	{0x5E, 0x03, 340}, /* 37 (340.477MHz) */
> -	{0xE8, 0x07, 376}, /* 38 (375.847504MHz) */
> -	{0xDE, 0x06, 389}, /* 39 (388.631439MHz) */
> -	{0x52, 0x2A,  54}, /* 3A (54.000MHz) */
> -	{0x52, 0x6A,  27}, /* 3B (27.000MHz) */
> -	{0x62, 0x24,  70}, /* 3C (70.874991MHz) */
> -	{0x62, 0x64,  70}, /* 3D (70.1048912MHz) */
> -	{0xA8, 0x4C,  30}, /* 3E (30.1048912MHz) */
> -	{0x20, 0x26,  33}, /* 3F (33.7499957MHz) */
> -	{0x31, 0xc2,  39}, /* 40 (39.77MHz) */
> -	{0x11, 0x21,  30}, /* 41 (30MHz) }// NTSC 1024X768 */
> -	{0x2E, 0x48,  25}, /* 42 (25.175MHz) }// ScaleLCD */
> -	{0x24, 0x46,  25}, /* 43 (25.175MHz) */
> -	{0x26, 0x64,  28}, /* 44 (28.322MHz) */
> -	{0x37, 0x64,  40}, /* 45 (40.000MHz) */
> -	{0xA1, 0x42, 108}, /* 46 (95.000MHz) }// QVGA */
> -	{0x37, 0x61, 100}, /* 47 (100.00MHz) */
> -	{0x78, 0x27, 108}, /* 48 (108.200MHz) */
> -	{0xBF, 0xC8,  35}, /* 49 (35.2MHz) */
> -	{0x66, 0x43, 123}, /* 4A (122.61Mhz) */
> -	{0x2C, 0x61,  80}, /* 4B (80.350Mhz) */
> -	{0x3B, 0x61, 108}, /* 4C (107.385Mhz) */
> -	{0x69, 0x61, 191}, /* 4D (190.96MHz ) */
> -	{0x4F, 0x22, 192}, /* 4E (192.069MHz) */
> -	{0x28, 0x26, 322}, /* 4F (322.273MHz) */
> -	{0x5C, 0x6B,  27}, /* 50 (27.74HMz) */
> -	{0x57, 0x24, 126}, /* 51 (125.999MHz) */
> -	{0x5C, 0x42, 148}, /* 52 (148.5MHz) */
> -	{0x42, 0x61, 120}, /* 53 (120.839MHz) */
> -	{0x62, 0x61, 178}, /* 54 (178.992MHz) */
> -	{0x59, 0x22, 217}, /* 55 (217.325MHz) */
> -	{0x29, 0x01, 300}, /* 56 (299.505Mhz) */
> -	{0x52, 0x63,  74}, /* 57 (74.25MHz) */
> -	{0xFF, 0x00,   0}  /* End mark */
> -};
> -
> -static const struct SiS_VBVCLKData XGI_VBVCLKData[] = {
> -	{0x1B, 0xE1,  25}, /* 00 (25.175MHz) */
> -	{0x4E, 0xE4,  28}, /* 01 (28.322MHz) */
> -	{0x57, 0xE4,  31}, /* 02 (31.500MHz) */
> -	{0xC3, 0xC8,  36}, /* 03 (36.000MHz) */
> -	{0x42, 0x47,  40}, /* 04 (40.000MHz) */
> -	{0xFE, 0xCD,  43}, /* 05 (43.163MHz) */
> -	{0x5D, 0xC4,  44}, /* 06 (44.900MHz) */
> -	{0x52, 0x47,  49}, /* 07 (49.500MHz) */
> -	{0x53, 0x47,  50}, /* 08 (50.000MHz) */
> -	{0x74, 0x67,  52}, /* 09 (52.406MHz) */
> -	{0x6D, 0x66,  56}, /* 0A (56.250MHz) */
> -	{0x35, 0x62,  65}, /* 0B (65.000MHz) */
> -	{0x46, 0x44,  67}, /* 0C (67.765MHz) */
> -	{0xB1, 0x46,  68}, /* 0D (68.179MHz) */
> -	{0xD3, 0x4A,  72}, /* 0E (72.852MHz) */
> -	{0x29, 0x61,  75}, /* 0F (75.000MHz) */
> -	{0x6D, 0x46,  75}, /* 10 (75.800MHz) */
> -	{0x41, 0x43,  78}, /* 11 (78.750MHz) */
> -	{0x31, 0x42,  79}, /* 12 (79.411MHz) */
> -	{0xAB, 0x44,  83}, /* 13 (83.950MHz) */
> -	{0x46, 0x25,  84}, /* 14 (84.800MHz) */
> -	{0x78, 0x29,  86}, /* 15 (86.600MHz) */
> -	{0x62, 0x44,  94}, /* 16 (94.500MHz) */
> -	{0x2B, 0x22, 104}, /* 17 (104.998MHz) */
> -	{0x49, 0x24, 105}, /* 18 (105.882MHz) */
> -	{0xF8, 0x2F, 108}, /* 19 (108.279MHz) */
> -	{0x3C, 0x23, 109}, /* 1A (109.175MHz) */
> -	{0x5E, 0x43, 113}, /* 1B (113.309MHz) */
> -	{0xBC, 0x44, 116}, /* 1C (116.406MHz) */
> -	{0xE0, 0x46, 132}, /* 1D (132.258MHz) */
> -	{0xD4, 0x28, 135}, /* 1E (135.220MHz) */
> -	{0xEA, 0x2A, 139}, /* 1F (139.275MHz) */
> -	{0x41, 0x22, 157}, /* 20 (157.500MHz) */
> -	{0x70, 0x24, 162}, /* 21 (161.793MHz) */
> -	{0x30, 0x21, 175}, /* 22 (175.000MHz) */
> -	{0x4E, 0x22, 189}, /* 23 (188.520MHz) */
> -	{0xDE, 0x26, 194}, /* 24 (194.400MHz) */
> -	{0x70, 0x07, 202}, /* 25 (202.500MHz) */
> -	{0x3F, 0x03, 229}, /* 26 (229.500MHz) */
> -	{0xB8, 0x06, 234}, /* 27 (233.178MHz) */
> -	{0x34, 0x02, 253}, /* 28 (252.699997 MHz) */
> -	{0x58, 0x04, 255}, /* 29 (254.817MHz) */
> -	{0x24, 0x01, 265}, /* 2A (265.728MHz) */
> -	{0x9B, 0x02, 267}, /* 2B (266.952MHz) */
> -	{0x70, 0x05, 270}, /* 2C (269.65567 MHz) */
> -	{0x25, 0x01, 272}, /* 2D (272.041992 MHz) */
> -	{0x9C, 0x02, 277}, /* 2E (277.015MHz) */
> -	{0x27, 0x01, 286}, /* 2F (286.359985 MHz) */
> -	{0x3C, 0x02, 291}, /* 30 (291.132660 MHz) */
> -	{0xEF, 0x0A, 292}, /* 31 (291.766MHz) */
> -	{0xF6, 0x0A, 310}, /* 32 (309.789459 MHz) */
> -	{0x95, 0x01, 315}, /* 33 (315.195MHz) */
> -	{0xF0, 0x09, 324}, /* 34 (323.586792 MHz) */
> -	{0xFE, 0x0A, 331}, /* 35 (330.615631 MHz) */
> -	{0xF3, 0x09, 332}, /* 36 (332.177612 MHz) */
> -	{0xEA, 0x08, 340}, /* 37 (340.477MHz) */
> -	{0xE8, 0x07, 376}, /* 38 (375.847504 MHz) */
> -	{0xDE, 0x06, 389}, /* 39 (388.631439 MHz) */
> -	{0x52, 0x2A,  54}, /* 3A (54.000MHz) */
> -	{0x52, 0x6A,  27}, /* 3B (27.000MHz) */
> -	{0x62, 0x24,  70}, /* 3C (70.874991MHz) */
> -	{0x62, 0x64,  70}, /* 3D (70.1048912MHz) */
> -	{0xA8, 0x4C,  30}, /* 3E (30.1048912MHz) */
> -	{0x20, 0x26,  33}, /* 3F (33.7499957MHz) */
> -	{0x31, 0xc2,  39}, /* 40 (39.77MHz) */
> -	{0x11, 0x21,  30}, /* 41 (30MHz) }// NTSC 1024X768 */
> -	{0x2E, 0x48,  25}, /* 42 (25.175MHz) }// ScaleLCD */
> -	{0x24, 0x46,  25}, /* 43 (25.175MHz) */
> -	{0x26, 0x64,  28}, /* 44 (28.322MHz) */
> -	{0x37, 0x64,  40}, /* 45 (40.000MHz) */
> -	{0xA1, 0x42, 108}, /* 46 (95.000MHz) }// QVGA */
> -	{0x37, 0x61, 100}, /* 47 (100.00MHz) */
> -	{0x78, 0x27, 108}, /* 48 (108.200MHz) */
> -	{0xBF, 0xC8, 35 }, /* 49 (35.2MHz) */
> -	{0x66, 0x43, 123}, /* 4A (122.61Mhz) */
> -	{0x2C, 0x61, 80 }, /* 4B (80.350Mhz) */
> -	{0x3B, 0x61, 108}, /* 4C (107.385Mhz) */
> -	{0x69, 0x61, 191}, /* 4D (190.96MHz ) */
> -	{0x4F, 0x22, 192}, /* 4E (192.069MHz) */
> -	{0x28, 0x26, 322}, /* 4F (322.273MHz) */
> -	{0x5C, 0x6B,  27}, /* 50 (27.74HMz) */
> -	{0x57, 0x24, 126}, /* 51 (125.999MHz) */
> -	{0x5C, 0x42, 148}, /* 52 (148.5MHz) */
> -	{0x42, 0x61, 120}, /* 53 (120.839MHz) */
> -	{0x62, 0x61, 178}, /* 54 (178.992MHz) */
> -	{0x59, 0x22, 217}, /* 55 (217.325MHz) */
> -	{0x29, 0x01, 300}, /* 56 (299.505Mhz) */
> -	{0x52, 0x63,  74}, /* 57 (74.25MHz) */
> -	{0xFF, 0x00,   0}  /* End mark */
> -};
> -
> -#define XGI301TVDelay 0x22
> -#define XGI301LCDDelay 0x12
> -
> -static const unsigned char TVAntiFlickList[] = {/* NTSCAntiFlicker */
> -	0x04, /* ; 0 Adaptive */
> -	0x00, /* ; 1 new anti-flicker ? */
> -
> -	0x04, /* ; 0 Adaptive */
> -	0x08, /* ; 1 new anti-flicker ? */
> -
> -	0x04, /* ; 0 ? */
> -	0x00  /* ; 1 new anti-flicker ? */
> -};
> -
> -static const unsigned char TVEdgeList[] = {
> -	0x00, /* ; 0 NTSC No Edge enhance */
> -	0x04, /* ; 1 NTSC Adaptive Edge enhance */
> -	0x00, /* ; 0 PAL No Edge enhance */
> -	0x04, /* ; 1 PAL Adaptive Edge enhance */
> -	0x00, /* ; 0 HiTV */
> -	0x00  /* ; 1 HiTV */
> -};
> -
> -static const unsigned long TVPhaseList[] = {
> -	0x08BAED21, /* ; 0 NTSC phase */
> -	0x00E3052A, /* ; 1 PAL phase */
> -	0x9B2EE421, /* ; 2 PAL-M phase */
> -	0xBA3EF421, /* ; 3 PAL-N phase */
> -	0xA7A28B1E, /* ; 4 NTSC 1024x768 */
> -	0xE00A831E, /* ; 5 PAL-M 1024x768 */
> -	0x00000000, /* ; 6 reserved */
> -	0x00000000, /* ; 7 reserved */
> -	0xD67BF021, /* ; 8 NTSC phase */
> -	0xE986092A, /* ; 9 PAL phase */
> -	0xA4EFE621, /* ; A PAL-M phase */
> -	0x4694F621, /* ; B PAL-N phase */
> -	0x8BDE711C, /* ; C NTSC 1024x768 */
> -	0xE00A831E  /* ; D PAL-M 1024x768 */
> -};
> -
> -static const unsigned char NTSCYFilter1[] = {
> -	0x00, 0xF4, 0x10, 0x38, /* 0 : 320x text mode */
> -	0x00, 0xF4, 0x10, 0x38, /* 1 : 360x text mode */
> -	0xEB, 0x04, 0x25, 0x18, /* 2 : 640x text mode */
> -	0xF1, 0x04, 0x1F, 0x18, /* 3 : 720x text mode */
> -	0x00, 0xF4, 0x10, 0x38, /* 4 : 320x gra. mode */
> -	0xEB, 0x04, 0x25, 0x18, /* 5 : 640x gra. mode */
> -	0xEB, 0x15, 0x25, 0xF6  /* 6 : 800x gra. mode */
> -};
> -
> -static const unsigned char PALYFilter1[] = {
> -	0x00, 0xF4, 0x10, 0x38, /* 0 : 320x text mode */
> -	0x00, 0xF4, 0x10, 0x38, /* 1 : 360x text mode */
> -	0xF1, 0xF7, 0x1F, 0x32, /* 2 : 640x text mode */
> -	0xF3, 0x00, 0x1D, 0x20, /* 3 : 720x text mode */
> -	0x00, 0xF4, 0x10, 0x38, /* 4 : 320x gra. mode */
> -	0xF1, 0xF7, 0x1F, 0x32, /* 5 : 640x gra. mode */
> -	0xFC, 0xFB, 0x14, 0x2A  /* 6 : 800x gra. mode */
> -};
> -
> -static const unsigned char xgifb_palmn_yfilter1[] = {
> -	0x00, 0xF4, 0x10, 0x38, /* 0 : 320x text mode */
> -	0x00, 0xF4, 0x10, 0x38, /* 1 : 360x text mode */
> -	0xEB, 0x04, 0x10, 0x18, /* 2 : 640x text mode */
> -	0xF7, 0x06, 0x19, 0x14, /* 3 : 720x text mode */
> -	0x00, 0xF4, 0x10, 0x38, /* 4 : 320x gra. mode */
> -	0xEB, 0x04, 0x25, 0x18, /* 5 : 640x gra. mode */
> -	0xEB, 0x15, 0x25, 0xF6, /* 6 : 800x gra. mode */
> -	0xFF, 0xFF, 0xFF, 0xFF  /* End of Table */
> -};
> -
> -static const unsigned char xgifb_yfilter2[] = {
> -	0xFF, 0x03, 0x02, 0xF6, 0xFC, 0x27, 0x46, /* 0 : 320x text mode */
> -	0x01, 0x02, 0xFE, 0xF7, 0x03, 0x27, 0x3C, /* 1 : 360x text mode */
> -	0xFF, 0x03, 0x02, 0xF6, 0xFC, 0x27, 0x46, /* 2 : 640x text mode */
> -	0x01, 0x02, 0xFE, 0xF7, 0x03, 0x27, 0x3C, /* 3 : 720x text mode */
> -	0xFF, 0x03, 0x02, 0xF6, 0xFC, 0x27, 0x46, /* 4 : 320x gra. mode */
> -	0xFF, 0x03, 0x02, 0xF6, 0xFC, 0x27, 0x46, /* 5 : 640x gra. mode */
> -	0x01, 0x01, 0xFC, 0xF8, 0x08, 0x26, 0x38, /* 6 : 800x gra. mode */
> -	0xFF, 0xFF, 0xFC, 0x00, 0x0F, 0x22, 0x28  /* 7 : 1024xgra. mode */
> -};
> -
> -static const unsigned char XGI_NTSC1024AdjTime[] = {
> -	0xa7, 0x07, 0xf2, 0x6e, 0x17, 0x8b, 0x73, 0x53,
> -	0x13, 0x40, 0x34, 0xF4, 0x63, 0xBB, 0xCC, 0x7A,
> -	0x58, 0xe4, 0x73, 0xd0, 0x13
> -};
> -
> -static const struct XGI301C_Tap4TimingStruct xgifb_tap4_timing[] = {
> -	{0, {
> -	0x00, 0x20, 0x00, 0x00, 0x7F, 0x20, 0x02, 0x7F, /* ; C0-C7 */
> -	0x7D, 0x20, 0x04, 0x7F, 0x7D, 0x1F, 0x06, 0x7E, /* ; C8-CF */
> -	0x7C, 0x1D, 0x09, 0x7E, 0x7C, 0x1B, 0x0B, 0x7E, /* ; D0-D7 */
> -	0x7C, 0x19, 0x0E, 0x7D, 0x7C, 0x17, 0x11, 0x7C, /* ; D8-DF */
> -	0x7C, 0x14, 0x14, 0x7C, 0x7C, 0x11, 0x17, 0x7C, /* ; E0-E7 */
> -	0x7D, 0x0E, 0x19, 0x7C, 0x7E, 0x0B, 0x1B, 0x7C, /* ; EA-EF */
> -	0x7E, 0x09, 0x1D, 0x7C, 0x7F, 0x06, 0x1F, 0x7C, /* ; F0-F7 */
> -	0x7F, 0x04, 0x20, 0x7D, 0x00, 0x02, 0x20, 0x7E  /* ; F8-FF */
> -	}
> -	}
> -};
> -
> -static const struct XGI301C_Tap4TimingStruct PALTap4Timing[] = {
> -	{600,	{
> -		0x05, 0x19, 0x05, 0x7D, 0x03, 0x19, 0x06, 0x7E, /* ; C0-C7 */
> -		0x02, 0x19, 0x08, 0x7D, 0x01, 0x18, 0x0A, 0x7D, /* ; C8-CF */
> -		0x00, 0x18, 0x0C, 0x7C, 0x7F, 0x17, 0x0E, 0x7C, /* ; D0-D7 */
> -		0x7E, 0x16, 0x0F, 0x7D, 0x7E, 0x14, 0x11, 0x7D, /* ; D8-DF */
> -		0x7D, 0x13, 0x13, 0x7D, 0x7D, 0x11, 0x14, 0x7E, /* ; E0-E7 */
> -		0x7D, 0x0F, 0x16, 0x7E, 0x7D, 0x0E, 0x17, 0x7E, /* ; EA-EF */
> -		0x7D, 0x0C, 0x18, 0x7F, 0x7D, 0x0A, 0x18, 0x01, /* ; F0-F7 */
> -		0x7D, 0x08, 0x19, 0x02, 0x7D, 0x06, 0x19, 0x04  /* ; F8-FF */
> -		}
> -	},
> -	{768,	{
> -		0x08, 0x12, 0x08, 0x7E, 0x07, 0x12, 0x09, 0x7E, /* ; C0-C7 */
> -		0x06, 0x12, 0x0A, 0x7E, 0x05, 0x11, 0x0B, 0x7F, /* ; C8-CF */
> -		0x04, 0x11, 0x0C, 0x7F, 0x03, 0x11, 0x0C, 0x00, /* ; D0-D7 */
> -		0x03, 0x10, 0x0D, 0x00, 0x02, 0x0F, 0x0E, 0x01, /* ; D8-DF */
> -		0x01, 0x0F, 0x0F, 0x01, 0x01, 0x0E, 0x0F, 0x02, /* ; E0-E7 */
> -		0x00, 0x0D, 0x10, 0x03, 0x7F, 0x0C, 0x11, 0x04, /* ; EA-EF */
> -		0x7F, 0x0C, 0x11, 0x04, 0x7F, 0x0B, 0x11, 0x05, /* ; F0-F7 */
> -		0x7E, 0x0A, 0x12, 0x06, 0x7E, 0x09, 0x12, 0x07  /* ; F8-FF */
> -		}
> -	},
> -	{0xFFFF, {
> -		0x04, 0x1A, 0x04, 0x7E, 0x02, 0x1B, 0x05, 0x7E, /* ; C0-C7 */
> -		0x01, 0x1A, 0x07, 0x7E, 0x00, 0x1A, 0x09, 0x7D, /* ; C8-CF */
> -		0x7F, 0x19, 0x0B, 0x7D, 0x7E, 0x18, 0x0D, 0x7D, /* ; D0-D7 */
> -		0x7D, 0x17, 0x10, 0x7C, 0x7D, 0x15, 0x12, 0x7C, /* ; D8-DF */
> -		0x7C, 0x14, 0x14, 0x7C, 0x7C, 0x12, 0x15, 0x7D, /* ; E0-E7 */
> -		0x7C, 0x10, 0x17, 0x7D, 0x7C, 0x0D, 0x18, 0x7F, /* ; EA-EF */
> -		0x7D, 0x0B, 0x19, 0x7F, 0x7D, 0x09, 0x1A, 0x00, /* ; F0-F7 */
> -		0x7D, 0x07, 0x1A, 0x02, 0x7E, 0x05, 0x1B, 0x02  /* ; F8-FF */
> -		}
> -	}
> -};
> -
> -static const struct XGI301C_Tap4TimingStruct xgifb_ntsc_525_tap4_timing[] = {
> -	{480,	{
> -		0x04, 0x1A, 0x04, 0x7E, 0x03, 0x1A, 0x06, 0x7D, /* ; C0-C7 */
> -		0x01, 0x1A, 0x08, 0x7D, 0x00, 0x19, 0x0A, 0x7D, /* ; C8-CF */
> -		0x7F, 0x19, 0x0C, 0x7C, 0x7E, 0x18, 0x0E, 0x7C, /* ; D0-D7 */
> -		0x7E, 0x17, 0x10, 0x7B, 0x7D, 0x15, 0x12, 0x7C, /* ; D8-DF */
> -		0x7D, 0x13, 0x13, 0x7D, 0x7C, 0x12, 0x15, 0x7D, /* ; E0-E7 */
> -		0x7C, 0x10, 0x17, 0x7D, 0x7C, 0x0E, 0x18, 0x7E, /* ; EA-EF */
> -		0x7D, 0x0C, 0x19, 0x7E, 0x7D, 0x0A, 0x19, 0x00, /* ; F0-F7 */
> -		0x7D, 0x08, 0x1A, 0x01, 0x7E, 0x06, 0x1A, 0x02  /* ; F8-FF */
> -		}
> -	},
> -	{600,	{
> -		0x07, 0x14, 0x07, 0x7E, 0x06, 0x14, 0x09, 0x7D, /* ; C0-C7 */
> -		0x05, 0x14, 0x0A, 0x7D, 0x04, 0x13, 0x0B, 0x7E, /* ; C8-CF */
> -		0x03, 0x13, 0x0C, 0x7E, 0x02, 0x12, 0x0D, 0x7F, /* ; D0-D7 */
> -		0x01, 0x12, 0x0E, 0x7F, 0x01, 0x11, 0x0F, 0x7F, /* ; D8-DF */
> -		0x01, 0x10, 0x10, 0x00, 0x7F, 0x0F, 0x11, 0x01, /* ; E0-E7 */
> -		0x7F, 0x0E, 0x12, 0x01, 0x7E, 0x0D, 0x12, 0x03, /* ; EA-EF */
> -		0x7E, 0x0C, 0x13, 0x03, 0x7E, 0x0B, 0x13, 0x04, /* ; F0-F7 */
> -		0x7E, 0x0A, 0x14, 0x04, 0x7D, 0x09, 0x14, 0x06  /* ; F8-FF */
> -		}
> -	},
> -	{0xFFFF, {
> -		 0x09, 0x0F, 0x09, 0x7F, 0x08, 0x0F, 0x09, 0x00, /* ; C0-C7 */
> -		 0x07, 0x0F, 0x0A, 0x00, 0x06, 0x0F, 0x0A, 0x01, /* ; C8-CF */
> -		 0x06, 0x0E, 0x0B, 0x01, 0x05, 0x0E, 0x0B, 0x02, /* ; D0-D7 */
> -		 0x04, 0x0E, 0x0C, 0x02, 0x04, 0x0D, 0x0C, 0x03, /* ; D8-DF */
> -		 0x03, 0x0D, 0x0D, 0x03, 0x02, 0x0C, 0x0D, 0x05, /* ; E0-E7 */
> -		 0x02, 0x0C, 0x0E, 0x04, 0x01, 0x0B, 0x0E, 0x06, /* ; EA-EF */
> -		 0x01, 0x0B, 0x0E, 0x06, 0x00, 0x0A, 0x0F, 0x07, /* ; F0-F7 */
> -		 0x00, 0x0A, 0x0F, 0x07, 0x00, 0x09, 0x0F, 0x08  /* ; F8-FF */
> -		}
> -	}
> -};
> -
> -static const struct XGI301C_Tap4TimingStruct YPbPr750pTap4Timing[] = {
> -	{0xFFFF, {
> -		 0x05, 0x19, 0x05, 0x7D, 0x03, 0x19, 0x06, 0x7E, /* ; C0-C7 */
> -		 0x02, 0x19, 0x08, 0x7D, 0x01, 0x18, 0x0A, 0x7D, /* ; C8-CF */
> -		 0x00, 0x18, 0x0C, 0x7C, 0x7F, 0x17, 0x0E, 0x7C, /* ; D0-D7 */
> -		 0x7E, 0x16, 0x0F, 0x7D, 0x7E, 0x14, 0x11, 0x7D, /* ; D8-DF */
> -		 0x7D, 0x13, 0x13, 0x7D, 0x7D, 0x11, 0x14, 0x7E, /* ; E0-E7 */
> -		 0x7D, 0x0F, 0x16, 0x7E, 0x7D, 0x0E, 0x17, 0x7E, /* ; EA-EF */
> -		 0x7D, 0x0C, 0x18, 0x7F, 0x7D, 0x0A, 0x18, 0x01, /* ; F0-F7 */
> -		 0x7D, 0x08, 0x19, 0x02, 0x7D, 0x06, 0x19, 0x04 /* F8-FF */
> -		}
> -	}
> -};
> -#endif
> diff --git a/drivers/staging/xgifb/vb_util.h b/drivers/staging/xgifb/vb_util.h
> deleted file mode 100644
> index 0f6d5aac04f6..000000000000
> --- a/drivers/staging/xgifb/vb_util.h
> +++ /dev/null
> @@ -1,46 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _VBUTIL_
> -#define _VBUTIL_
> -static inline void xgifb_reg_set(unsigned long port, u8 index, u8 data)
> -{
> -	outb(index, port);
> -	outb(data, port + 1);
> -}
> -
> -static inline u8 xgifb_reg_get(unsigned long port, u8 index)
> -{
> -	outb(index, port);
> -	return inb(port + 1);
> -}
> -
> -static inline void xgifb_reg_and_or(unsigned long port, u8 index,
> -				    unsigned int data_and, unsigned int data_or)
> -{
> -	u8 temp;
> -
> -	temp = xgifb_reg_get(port, index);
> -	temp = (u8)((temp & data_and) | data_or);
> -	xgifb_reg_set(port, index, temp);
> -}
> -
> -static inline void xgifb_reg_and(unsigned long port, u8 index,
> -				 unsigned int data_and)
> -{
> -	u8 temp;
> -
> -	temp = xgifb_reg_get(port, index);
> -	temp = (u8)(temp & data_and);
> -	xgifb_reg_set(port, index, temp);
> -}
> -
> -static inline void xgifb_reg_or(unsigned long port, u8 index,
> -				unsigned int data_or)
> -{
> -	u8 temp;
> -
> -	temp = xgifb_reg_get(port, index);
> -	temp |= data_or;
> -	xgifb_reg_set(port, index, temp);
> -}
> -#endif
> -
> diff --git a/drivers/staging/xgifb/vgatypes.h b/drivers/staging/xgifb/vgatypes.h
> deleted file mode 100644
> index 22919f2368d5..000000000000
> --- a/drivers/staging/xgifb/vgatypes.h
> +++ /dev/null
> @@ -1,51 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -#ifndef _VGATYPES_
> -#define _VGATYPES_
> -
> -#include <linux/fb.h>	/* for struct fb_var_screeninfo for sis.h */
> -#include "../../video/fbdev/sis/vgatypes.h"
> -#include "../../video/fbdev/sis/sis.h"		/* for LCD_TYPE */
> -
> -enum XGI_VB_CHIP_TYPE {
> -	VB_CHIP_Legacy = 0,
> -	VB_CHIP_301,
> -	VB_CHIP_301B,
> -	VB_CHIP_301LV,
> -	VB_CHIP_302,
> -	VB_CHIP_302B,
> -	VB_CHIP_302LV,
> -	VB_CHIP_301C,
> -	VB_CHIP_302ELV,
> -	VB_CHIP_UNKNOWN, /* other video bridge or no video bridge */
> -	MAX_VB_CHIP
> -};
> -
> -struct xgi_hw_device_info {
> -	unsigned long ulExternalChip; /* NO VB or other video bridge*/
> -				      /* if ujVBChipID = VB_CHIP_UNKNOWN, */
> -
> -	void __iomem *pjVideoMemoryAddress;/* base virtual memory address */
> -					    /* of Linear VGA memory */
> -
> -	unsigned long ulVideoMemorySize; /* size, in bytes, of the
> -					  * memory on the board
> -					  */
> -
> -	unsigned char jChipType; /* Used to Identify Graphics Chip */
> -				 /* defined in the data structure type  */
> -				 /* "XGI_CHIP_TYPE" */
> -
> -	unsigned char jChipRevision; /* Used to Identify Graphics
> -				      * Chip Revision
> -				      */
> -
> -	unsigned char ujVBChipID; /* the ID of video bridge */
> -				  /* defined in the data structure type */
> -				  /* "XGI_VB_CHIP_TYPE" */
> -
> -	unsigned long ulCRT2LCDType; /* defined in the data structure type */
> -};
> -
> -/* Additional IOCTL for communication xgifb <> X driver        */
> -/* If changing this, xgifb.h must also be changed (for xgifb) */
> -#endif
> -- 
> 2.20.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the devel mailing list