diff options
Diffstat (limited to 'drivers/staging/xgifb')
-rw-r--r-- | drivers/staging/xgifb/TODO | 1 | ||||
-rw-r--r-- | drivers/staging/xgifb/XGI_main.h | 238 | ||||
-rw-r--r-- | drivers/staging/xgifb/XGI_main_26.c | 1452 | ||||
-rw-r--r-- | drivers/staging/xgifb/XGIfb.h | 48 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_def.h | 605 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_ext.c | 1 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_ext.h | 20 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_init.c | 258 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_init.h | 2 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_setmode.c | 1536 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_struct.h | 97 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_table.h | 1200 | ||||
-rw-r--r-- | drivers/staging/xgifb/vb_util.c | 5 | ||||
-rw-r--r-- | drivers/staging/xgifb/vgatypes.h | 11 |
14 files changed, 1182 insertions, 4292 deletions
diff --git a/drivers/staging/xgifb/TODO b/drivers/staging/xgifb/TODO index c85ff5e..13d9bc2 100644 --- a/drivers/staging/xgifb/TODO +++ b/drivers/staging/xgifb/TODO @@ -5,7 +5,6 @@ Arnaud TODO: - clean ups -- fix build warnings when module - sort out dup ids with SiS driver - remove useless/wrong/unused #ifdef/code/... - fix printk usages diff --git a/drivers/staging/xgifb/XGI_main.h b/drivers/staging/xgifb/XGI_main.h index f6cd22d..71aebe3 100644 --- a/drivers/staging/xgifb/XGI_main.h +++ b/drivers/staging/xgifb/XGI_main.h @@ -11,12 +11,6 @@ #define XGIFAIL(x) do { printk(x "\n"); return -EINVAL; } while (0) -#define VER_MAJOR 0 -#define VER_MINOR 8 -#define VER_LEVEL 1 - -#define DRIVER_DESC "XGI Volari Frame Buffer Module Version 0.8.1" - #ifndef PCI_VENDOR_ID_XG #define PCI_VENDOR_ID_XG 0x18CA #endif @@ -37,12 +31,6 @@ #define PCI_DEVICE_ID_XG_27 0x027 #endif - - -#define XGI_IOTYPE1 void __iomem -#define XGI_IOTYPE2 __iomem -#define XGIINITSTATIC static - static DEFINE_PCI_DEVICE_TABLE(xgifb_pci_table) = { {PCI_VENDOR_ID_XG, PCI_DEVICE_ID_XG_20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, @@ -58,61 +46,29 @@ static DEFINE_PCI_DEVICE_TABLE(xgifb_pci_table) = { MODULE_DEVICE_TABLE(pci, xgifb_pci_table); /* To be included in fb.h */ -#ifndef FB_ACCEL_XGI_GLAMOUR_2 -#define FB_ACCEL_XGI_GLAMOUR_2 40 /* XGI 315, 650, 740 */ -#endif #ifndef FB_ACCEL_XGI_XABRE #define FB_ACCEL_XGI_XABRE 41 /* XGI 330 ("Xabre") */ #endif -#define MAX_ROM_SCAN 0x10000 - -#define SEQ_ADR 0x14 #define SEQ_DATA 0x15 -#define DAC_ADR 0x18 -#define DAC_DATA 0x19 -#define CRTC_ADR 0x24 -#define CRTC_DATA 0x25 -#define DAC2_ADR (0x16-0x30) -#define DAC2_DATA (0x17-0x30) -#define VB_PART1_ADR (0x04-0x30) -#define VB_PART1_DATA (0x05-0x30) -#define VB_PART2_ADR (0x10-0x30) -#define VB_PART2_DATA (0x11-0x30) -#define VB_PART3_ADR (0x12-0x30) -#define VB_PART3_DATA (0x13-0x30) -#define VB_PART4_ADR (0x14-0x30) -#define VB_PART4_DATA (0x15-0x30) - -#define XGISR XGI_Pr.P3c4 -#define XGICR XGI_Pr.P3d4 -#define XGIDACA XGI_Pr.P3c8 -#define XGIDACD XGI_Pr.P3c9 -#define XGIPART1 XGI_Pr.Part1Port -#define XGIPART2 XGI_Pr.Part2Port -#define XGIPART3 XGI_Pr.Part3Port -#define XGIPART4 XGI_Pr.Part4Port -#define XGIPART5 XGI_Pr.Part5Port + +#define XGISR (xgifb_info->dev_info.P3c4) +#define XGICR (xgifb_info->dev_info.P3d4) +#define XGIDACA (xgifb_info->dev_info.P3c8) +#define XGIDACD (xgifb_info->dev_info.P3c9) +#define XGIPART1 (xgifb_info->dev_info.Part1Port) +#define XGIPART2 (xgifb_info->dev_info.Part2Port) +#define XGIPART3 (xgifb_info->dev_info.Part3Port) +#define XGIPART4 (xgifb_info->dev_info.Part4Port) +#define XGIPART5 (xgifb_info->dev_info.Part5Port) #define XGIDAC2A XGIPART5 #define XGIDAC2D (XGIPART5 + 1) -#define XGIMISCR (XGI_Pr.RelIO + 0x1c) -#define XGIINPSTAT (XGI_Pr.RelIO + 0x2a) #define IND_XGI_PASSWORD 0x05 /* SRs */ -#define IND_XGI_COLOR_MODE 0x06 #define IND_XGI_RAMDAC_CONTROL 0x07 #define IND_XGI_DRAM_SIZE 0x14 -#define IND_XGI_SCRATCH_REG_16 0x16 -#define IND_XGI_SCRATCH_REG_17 0x17 -#define IND_XGI_SCRATCH_REG_1A 0x1A #define IND_XGI_MODULE_ENABLE 0x1E #define IND_XGI_PCI_ADDRESS_SET 0x20 -#define IND_XGI_TURBOQUEUE_ADR 0x26 -#define IND_XGI_TURBOQUEUE_SET 0x27 -#define IND_XGI_POWER_ON_TRAP 0x38 -#define IND_XGI_POWER_ON_TRAP2 0x39 -#define IND_XGI_CMDQUEUE_SET 0x26 -#define IND_XGI_CMDQUEUE_THRESHOLD 0x27 #define IND_XGI_SCRATCH_REG_CR30 0x30 /* CRs */ #define IND_XGI_SCRATCH_REG_CR31 0x31 @@ -120,23 +76,10 @@ MODULE_DEVICE_TABLE(pci, xgifb_pci_table); #define IND_XGI_SCRATCH_REG_CR33 0x33 #define IND_XGI_LCD_PANEL 0x36 #define IND_XGI_SCRATCH_REG_CR37 0x37 -#define IND_XGI_AGP_IO_PAD 0x48 -#define IND_BRI_DRAM_STATUS 0x63 /* PCI config memory size offset */ - -#define MMIO_QUEUE_PHYBASE 0x85C0 -#define MMIO_QUEUE_WRITEPORT 0x85C4 -#define MMIO_QUEUE_READPORT 0x85C8 - -#define IND_XGI_CRT2_WRITE_ENABLE_300 0x24 #define IND_XGI_CRT2_WRITE_ENABLE_315 0x2F #define XGI_PASSWORD 0x86 /* SR05 */ -#define XGI_INTERLACED_MODE 0x20 /* SR06 */ -#define XGI_8BPP_COLOR_MODE 0x0 -#define XGI_15BPP_COLOR_MODE 0x1 -#define XGI_16BPP_COLOR_MODE 0x2 -#define XGI_32BPP_COLOR_MODE 0x4 #define XGI_DRAM_SIZE_MASK 0xF0 /*SR14 */ #define XGI_DRAM_SIZE_1MB 0x00 @@ -148,27 +91,6 @@ MODULE_DEVICE_TABLE(pci, xgifb_pci_table); #define XGI_DRAM_SIZE_64MB 0x06 #define XGI_DRAM_SIZE_128MB 0x07 #define XGI_DRAM_SIZE_256MB 0x08 -#define XGI_DATA_BUS_MASK 0x02 -#define XGI_DATA_BUS_64 0x00 -#define XGI_DATA_BUS_128 0x01 -#define XGI_DUAL_CHANNEL_MASK 0x0C -#define XGI_SINGLE_CHANNEL_1_RANK 0x0 -#define XGI_SINGLE_CHANNEL_2_RANK 0x1 -#define XGI_ASYM_DDR 0x02 -#define XGI_DUAL_CHANNEL_1_RANK 0x3 - -#define XGI550_DRAM_SIZE_MASK 0x3F /* 550/650/740 SR14 */ -#define XGI550_DRAM_SIZE_4MB 0x00 -#define XGI550_DRAM_SIZE_8MB 0x01 -#define XGI550_DRAM_SIZE_16MB 0x03 -#define XGI550_DRAM_SIZE_24MB 0x05 -#define XGI550_DRAM_SIZE_32MB 0x07 -#define XGI550_DRAM_SIZE_64MB 0x0F -#define XGI550_DRAM_SIZE_96MB 0x17 -#define XGI550_DRAM_SIZE_128MB 0x1F -#define XGI550_DRAM_SIZE_256MB 0x3F - -#define XGI_SCRATCH_REG_1A_MASK 0x10 #define XGI_ENABLE_2D 0x40 /* SR1E */ @@ -176,7 +98,6 @@ MODULE_DEVICE_TABLE(pci, xgifb_pci_table); #define XGI_PCI_ADDR_ENABLE 0x80 #define XGI_SIMULTANEOUS_VIEW_ENABLE 0x01 /* CR30 */ -#define XGI_MODE_SELECT_CRT2 0x02 #define XGI_VB_OUTPUT_COMPOSITE 0x04 #define XGI_VB_OUTPUT_SVIDEO 0x08 #define XGI_VB_OUTPUT_SCART 0x10 @@ -199,118 +120,34 @@ MODULE_DEVICE_TABLE(pci, xgifb_pci_table); XGI_VB_SCART | XGI_VB_HIVISION|XGI_VB_YPBPR) #define XGI_EXTERNAL_CHIP_MASK 0x0E /* CR37 */ -#define XGI_EXTERNAL_CHIP_XGI301 0x01 /* in CR37 << 1 ! */ -#define XGI_EXTERNAL_CHIP_LVDS 0x02 /* in CR37 << 1 ! */ -#define XGI_EXTERNAL_CHIP_TRUMPION 0x03 /* in CR37 << 1 ! */ -#define XGI_EXTERNAL_CHIP_LVDS_CHRONTEL 0x04 /* in CR37 << 1 ! */ -#define XGI_EXTERNAL_CHIP_CHRONTEL 0x05 /* in CR37 << 1 ! */ #define XGI310_EXTERNAL_CHIP_LVDS 0x02 /* in CR37 << 1 ! */ #define XGI310_EXTERNAL_CHIP_LVDS_CHRONTEL 0x03 /* in CR37 << 1 ! */ -#define XGI_AGP_2X 0x20 /* CR48 */ - -#define BRI_DRAM_SIZE_MASK 0x70 /* PCI bridge config data */ -#define BRI_DRAM_SIZE_2MB 0x00 -#define BRI_DRAM_SIZE_4MB 0x01 -#define BRI_DRAM_SIZE_8MB 0x02 -#define BRI_DRAM_SIZE_16MB 0x03 -#define BRI_DRAM_SIZE_32MB 0x04 -#define BRI_DRAM_SIZE_64MB 0x05 - -#define SR_BUFFER_SIZE 5 -#define CR_BUFFER_SIZE 5 - /* ------------------- Global Variables ----------------------------- */ -/* Fbcon variables */ -static struct fb_info *fb_info; - - -static int video_type = FB_TYPE_PACKED_PIXELS; - -static struct fb_var_screeninfo default_var = { - .xres = 0, - .yres = 0, - .xres_virtual = 0, - .yres_virtual = 0, - .xoffset = 0, - .yoffset = 0, - .bits_per_pixel = 0, - .grayscale = 0, - .red = {0, 8, 0}, - .green = {0, 8, 0}, - .blue = {0, 8, 0}, - .transp = {0, 0, 0}, - .nonstd = 0, - .activate = FB_ACTIVATE_NOW, - .height = -1, - .width = -1, - .accel_flags = 0, - .pixclock = 0, - .left_margin = 0, - .right_margin = 0, - .upper_margin = 0, - .lower_margin = 0, - .hsync_len = 0, - .vsync_len = 0, - .sync = 0, - .vmode = FB_VMODE_NONINTERLACED, -}; - -static struct fb_fix_screeninfo XGIfb_fix = { - .id = "XGI", - .type = FB_TYPE_PACKED_PIXELS, - .xpanstep = 1, - .ypanstep = 1, -}; -static char myid[20]; -static u32 pseudo_palette[17]; - - /* display status */ -static int XGIfb_off = 0; -static int XGIfb_crt1off = 0; +static int XGIfb_crt1off; static int XGIfb_forcecrt1 = -1; -static int XGIfb_userom = 0; -/*static int XGIfb_useoem = -1; */ +static int XGIfb_userom ; /* global flags */ -static int XGIfb_registered; -static int XGIfb_tvmode = 0; -static int XGIfb_pdc = 0; -static int enable_dstn = 0; +static int XGIfb_tvmode; +static int enable_dstn; static int XGIfb_ypan = -1; - -static int XGIfb_CRT2_write_enable = 0; - /* TW: CRT2 type (for overriding autodetection) */ static int XGIfb_crt2type = -1; /* PR: Tv plug type (for overriding autodetection) */ static int XGIfb_tvplug = -1; -static unsigned char XGIfb_detectedpdc = 0; - -static unsigned char XGIfb_detectedlcda = 0xff; - - - - /* TW: For ioctl XGIFB_GET_INFO */ /* XGIfb_info XGIfbinfo; */ -/* TW: Hardware extension; contains data on hardware */ -static struct xgi_hw_device_info XGIhw_ext; - -/* TW: XGI private structure */ -static struct vb_device_info XGI_Pr; - #define MD_XGI300 1 #define MD_XGI315 2 /* mode table */ -/* NOT const - will be patched for 1280x960 mode number chaos reasons */ -static struct _XGIbios_mode { +static const struct _XGIbios_mode { char name[15]; u8 mode_no; u16 vesa_mode_no_1; /* "XGI defined" VESA mode number */ @@ -323,9 +160,6 @@ static struct _XGIbios_mode { u16 rows; u8 chipset; } XGIbios_mode[] = { -#define MODE_INDEX_NONE 0 /* TW: index for mode=none */ - {"none", 0xFF, 0x0000, 0x0000, 0, 0, 0, 0, 0, 0, - MD_XGI300|MD_XGI315}, /* TW: for mode "none" */ {"320x240x16", 0x56, 0x0000, 0x0000, 320, 240, 16, 1, 40, 15, MD_XGI315}, {"320x480x8", 0x5A, 0x0000, 0x0000, 320, 480, 8, 1, 40, 30, @@ -365,11 +199,9 @@ static struct _XGIbios_mode { MD_XGI300|MD_XGI315}, {"800x480x32", 0x76, 0x0000, 0x0000, 800, 480, 32, 1, 100, 30, MD_XGI300|MD_XGI315}, -#define DEFAULT_MODE 21 /* TW: index for 800x600x8 */ -#define DEFAULT_LCDMODE 21 /* TW: index for 800x600x8 */ -#define DEFAULT_TVMODE 21 /* TW: index for 800x600x8 */ {"800x600x8", 0x30, 0x0103, 0x0103, 800, 600, 8, 1, 100, 37, MD_XGI300|MD_XGI315}, +#define DEFAULT_MODE 20 /* index for 800x600x16 */ {"800x600x16", 0x47, 0x0114, 0x0114, 800, 600, 16, 1, 100, 37, MD_XGI300|MD_XGI315}, {"800x600x24", 0x63, 0x013b, 0x0115, 800, 600, 32, 1, 100, 37, @@ -424,9 +256,8 @@ static struct _XGIbios_mode { MD_XGI315}, {"1280x768x32", 0x25, 0x0000, 0x0000, 1280, 768, 32, 1, 160, 48, MD_XGI315}, -#define MODEINDEX_1280x960 48 {"1280x960x8", 0x7C, 0x0000, 0x0000, 1280, 960, 8, 1, 160, 60, - MD_XGI300|MD_XGI315}, /* TW: Modenumbers being patched */ + MD_XGI300|MD_XGI315}, {"1280x960x16", 0x7D, 0x0000, 0x0000, 1280, 960, 16, 1, 160, 60, MD_XGI300|MD_XGI315}, {"1280x960x24", 0x7E, 0x0000, 0x0000, 1280, 960, 32, 1, 160, 60, @@ -476,16 +307,6 @@ static struct _XGIbios_mode { {"\0", 0x00, 0, 0, 0, 0, 0, 0, 0} }; -/* mode-related variables */ -#ifdef MODULE -static int xgifb_mode_idx = 1; -#else -static int xgifb_mode_idx = -1; /* Use a default mode if we are - inside the kernel */ -#endif -static u8 XGIfb_mode_no = 0; -static u8 XGIfb_rate_idx = 0; - /* TW: CR36 evaluation */ static const unsigned short XGI300paneltype[] = { LCD_UNKNOWN, LCD_800x600, LCD_1024x768, LCD_1280x1024, @@ -505,19 +326,19 @@ static const struct _XGI_crt2type { int tvplug_no; } XGI_crt2type[] = { {"NONE", 0, -1}, - {"LCD", DISPTYPE_LCD, -1}, - {"TV", DISPTYPE_TV, -1}, - {"VGA", DISPTYPE_CRT2, -1}, - {"SVIDEO", DISPTYPE_TV, TVPLUG_SVIDEO}, - {"COMPOSITE", DISPTYPE_TV, TVPLUG_COMPOSITE}, - {"SCART", DISPTYPE_TV, TVPLUG_SCART}, + {"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", DISPTYPE_LCD, -1}, - {"tv", DISPTYPE_TV, -1}, - {"vga", DISPTYPE_CRT2, -1}, - {"svideo", DISPTYPE_TV, TVPLUG_SVIDEO}, - {"composite", DISPTYPE_TV, TVPLUG_COMPOSITE}, - {"scart", DISPTYPE_TV, TVPLUG_SCART}, + {"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} }; @@ -740,6 +561,5 @@ static const struct _XGI_TV_filter { }; static int filter = -1; -static unsigned char filter_tb; #endif diff --git a/drivers/staging/xgifb/XGI_main_26.c b/drivers/staging/xgifb/XGI_main_26.c index cadec2a..277e408 100644 --- a/drivers/staging/xgifb/XGI_main_26.c +++ b/drivers/staging/xgifb/XGI_main_26.c @@ -5,7 +5,6 @@ */ /* #include <linux/config.h> */ -#include <linux/version.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/kernel.h> @@ -29,10 +28,6 @@ #include <linux/types.h> #include <linux/proc_fs.h> -#ifndef XGIFB_PAN -#define XGIFB_PAN -#endif - #include <linux/io.h> #ifdef CONFIG_MTRR #include <asm/mtrr.h> @@ -46,15 +41,17 @@ #include "vb_setmode.h" #define Index_CR_GPIO_Reg1 0x48 -#define Index_CR_GPIO_Reg2 0x49 #define Index_CR_GPIO_Reg3 0x4a #define GPIOG_EN (1<<6) -#define GPIOG_WRITE (1<<6) #define GPIOG_READ (1<<1) #define XGIFB_ROM_SIZE 65536 +static char *mode; +static int vesa = -1; +static unsigned int refresh_rate; + /* -------------------- Macro definitions ---------------------------- */ #undef XGIFBDEBUG @@ -144,9 +141,6 @@ static inline void dumpVGAReg(void) } #endif -/* data for XGI components */ -struct video_info xgi_video_info; - #if 1 #define DEBUGPRN(x) #else @@ -391,44 +385,6 @@ static void XGIRegInit(struct vb_device_info *XGI_Pr, unsigned long BaseAddr) } -/* ------------ Interface for init & mode switching code ------------- */ - -static unsigned char XGIfb_query_VGA_config_space( - struct xgi_hw_device_info *pXGIhw_ext, unsigned long offset, - unsigned long set, unsigned long *value) -{ - static struct pci_dev *pdev = NULL; - static unsigned char init = 0, valid_pdev = 0; - - if (!set) - DPRINTK("XGIfb: Get VGA offset 0x%lx\n", offset); - else - DPRINTK("XGIfb: Set offset 0x%lx to 0x%lx\n", offset, *value); - - if (!init) { - init = 1; - pdev = pci_get_device(PCI_VENDOR_ID_XG, xgi_video_info.chip_id, - pdev); - if (pdev) { - valid_pdev = 1; - pci_dev_put(pdev); - } - } - - if (!valid_pdev) { - printk(KERN_DEBUG "XGIfb: Can't find XGI %d VGA device.\n", - xgi_video_info.chip_id); - return 0; - } - - if (set == 0) - pci_read_config_dword(pdev, offset, (u32 *) value); - else - pci_write_config_dword(pdev, offset, (u32)(*value)); - - return 1; -} - /* ------------------ Internal helper routines ----------------- */ static int XGIfb_GetXG21DefaultLVDSModeIdx(void) @@ -446,48 +402,26 @@ static int XGIfb_GetXG21DefaultLVDSModeIdx(void) && (XGIbios_mode[XGIfb_mode_idx].yres == XGI21_LCDCapList[0].LVDSVDE) && (XGIbios_mode[XGIfb_mode_idx].bpp == 8)) { - XGIfb_mode_no = XGIbios_mode[XGIfb_mode_idx].mode_no; found_mode = 1; break; } XGIfb_mode_idx++; } if (!found_mode) - XGIfb_mode_idx = 0; + XGIfb_mode_idx = -1; return XGIfb_mode_idx; } -static void XGIfb_search_mode(const char *name) +static void XGIfb_search_mode(struct xgifb_video_info *xgifb_info, + const char *name) { int i = 0, j = 0, l; - if (name == NULL) { - printk(KERN_ERR "XGIfb: Internal error, using default mode.\n"); - xgifb_mode_idx = DEFAULT_MODE; - if ((xgi_video_info.chip == XG21) - && ((xgi_video_info.disp_state & DISPTYPE_DISP2) - == DISPTYPE_LCD)) { - xgifb_mode_idx = XGIfb_GetXG21DefaultLVDSModeIdx(); - } - return; - } - - if (!strcmp(name, XGIbios_mode[MODE_INDEX_NONE].name)) { - printk(KERN_ERR "XGIfb: Mode 'none' not supported anymore. Using default.\n"); - xgifb_mode_idx = DEFAULT_MODE; - if ((xgi_video_info.chip == XG21) - && ((xgi_video_info.disp_state & DISPTYPE_DISP2) - == DISPTYPE_LCD)) { - xgifb_mode_idx = XGIfb_GetXG21DefaultLVDSModeIdx(); - } - return; - } - while (XGIbios_mode[i].mode_no != 0) { l = min(strlen(name), strlen(XGIbios_mode[i].name)); if (!strncmp(name, XGIbios_mode[i].name, l)) { - xgifb_mode_idx = i; + xgifb_info->mode_idx = i; j = 1; break; } @@ -497,82 +431,66 @@ static void XGIfb_search_mode(const char *name) printk(KERN_INFO "XGIfb: Invalid mode '%s'\n", name); } -static void XGIfb_search_vesamode(unsigned int vesamode) +static void XGIfb_search_vesamode(struct xgifb_video_info *xgifb_info, + unsigned int vesamode) { int i = 0, j = 0; - if (vesamode == 0) { - - printk(KERN_ERR "XGIfb: Mode 'none' not supported anymore. Using default.\n"); - xgifb_mode_idx = DEFAULT_MODE; - if ((xgi_video_info.chip == XG21) - && ((xgi_video_info.disp_state & DISPTYPE_DISP2) - == DISPTYPE_LCD)) { - xgifb_mode_idx = XGIfb_GetXG21DefaultLVDSModeIdx(); - } - return; - } + 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_mode_idx = i; + xgifb_info->mode_idx = i; j = 1; break; } i++; } + +invalid: if (!j) printk(KERN_INFO "XGIfb: Invalid VESA mode 0x%x'\n", vesamode); } -static int XGIfb_GetXG21LVDSData(void) +static int XGIfb_GetXG21LVDSData(struct xgifb_video_info *xgifb_info) { u8 tmp; - unsigned char *pData; + void __iomem *data = xgifb_info->mmio_vbase + 0x20000; int i, j, k; tmp = xgifb_reg_get(XGISR, 0x1e); xgifb_reg_set(XGISR, 0x1e, tmp | 4); - pData = xgi_video_info.mmio_vbase + 0x20000; - if ((pData[0x0] == 0x55) && - (pData[0x1] == 0xAA) && - (pData[0x65] & 0x1)) { - i = pData[0x316] | (pData[0x317] << 8); - j = pData[i - 1]; + if ((readb(data) == 0x55) && + (readb(data + 1) == 0xAA) && + (readb(data + 0x65) & 0x1)) { + i = readw(data + 0x316); + j = readb(data + i - 1); if (j == 0xff) j = 1; k = 0; do { - XGI21_LCDCapList[k].LVDS_Capability = pData[i] - | (pData[i + 1] << 8); - XGI21_LCDCapList[k].LVDSHT = pData[i + 2] | (pData[i - + 3] << 8); - XGI21_LCDCapList[k].LVDSVT = pData[i + 4] | (pData[i - + 5] << 8); - XGI21_LCDCapList[k].LVDSHDE = pData[i + 6] | (pData[i - + 7] << 8); - XGI21_LCDCapList[k].LVDSVDE = pData[i + 8] | (pData[i - + 9] << 8); - XGI21_LCDCapList[k].LVDSHFP = pData[i + 10] | (pData[i - + 11] << 8); - XGI21_LCDCapList[k].LVDSVFP = pData[i + 12] | (pData[i - + 13] << 8); - XGI21_LCDCapList[k].LVDSHSYNC = pData[i + 14] - | (pData[i + 15] << 8); - XGI21_LCDCapList[k].LVDSVSYNC = pData[i + 16] - | (pData[i + 17] << 8); - XGI21_LCDCapList[k].VCLKData1 = pData[i + 18]; - XGI21_LCDCapList[k].VCLKData2 = pData[i + 19]; - XGI21_LCDCapList[k].PSC_S1 = pData[i + 20]; - XGI21_LCDCapList[k].PSC_S2 = pData[i + 21]; - XGI21_LCDCapList[k].PSC_S3 = pData[i + 22]; - XGI21_LCDCapList[k].PSC_S4 = pData[i + 23]; - XGI21_LCDCapList[k].PSC_S5 = pData[i + 24]; + XGI21_LCDCapList[k].LVDS_Capability = readw(data + i); + XGI21_LCDCapList[k].LVDSHT = readw(data + i + 2); + XGI21_LCDCapList[k].LVDSVT = readw(data + i + 4); + XGI21_LCDCapList[k].LVDSHDE = readw(data + i + 6); + XGI21_LCDCapList[k].LVDSVDE = readw(data + i + 8); + XGI21_LCDCapList[k].LVDSHFP = readw(data + i + 10); + XGI21_LCDCapList[k].LVDSVFP = readw(data + i + 12); + XGI21_LCDCapList[k].LVDSHSYNC = readw(data + i + 14); + XGI21_LCDCapList[k].LVDSVSYNC = readw(data + i + 16); + XGI21_LCDCapList[k].VCLKData1 = readb(data + i + 18); + XGI21_LCDCapList[k].VCLKData2 = readb(data + i + 19); + XGI21_LCDCapList[k].PSC_S1 = readb(data + i + 20); + XGI21_LCDCapList[k].PSC_S2 = readb(data + i + 21); + XGI21_LCDCapList[k].PSC_S3 = readb(data + i + 22); + XGI21_LCDCapList[k].PSC_S4 = readb(data + i + 23); + XGI21_LCDCapList[k].PSC_S5 = readb(data + i + 24); i += 25; j--; k++; @@ -583,13 +501,13 @@ static int XGIfb_GetXG21LVDSData(void) return 0; } -static int XGIfb_validate_mode(int myindex) +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; - if (xgi_video_info.chip == XG21) { - if ((xgi_video_info.disp_state & DISPTYPE_DISP2) - == DISPTYPE_LCD) { + if (xgifb_info->chip == XG21) { + if (xgifb_info->display2 == XGIFB_DISP_LCD) { xres = XGI21_LCDCapList[0].LVDSHDE; yres = XGI21_LCDCapList[0].LVDSVDE; if (XGIbios_mode[myindex].xres > xres) @@ -608,15 +526,15 @@ static int XGIfb_validate_mode(int myindex) } /* FIXME: for now, all is valid on XG27 */ - if (xgi_video_info.chip == XG27) + if (xgifb_info->chip == XG27) return myindex; if (!(XGIbios_mode[myindex].chipset & MD_XGI315)) return -1; - switch (xgi_video_info.disp_state & DISPTYPE_DISP2) { - case DISPTYPE_LCD: - switch (XGIhw_ext.ulCRT2LCDType) { + switch (xgifb_info->display2) { + case XGIFB_DISP_LCD: + switch (hw_info->ulCRT2LCDType) { case LCD_640x480: xres = 640; yres = 480; @@ -672,13 +590,13 @@ static int XGIfb_validate_mode(int myindex) return -1; if (XGIbios_mode[myindex].yres > yres) return -1; - if ((XGIhw_ext.ulExternalChip == 0x01) || /* LVDS */ - (XGIhw_ext.ulExternalChip == 0x05)) { /* LVDS+Chrontel */ + 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 (XGIhw_ext.ulCRT2LCDType == LCD_1024x600) + if (hw_info->ulCRT2LCDType == LCD_1024x600) return -1; break; case 640: @@ -696,13 +614,13 @@ static int XGIfb_validate_mode(int myindex) (XGIbios_mode[myindex].yres != 768)) return -1; if ((XGIbios_mode[myindex].yres == 600) && - (XGIhw_ext.ulCRT2LCDType != LCD_1024x600)) + (hw_info->ulCRT2LCDType != LCD_1024x600)) return -1; break; case 1152: if ((XGIbios_mode[myindex].yres) != 768) return -1; - if (XGIhw_ext.ulCRT2LCDType != LCD_1152x768) + if (hw_info->ulCRT2LCDType != LCD_1152x768) return -1; break; case 1280: @@ -710,7 +628,7 @@ static int XGIfb_validate_mode(int myindex) (XGIbios_mode[myindex].yres != 1024)) return -1; if ((XGIbios_mode[myindex].yres == 768) && - (XGIhw_ext.ulCRT2LCDType != LCD_1280x768)) + (hw_info->ulCRT2LCDType != LCD_1280x768)) return -1; break; case 1400: @@ -748,7 +666,7 @@ static int XGIfb_validate_mode(int myindex) (XGIbios_mode[myindex].yres != 1024)) return -1; if (XGIbios_mode[myindex].yres == 960) { - if (XGIhw_ext.ulCRT2LCDType == + if (hw_info->ulCRT2LCDType == LCD_1400x1050) return -1; } @@ -766,28 +684,28 @@ static int XGIfb_validate_mode(int myindex) } } break; - case DISPTYPE_TV: + case XGIFB_DISP_TV: switch (XGIbios_mode[myindex].xres) { case 512: case 640: case 800: break; case 720: - if (xgi_video_info.TV_type == TVMODE_NTSC) { + if (xgifb_info->TV_type == TVMODE_NTSC) { if (XGIbios_mode[myindex].yres != 480) return -1; - } else if (xgi_video_info.TV_type == TVMODE_PAL) { + } else if (xgifb_info->TV_type == TVMODE_PAL) { if (XGIbios_mode[myindex].yres != 576) return -1; } /* TW: LVDS/CHRONTEL does not support 720 */ - if (xgi_video_info.hasVB == HASVB_LVDS_CHRONTEL || - xgi_video_info.hasVB == HASVB_CHRONTEL) { + if (xgifb_info->hasVB == HASVB_LVDS_CHRONTEL || + xgifb_info->hasVB == HASVB_CHRONTEL) { return -1; } break; case 1024: - if (xgi_video_info.TV_type == TVMODE_NTSC) { + if (xgifb_info->TV_type == TVMODE_NTSC) { if (XGIbios_mode[myindex].bpp == 32) return -1; } @@ -796,10 +714,12 @@ static int XGIfb_validate_mode(int myindex) return -1; } break; - case DISPTYPE_CRT2: + case XGIFB_DISP_CRT: if (XGIbios_mode[myindex].xres > 1280) return -1; break; + case XGIFB_DISP_NONE: + break; } return myindex; @@ -824,49 +744,52 @@ static void XGIfb_search_crt2type(const char *name) printk(KERN_INFO "XGIfb: Invalid CRT2 type: %s\n", name); } -static u8 XGIfb_search_refresh_rate(unsigned int rate) +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_mode_idx].xres; - yres = XGIbios_mode[xgifb_mode_idx].yres; + xres = XGIbios_mode[xgifb_info->mode_idx].xres; + yres = XGIbios_mode[xgifb_info->mode_idx].yres; - XGIfb_rate_idx = 0; + xgifb_info->rate_idx = 0; while ((XGIfb_vrate[i].idx != 0) && (XGIfb_vrate[i].xres <= xres)) { if ((XGIfb_vrate[i].xres == xres) && (XGIfb_vrate[i].yres == yres)) { if (XGIfb_vrate[i].refresh == rate) { - XGIfb_rate_idx = XGIfb_vrate[i].idx; + xgifb_info->rate_idx = XGIfb_vrate[i].idx; break; } else if (XGIfb_vrate[i].refresh > rate) { if ((XGIfb_vrate[i].refresh - rate) <= 3) { DPRINTK("XGIfb: Adjusting rate from %d up to %d\n", rate, XGIfb_vrate[i].refresh); - XGIfb_rate_idx = XGIfb_vrate[i].idx; - xgi_video_info.refresh_rate = + xgifb_info->rate_idx = + XGIfb_vrate[i].idx; + xgifb_info->refresh_rate = XGIfb_vrate[i].refresh; } else if (((rate - XGIfb_vrate[i - 1].refresh) <= 2) && (XGIfb_vrate[i].idx != 1)) { DPRINTK("XGIfb: Adjusting rate from %d down to %d\n", rate, XGIfb_vrate[i-1].refresh); - XGIfb_rate_idx = XGIfb_vrate[i - 1].idx; - xgi_video_info.refresh_rate = + 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) { DPRINTK("XGIfb: Adjusting rate from %d down to %d\n", rate, XGIfb_vrate[i].refresh); - XGIfb_rate_idx = XGIfb_vrate[i].idx; + xgifb_info->rate_idx = XGIfb_vrate[i].idx; break; } } i++; } - if (XGIfb_rate_idx > 0) { - return XGIfb_rate_idx; + if (xgifb_info->rate_idx > 0) { + return xgifb_info->rate_idx; } else { printk(KERN_INFO "XGIfb: Unsupported rate %d for %dx%d\n", rate, xres, yres); @@ -892,13 +815,14 @@ static void XGIfb_search_tvstd(const char *name) /* ----------- FBDev related routines for all series ----------- */ -static void XGIfb_bpp_to_var(struct fb_var_screeninfo *var) +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 = var->green.offset = var->blue.offset = 0; var->red.length = var->green.length = var->blue.length = 6; - xgi_video_info.video_cmap_len = 256; + xgifb_info->video_cmap_len = 256; break; case 16: var->red.offset = 11; @@ -909,7 +833,7 @@ static void XGIfb_bpp_to_var(struct fb_var_screeninfo *var) var->blue.length = 5; var->transp.offset = 0; var->transp.length = 0; - xgi_video_info.video_cmap_len = 16; + xgifb_info->video_cmap_len = 16; break; case 32: var->red.offset = 16; @@ -920,45 +844,45 @@ static void XGIfb_bpp_to_var(struct fb_var_screeninfo *var) var->blue.length = 8; var->transp.offset = 24; var->transp.length = 8; - xgi_video_info.video_cmap_len = 16; + xgifb_info->video_cmap_len = 16; break; } } /* --------------------- SetMode routines ------------------------- */ -static void XGIfb_pre_setmode(void) +static void XGIfb_pre_setmode(struct xgifb_video_info *xgifb_info) { u8 cr30 = 0, cr31 = 0; cr31 = xgifb_reg_get(XGICR, 0x31); cr31 &= ~0x60; - switch (xgi_video_info.disp_state & DISPTYPE_DISP2) { - case DISPTYPE_CRT2: + switch (xgifb_info->display2) { + case XGIFB_DISP_CRT: cr30 = (XGI_VB_OUTPUT_CRT2 | XGI_SIMULTANEOUS_VIEW_ENABLE); cr31 |= XGI_DRIVER_MODE; break; - case DISPTYPE_LCD: + case XGIFB_DISP_LCD: cr30 = (XGI_VB_OUTPUT_LCD | XGI_SIMULTANEOUS_VIEW_ENABLE); cr31 |= XGI_DRIVER_MODE; break; - case DISPTYPE_TV: - if (xgi_video_info.TV_type == TVMODE_HIVISION) + case XGIFB_DISP_TV: + if (xgifb_info->TV_type == TVMODE_HIVISION) cr30 = (XGI_VB_OUTPUT_HIVISION | XGI_SIMULTANEOUS_VIEW_ENABLE); - else if (xgi_video_info.TV_plug == TVPLUG_SVIDEO) + else if (xgifb_info->TV_plug == TVPLUG_SVIDEO) cr30 = (XGI_VB_OUTPUT_SVIDEO | XGI_SIMULTANEOUS_VIEW_ENABLE); - else if (xgi_video_info.TV_plug == TVPLUG_COMPOSITE) + else if (xgifb_info->TV_plug == TVPLUG_COMPOSITE) cr30 = (XGI_VB_OUTPUT_COMPOSITE | XGI_SIMULTANEOUS_VIEW_ENABLE); - else if (xgi_video_info.TV_plug == TVPLUG_SCART) + else if (xgifb_info->TV_plug == TVPLUG_SCART) cr30 = (XGI_VB_OUTPUT_SCART | XGI_SIMULTANEOUS_VIEW_ENABLE); cr31 |= XGI_DRIVER_MODE; - if (XGIfb_tvmode == 1 || xgi_video_info.TV_type == TVMODE_PAL) + if (XGIfb_tvmode == 1 || xgifb_info->TV_type == TVMODE_PAL) cr31 |= 0x01; else cr31 &= ~0x01; @@ -970,10 +894,11 @@ static void XGIfb_pre_setmode(void) xgifb_reg_set(XGICR, IND_XGI_SCRATCH_REG_CR30, cr30); xgifb_reg_set(XGICR, IND_XGI_SCRATCH_REG_CR31, cr31); - xgifb_reg_set(XGICR, IND_XGI_SCRATCH_REG_CR33, (XGIfb_rate_idx & 0x0F)); + xgifb_reg_set(XGICR, IND_XGI_SCRATCH_REG_CR33, + (xgifb_info->rate_idx & 0x0F)); } -static void XGIfb_post_setmode(void) +static void XGIfb_post_setmode(struct xgifb_video_info *xgifb_info) { u8 reg; unsigned char doit = 1; @@ -983,21 +908,21 @@ static void XGIfb_post_setmode(void) xgifb_reg_and_or(XGISR,0x0E, 0xF0, 0x01); *test* */ - if (xgi_video_info.video_bpp == 8) { + if (xgifb_info->video_bpp == 8) { /* TW: We can't switch off CRT1 on LVDS/Chrontel * in 8bpp Modes */ - if ((xgi_video_info.hasVB == HASVB_LVDS) || - (xgi_video_info.hasVB == HASVB_LVDS_CHRONTEL)) { + if ((xgifb_info->hasVB == HASVB_LVDS) || + (xgifb_info->hasVB == HASVB_LVDS_CHRONTEL)) { doit = 0; } /* TW: We can't switch off CRT1 on 301B-DH * in 8bpp Modes if using LCD */ - if (xgi_video_info.disp_state & DISPTYPE_LCD) + if (xgifb_info->display2 == XGIFB_DISP_LCD) doit = 0; } /* TW: We can't switch off CRT1 if bridge is in slave mode */ - if (xgi_video_info.hasVB != HASVB_NONE) { + if (xgifb_info->hasVB != HASVB_NONE) { reg = xgifb_reg_get(XGIPART1, 0x00); if ((reg & 0x50) == 0x10) @@ -1016,49 +941,54 @@ static void XGIfb_post_setmode(void) xgifb_reg_and(XGISR, IND_XGI_RAMDAC_CONTROL, ~0x04); - if ((xgi_video_info.disp_state & DISPTYPE_TV) && (xgi_video_info.hasVB - == HASVB_301)) { + if (xgifb_info->display2 == XGIFB_DISP_TV && + xgifb_info->hasVB == HASVB_301) { reg = xgifb_reg_get(XGIPART4, 0x01); if (reg < 0xB0) { /* Set filter for XGI301 */ - switch (xgi_video_info.video_width) { + int filter_tb; + + switch (xgifb_info->video_width) { case 320: - filter_tb = (xgi_video_info.TV_type == + filter_tb = (xgifb_info->TV_type == TVMODE_NTSC) ? 4 : 12; break; case 640: - filter_tb = (xgi_video_info.TV_type == + filter_tb = (xgifb_info->TV_type == TVMODE_NTSC) ? 5 : 13; break; case 720: - filter_tb = (xgi_video_info.TV_type == + filter_tb = (xgifb_info->TV_type == TVMODE_NTSC) ? 6 : 14; break; case 800: - filter_tb = (xgi_video_info.TV_type == + filter_tb = (xgifb_info->TV_type == TVMODE_NTSC) ? 7 : 15; break; default: + filter_tb = 0; filter = -1; break; } - xgifb_reg_or(XGIPART1, XGIfb_CRT2_write_enable, 0x01); + xgifb_reg_or(XGIPART1, + IND_XGI_CRT2_WRITE_ENABLE_315, + 0x01); - if (xgi_video_info.TV_type == TVMODE_NTSC) { + if (xgifb_info->TV_type == TVMODE_NTSC) { xgifb_reg_and(XGIPART2, 0x3a, 0x1f); - if (xgi_video_info.TV_plug == TVPLUG_SVIDEO) { + if (xgifb_info->TV_plug == TVPLUG_SVIDEO) { xgifb_reg_and(XGIPART2, 0x30, 0xdf); - } else if (xgi_video_info.TV_plug + } else if (xgifb_info->TV_plug == TVPLUG_COMPOSITE) { xgifb_reg_or(XGIPART2, 0x30, 0x20); - switch (xgi_video_info.video_width) { + switch (xgifb_info->video_width) { case 640: xgifb_reg_set(XGIPART2, 0x35, @@ -1104,20 +1034,20 @@ static void XGIfb_post_setmode(void) } } - } else if (xgi_video_info.TV_type == TVMODE_PAL) { + } else if (xgifb_info->TV_type == TVMODE_PAL) { xgifb_reg_and(XGIPART2, 0x3A, 0x1F); - if (xgi_video_info.TV_plug == TVPLUG_SVIDEO) { + if (xgifb_info->TV_plug == TVPLUG_SVIDEO) { xgifb_reg_and(XGIPART2, 0x30, 0xDF); - } else if (xgi_video_info.TV_plug + } else if (xgifb_info->TV_plug == TVPLUG_COMPOSITE) { xgifb_reg_or(XGIPART2, 0x30, 0x20); - switch (xgi_video_info.video_width) { + switch (xgifb_info->video_width) { case 640: xgifb_reg_set(XGIPART2, 0x35, @@ -1204,7 +1134,8 @@ static void XGIfb_post_setmode(void) 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 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 @@ -1242,58 +1173,61 @@ static int XGIfb_do_set_var(struct fb_var_screeninfo *var, int isactive, if (var->pixclock && htotal && vtotal) { drate = 1000000000 / var->pixclock; hrate = (drate * 1000) / htotal; - xgi_video_info.refresh_rate = (unsigned int) (hrate * 2 + xgifb_info->refresh_rate = (unsigned int) (hrate * 2 / vtotal); } else { - xgi_video_info.refresh_rate = 60; + xgifb_info->refresh_rate = 60; } printk(KERN_DEBUG "XGIfb: Change mode to %dx%dx%d-%dHz\n", var->xres, var->yres, var->bits_per_pixel, - xgi_video_info.refresh_rate); + xgifb_info->refresh_rate); - old_mode = xgifb_mode_idx; - xgifb_mode_idx = 0; + old_mode = xgifb_info->mode_idx; + xgifb_info->mode_idx = 0; - while ((XGIbios_mode[xgifb_mode_idx].mode_no != 0) - && (XGIbios_mode[xgifb_mode_idx].xres <= var->xres)) { - if ((XGIbios_mode[xgifb_mode_idx].xres == var->xres) - && (XGIbios_mode[xgifb_mode_idx].yres - == var->yres) - && (XGIbios_mode[xgifb_mode_idx].bpp + 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)) { - XGIfb_mode_no = XGIbios_mode[xgifb_mode_idx].mode_no; found_mode = 1; break; } - xgifb_mode_idx++; + xgifb_info->mode_idx++; } if (found_mode) - xgifb_mode_idx = XGIfb_validate_mode(xgifb_mode_idx); + xgifb_info->mode_idx = XGIfb_validate_mode(xgifb_info, + xgifb_info->mode_idx); else - xgifb_mode_idx = -1; + xgifb_info->mode_idx = -1; - if (xgifb_mode_idx < 0) { + if (xgifb_info->mode_idx < 0) { printk(KERN_ERR "XGIfb: Mode %dx%dx%d not supported\n", var->xres, var->yres, var->bits_per_pixel); - xgifb_mode_idx = old_mode; + xgifb_info->mode_idx = old_mode; return -EINVAL; } - if (XGIfb_search_refresh_rate(xgi_video_info.refresh_rate) == 0) { - XGIfb_rate_idx = XGIbios_mode[xgifb_mode_idx].rate_idx; - xgi_video_info.refresh_rate = 60; + if (XGIfb_search_refresh_rate(xgifb_info, + xgifb_info->refresh_rate) == 0) { + xgifb_info->rate_idx = + XGIbios_mode[xgifb_info->mode_idx].rate_idx; + xgifb_info->refresh_rate = 60; } if (isactive) { - XGIfb_pre_setmode(); - if (XGISetModeNew(&XGIhw_ext, XGIfb_mode_no) == 0) { + XGIfb_pre_setmode(xgifb_info); + if (XGISetModeNew(hw_info, + XGIbios_mode[xgifb_info->mode_idx].mode_no) + == 0) { printk(KERN_ERR "XGIfb: Setting mode[0x%x] failed\n", - XGIfb_mode_no); + XGIbios_mode[xgifb_info->mode_idx].mode_no); return -EINVAL; } info->fix.line_length = ((info->var.xres_virtual @@ -1306,85 +1240,77 @@ static int XGIfb_do_set_var(struct fb_var_screeninfo *var, int isactive, 0x0E, (info->fix.line_length & 0xff00) >> 8); - XGIfb_post_setmode(); + XGIfb_post_setmode(xgifb_info); DPRINTK("XGIfb: Set new mode: %dx%dx%d-%d\n", - XGIbios_mode[xgifb_mode_idx].xres, - XGIbios_mode[xgifb_mode_idx].yres, - XGIbios_mode[xgifb_mode_idx].bpp, - xgi_video_info.refresh_rate); - - xgi_video_info.video_bpp = XGIbios_mode[xgifb_mode_idx].bpp; - xgi_video_info.video_vwidth = info->var.xres_virtual; - xgi_video_info.video_width = XGIbios_mode[xgifb_mode_idx].xres; - xgi_video_info.video_vheight = info->var.yres_virtual; - xgi_video_info.video_height = XGIbios_mode[xgifb_mode_idx].yres; - xgi_video_info.org_x = xgi_video_info.org_y = 0; - xgi_video_info.video_linelength = info->var.xres_virtual - * (xgi_video_info.video_bpp >> 3); - switch (xgi_video_info.video_bpp) { + 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 = 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: - xgi_video_info.DstColor = 0x0000; - xgi_video_info.XGI310_AccelDepth = 0x00000000; - xgi_video_info.video_cmap_len = 256; + xgifb_info->DstColor = 0x0000; + xgifb_info->XGI310_AccelDepth = 0x00000000; + xgifb_info->video_cmap_len = 256; #if defined(__powerpc__) cr_data = xgifb_reg_get(XGICR, 0x4D); xgifb_reg_set(XGICR, 0x4D, (cr_data & 0xE0)); #endif break; case 16: - xgi_video_info.DstColor = 0x8000; - xgi_video_info.XGI310_AccelDepth = 0x00010000; + xgifb_info->DstColor = 0x8000; + xgifb_info->XGI310_AccelDepth = 0x00010000; #if defined(__powerpc__) cr_data = xgifb_reg_get(XGICR, 0x4D); xgifb_reg_set(XGICR, 0x4D, ((cr_data & 0xE0) | 0x0B)); #endif - xgi_video_info.video_cmap_len = 16; + xgifb_info->video_cmap_len = 16; break; case 32: - xgi_video_info.DstColor = 0xC000; - xgi_video_info.XGI310_AccelDepth = 0x00020000; - xgi_video_info.video_cmap_len = 16; + xgifb_info->DstColor = 0xC000; + xgifb_info->XGI310_AccelDepth = 0x00020000; + xgifb_info->video_cmap_len = 16; #if defined(__powerpc__) cr_data = xgifb_reg_get(XGICR, 0x4D); xgifb_reg_set(XGICR, 0x4D, ((cr_data & 0xE0) | 0x15)); #endif break; default: - xgi_video_info.video_cmap_len = 16; + xgifb_info->video_cmap_len = 16; printk(KERN_ERR "XGIfb: Unsupported depth %d", - xgi_video_info.video_bpp); + xgifb_info->video_bpp); break; } } - XGIfb_bpp_to_var(var); /*update ARGB info*/ + XGIfb_bpp_to_var(xgifb_info, var); /*update ARGB info*/ DEBUGPRN("End of do_set_var"); dumpVGAReg(); return 0; } -#ifdef XGIFB_PAN -static int XGIfb_pan_var(struct fb_var_screeninfo *var) +static int XGIfb_pan_var(struct fb_var_screeninfo *var, struct fb_info *info) { + struct xgifb_video_info *xgifb_info = info->par; unsigned int base; /* printk("Inside pan_var"); */ - if (var->xoffset > (var->xres_virtual - var->xres)) { - /* printk("Pan: xo: %d xv %d xr %d\n", - var->xoffset, var->xres_virtual, var->xres); */ - return -EINVAL; - } - if (var->yoffset > (var->yres_virtual - var->yres)) { - /* printk("Pan: yo: %d yv %d yr %d\n", - var->yoffset, var->yres_virtual, var->yres); */ - return -EINVAL; - } - base = var->yoffset * var->xres_virtual + var->xoffset; + base = var->yoffset * info->var.xres_virtual + var->xoffset; /* calculate base bpp dep. */ - switch (var->bits_per_pixel) { + switch (info->var.bits_per_pixel) { case 16: base >>= 1; break; @@ -1404,8 +1330,8 @@ static int XGIfb_pan_var(struct fb_var_screeninfo *var) xgifb_reg_set(XGISR, 0x37, (base >> 24) & 0x03); xgifb_reg_and_or(XGISR, 0x37, 0xDF, (base >> 21) & 0x04); - if (xgi_video_info.disp_state & DISPTYPE_DISP2) { - xgifb_reg_or(XGIPART1, XGIfb_CRT2_write_enable, 0x01); + if (xgifb_info->display2 != XGIFB_DISP_NONE) { + xgifb_reg_or(XGIPART1, IND_XGI_CRT2_WRITE_ENABLE_315, 0x01); xgifb_reg_set(XGIPART1, 0x06, (base & 0xFF)); xgifb_reg_set(XGIPART1, 0x05, ((base >> 8) & 0xFF)); xgifb_reg_set(XGIPART1, 0x04, ((base >> 16) & 0xFF)); @@ -1417,7 +1343,6 @@ static int XGIfb_pan_var(struct fb_var_screeninfo *var) /* printk("End of pan_var"); */ return 0; } -#endif static int XGIfb_open(struct fb_info *info, int user) { @@ -1450,6 +1375,8 @@ static int XGIfb_get_cmap_len(const struct fb_var_screeninfo *var) static int XGIfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *info) { + struct xgifb_video_info *xgifb_info = info->par; + if (regno >= XGIfb_get_cmap_len(&info->var)) return 1; @@ -1459,7 +1386,7 @@ static int XGIfb_setcolreg(unsigned regno, unsigned red, unsigned green, outb((red >> 10), XGIDACD); outb((green >> 10), XGIDACD); outb((blue >> 10), XGIDACD); - if (xgi_video_info.disp_state & DISPTYPE_DISP2) { + if (xgifb_info->display2 != XGIFB_DISP_NONE) { outb(regno, XGIDAC2A); outb((red >> 8), XGIDAC2D); outb((green >> 8), XGIDAC2D); @@ -1487,30 +1414,28 @@ static int XGIfb_setcolreg(unsigned regno, unsigned red, unsigned green, static int XGIfb_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info) { + struct xgifb_video_info *xgifb_info = info->par; + DEBUGPRN("inside get_fix"); memset(fix, 0, sizeof(struct fb_fix_screeninfo)); - strcpy(fix->id, myid); - - fix->smem_start = xgi_video_info.video_base; + fix->smem_start = xgifb_info->video_base; - fix->smem_len = xgi_video_info.video_size; + fix->smem_len = xgifb_info->video_size; - fix->type = video_type; + fix->type = FB_TYPE_PACKED_PIXELS; fix->type_aux = 0; - if (xgi_video_info.video_bpp == 8) + if (xgifb_info->video_bpp == 8) fix->visual = FB_VISUAL_PSEUDOCOLOR; else fix->visual = FB_VISUAL_DIRECTCOLOR; fix->xpanstep = 0; -#ifdef XGIFB_PAN if (XGIfb_ypan) fix->ypanstep = 1; -#endif fix->ywrapstep = 0; - fix->line_length = xgi_video_info.video_linelength; - fix->mmio_start = xgi_video_info.mmio_base; - fix->mmio_len = xgi_video_info.mmio_size; + 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_XGI_XABRE; DEBUGPRN("end of get_fix"); @@ -1532,6 +1457,7 @@ static int XGIfb_set_par(struct fb_info *info) 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; @@ -1562,15 +1488,15 @@ static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) if (var->pixclock && htotal && vtotal) { drate = 1000000000 / var->pixclock; hrate = (drate * 1000) / htotal; - xgi_video_info.refresh_rate = + xgifb_info->refresh_rate = (unsigned int) (hrate * 2 / vtotal); printk(KERN_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, xgi_video_info.refresh_rate); + __func__, drate, hrate, xgifb_info->refresh_rate); } else { - xgi_video_info.refresh_rate = 60; + xgifb_info->refresh_rate = 60; } /* @@ -1592,7 +1518,7 @@ static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) 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(search_idx) > 0) { + if (XGIfb_validate_mode(xgifb_info, search_idx) > 0) { found_mode = 1; break; } @@ -1610,7 +1536,8 @@ static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) (var->yres <= XGIbios_mode[search_idx].yres) && (var->bits_per_pixel == XGIbios_mode[search_idx].bpp)) { - if (XGIfb_validate_mode(search_idx) > 0) { + if (XGIfb_validate_mode(xgifb_info, + search_idx) > 0) { found_mode = 1; break; } @@ -1633,7 +1560,7 @@ static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) /* TW: TODO: Check the refresh rate */ /* Adapt RGB settings */ - XGIfb_bpp_to_var(var); + XGIfb_bpp_to_var(xgifb_info, var); /* Sanity check for offsets */ if (var->xoffset < 0) @@ -1649,7 +1576,7 @@ static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) } /* else { */ /* TW: Now patch yres_virtual if we use panning */ /* May I do this? */ - /* var->yres_virtual = xgi_video_info.heapstart / + /* var->yres_virtual = xgifb_info->heapstart / (var->xres * (var->bits_per_pixel >> 3)); */ /* if (var->yres_virtual <= var->yres) { */ /* TW: Paranoia check */ @@ -1674,7 +1601,6 @@ static int XGIfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) return 0; } -#ifdef XGIFB_PAN static int XGIfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info) { @@ -1682,9 +1608,9 @@ static int XGIfb_pan_display(struct fb_var_screeninfo *var, /* printk("\nInside pan_display:\n"); */ - if (var->xoffset > (var->xres_virtual - var->xres)) + if (var->xoffset > (info->var.xres_virtual - info->var.xres)) return -EINVAL; - if (var->yoffset > (var->yres_virtual - var->yres)) + if (var->yoffset > (info->var.yres_virtual - info->var.yres)) return -EINVAL; if (var->vmode & FB_VMODE_YWRAP) { @@ -1697,7 +1623,7 @@ static int XGIfb_pan_display(struct fb_var_screeninfo *var, > info->var.yres_virtual) return -EINVAL; } - err = XGIfb_pan_var(var); + err = XGIfb_pan_var(var, info); if (err < 0) return err; @@ -1711,10 +1637,10 @@ static int XGIfb_pan_display(struct fb_var_screeninfo *var, /* printk("End of pan_display\n"); */ return 0; } -#endif static int XGIfb_blank(int blank, struct fb_info *info) { + struct xgifb_video_info *xgifb_info = info->par; u8 reg; reg = xgifb_reg_get(XGICR, 0x17); @@ -1737,9 +1663,7 @@ static struct fb_ops XGIfb_ops = { .fb_check_var = XGIfb_check_var, .fb_set_par = XGIfb_set_par, .fb_setcolreg = XGIfb_setcolreg, -#ifdef XGIFB_PAN .fb_pan_display = XGIfb_pan_display, -#endif .fb_blank = XGIfb_blank, .fb_fillrect = cfb_fillrect, .fb_copyarea = cfb_copyarea, @@ -1751,51 +1675,51 @@ static struct fb_ops XGIfb_ops = { /* for XGI 315/550/650/740/330 */ -static int XGIfb_get_dram_size(void) +static int XGIfb_get_dram_size(struct xgifb_video_info *xgifb_info) { u8 ChannelNum, tmp; u8 reg = 0; /* xorg driver sets 32MB * 1 channel */ - if (xgi_video_info.chip == XG27) + if (xgifb_info->chip == XG27) xgifb_reg_set(XGISR, IND_XGI_DRAM_SIZE, 0x51); reg = xgifb_reg_get(XGISR, IND_XGI_DRAM_SIZE); switch ((reg & XGI_DRAM_SIZE_MASK) >> 4) { case XGI_DRAM_SIZE_1MB: - xgi_video_info.video_size = 0x100000; + xgifb_info->video_size = 0x100000; break; case XGI_DRAM_SIZE_2MB: - xgi_video_info.video_size = 0x200000; + xgifb_info->video_size = 0x200000; break; case XGI_DRAM_SIZE_4MB: - xgi_video_info.video_size = 0x400000; + xgifb_info->video_size = 0x400000; break; case XGI_DRAM_SIZE_8MB: - xgi_video_info.video_size = 0x800000; + xgifb_info->video_size = 0x800000; break; case XGI_DRAM_SIZE_16MB: - xgi_video_info.video_size = 0x1000000; + xgifb_info->video_size = 0x1000000; break; case XGI_DRAM_SIZE_32MB: - xgi_video_info.video_size = 0x2000000; + xgifb_info->video_size = 0x2000000; break; case XGI_DRAM_SIZE_64MB: - xgi_video_info.video_size = 0x4000000; + xgifb_info->video_size = 0x4000000; break; case XGI_DRAM_SIZE_128MB: - xgi_video_info.video_size = 0x8000000; + xgifb_info->video_size = 0x8000000; break; case XGI_DRAM_SIZE_256MB: - xgi_video_info.video_size = 0x10000000; + xgifb_info->video_size = 0x10000000; break; default: return -1; } tmp = (reg & 0x0c) >> 2; - switch (xgi_video_info.chip) { + switch (xgifb_info->chip) { case XG20: case XG21: case XG27: @@ -1831,25 +1755,25 @@ static int XGIfb_get_dram_size(void) break; } - xgi_video_info.video_size = xgi_video_info.video_size * ChannelNum; + xgifb_info->video_size = xgifb_info->video_size * ChannelNum; /* PLiad fixed for benchmarking and fb set */ - /* xgi_video_info.video_size = 0x200000; */ /* 1024x768x16 */ - /* xgi_video_info.video_size = 0x1000000; */ /* benchmark */ + /* xgifb_info->video_size = 0x200000; */ /* 1024x768x16 */ + /* xgifb_info->video_size = 0x1000000; */ /* benchmark */ printk("XGIfb: SR14=%x DramSzie %x ChannelNum %x\n", reg, - xgi_video_info.video_size, ChannelNum); + xgifb_info->video_size, ChannelNum); return 0; } -static void XGIfb_detect_VB(void) +static void XGIfb_detect_VB(struct xgifb_video_info *xgifb_info) { u8 cr32, temp = 0; - xgi_video_info.TV_plug = xgi_video_info.TV_type = 0; + xgifb_info->TV_plug = xgifb_info->TV_type = 0; - switch (xgi_video_info.hasVB) { + switch (xgifb_info->hasVB) { case HASVB_LVDS_CHRONTEL: case HASVB_CHRONTEL: break; @@ -1872,35 +1796,35 @@ static void XGIfb_detect_VB(void) if (XGIfb_crt2type != -1) /* TW: Override with option */ - xgi_video_info.disp_state = XGIfb_crt2type; + xgifb_info->display2 = XGIfb_crt2type; else if (cr32 & XGI_VB_TV) - xgi_video_info.disp_state = DISPTYPE_TV; + xgifb_info->display2 = XGIFB_DISP_TV; else if (cr32 & XGI_VB_LCD) - xgi_video_info.disp_state = DISPTYPE_LCD; + xgifb_info->display2 = XGIFB_DISP_LCD; else if (cr32 & XGI_VB_CRT2) - xgi_video_info.disp_state = DISPTYPE_CRT2; + xgifb_info->display2 = XGIFB_DISP_CRT; else - xgi_video_info.disp_state = 0; + xgifb_info->display2 = XGIFB_DISP_NONE; if (XGIfb_tvplug != -1) /* PR/TW: Override with option */ - xgi_video_info.TV_plug = XGIfb_tvplug; + xgifb_info->TV_plug = XGIfb_tvplug; else if (cr32 & XGI_VB_HIVISION) { - xgi_video_info.TV_type = TVMODE_HIVISION; - xgi_video_info.TV_plug = TVPLUG_SVIDEO; + xgifb_info->TV_type = TVMODE_HIVISION; + xgifb_info->TV_plug = TVPLUG_SVIDEO; } else if (cr32 & XGI_VB_SVIDEO) - xgi_video_info.TV_plug = TVPLUG_SVIDEO; + xgifb_info->TV_plug = TVPLUG_SVIDEO; else if (cr32 & XGI_VB_COMPOSITE) - xgi_video_info.TV_plug = TVPLUG_COMPOSITE; + xgifb_info->TV_plug = TVPLUG_COMPOSITE; else if (cr32 & XGI_VB_SCART) - xgi_video_info.TV_plug = TVPLUG_SCART; + xgifb_info->TV_plug = TVPLUG_SCART; - if (xgi_video_info.TV_type == 0) { + if (xgifb_info->TV_type == 0) { temp = xgifb_reg_get(XGICR, 0x38); if (temp & 0x10) - xgi_video_info.TV_type = TVMODE_PAL; + xgifb_info->TV_type = TVMODE_PAL; else - xgi_video_info.TV_type = TVMODE_NTSC; + xgifb_info->TV_type = TVMODE_NTSC; } /* TW: Copy forceCRT1 option to CRT1off if option is given */ @@ -1912,37 +1836,37 @@ static void XGIfb_detect_VB(void) } } -static int XGIfb_has_VB(void) +static int XGIfb_has_VB(struct xgifb_video_info *xgifb_info) { u8 vb_chipid; vb_chipid = xgifb_reg_get(XGIPART4, 0x00); switch (vb_chipid) { case 0x01: - xgi_video_info.hasVB = HASVB_301; + xgifb_info->hasVB = HASVB_301; break; case 0x02: - xgi_video_info.hasVB = HASVB_302; + xgifb_info->hasVB = HASVB_302; break; default: - xgi_video_info.hasVB = HASVB_NONE; + xgifb_info->hasVB = HASVB_NONE; return 0; } return 1; } -static void XGIfb_get_VB_type(void) +static void XGIfb_get_VB_type(struct xgifb_video_info *xgifb_info) { u8 reg; - if (!XGIfb_has_VB()) { + if (!XGIfb_has_VB(xgifb_info)) { reg = xgifb_reg_get(XGICR, IND_XGI_SCRATCH_REG_CR37); switch ((reg & XGI_EXTERNAL_CHIP_MASK) >> 1) { case XGI310_EXTERNAL_CHIP_LVDS: - xgi_video_info.hasVB = HASVB_LVDS; + xgifb_info->hasVB = HASVB_LVDS; break; case XGI310_EXTERNAL_CHIP_LVDS_CHRONTEL: - xgi_video_info.hasVB = HASVB_LVDS_CHRONTEL; + xgifb_info->hasVB = HASVB_LVDS_CHRONTEL; break; default: break; @@ -1950,49 +1874,47 @@ static void XGIfb_get_VB_type(void) } } -XGIINITSTATIC int __init XGIfb_setup(char *options) +static int __init xgifb_optval(char *fullopt, int validx) { - char *this_opt; + unsigned long lres; - xgi_video_info.refresh_rate = 0; + if (kstrtoul(fullopt + validx, 0, &lres) < 0 || lres > INT_MAX) { + pr_err("xgifb: invalid value for option: %s\n", fullopt); + return 0; + } + return lres; +} - printk(KERN_INFO "XGIfb: Options %s\n", options); +static int __init XGIfb_setup(char *options) +{ + char *this_opt; if (!options || !*options) return 0; + pr_info("xgifb: options: %s\n", options); + while ((this_opt = strsep(&options, ",")) != NULL) { if (!*this_opt) continue; if (!strncmp(this_opt, "mode:", 5)) { - XGIfb_search_mode(this_opt + 5); - } else if (!strncmp(this_opt, "vesa:", 5)) { - XGIfb_search_vesamode(simple_strtoul( - this_opt + 5, NULL, 0)); - } else if (!strncmp(this_opt, "mode:", 5)) { - XGIfb_search_mode(this_opt + 5); + mode = this_opt + 5; } else if (!strncmp(this_opt, "vesa:", 5)) { - XGIfb_search_vesamode(simple_strtoul( - this_opt + 5, NULL, 0)); + vesa = xgifb_optval(this_opt, 5); } else if (!strncmp(this_opt, "vrate:", 6)) { - xgi_video_info.refresh_rate = simple_strtoul( - this_opt + 6, NULL, 0); + refresh_rate = xgifb_optval(this_opt, 6); } else if (!strncmp(this_opt, "rate:", 5)) { - xgi_video_info.refresh_rate = simple_strtoul( - this_opt + 5, NULL, 0); - } else if (!strncmp(this_opt, "off", 3)) { - XGIfb_off = 1; + 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 = (int)simple_strtoul(this_opt + 7, NULL, 0); + 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 = (int)simple_strtoul( - this_opt + 10, NULL, 0); + 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)) { @@ -2000,32 +1922,15 @@ XGIINITSTATIC int __init XGIfb_setup(char *options) } else if (!strncmp(this_opt, "dstn", 4)) { enable_dstn = 1; /* TW: DSTN overrules forcecrt2type */ - XGIfb_crt2type = DISPTYPE_LCD; - } else if (!strncmp(this_opt, "pdc:", 4)) { - XGIfb_pdc = simple_strtoul(this_opt + 4, NULL, 0); - if (XGIfb_pdc & ~0x3c) { - printk(KERN_INFO "XGIfb: Illegal pdc parameter\n"); - XGIfb_pdc = 0; - } + XGIfb_crt2type = XGIFB_DISP_LCD; } else if (!strncmp(this_opt, "noypan", 6)) { XGIfb_ypan = 0; } else if (!strncmp(this_opt, "userom:", 7)) { - XGIfb_userom = (int)simple_strtoul( - this_opt + 7, NULL, 0); - /* } else if (!strncmp(this_opt, "useoem:", 7)) { */ - /* XGIfb_useoem = (int)simple_strtoul( - this_opt + 7, NULL, 0); */ + XGIfb_userom = xgifb_optval(this_opt, 7); } else { - XGIfb_search_mode(this_opt); - /* printk(KERN_INFO "XGIfb: Invalid option %s\n", - this_opt); */ + mode = this_opt; } - - /* TW: Panning only with acceleration */ - XGIfb_ypan = 0; - } - printk("\nxgifb: outa xgifb_setup 3450"); return 0; } @@ -2057,44 +1962,46 @@ static int __devinit xgifb_probe(struct pci_dev *pdev, u8 reg, reg1; u8 CR48, CR38; int ret; + bool xgi21_drvlcdcaplist = false; + struct fb_info *fb_info; + struct xgifb_video_info *xgifb_info; + struct xgi_hw_device_info *hw_info; - if (XGIfb_off) - return -ENXIO; - - XGIfb_registered = 0; - - memset(&XGIhw_ext, 0, sizeof(struct xgi_hw_device_info)); - fb_info = framebuffer_alloc(sizeof(struct fb_info), &pdev->dev); + fb_info = framebuffer_alloc(sizeof(*xgifb_info), &pdev->dev); if (!fb_info) return -ENOMEM; - xgi_video_info.chip_id = pdev->device; + xgifb_info = fb_info->par; + 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, - &xgi_video_info.revision_id); - XGIhw_ext.jChipRevision = xgi_video_info.revision_id; - - xgi_video_info.pcibus = pdev->bus->number; - xgi_video_info.pcislot = PCI_SLOT(pdev->devfn); - xgi_video_info.pcifunc = PCI_FUNC(pdev->devfn); - xgi_video_info.subsysvendor = pdev->subsystem_vendor; - xgi_video_info.subsysdevice = pdev->subsystem_device; - - xgi_video_info.video_base = pci_resource_start(pdev, 0); - xgi_video_info.mmio_base = pci_resource_start(pdev, 1); - xgi_video_info.mmio_size = pci_resource_len(pdev, 1); - xgi_video_info.vga_base = pci_resource_start(pdev, 2) + 0x30; - XGIhw_ext.pjIOAddress = (unsigned char *)xgi_video_info.vga_base; + &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; + + 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; + hw_info->pjIOAddress = (unsigned char *)xgifb_info->vga_base; /* XGI_Pr.RelIO = ioremap(pci_resource_start(pdev, 2), 128) + 0x30; */ printk("XGIfb: Relocate IO address: %lx [%08lx]\n", - (unsigned long)pci_resource_start(pdev, 2), XGI_Pr.RelIO); + (unsigned long)pci_resource_start(pdev, 2), + xgifb_info->dev_info.RelIO); if (pci_enable_device(pdev)) { ret = -EIO; goto error; } - XGIRegInit(&XGI_Pr, (unsigned long)XGIhw_ext.pjIOAddress); + XGIRegInit(&xgifb_info->dev_info, (unsigned long)hw_info->pjIOAddress); xgifb_reg_set(XGISR, IND_XGI_PASSWORD, XGI_PASSWORD); reg1 = xgifb_reg_get(XGISR, IND_XGI_PASSWORD); @@ -2105,417 +2012,413 @@ static int __devinit xgifb_probe(struct pci_dev *pdev, goto error; } - switch (xgi_video_info.chip_id) { + switch (xgifb_info->chip_id) { case PCI_DEVICE_ID_XG_20: xgifb_reg_or(XGICR, Index_CR_GPIO_Reg3, GPIOG_EN); CR48 = xgifb_reg_get(XGICR, Index_CR_GPIO_Reg1); if (CR48&GPIOG_READ) - xgi_video_info.chip = XG21; + xgifb_info->chip = XG21; else - xgi_video_info.chip = XG20; - XGIfb_CRT2_write_enable = IND_XGI_CRT2_WRITE_ENABLE_315; + xgifb_info->chip = XG20; break; case PCI_DEVICE_ID_XG_40: - xgi_video_info.chip = XG40; - XGIfb_CRT2_write_enable = IND_XGI_CRT2_WRITE_ENABLE_315; + xgifb_info->chip = XG40; break; case PCI_DEVICE_ID_XG_41: - xgi_video_info.chip = XG41; - XGIfb_CRT2_write_enable = IND_XGI_CRT2_WRITE_ENABLE_315; + xgifb_info->chip = XG41; break; case PCI_DEVICE_ID_XG_42: - xgi_video_info.chip = XG42; - XGIfb_CRT2_write_enable = IND_XGI_CRT2_WRITE_ENABLE_315; + xgifb_info->chip = XG42; break; case PCI_DEVICE_ID_XG_27: - xgi_video_info.chip = XG27; - XGIfb_CRT2_write_enable = IND_XGI_CRT2_WRITE_ENABLE_315; + xgifb_info->chip = XG27; break; default: ret = -ENODEV; goto error; } - printk("XGIfb:chipid = %x\n", xgi_video_info.chip); - XGIhw_ext.jChipType = xgi_video_info.chip; + printk("XGIfb:chipid = %x\n", xgifb_info->chip); + hw_info->jChipType = xgifb_info->chip; - if ((xgi_video_info.chip == XG21) || (XGIfb_userom)) { - XGIhw_ext.pjVirtualRomBase = xgifb_copy_rom(pdev); - if (XGIhw_ext.pjVirtualRomBase) + if ((xgifb_info->chip == XG21) || (XGIfb_userom)) { + hw_info->pjVirtualRomBase = xgifb_copy_rom(pdev); + if (hw_info->pjVirtualRomBase) printk(KERN_INFO "XGIfb: Video ROM found and mapped to %p\n", - XGIhw_ext.pjVirtualRomBase); + hw_info->pjVirtualRomBase); else printk(KERN_INFO "XGIfb: Video ROM not found\n"); } else { - XGIhw_ext.pjVirtualRomBase = NULL; + hw_info->pjVirtualRomBase = NULL; printk(KERN_INFO "XGIfb: Video ROM usage disabled\n"); } - XGIhw_ext.pQueryVGAConfigSpace = &XGIfb_query_VGA_config_space; - if (XGIfb_get_dram_size()) { + if (XGIfb_get_dram_size(xgifb_info)) { printk(KERN_INFO "XGIfb: Fatal error: Unable to determine RAM size.\n"); ret = -ENODEV; goto error; } - if ((xgifb_mode_idx < 0) || - ((XGIbios_mode[xgifb_mode_idx].mode_no) != 0xFF)) { - /* Enable PCI_LINEAR_ADDRESSING and MMIO_ENABLE */ - xgifb_reg_or(XGISR, - IND_XGI_PCI_ADDRESS_SET, - (XGI_PCI_ADDR_ENABLE | XGI_MEM_MAP_IO_ENABLE)); - /* Enable 2D accelerator engine */ - xgifb_reg_or(XGISR, IND_XGI_MODULE_ENABLE, XGI_ENABLE_2D); - } + /* Enable PCI_LINEAR_ADDRESSING and MMIO_ENABLE */ + xgifb_reg_or(XGISR, + IND_XGI_PCI_ADDRESS_SET, + (XGI_PCI_ADDR_ENABLE | XGI_MEM_MAP_IO_ENABLE)); + /* Enable 2D accelerator engine */ + xgifb_reg_or(XGISR, IND_XGI_MODULE_ENABLE, XGI_ENABLE_2D); - XGIhw_ext.ulVideoMemorySize = xgi_video_info.video_size; + hw_info->ulVideoMemorySize = xgifb_info->video_size; - if (!request_mem_region(xgi_video_info.video_base, - xgi_video_info.video_size, + if (!request_mem_region(xgifb_info->video_base, + xgifb_info->video_size, "XGIfb FB")) { printk("unable request memory size %x", - xgi_video_info.video_size); + xgifb_info->video_size); printk(KERN_ERR "XGIfb: Fatal error: Unable to reserve frame buffer memory\n"); printk(KERN_ERR "XGIfb: Is there another framebuffer driver active?\n"); ret = -ENODEV; goto error; } - if (!request_mem_region(xgi_video_info.mmio_base, - xgi_video_info.mmio_size, + if (!request_mem_region(xgifb_info->mmio_base, + xgifb_info->mmio_size, "XGIfb MMIO")) { printk(KERN_ERR "XGIfb: Fatal error: Unable to reserve MMIO region\n"); ret = -ENODEV; goto error_0; } - xgi_video_info.video_vbase = XGIhw_ext.pjVideoMemoryAddress = - ioremap(xgi_video_info.video_base, xgi_video_info.video_size); - xgi_video_info.mmio_vbase = ioremap(xgi_video_info.mmio_base, - xgi_video_info.mmio_size); + xgifb_info->video_vbase = hw_info->pjVideoMemoryAddress = + ioremap(xgifb_info->video_base, xgifb_info->video_size); + xgifb_info->mmio_vbase = ioremap(xgifb_info->mmio_base, + xgifb_info->mmio_size); printk(KERN_INFO "XGIfb: Framebuffer at 0x%lx, mapped to 0x%p, size %dk\n", - xgi_video_info.video_base, - xgi_video_info.video_vbase, - xgi_video_info.video_size / 1024); + xgifb_info->video_base, + xgifb_info->video_vbase, + xgifb_info->video_size / 1024); printk(KERN_INFO "XGIfb: MMIO at 0x%lx, mapped to 0x%p, size %ldk\n", - xgi_video_info.mmio_base, xgi_video_info.mmio_vbase, - xgi_video_info.mmio_size / 1024); + xgifb_info->mmio_base, xgifb_info->mmio_vbase, + xgifb_info->mmio_size / 1024); printk("XGIfb: XGIInitNew() ..."); - if (XGIInitNew(&XGIhw_ext)) + pci_set_drvdata(pdev, xgifb_info); + if (XGIInitNew(pdev)) printk("OK\n"); else printk("Fail\n"); - xgi_video_info.mtrr = (unsigned int) 0; - - if ((xgifb_mode_idx < 0) || - ((XGIbios_mode[xgifb_mode_idx].mode_no) != 0xFF)) { - xgi_video_info.hasVB = HASVB_NONE; - if ((xgi_video_info.chip == XG20) || - (xgi_video_info.chip == XG27)) { - xgi_video_info.hasVB = HASVB_NONE; - } else if (xgi_video_info.chip == XG21) { - CR38 = xgifb_reg_get(XGICR, 0x38); - if ((CR38&0xE0) == 0xC0) { - xgi_video_info.disp_state = DISPTYPE_LCD; - if (!XGIfb_GetXG21LVDSData()) { - int m; - for (m = 0; m < sizeof(XGI21_LCDCapList)/sizeof(struct XGI21_LVDSCapStruct); m++) { - if ((XGI21_LCDCapList[m].LVDSHDE == XGIbios_mode[xgifb_mode_idx].xres) && - (XGI21_LCDCapList[m].LVDSVDE == XGIbios_mode[xgifb_mode_idx].yres)) { - xgifb_reg_set(XGI_Pr.P3d4, 0x36, m); - } - } - } - } else if ((CR38&0xE0) == 0x60) { - xgi_video_info.hasVB = HASVB_CHRONTEL; - } else { - xgi_video_info.hasVB = HASVB_NONE; - } + xgifb_info->mtrr = (unsigned int) 0; + + 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(XGICR, 0x38); + if ((CR38&0xE0) == 0xC0) { + xgifb_info->display2 = XGIFB_DISP_LCD; + if (!XGIfb_GetXG21LVDSData(xgifb_info)) + xgi21_drvlcdcaplist = true; + } else if ((CR38&0xE0) == 0x60) { + xgifb_info->hasVB = HASVB_CHRONTEL; } else { - XGIfb_get_VB_type(); + xgifb_info->hasVB = HASVB_NONE; } + } else { + XGIfb_get_VB_type(xgifb_info); + } - XGIhw_ext.ujVBChipID = VB_CHIP_UNKNOWN; - - XGIhw_ext.ulExternalChip = 0; + hw_info->ujVBChipID = VB_CHIP_UNKNOWN; - switch (xgi_video_info.hasVB) { - case HASVB_301: - reg = xgifb_reg_get(XGIPART4, 0x01); - if (reg >= 0xE0) { - XGIhw_ext.ujVBChipID = VB_CHIP_302LV; - printk(KERN_INFO "XGIfb: XGI302LV bridge detected (revision 0x%02x)\n", reg); - } else if (reg >= 0xD0) { - XGIhw_ext.ujVBChipID = VB_CHIP_301LV; - printk(KERN_INFO "XGIfb: XGI301LV bridge detected (revision 0x%02x)\n", reg); - } - /* else if (reg >= 0xB0) { - XGIhw_ext.ujVBChipID = VB_CHIP_301B; - reg1 = xgifb_reg_get(XGIPART4, 0x23); - printk("XGIfb: XGI301B bridge detected\n"); - } */ - else { - XGIhw_ext.ujVBChipID = VB_CHIP_301; - printk("XGIfb: XGI301 bridge detected\n"); - } - break; - case HASVB_302: - reg = xgifb_reg_get(XGIPART4, 0x01); - if (reg >= 0xE0) { - XGIhw_ext.ujVBChipID = VB_CHIP_302LV; - printk(KERN_INFO "XGIfb: XGI302LV bridge detected (revision 0x%02x)\n", reg); - } else if (reg >= 0xD0) { - XGIhw_ext.ujVBChipID = VB_CHIP_301LV; - printk(KERN_INFO "XGIfb: XGI302LV bridge detected (revision 0x%02x)\n", reg); - } else if (reg >= 0xB0) { - reg1 = xgifb_reg_get(XGIPART4, 0x23); - - XGIhw_ext.ujVBChipID = VB_CHIP_302B; + hw_info->ulExternalChip = 0; - } else { - XGIhw_ext.ujVBChipID = VB_CHIP_302; - printk(KERN_INFO "XGIfb: XGI302 bridge detected\n"); - } - break; - case HASVB_LVDS: - XGIhw_ext.ulExternalChip = 0x1; - printk(KERN_INFO "XGIfb: LVDS transmitter detected\n"); - break; - case HASVB_TRUMPION: - XGIhw_ext.ulExternalChip = 0x2; - printk(KERN_INFO "XGIfb: Trumpion Zurac LVDS scaler detected\n"); - break; - case HASVB_CHRONTEL: - XGIhw_ext.ulExternalChip = 0x4; - printk(KERN_INFO "XGIfb: Chrontel TV encoder detected\n"); - break; - case HASVB_LVDS_CHRONTEL: - XGIhw_ext.ulExternalChip = 0x5; - printk(KERN_INFO "XGIfb: LVDS transmitter and Chrontel TV encoder detected\n"); - break; - default: - printk(KERN_INFO "XGIfb: No or unknown bridge type detected\n"); - break; + switch (xgifb_info->hasVB) { + case HASVB_301: + reg = xgifb_reg_get(XGIPART4, 0x01); + if (reg >= 0xE0) { + hw_info->ujVBChipID = VB_CHIP_302LV; + printk(KERN_INFO "XGIfb: XGI302LV bridge detected (revision 0x%02x)\n", reg); + } else if (reg >= 0xD0) { + hw_info->ujVBChipID = VB_CHIP_301LV; + printk(KERN_INFO "XGIfb: XGI301LV bridge detected (revision 0x%02x)\n", reg); } - - if (xgi_video_info.hasVB != HASVB_NONE) - XGIfb_detect_VB(); - - if (xgi_video_info.disp_state & DISPTYPE_DISP2) { - if (XGIfb_crt1off) - xgi_video_info.disp_state |= DISPMODE_SINGLE; - else - xgi_video_info.disp_state |= (DISPMODE_MIRROR | - DISPTYPE_CRT1); - } else { - xgi_video_info.disp_state = DISPMODE_SINGLE | - DISPTYPE_CRT1; + /* else if (reg >= 0xB0) { + hw_info->ujVBChipID = VB_CHIP_301B; + reg1 = xgifb_reg_get(XGIPART4, 0x23); + printk("XGIfb: XGI301B bridge detected\n"); + } */ + else { + hw_info->ujVBChipID = VB_CHIP_301; + printk("XGIfb: XGI301 bridge detected\n"); } + break; + case HASVB_302: + reg = xgifb_reg_get(XGIPART4, 0x01); + if (reg >= 0xE0) { + hw_info->ujVBChipID = VB_CHIP_302LV; + printk(KERN_INFO "XGIfb: XGI302LV bridge detected (revision 0x%02x)\n", reg); + } else if (reg >= 0xD0) { + hw_info->ujVBChipID = VB_CHIP_301LV; + printk(KERN_INFO "XGIfb: XGI302LV bridge detected (revision 0x%02x)\n", reg); + } else if (reg >= 0xB0) { + reg1 = xgifb_reg_get(XGIPART4, 0x23); - if (xgi_video_info.disp_state & DISPTYPE_LCD) { - if (!enable_dstn) { - reg = xgifb_reg_get(XGICR, IND_XGI_LCD_PANEL); - reg &= 0x0f; - XGIhw_ext.ulCRT2LCDType = XGI310paneltype[reg]; + hw_info->ujVBChipID = VB_CHIP_302B; - } else { - /* TW: FSTN/DSTN */ - XGIhw_ext.ulCRT2LCDType = LCD_320x480; - } + } else { + hw_info->ujVBChipID = VB_CHIP_302; + printk(KERN_INFO "XGIfb: XGI302 bridge detected\n"); } + break; + case HASVB_LVDS: + hw_info->ulExternalChip = 0x1; + printk(KERN_INFO "XGIfb: LVDS transmitter detected\n"); + break; + case HASVB_TRUMPION: + hw_info->ulExternalChip = 0x2; + printk(KERN_INFO "XGIfb: Trumpion Zurac LVDS scaler detected\n"); + break; + case HASVB_CHRONTEL: + hw_info->ulExternalChip = 0x4; + printk(KERN_INFO "XGIfb: Chrontel TV encoder detected\n"); + break; + case HASVB_LVDS_CHRONTEL: + hw_info->ulExternalChip = 0x5; + printk(KERN_INFO "XGIfb: LVDS transmitter and Chrontel TV encoder detected\n"); + break; + default: + printk(KERN_INFO "XGIfb: No or unknown bridge type detected\n"); + break; + } - XGIfb_detectedpdc = 0; + if (xgifb_info->hasVB != HASVB_NONE) + XGIfb_detect_VB(xgifb_info); - XGIfb_detectedlcda = 0xff; + if (xgifb_info->display2 == XGIFB_DISP_LCD) { + if (!enable_dstn) { + reg = xgifb_reg_get(XGICR, IND_XGI_LCD_PANEL); + reg &= 0x0f; + hw_info->ulCRT2LCDType = XGI310paneltype[reg]; - /* TW: Try to find about LCDA */ + } else { + /* TW: FSTN/DSTN */ + hw_info->ulCRT2LCDType = LCD_320x480; + } + } - if ((XGIhw_ext.ujVBChipID == VB_CHIP_302B) || - (XGIhw_ext.ujVBChipID == VB_CHIP_301LV) || - (XGIhw_ext.ujVBChipID == VB_CHIP_302LV)) { - int tmp; - tmp = xgifb_reg_get(XGICR, 0x34); - if (tmp <= 0x13) { + if ((hw_info->ujVBChipID == VB_CHIP_302B) || + (hw_info->ujVBChipID == VB_CHIP_301LV) || + (hw_info->ujVBChipID == VB_CHIP_302LV)) { + int tmp; + tmp = xgifb_reg_get(XGICR, 0x34); + if (tmp <= 0x13) { + /* Currently on LCDA? + *(Some BIOSes leave CR38) */ + tmp = xgifb_reg_get(XGICR, 0x38); + if ((tmp & 0x03) == 0x03) { + /* XGI_Pr.XGI_UseLCDA = 1; */ + } else { /* Currently on LCDA? - *(Some BIOSes leave CR38) */ - tmp = xgifb_reg_get(XGICR, 0x38); - if ((tmp & 0x03) == 0x03) { + *(Some newer BIOSes set D0 in CR35) */ + tmp = xgifb_reg_get(XGICR, 0x35); + if (tmp & 0x01) { /* XGI_Pr.XGI_UseLCDA = 1; */ } else { - /* Currently on LCDA? - *(Some newer BIOSes set D0 in CR35) */ - tmp = xgifb_reg_get(XGICR, 0x35); - if (tmp & 0x01) { - /* XGI_Pr.XGI_UseLCDA = 1; */ - } else { - tmp = xgifb_reg_get(XGICR, - 0x30); - if (tmp & 0x20) { - tmp = xgifb_reg_get( - XGIPART1, 0x13); - if (tmp & 0x04) { - /* XGI_Pr.XGI_UseLCDA = 1; */ - } + tmp = xgifb_reg_get(XGICR, + 0x30); + if (tmp & 0x20) { + tmp = xgifb_reg_get( + XGIPART1, 0x13); + if (tmp & 0x04) { + /* XGI_Pr.XGI_UseLCDA = 1; */ } } } } - } - if (xgifb_mode_idx >= 0) - xgifb_mode_idx = XGIfb_validate_mode(xgifb_mode_idx); + } + + xgifb_info->mode_idx = -1; - if (xgifb_mode_idx < 0) { - switch (xgi_video_info.disp_state & DISPTYPE_DISP2) { - case DISPTYPE_LCD: - xgifb_mode_idx = DEFAULT_LCDMODE; - if (xgi_video_info.chip == XG21) - xgifb_mode_idx = - XGIfb_GetXG21DefaultLVDSModeIdx(); - break; - case DISPTYPE_TV: - xgifb_mode_idx = DEFAULT_TVMODE; - break; - default: - xgifb_mode_idx = DEFAULT_MODE; + 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(); + else + xgifb_info->mode_idx = DEFAULT_MODE; + } + + if (xgifb_info->mode_idx < 0) { + dev_err(&pdev->dev, "no supported video mode found\n"); + goto error_1; + } + + if (xgi21_drvlcdcaplist) { + int m; + + for (m = 0; m < ARRAY_SIZE(XGI21_LCDCapList); m++) + if ((XGI21_LCDCapList[m].LVDSHDE == + XGIbios_mode[xgifb_info->mode_idx].xres) && + (XGI21_LCDCapList[m].LVDSVDE == + XGIbios_mode[xgifb_info->mode_idx].yres)) { + xgifb_reg_set(xgifb_info->dev_info.P3d4, + 0x36, + m); break; } - } + } - XGIfb_mode_no = XGIbios_mode[xgifb_mode_idx].mode_no; + /* yilin 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 = + XGIbios_mode[xgifb_info->mode_idx].rate_idx; + xgifb_info->refresh_rate = 60; + } - /* yilin set default refresh rate */ - if (xgi_video_info.refresh_rate == 0) - xgi_video_info.refresh_rate = 60; - if (XGIfb_search_refresh_rate( - xgi_video_info.refresh_rate) == 0) { - XGIfb_rate_idx = XGIbios_mode[xgifb_mode_idx].rate_idx; - xgi_video_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 = 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; + printk(KERN_INFO "XGIfb: Unsupported depth %d", + xgifb_info->video_bpp); + break; + } - xgi_video_info.video_bpp = XGIbios_mode[xgifb_mode_idx].bpp; - xgi_video_info.video_vwidth = - xgi_video_info.video_width = - XGIbios_mode[xgifb_mode_idx].xres; - xgi_video_info.video_vheight = - xgi_video_info.video_height = - XGIbios_mode[xgifb_mode_idx].yres; - xgi_video_info.org_x = xgi_video_info.org_y = 0; - xgi_video_info.video_linelength = - xgi_video_info.video_width * - (xgi_video_info.video_bpp >> 3); - switch (xgi_video_info.video_bpp) { - case 8: - xgi_video_info.DstColor = 0x0000; - xgi_video_info.XGI310_AccelDepth = 0x00000000; - xgi_video_info.video_cmap_len = 256; - break; - case 16: - xgi_video_info.DstColor = 0x8000; - xgi_video_info.XGI310_AccelDepth = 0x00010000; - xgi_video_info.video_cmap_len = 16; - break; - case 32: - xgi_video_info.DstColor = 0xC000; - xgi_video_info.XGI310_AccelDepth = 0x00020000; - xgi_video_info.video_cmap_len = 16; - break; - default: - xgi_video_info.video_cmap_len = 16; - printk(KERN_INFO "XGIfb: Unsupported depth %d", - xgi_video_info.video_bpp); - break; + printk(KERN_INFO "XGIfb: 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(&xgifb_info->dev_info, + hw_info, + XGIbios_mode[xgifb_info->mode_idx].mode_no, + xgifb_info->rate_idx)); + + if (XGIfb_mode_rate_to_ddata(&xgifb_info->dev_info, hw_info, + XGIbios_mode[xgifb_info->mode_idx].mode_no, + xgifb_info->rate_idx, + &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; } - printk(KERN_INFO "XGIfb: Default mode is %dx%dx%d (%dHz)\n", - xgi_video_info.video_width, - xgi_video_info.video_height, - xgi_video_info.video_bpp, - xgi_video_info.refresh_rate); - - default_var.xres = - default_var.xres_virtual = - xgi_video_info.video_width; - default_var.yres = - default_var.yres_virtual = - xgi_video_info.video_height; - default_var.bits_per_pixel = xgi_video_info.video_bpp; - - XGIfb_bpp_to_var(&default_var); - - default_var.pixclock = (u32) (1000000000 / - XGIfb_mode_rate_to_dclock(&XGI_Pr, &XGIhw_ext, - XGIfb_mode_no, XGIfb_rate_idx)); - - if (XGIfb_mode_rate_to_ddata(&XGI_Pr, &XGIhw_ext, - XGIfb_mode_no, XGIfb_rate_idx, - &default_var.left_margin, &default_var.right_margin, - &default_var.upper_margin, &default_var.lower_margin, - &default_var.hsync_len, &default_var.vsync_len, - &default_var.sync, &default_var.vmode)) { - - if ((default_var.vmode & FB_VMODE_MASK) == - FB_VMODE_INTERLACED) { - default_var.yres <<= 1; - default_var.yres_virtual <<= 1; - } else if ((default_var.vmode & FB_VMODE_MASK) == - FB_VMODE_DOUBLE) { - default_var.pixclock >>= 1; - default_var.yres >>= 1; - default_var.yres_virtual >>= 1; - } + } - } + strncpy(fb_info->fix.id, "XGI", sizeof(fb_info->fix.id) - 1); + fb_info->fix.type = FB_TYPE_PACKED_PIXELS; + fb_info->fix.xpanstep = 1; + fb_info->fix.ypanstep = 1; - fb_info->flags = FBINFO_FLAG_DEFAULT; - fb_info->var = default_var; - fb_info->fix = XGIfb_fix; - fb_info->par = &xgi_video_info; - fb_info->screen_base = xgi_video_info.video_vbase; - fb_info->fbops = &XGIfb_ops; - XGIfb_get_fix(&fb_info->fix, -1, fb_info); - fb_info->pseudo_palette = pseudo_palette; + 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); + fb_alloc_cmap(&fb_info->cmap, 256 , 0); #ifdef CONFIG_MTRR - xgi_video_info.mtrr = mtrr_add( - (unsigned int) xgi_video_info.video_base, - (unsigned int) xgi_video_info.video_size, - MTRR_TYPE_WRCOMB, 1); - if (xgi_video_info.mtrr) - printk(KERN_INFO "XGIfb: Added MTRRs\n"); + xgifb_info->mtrr = mtrr_add(xgifb_info->video_base, + xgifb_info->video_size, MTRR_TYPE_WRCOMB, 1); + if (xgifb_info->mtrr >= 0) + dev_info(&pdev->dev, "added MTRR\n"); #endif - if (register_framebuffer(fb_info) < 0) { - ret = -EINVAL; - goto error_1; - } - - XGIfb_registered = 1; - - printk(KERN_INFO "fb%d: %s frame buffer device, Version %d.%d.%02d\n", - fb_info->node, myid, VER_MAJOR, VER_MINOR, VER_LEVEL); - + if (register_framebuffer(fb_info) < 0) { + ret = -EINVAL; + goto error_mtrr; } dumpVGAReg(); return 0; +error_mtrr: +#ifdef CONFIG_MTRR + if (xgifb_info->mtrr >= 0) + mtrr_del(xgifb_info->mtrr, xgifb_info->video_base, + xgifb_info->video_size); +#endif /* CONFIG_MTRR */ error_1: - iounmap(xgi_video_info.mmio_vbase); - iounmap(xgi_video_info.video_vbase); - release_mem_region(xgi_video_info.mmio_base, xgi_video_info.mmio_size); + 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(xgi_video_info.video_base, - xgi_video_info.video_size); + release_mem_region(xgifb_info->video_base, xgifb_info->video_size); error: - vfree(XGIhw_ext.pjVirtualRomBase); + vfree(hw_info->pjVirtualRomBase); framebuffer_release(fb_info); return ret; } @@ -2526,13 +2429,20 @@ error: static void __devexit 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); - iounmap(xgi_video_info.mmio_vbase); - iounmap(xgi_video_info.video_vbase); - release_mem_region(xgi_video_info.mmio_base, xgi_video_info.mmio_size); - release_mem_region(xgi_video_info.video_base, - xgi_video_info.video_size); - vfree(XGIhw_ext.pjVirtualRomBase); +#ifdef CONFIG_MTRR + if (xgifb_info->mtrr >= 0) + mtrr_del(xgifb_info->mtrr, xgifb_info->video_base, + xgifb_info->video_size); +#endif /* CONFIG_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); + vfree(xgifb_info->hw_info.pjVirtualRomBase); framebuffer_release(fb_info); pci_set_drvdata(pdev, NULL); } @@ -2544,7 +2454,7 @@ static struct pci_driver xgifb_driver = { .remove = __devexit_p(xgifb_remove) }; -XGIINITSTATIC int __init xgifb_init(void) +static int __init xgifb_init(void) { char *option = NULL; @@ -2555,9 +2465,7 @@ XGIINITSTATIC int __init xgifb_init(void) return pci_register_driver(&xgifb_driver); } -#ifndef MODULE module_init(xgifb_init); -#endif /*****************************************************/ /* MODULE */ @@ -2565,154 +2473,32 @@ module_init(xgifb_init); #ifdef MODULE -static char *mode = NULL; -static int vesa = 0; -static unsigned int rate = 0; -static unsigned int mem = 0; -static char *forcecrt2type = NULL; -static int forcecrt1 = -1; -static int pdc = -1; -static int pdc1 = -1; -static int noypan = -1; -static int userom = -1; -static int useoem = -1; -static char *tvstandard = NULL; -static int nocrt2rate = 0; -static int scalelcd = -1; -static char *specialtiming = NULL; -static int lvdshl = -1; -static int tvxposoffset = 0, tvyposoffset = 0; -#if !defined(__i386__) && !defined(__x86_64__) -static int resetcard = 0; -static int videoram = 0; -#endif - MODULE_DESCRIPTION("Z7 Z9 Z9S Z11 framebuffer device driver"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("XGITECH , Others"); -module_param(mem, int, 0); -module_param(noypan, int, 0); -module_param(userom, int, 0); -module_param(useoem, int, 0); module_param(mode, charp, 0); module_param(vesa, int, 0); -module_param(rate, int, 0); -module_param(forcecrt1, int, 0); -module_param(forcecrt2type, charp, 0); -module_param(scalelcd, int, 0); -module_param(pdc, int, 0); -module_param(pdc1, int, 0); -module_param(specialtiming, charp, 0); -module_param(lvdshl, int, 0); -module_param(tvstandard, charp, 0); -module_param(tvxposoffset, int, 0); -module_param(tvyposoffset, int, 0); module_param(filter, int, 0); -module_param(nocrt2rate, int, 0); -#if !defined(__i386__) && !defined(__x86_64__) -module_param(resetcard, int, 0); -module_param(videoram, int, 0); -#endif - -MODULE_PARM_DESC(noypan, - "\nIf set to anything other than 0, y-panning will be disabled and scrolling\n" - "will be performed by redrawing the screen. (default: 0)\n"); MODULE_PARM_DESC(mode, - "\nSelects the desired default display mode in the format XxYxDepth,\n" - "eg. 1024x768x16. Other formats supported include XxY-Depth and\n" - "XxY-Depth@Rate. If the parameter is only one (decimal or hexadecimal)\n" - "number, it will be interpreted as a VESA mode number. (default: 800x600x8)\n"); + "\nSelects the desired default display mode in the format XxYxDepth,\n" + "eg. 1024x768x16.\n"); MODULE_PARM_DESC(vesa, - "\nSelects the desired default display mode by VESA defined mode number, eg.\n" - "0x117 (default: 0x0103)\n"); - -MODULE_PARM_DESC(rate, - "\nSelects the desired vertical refresh rate for CRT1 (external VGA) in Hz.\n" - "If the mode is specified in the format XxY-Depth@Rate, this parameter\n" - "will be ignored (default: 60)\n"); - -MODULE_PARM_DESC(forcecrt1, - "\nNormally, the driver autodetects whether or not CRT1 (external VGA) is\n" - "connected. With this option, the detection can be overridden (1=CRT1 ON,\n" - "0=CRT1 OFF) (default: [autodetected])\n"); - -MODULE_PARM_DESC(forcecrt2type, - "\nIf this option is omitted, the driver autodetects CRT2 output devices, such as\n" - "LCD, TV or secondary VGA. With this option, this autodetection can be\n" - "overridden. Possible parameters are LCD, TV, VGA or NONE. NONE disables CRT2.\n" - "On systems with a SiS video bridge, parameters SVIDEO, COMPOSITE or SCART can\n" - "be used instead of TV to override the TV detection. Furthermore, on systems\n" - "with a SiS video bridge, SVIDEO+COMPOSITE, HIVISION, YPBPR480I, YPBPR480P,\n" - "YPBPR720P and YPBPR1080I are understood. However, whether or not these work\n" - "depends on the very hardware in use. (default: [autodetected])\n"); - -MODULE_PARM_DESC(scalelcd, - "\nSetting this to 1 will force the driver to scale the LCD image to the panel's\n" - "native resolution. Setting it to 0 will disable scaling; LVDS panels will\n" - "show black bars around the image, TMDS panels will probably do the scaling\n" - "themselves. Default: 1 on LVDS panels, 0 on TMDS panels\n"); - -MODULE_PARM_DESC(pdc, - "\nThis is for manually selecting the LCD panel delay compensation. The driver\n" - "should detect this correctly in most cases; however, sometimes this is not\n" - "possible. If you see 'small waves' on the LCD, try setting this to 4, 32 or 24\n" - "on a 300 series chipset; 6 on a 315 series chipset. If the problem persists,\n" - "try other values (on 300 series: between 4 and 60 in steps of 4; on 315 series:\n" - "any value from 0 to 31). (default: autodetected, if LCD is active during start)\n"); - -MODULE_PARM_DESC(pdc1, - "\nThis is same as pdc, but for LCD-via CRT1. Hence, this is for the 315/330\n" - "series only. (default: autodetected if LCD is in LCD-via-CRT1 mode during\n" - "startup) - Note: currently, this has no effect because LCD-via-CRT1 is not\n" - "implemented yet.\n"); - -MODULE_PARM_DESC(specialtiming, - "\nPlease refer to documentation for more information on this option.\n"); - -MODULE_PARM_DESC(lvdshl, - "\nPlease refer to documentation for more information on this option.\n"); - -MODULE_PARM_DESC(tvstandard, - "\nThis allows overriding the BIOS default for the TV standard. Valid choices are\n" - "pal, ntsc, palm and paln. (default: [auto; pal or ntsc only])\n"); - -MODULE_PARM_DESC(tvxposoffset, - "\nRelocate TV output horizontally. Possible parameters: -32 through 32.\n" - "Default: 0\n"); - -MODULE_PARM_DESC(tvyposoffset, - "\nRelocate TV output vertically. Possible parameters: -32 through 32.\n" - "Default: 0\n"); + "\nSelects the desired default display mode by VESA mode number, eg.\n" + "0x117.\n"); MODULE_PARM_DESC(filter, "\nSelects TV flicker filter type (only for systems with a SiS301 video bridge).\n" "(Possible values 0-7, default: [no filter])\n"); -MODULE_PARM_DESC(nocrt2rate, - "\nSetting this to 1 will force the driver to use the default refresh rate for\n" - "CRT2 if CRT2 type is VGA. (default: 0, use same rate as CRT1)\n"); - -static int __init xgifb_init_module(void) -{ - printk("\nXGIfb_init_module"); - if (mode) - XGIfb_search_mode(mode); - else if (vesa != -1) - XGIfb_search_vesamode(vesa); - - return xgifb_init(); -} - static void __exit xgifb_remove_module(void) { pci_unregister_driver(&xgifb_driver); printk(KERN_DEBUG "xgifb: Module unloaded\n"); } -module_init(xgifb_init_module); module_exit(xgifb_remove_module); #endif /* /MODULE */ diff --git a/drivers/staging/xgifb/XGIfb.h b/drivers/staging/xgifb/XGIfb.h index 45b6015..7611846 100644 --- a/drivers/staging/xgifb/XGIfb.h +++ b/drivers/staging/xgifb/XGIfb.h @@ -3,15 +3,15 @@ #include <linux/ioctl.h> #include <linux/types.h> -#define DISPTYPE_CRT1 0x00000008L -#define DISPTYPE_CRT2 0x00000004L -#define DISPTYPE_LCD 0x00000002L -#define DISPTYPE_TV 0x00000001L -#define DISPTYPE_DISP1 DISPTYPE_CRT1 -#define DISPTYPE_DISP2 (DISPTYPE_CRT2 | DISPTYPE_LCD | DISPTYPE_TV) -#define DISPMODE_SINGLE 0x00000020L -#define DISPMODE_MIRROR 0x00000010L -#define DISPMODE_DUALVIEW 0x00000040L +#include "vb_struct.h" +#include "vgatypes.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 @@ -19,13 +19,8 @@ #define HASVB_TRUMPION 0x04 #define HASVB_LVDS_CHRONTEL 0x10 #define HASVB_302 0x20 -#define HASVB_303 0x40 #define HASVB_CHRONTEL 0x80 -#ifndef XGIFB_ID -#define XGIFB_ID 0x53495346 /* Identify myself with 'XGIF' */ -#endif - enum XGI_CHIP_TYPE { XG40 = 32, XG41, @@ -47,11 +42,6 @@ enum xgi_tvtype { }; enum xgi_tv_plug { /* vicki@030226 */ -/* TVPLUG_Legacy = 0, */ -/* TVPLUG_COMPOSITE, */ -/* TVPLUG_SVIDEO, */ -/* TVPLUG_SCART, */ -/* TVPLUG_TOTAL */ TVPLUG_UNKNOWN = 0, TVPLUG_COMPOSITE = 1, TVPLUG_SVIDEO = 2, @@ -64,14 +54,23 @@ enum xgi_tv_plug { /* vicki@030226 */ TVPLUG_TOTAL }; -struct video_info { +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; unsigned long video_base; - char *video_vbase; + void __iomem *video_vbase; unsigned long mmio_base; unsigned long mmio_size; - char *mmio_vbase; + void __iomem *mmio_vbase; unsigned long vga_base; unsigned long mtrr; @@ -86,7 +85,7 @@ struct video_info { int video_linelength; unsigned int refresh_rate; - unsigned long disp_state; + enum xgifb_display_type display2; /* the second display output type */ unsigned char hasVB; unsigned char TV_type; unsigned char TV_plug; @@ -108,7 +107,4 @@ struct video_info { char reserved[236]; }; - -extern struct video_info xgi_video_info; - #endif diff --git a/drivers/staging/xgifb/vb_def.h b/drivers/staging/xgifb/vb_def.h index 339c071..5beeef9 100644 --- a/drivers/staging/xgifb/vb_def.h +++ b/drivers/staging/xgifb/vb_def.h @@ -3,261 +3,48 @@ #ifndef _INITDEF_ #define _INITDEF_ -#ifndef NewScratch -#define NewScratch -#endif -/* shampoo */ - -#define SEQ_ADDRESS_PORT 0x0014 -#define SEQ_DATA_PORT 0x0015 -#define MISC_OUTPUT_REG_READ_PORT 0x001C -#define MISC_OUTPUT_REG_WRITE_PORT 0x0012 -#define GRAPH_DATA_PORT 0x1F -#define GRAPH_ADDRESS_PORT 0x1E -#define XGI_MASK_DUAL_CHIP 0x04 /* SR3A */ -#define CRTC_ADDRESS_PORT_COLOR 0x0024 -#define VIDEO_SUBSYSTEM_ENABLE_PORT 0x0013 -#define PCI_COMMAND 0x04 - -/* ~shampoo */ - - -#define VB_XGI301 0x0001 /*301b*/ -#define VB_XGI301B 0x0002 -#define VB_XGI302B 0x0004 -#define VB_XGI301LV 0x0008 /*301lv*/ -#define VB_XGI302LV 0x0010 #define VB_XGI301C 0x0020 /* for 301C */ -#define VB_NoLCD 0x8000 /*end 301b*/ -#define VB_YPbPrInfo 0x07 /*301lv*/ -#define VB_YPbPr525i 0x00 #define VB_YPbPr525p 0x01 #define VB_YPbPr750p 0x02 #define VB_YPbPr1080i 0x03 -/* #define CRT1Len 17 */ #define LVDSCRT1Len 15 -#define CHTVRegDataLen 5 - -/* #define ModeInfoFlag 0x07 */ -/* #define IsTextMode 0x07 */ -/* #define ModeText 0x00 */ -/* #define ModeCGA 0x01 */ -/* #define ModeEGA 0x02 */ -/* #define ModeVGA 0x03 */ -/* #define Mode15Bpp 0x04 */ -/* #define Mode16Bpp 0x05 */ -/* #define Mode24Bpp 0x06 */ -/* #define Mode32Bpp 0x07 */ - -/* #define DACInfoFlag 0x18 */ -/* #define MemoryInfoFlag 0x1E0 */ -/* #define MemorySizeShift 0x05 */ - -#define Charx8Dot 0x0200 -#define LineCompareOff 0x0400 -#define CRT2Mode 0x0800 -#define HalfDCLK 0x1000 -#define NoSupportSimuTV 0x2000 -#define DoubleScanMode 0x8000 - -#define SupportAllCRT2 0x0078 -#define SupportTV 0x0008 -#define SupportHiVisionTV 0x0010 -#define SupportLCD 0x0020 -#define SupportRAMDAC2 0x0040 -#define NoSupportTV 0x0070 -#define NoSupportHiVisionTV 0x0060 -#define NoSupportLCD 0x0058 + #define SupportCHTV 0x0800 #define SupportCRT2in301C 0x0100 /* for 301C */ -#define SupportTV1024 0x0800 /*301b*/ -#define SupportYPbPr 0x1000 /*301lv*/ -#define InterlaceMode 0x0080 -#define SyncPP 0x0000 -#define SyncPN 0x4000 -#define SyncNP 0x8000 -/* #define SyncNN 0xc000 */ -#define ECLKindex0 0x0000 -#define ECLKindex1 0x0100 -#define ECLKindex2 0x0200 -#define ECLKindex3 0x0300 -#define ECLKindex4 0x0400 - -#define SetSimuScanMode 0x0001 -#define SwitchToCRT2 0x0002 -/* #define SetCRT2ToTV 0x009C */ -#define SetCRT2ToAVIDEO 0x0004 -#define SetCRT2ToSVIDEO 0x0008 -#define SetCRT2ToSCART 0x0010 -#define SetCRT2ToLCD 0x0020 -#define SetCRT2ToRAMDAC 0x0040 -#define SetCRT2ToHiVisionTV 0x0080 -#define SetNTSCTV 0x0000 -/* #define SetPALTV 0x0100 */ -#define SetInSlaveMode 0x0200 -#define SetNotSimuMode 0x0400 -#define SetNotSimuTVMode 0x0400 -#define SetDispDevSwitch 0x0800 -#define LoadDACFlag 0x1000 -#define DisableCRT2Display 0x2000 -#define DriverMode 0x4000 -#define HotKeySwitch 0x8000 #define SetCHTVOverScan 0x8000 -/* #define SetCRT2ToLCDA 0x8000 301b */ #define PanelRGB18Bit 0x0100 #define PanelRGB24Bit 0x0000 -#define TVOverScan 0x10 -#define TVOverScanShift 4 -#define ClearBufferFlag 0x20 -#define EnableDualEdge 0x01 /*301b*/ -#define SetToLCDA 0x02 - -#define YPbPrModeInfo 0x38 -/* #define YPbPrMode525i 0x00 */ -/* #define YPbPrMode525p 0x08 */ -/* #define YPbPrMode750p 0x10 */ -/* #define YPbPrMode1080i 0x18 */ - -#define SetSCARTOutput 0x01 -#define BoardTVType 0x02 -#define EnablePALMN 0x40 -/* #define ProgrammingCRT2 0x01 */ -/* #define TVSimuMode 0x02 */ -/* #define RPLLDIV2XO 0x04 */ -/* #define LCDVESATiming 0x08 */ -/* #define EnableLVDSDDA 0x10 */ -#define SetDispDevSwitchFlag 0x20 -#define CheckWinDos 0x40 -#define SetJDOSMode 0x80 - #define Panel320x480 0x07 /*fstn*/ /* [ycchen] 02/12/03 Modify for Multi-Sync. LCD Support */ #define PanelResInfo 0x1F /* CR36 Panel Type/LCDResInfo */ -#define PanelRefInfo 0x60 #define Panel800x600 0x01 #define Panel1024x768 0x02 #define Panel1024x768x75 0x22 #define Panel1280x1024 0x03 #define Panel1280x1024x75 0x23 #define Panel640x480 0x04 -#define Panel1024x600 0x05 -#define Panel1152x864 0x06 #define Panel1280x960 0x07 -#define Panel1152x768 0x08 #define Panel1400x1050 0x09 -#define Panel1280x768 0x0A #define Panel1600x1200 0x0B #define PanelRef60Hz 0x00 #define PanelRef75Hz 0x20 -#define LCDRGB18Bit 0x01 - -#define ExtChipTrumpion 0x06 -#define ExtChipCH7005 0x08 -#define ExtChipMitacTV 0x0a -#define LCDNonExpanding 0x10 -#define LCDNonExpandingShift 4 -#define LCDSync 0x20 -#define LCDSyncBit 0xe0 -#define LCDSyncShift 6 - -/* #define DDC2DelayTime 300 */ #define CRT2DisplayFlag 0x2000 -/* #define LCDDataLen 8 */ -/* #define HiTVDataLen 12 */ -/* #define TVDataLen 16 */ -/* #define SetPALTV 0x0100 */ -#define HalfDCLK 0x1000 -#define NTSCHT 1716 -#define NTSCVT 525 -#define PALHT 1728 -#define PALVT 625 -#define StHiTVHT 892 -#define StHiTVVT 1126 -#define StHiTextTVHT 1000 -#define StHiTextTVVT 1126 -#define ExtHiTVHT 2100 -#define ExtHiTVVT 1125 - -#define St750pTVHT 1716 -#define St750pTVVT 525 -#define Ext750pTVHT 1716 -#define Ext750pTVVT 525 -#define St525pTVHT 1716 -#define St525pTVVT 525 -#define Ext525pTVHT 1716 -#define Ext525pTVVT 525 -#define St525iTVHT 1716 -#define St525iTVVT 525 -#define Ext525iTVHT 1716 -#define Ext525iTVVT 525 - -#define VCLKStartFreq 25 -#define SoftDramType 0x80 -#define VCLK40 0x04 - -#define VCLK162 0x21 - -#define LCDRGB18Bit 0x01 -#define LoadDACFlag 0x1000 -#define AfterLockCRT2 0x4000 -#define SetCRT2ToAVIDEO 0x0004 -#define SetCRT2ToSCART 0x0010 -#define Ext2StructSize 5 - #define YPbPr525iVCLK 0x03B #define YPbPr525iVCLK_2 0x03A -#define SwitchToCRT2 0x0002 -/* #define LCDVESATiming 0x08 */ -#define SetSCARTOutput 0x01 -#define AVIDEOSense 0x01 -#define SVIDEOSense 0x02 -#define SCARTSense 0x04 -#define LCDSense 0x08 -#define Monitor1Sense 0x20 -#define Monitor2Sense 0x10 -#define HiTVSense 0x40 -#define BoardTVType 0x02 -#define HotPlugFunction 0x08 -#define StStructSize 0x06 - - #define XGI_CRT2_PORT_00 (0x00 - 0x030) #define XGI_CRT2_PORT_04 (0x04 - 0x030) #define XGI_CRT2_PORT_10 (0x10 - 0x30) #define XGI_CRT2_PORT_12 (0x12 - 0x30) #define XGI_CRT2_PORT_14 (0x14 - 0x30) - -#define LCDNonExpanding 0x10 -#define ADR_CRT2PtrData 0x20E -#define offset_Zurac 0x210 -#define ADR_LVDSDesPtrData 0x212 -#define ADR_LVDSCRT1DataPtr 0x214 -#define ADR_CHTVVCLKPtr 0x216 -#define ADR_CHTVRegDataPtr 0x218 - -#define LVDSDataLen 6 -/* #define EnableLVDSDDA 0x10 */ -/* #define LVDSDesDataLen 3 */ -#define ActiveNonExpanding 0x40 -#define ActiveNonExpandingShift 6 -/* #define ActivePAL 0x20 */ -#define ActivePALShift 5 -/* #define ModeSwitchStatus 0x0F */ -#define SoftTVType 0x40 -#define SoftSettingAddr 0x52 -#define ModeSettingAddr 0x53 - -/* #define SelectCRT1Rate 0x4 */ - #define _PanelType00 0x00 #define _PanelType01 0x08 #define _PanelType02 0x10 @@ -275,173 +62,26 @@ #define _PanelType0E 0x70 #define _PanelType0F 0x78 -/* 1: XGI is primary vga 0:XGI is secondary vga */ -#define PRIMARY_VGA 0 -#define BIOSIDCodeAddr 0x235 -#define OEMUtilIDCodeAddr 0x237 -#define VBModeIDTableAddr 0x239 -#define OEMTVPtrAddr 0x241 -#define PhaseTableAddr 0x243 -#define NTSCFilterTableAddr 0x245 -#define PALFilterTableAddr 0x247 -#define OEMLCDPtr_1Addr 0x249 -#define OEMLCDPtr_2Addr 0x24B -#define LCDHPosTable_1Addr 0x24D -#define LCDHPosTable_2Addr 0x24F -#define LCDVPosTable_1Addr 0x251 -#define LCDVPosTable_2Addr 0x253 -#define OEMLCDPIDTableAddr 0x255 - -#define VBModeStructSize 5 -#define PhaseTableSize 4 -#define FilterTableSize 4 -#define LCDHPosTableSize 7 -#define LCDVPosTableSize 5 -#define OEMLVDSPIDTableSize 4 -#define LVDSHPosTableSize 4 -#define LVDSVPosTableSize 6 - -#define VB_ModeID 0 -#define VB_TVTableIndex 1 -#define VB_LCDTableIndex 2 -#define VB_LCDHIndex 3 -#define VB_LCDVIndex 4 - -#define OEMLCDEnable 0x0001 -#define OEMLCDDelayEnable 0x0002 -#define OEMLCDPOSEnable 0x0004 -#define OEMTVEnable 0x0100 -#define OEMTVDelayEnable 0x0200 -#define OEMTVFlickerEnable 0x0400 -#define OEMTVPhaseEnable 0x0800 -#define OEMTVFilterEnable 0x1000 - -#define OEMLCDPanelIDSupport 0x0080 - -/* #define LCDVESATiming 0x0001 //LCD Info CR37 */ -/* #define EnableLVDSDDA 0x0002 */ -#define EnableScalingLCD 0x0008 -#define SetPWDEnable 0x0004 -#define SetLCDtoNonExpanding 0x0010 -/* #define SetLCDPolarity 0x00E0 */ -#define SetLCDDualLink 0x0100 -#define SetLCDLowResolution 0x0200 -#define SetLCDStdMode 0x0400 -#define SetTVStdMode 0x0200 -#define SetTVLowResolution 0x0400 /* ============================================================= for 310 ============================================================== */ -#define SoftDRAMType 0x80 -#define SoftSetting_OFFSET 0x52 -#define SR07_OFFSET 0x7C -#define SR15_OFFSET 0x7D -#define SR16_OFFSET 0x81 -#define SR17_OFFSET 0x85 -#define SR19_OFFSET 0x8D -#define SR1F_OFFSET 0x99 -#define SR21_OFFSET 0x9A -#define SR22_OFFSET 0x9B -#define SR23_OFFSET 0x9C -#define SR24_OFFSET 0x9D -#define SR25_OFFSET 0x9E -#define SR31_OFFSET 0x9F -#define SR32_OFFSET 0xA0 -#define SR33_OFFSET 0xA1 - -#define CR40_OFFSET 0xA2 -#define SR25_1_OFFSET 0xF6 -#define CR49_OFFSET 0xF7 - -#define VB310Data_1_2_Offset 0xB6 -#define VB310Data_4_D_Offset 0xB7 -#define VB310Data_4_E_Offset 0xB8 -#define VB310Data_4_10_Offset 0xBB - -#define RGBSenseDataOffset 0xBD -#define YCSenseDataOffset 0xBF -#define VideoSenseDataOffset 0xC1 -#define OutputSelectOffset 0xF3 - -#define ECLK_MCLK_DISTANCE 0x14 -#define VBIOSTablePointerStart 0x200 -#define StandTablePtrOffset (VBIOSTablePointerStart+0x02) -#define EModeIDTablePtrOffset (VBIOSTablePointerStart+0x04) -#define CRT1TablePtrOffset (VBIOSTablePointerStart+0x06) -#define ScreenOffsetPtrOffset (VBIOSTablePointerStart+0x08) -#define VCLKDataPtrOffset (VBIOSTablePointerStart+0x0A) -#define MCLKDataPtrOffset (VBIOSTablePointerStart+0x0E) -#define CRT2PtrDataPtrOffset (VBIOSTablePointerStart+0x10) -#define TVAntiFlickPtrOffset (VBIOSTablePointerStart+0x12) -#define TVDelayPtr1Offset (VBIOSTablePointerStart+0x14) -#define TVPhaseIncrPtr1Offset (VBIOSTablePointerStart+0x16) -#define TVYFilterPtr1Offset (VBIOSTablePointerStart+0x18) -#define LCDDelayPtr1Offset (VBIOSTablePointerStart+0x20) -#define TVEdgePtr1Offset (VBIOSTablePointerStart+0x24) -#define CRT2Delay1Offset (VBIOSTablePointerStart+0x28) -#define LCDDataDesOffset (VBIOSTablePointerStart-0x02) -#define LCDDataPtrOffset (VBIOSTablePointerStart+0x2A) -#define LCDDesDataPtrOffset (VBIOSTablePointerStart+0x2C) /* add LCDDataList for GetLCDPtr */ #define LCDDataList (VBIOSTablePointerStart+0x22) -/* add TVDataList for GetTVPtr */ -#define TVDataList (VBIOSTablePointerStart+0x36) /* */ /* Modify from 310.inc */ /* */ /* */ - -#define ShowMsgFlag 0x20 /* SoftSetting */ -#define ShowVESAFlag 0x10 -#define HotPlugFunction 0x08 #define ModeSoftSetting 0x04 -#define TVSoftSetting 0x02 -#define LCDSoftSetting 0x01 -#define GatingCRTinLCDA 0x10 -#define SetHiTVOutput 0x08 -#define SetYPbPrOutput 0x04 #define BoardTVType 0x02 -#define SetSCARTOutput 0x01 - -/* TVModeSetting, Others as same as CR30 */ -#define ModeSettingYPbPr 0x02 - -/* TVModeSetting same as CR35 */ - -/* LCDModeSetting same as CR37 */ - -#define EnableNewTVFont 0x10 /* MiscCapability */ - -#define EnableLCDOutput 0x80 /* LCDCfgSetting */ #define SoftDRAMType 0x80 /* DRAMSetting */ -#define SoftDRAMConfig 0x40 -#define MosSelDRAMType 0x20 -#define SDRAM 000h -#define SGRAM 0x01 -#define ESDRAM 0x02 - -#define EnableAGPCfgSetting 0x01 /* AGPCfgSetting */ /* ---------------- SetMode Stack */ #define CRT1Len 15 #define VCLKLen 4 -#define DefThreshold 0x0100 -#define ExtRegsSize ((57+8+37+70+63+28+768+1)/64+1) - -#define VGA_XGI315 0x0001 /* VGA Type Info */ -#define VGA_SNewis315e 0x0002 /* 315 series */ -#define VGA_XGI550 0x0004 -#define VGA_XGI640 0x0008 -#define VGA_XGI740 0x0010 -#define VGA_XGI650 0x0020 -#define VGA_XGI650M 0x0040 -#define VGA_XGI651 0x0080 #define VGA_XGI340 0x0001 /* 340 series */ -#define VGA_XGI330 0x0001 /* 330 series */ -#define VGA_XGI660 0x0001 /* 660 series */ #define VB_XGI301 0x0001 /* VB Type Info */ #define VB_XGI301B 0x0002 /* 301 series */ @@ -450,34 +90,16 @@ #define VB_XGI301LV 0x0008 #define VB_XGI302LV 0x0010 #define VB_LVDS_NS 0x0001 /* 3rd party chip */ -#define VB_CH7017 0x0002 -#define VB_CH7007 0x0080 /* [Billy] 07/05/03 */ -/* #define VB_LVDS_SI 0x0004 */ #define ModeInfoFlag 0x0007 -#define IsTextMode 0x0007 #define ModeText 0x0000 -#define ModeCGA 0x0001 #define ModeEGA 0x0002 /* 16 colors mode */ #define ModeVGA 0x0003 /* 256 colors mode */ -#define Mode15Bpp 0x0004 /* 15 Bpp Color Mode */ -#define Mode16Bpp 0x0005 /* 16 Bpp Color Mode */ -#define Mode24Bpp 0x0006 /* 24 Bpp Color Mode */ -#define Mode32Bpp 0x0007 /* 32 Bpp Color Mode */ #define DACInfoFlag 0x0018 -#define MONODAC 0x0000 -#define CGADAC 0x0008 -#define EGADAC 0x0010 -#define VGADAC 0x0018 #define MemoryInfoFlag 0x01e0 #define MemorySizeShift 5 -#define Need1MSize 0x0000 -#define Need2MSize 0x0020 -#define Need4MSize 0x0060 -#define Need8MSize 0x00e0 -#define Need16MSize 0x01e0 #define Charx8Dot 0x0200 #define LineCompareOff 0x0400 @@ -487,11 +109,7 @@ #define DoubleScanMode 0x8000 /* -------------- Ext_InfoFlag */ -#define SupportModeInfo 0x0007 -#define Support256 0x0003 -#define Support15Bpp 0x0004 #define Support16Bpp 0x0005 -#define Support24Bpp 0x0006 #define Support32Bpp 0x0007 #define SupportAllCRT2 0x0078 @@ -513,7 +131,6 @@ /* -------------- SetMode Stack/Scratch */ #define SetSimuScanMode 0x0001 /* VBInfo/CR30 & CR31 */ #define SwitchToCRT2 0x0002 -#define SetCRT2ToTV1 0x009C #define SetCRT2ToTV 0x089C #define SetCRT2ToAVIDEO 0x0004 #define SetCRT2ToSVIDEO 0x0008 @@ -524,23 +141,14 @@ #define SetCRT2ToLCDA 0x0100 #define SetInSlaveMode 0x0200 #define SetNotSimuMode 0x0400 -#define HKEventMode 0x0800 #define SetCRT2ToYPbPr 0x0800 #define LoadDACFlag 0x1000 #define DisableCRT2Display 0x2000 #define DriverMode 0x4000 #define SetCRT2ToDualEdge 0x8000 -#define HotKeySwitch 0x8000 #define ProgrammingCRT2 0x0001 /* Set Flag */ -#define EnableVCMode 0x0002 -#define SetHKEventMode 0x0004 #define ReserveTVOption 0x0008 -#define DisableRelocateIO 0x0010 -#define Win9xDOSMode 0x0020 -#define JDOSMode 0x0040 -/* #define SetWin9xforJap 0x0080 // not used now */ -/* #define SetWin9xforKorea 0x0100 // not used now */ #define GatingCRT 0x0800 #define DisableChB 0x1000 #define EnableChB 0x2000 @@ -552,15 +160,11 @@ #define SetNTSCJ 0x0002 #define SetPALMTV 0x0004 #define SetPALNTV 0x0008 -#define SetCHTVUnderScan 0x0000 -/* #define SetCHTVOverScan 0x0010 */ #define SetYPbPrMode525i 0x0020 #define SetYPbPrMode525p 0x0040 #define SetYPbPrMode750p 0x0080 #define SetYPbPrMode1080i 0x0100 -#define SetTVStdMode 0x0200 #define SetTVLowResolution 0x0400 -#define SetTVSimuMode 0x0800 #define TVSimuMode 0x0800 #define RPLLDIV2XO 0x1000 #define NTSC1024x768 0x2000 @@ -571,38 +175,20 @@ #define EnableScalingLCD 0x0008 #define SetPWDEnable 0x0004 #define SetLCDtoNonExpanding 0x0010 -#define SetLCDPolarity 0x00e0 #define SetLCDDualLink 0x0100 #define SetLCDLowResolution 0x0200 #define SetLCDStdMode 0x0400 /* LCD Capability shampoo */ #define DefaultLCDCap 0x80ea -#define RLVDSDHL00 0x0000 -#define RLVDSDHL01 0x0001 -#define RLVDSDHL10 0x0002 /* default */ -#define RLVDSDHL11 0x0003 #define EnableLCD24bpp 0x0004 /* default */ #define DisableLCD24bpp 0x0000 -#define RLVDSClkSFT0 0x0000 -#define RLVDSClkSFT1 0x0008 /* default */ -#define EnableLVDSDCBal 0x0010 -#define DisableLVDSDCBal 0x0000 /* default */ -#define SinglePolarity 0x0020 /* default */ -#define MultiPolarity 0x0000 #define LCDPolarity 0x00c0 /* default: SyncNN */ -#define LCDSingleLink 0x0000 /* default */ #define LCDDualLink 0x0100 #define EnableSpectrum 0x0200 -#define DisableSpectrum 0x0000 /* default */ #define PWDEnable 0x0400 -#define PWDDisable 0x0000 /* default */ -#define PWMEnable 0x0800 -#define PWMDisable 0x0000 /* default */ #define EnableVBCLKDRVLOW 0x4000 -#define EnableVBCLKDRVHigh 0x0000 /* default */ #define EnablePLLSPLOW 0x8000 -#define EnablePLLSPHigh 0x0000 /* default */ #define LCDBToA 0x20 /* LCD SetFlag */ #define StLCDBToA 0x40 @@ -616,187 +202,51 @@ #define Monitor1Sense 0x20 #define HiTVSense 0x40 -#ifdef NewScratch #define YPbPrSense 0x80 /* NEW SCRATCH */ -#endif #define TVSense 0xc7 #define TVOverScan 0x10 /* CR35 */ -#define TVOverScanShift 4 -#ifdef NewScratch -#define NTSCMode 0x00 -#define PALMode 0x00 -#define NTSCJMode 0x02 -#define PALMNMode 0x0c #define YPbPrMode 0xe0 #define YPbPrMode525i 0x00 #define YPbPrMode525p 0x20 #define YPbPrMode750p 0x40 #define YPbPrMode1080i 0x60 -#else /* Old Scratch */ -#define ClearBufferFlag 0x20 -#endif #define LCDRGB18Bit 0x01 /* CR37 */ #define LCDNonExpanding 0x10 -#define LCDNonExpandingShift 4 #define LCDSync 0x20 #define LCDSyncBit 0xe0 /* H/V polarity & sync ID */ -#define LCDSyncShift 6 -#ifdef NewScratch #define ScalingLCD 0x08 -#else /* Old Scratch */ -#define ExtChipType 0x0e -#define ExtChip301 0x02 -#define ExtChipLVDS 0x04 -#define ExtChipCH7019 0x06 -#define ScalingLCD 0x10 -#endif #define EnableDualEdge 0x01 /* CR38 */ #define SetToLCDA 0x02 -#ifdef NewScratch #define SetYPbPr 0x04 -#define DisableChannelA 0x08 -#define DisableChannelB 0x10 -#define ExtChipType 0xe0 -#define ExtChip301 0x20 -#define ExtChipLVDS 0x40 -#define ExtChipCH7019 0x60 -#else /* Old Scratch */ -#define YPbPrSense 0x04 -#define SetYPbPr 0x08 -#define YPbPrMode 0x30 -#define YPbPrMode525i 0x00 -#define YPbPrMode525p 0x10 -#define YPbPrMode750p 0x20 -#define YPbPrMode1080i 0x30 -#define PALMNMode 0xc0 -#endif -#define BacklightControlBit 0x01 /* CR3A */ -#define Win9xforJap 0x40 -#define Win9xforKorea 0x80 - -#define ForceMDBits 0x07 /* CR3B */ -#define ForceMD_JDOS 0x00 -#define ForceMD_640x400T 0x01 -#define ForceMD_640x350T 0x02 -#define ForceMD_720x400T 0x03 -#define ForceMD_640x480E 0x04 -#define ForceMD_640x400E 0x05 -#define ForceP1Bit 0x10 -#define ForceP2Bit 0x20 -#define EnableForceMDinBIOS 0x40 -#define EnableForceMDinDrv 0x80 - -#ifdef NewScratch /* New Scratch */ /* ---------------------- VUMA Information */ -#define LCDSettingFromCMOS 0x04 /* CR3C */ -#define TVSettingFromCMOS 0x08 #define DisplayDeviceFromCMOS 0x10 -#define HKSupportInSBIOS 0x20 -#define OSDSupportInSBIOS 0x40 -#define DisableLogo 0x80 /* ---------------------- HK Evnet Definition */ -#define HKEvent 0x0f /* CR3D */ -#define HK_ModeSwitch 0x01 -#define HK_Expanding 0x02 -#define HK_OverScan 0x03 -#define HK_Brightness 0x04 -#define HK_Contrast 0x05 -#define HK_Mute 0x06 -#define HK_Volume 0x07 #define ModeSwitchStatus 0xf0 #define ActiveCRT1 0x10 #define ActiveLCD 0x0020 #define ActiveTV 0x40 #define ActiveCRT2 0x80 -#define TVSwitchStatus 0x1f /* CR3E */ #define ActiveAVideo 0x01 #define ActiveSVideo 0x02 #define ActiveSCART 0x04 #define ActiveHiTV 0x08 #define ActiveYPbPr 0x10 -#define EnableHKEvent 0x01 /* CR3F */ -#define EnableOSDEvent 0x02 -#define StartOSDEvent 0x04 -#define IgnoreHKEvent 0x08 -#define IgnoreOSDEvent 0x10 -#else /* Old Scratch */ -#define OSD_SBIOS 0x02 /* SR17 */ -#define DisableLogo 0x04 -#define SelectKDOS 0x08 -#define KorWinMode 0x10 -#define KorMode3Bit 0x0020 -#define PSCCtrlBit 0x40 -#define NPSCCtrlBitShift 6 -#define BlueScreenBit 0x80 - -#define HKEvent 0x0f /* CR79 */ -#define HK_ModeSwitch 0x01 -#define HK_Expanding 0x02 -#define HK_OverScan 0x03 -#define HK_Brightness 0x04 -#define HK_Contrast 0x05 -#define HK_Mute 0x06 -#define HK_Volume 0x07 -#define ActivePAL 0x0020 -#define ActivePALShift 5 -#define ActiveNonExpanding 0x40 -#define ActiveNonExpandingShift 6 -#define ActiveOverScan 0x80 -#define ActiveOverScanShift 7 - -#define ModeSwitchStatus 0x0b /* SR15 */ -#define ActiveCRT1 0x01 -#define ActiveLCD 0x02 -#define ActiveCRT2 0x08 - -#define TVSwitchStatus 0xf0 /* SR16 */ -#define TVConfigShift 3 -#define ActiveTV 0x01 -#define ActiveYPbPr 0x04 -#define ActiveAVideo 0x10 -#define ActiveSVideo 0x0020 -#define ActiveSCART 0x40 -#define ActiveHiTV 0x80 - -#define EnableHKEvent 0x01 /* CR7A */ -#define EnableOSDEvent 0x02 -#define StartOSDEvent 0x04 -#define CMOSSupport 0x08 -#define HotKeySupport 0x10 -#define IngoreHKOSDEvent 0x20 -#endif - -/* //------------- Misc. Definition */ -#define SelectCRT1Rate 00h -/* #define SelectCRT2Rate 04h */ - -#define DDC1DelayTime 1000 -#ifdef TRUMPION -#define DDC2DelayTime 15 -#else -#define DDC2DelayTime 150 -#endif - -#define R_FACTOR 04Dh -#define G_FACTOR 097h -#define B_FACTOR 01Ch /* --------------------------------------------------------- */ /* translated from asm code 301def.h */ /* */ /* --------------------------------------------------------- */ #define LCDDataLen 8 -#define HiTVDataLen 12 #define TVDataLen 12 #define LVDSCRT1Len_H 8 #define LVDSCRT1Len_V 7 @@ -806,7 +256,6 @@ #define LVDSDesDataLen2 8 #define LCDDesDataLen2 8 #define CHTVRegLen 16 -#define CHLVRegLen 12 #define StHiTVHT 892 #define StHiTVVT 1126 @@ -817,7 +266,6 @@ #define NTSCHT 1716 #define NTSCVT 525 #define NTSC1024x768HT 1908 -#define NTSC1024x768VT 525 #define PALHT 1728 #define PALVT 625 @@ -828,8 +276,6 @@ #define YPbPrTV750pHT 1650 #define YPbPrTV750pVT 750 -#define CRT2VCLKSel 0xc0 - #define CRT2Delay1 0x04 /* XGI301 */ #define CRT2Delay2 0x0A /* 301B,302 */ @@ -846,57 +292,41 @@ #define VCLK52_406 0x09 #define VCLK56_25 0x0A #define VCLK65 0x0B -#define VCLK67_765 0x0C #define VCLK68_179 0x0D #define VCLK72_852 0x0E #define VCLK75 0x0F -#define VCLK75_8 0x10 #define VCLK78_75 0x11 #define VCLK79_411 0x12 #define VCLK83_95 0x13 -#define VCLK84_8 0x14 #define VCLK86_6 0x15 #define VCLK94_5 0x16 -#define VCLK104_998 0x17 -#define VCLK105_882 0x18 #define VCLK108_2 0x19 -#define VCLK109_175 0x1A #define VCLK113_309 0x1B #define VCLK116_406 0x1C -#define VCLK132_258 0x1D #define VCLK135_5 0x1E #define VCLK139_054 0x1F #define VCLK157_5 0x20 #define VCLK162 0x21 #define VCLK175 0x22 #define VCLK189 0x23 -#define VCLK194_4 0x24 #define VCLK202_5 0x25 #define VCLK229_5 0x26 #define VCLK234 0x27 -#define VCLK252_699 0x28 #define VCLK254_817 0x29 -#define VCLK265_728 0x2A #define VCLK266_952 0x2B #define VCLK269_655 0x2C -#define VCLK272_042 0x2D #define VCLK277_015 0x2E -#define VCLK286_359 0x2F #define VCLK291_132 0x30 #define VCLK291_766 0x31 -#define VCLK309_789 0x32 #define VCLK315_195 0x33 #define VCLK323_586 0x34 #define VCLK330_615 0x35 -#define VCLK332_177 0x36 #define VCLK340_477 0x37 #define VCLK375_847 0x38 #define VCLK388_631 0x39 #define VCLK125_999 0x51 #define VCLK148_5 0x52 -#define VCLK178_992 0x54 #define VCLK217_325 0x55 -#define VCLK299_505 0x56 #define YPbPr750pVCLK 0x57 #define TVVCLKDIV2 0x3A @@ -906,45 +336,13 @@ #define HiTVSimuVCLK 0x3E #define HiTVTextVCLK 0x3F #define VCLK39_77 0x40 -/* #define YPbPr750pVCLK 0x0F */ #define YPbPr525pVCLK 0x3A -/* #define ;;YPbPr525iVCLK 0x3B */ -/* #define ;;YPbPr525iVCLK_2 0x3A */ #define NTSC1024VCLK 0x41 -#define VCLK25_175_41 0x42 /* ; ScaleLCD */ -#define VCLK25_175_42 0x43 -#define VCLK28_322_43 0x44 -#define VCLK40_44 0x45 -#define VCLKQVGA_1 0x46 /* ; QVGA */ -#define VCLKQVGA_2 0x47 -#define VCLKQVGA_3 0x48 #define VCLK35_2 0x49 /* ; 800x480 */ #define VCLK122_61 0x4A #define VCLK80_350 0x4B #define VCLK107_385 0x4C -#define CHTVVCLK30_2 0x50 /* ;;CHTV */ -#define CHTVVCLK28_1 0x51 -#define CHTVVCLK43_6 0x52 -#define CHTVVCLK26_4 0x53 -#define CHTVVCLK24_6 0x54 -#define CHTVVCLK47_8 0x55 -#define CHTVVCLK31_5 0x56 -#define CHTVVCLK26_2 0x57 -#define CHTVVCLK39 0x58 -#define CHTVVCLK36 0x59 - -#define CH7007TVVCLK30_2 0x00 /* [Billy] 2007/05/18 For CH7007 */ -#define CH7007TVVCLK28_1 0x01 -#define CH7007TVVCLK43_6 0x02 -#define CH7007TVVCLK26_4 0x03 -#define CH7007TVVCLK24_6 0x04 -#define CH7007TVVCLK47_8 0x05 -#define CH7007TVVCLK31_5 0x06 -#define CH7007TVVCLK26_2 0x07 -#define CH7007TVVCLK39 0x08 -#define CH7007TVVCLK36 0x09 - #define RES320x200 0x00 #define RES320x240 0x01 #define RES400x300 0x02 @@ -1018,5 +416,4 @@ #define RES1280x960x85 0x46 #define RES1280x960x120 0x47 -#define LFBDRAMTrap 0x30 #endif diff --git a/drivers/staging/xgifb/vb_ext.c b/drivers/staging/xgifb/vb_ext.c index 7e1f76a..b1a2573 100644 --- a/drivers/staging/xgifb/vb_ext.c +++ b/drivers/staging/xgifb/vb_ext.c @@ -1,4 +1,3 @@ -#include <linux/version.h> #include <linux/io.h> #include <linux/types.h> #include "XGIfb.h" diff --git a/drivers/staging/xgifb/vb_ext.h b/drivers/staging/xgifb/vb_ext.h index 814a446..0b1f55b 100644 --- a/drivers/staging/xgifb/vb_ext.h +++ b/drivers/staging/xgifb/vb_ext.h @@ -1,26 +1,6 @@ #ifndef _VBEXT_ #define _VBEXT_ -struct DWORDREGS { - unsigned long Eax, Ebx, Ecx, Edx, Esi, Edi, Ebp; -}; - -struct WORDREGS { - unsigned short ax, hi_ax, bx, hi_bx, cx, hi_cx, dx, hi_dx, si, - hi_si, di, hi_di, bp, hi_bp; -}; - -struct BYTEREGS { - unsigned char al, ah, hi_al, hi_ah, bl, bh, hi_bl, hi_bh, cl, ch, - hi_cl, hi_ch, dl, dh, hi_dl, hi_dh; -}; - -typedef union _X86_REGS { - struct DWORDREGS e; - struct WORDREGS x; - struct BYTEREGS h; -} X86_REGS, *PX86_REGS; - extern void XGI_GetSenseStatus(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo); extern unsigned short XGINew_SenseLCD(struct xgi_hw_device_info *, diff --git a/drivers/staging/xgifb/vb_init.c b/drivers/staging/xgifb/vb_init.c index 33c6876..9e890a1 100644 --- a/drivers/staging/xgifb/vb_init.c +++ b/drivers/staging/xgifb/vb_init.c @@ -1,8 +1,8 @@ -#include "vgatypes.h" - -#include <linux/version.h> #include <linux/types.h> #include <linux/delay.h> /* udelay */ +#include <linux/pci.h> + +#include "vgatypes.h" #include "XGIfb.h" #include "vb_def.h" @@ -15,15 +15,13 @@ #include <linux/io.h> -static unsigned char XGINew_ChannelAB, XGINew_DataBusWidth; - -static unsigned short XGINew_DDRDRAM_TYPE340[4][5] = { +static const unsigned short XGINew_DDRDRAM_TYPE340[4][5] = { { 2, 13, 9, 64, 0x45}, { 2, 12, 9, 32, 0x35}, { 2, 12, 8, 16, 0x31}, { 2, 11, 8, 8, 0x21} }; -static unsigned short XGINew_DDRDRAM_TYPE20[12][5] = { +static const unsigned short XGINew_DDRDRAM_TYPE20[12][5] = { { 2, 14, 11, 128, 0x5D}, { 2, 14, 10, 64, 0x59}, { 2, 13, 11, 64, 0x4D}, @@ -37,8 +35,6 @@ static unsigned short XGINew_DDRDRAM_TYPE20[12][5] = { { 2, 12, 9, 8, 0x35}, { 2, 12, 8, 4, 0x31} }; -static int XGINew_RAMType; - static unsigned char XGINew_GetXG20DRAMType(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo) @@ -112,14 +108,18 @@ static void XGINew_DDR1x_MRS_340(unsigned long P3c4, } udelay(60); - xgifb_reg_set(P3c4, 0x18, pVBInfo->SR15[2][XGINew_RAMType]); /* SR18 */ + xgifb_reg_set(P3c4, + 0x18, + pVBInfo->SR15[2][pVBInfo->ram_type]); /* SR18 */ xgifb_reg_set(P3c4, 0x19, 0x01); xgifb_reg_set(P3c4, 0x16, pVBInfo->SR16[0]); xgifb_reg_set(P3c4, 0x16, pVBInfo->SR16[1]); mdelay(1); xgifb_reg_set(P3c4, 0x1B, 0x03); udelay(500); - xgifb_reg_set(P3c4, 0x18, pVBInfo->SR15[2][XGINew_RAMType]); /* SR18 */ + xgifb_reg_set(P3c4, + 0x18, + pVBInfo->SR15[2][pVBInfo->ram_type]); /* SR18 */ xgifb_reg_set(P3c4, 0x19, 0x00); xgifb_reg_set(P3c4, 0x16, pVBInfo->SR16[2]); xgifb_reg_set(P3c4, 0x16, pVBInfo->SR16[3]); @@ -132,23 +132,23 @@ static void XGINew_SetMemoryClock(struct xgi_hw_device_info *HwDeviceExtension, xgifb_reg_set(pVBInfo->P3c4, 0x28, - pVBInfo->MCLKData[XGINew_RAMType].SR28); + pVBInfo->MCLKData[pVBInfo->ram_type].SR28); xgifb_reg_set(pVBInfo->P3c4, 0x29, - pVBInfo->MCLKData[XGINew_RAMType].SR29); + pVBInfo->MCLKData[pVBInfo->ram_type].SR29); xgifb_reg_set(pVBInfo->P3c4, 0x2A, - pVBInfo->MCLKData[XGINew_RAMType].SR2A); + pVBInfo->MCLKData[pVBInfo->ram_type].SR2A); xgifb_reg_set(pVBInfo->P3c4, 0x2E, - pVBInfo->ECLKData[XGINew_RAMType].SR2E); + pVBInfo->ECLKData[pVBInfo->ram_type].SR2E); xgifb_reg_set(pVBInfo->P3c4, 0x2F, - pVBInfo->ECLKData[XGINew_RAMType].SR2F); + pVBInfo->ECLKData[pVBInfo->ram_type].SR2F); xgifb_reg_set(pVBInfo->P3c4, 0x30, - pVBInfo->ECLKData[XGINew_RAMType].SR30); + pVBInfo->ECLKData[pVBInfo->ram_type].SR30); /* [Vicent] 2004/07/07, * When XG42 ECLK = MCLK = 207MHz, Set SR32 D[1:0] = 10b */ @@ -156,12 +156,12 @@ static void XGINew_SetMemoryClock(struct xgi_hw_device_info *HwDeviceExtension, * Modify SR32 value, when MCLK=207MHZ, ELCK=250MHz, * Set SR32 D[1:0] = 10b */ if (HwDeviceExtension->jChipType == XG42) { - if ((pVBInfo->MCLKData[XGINew_RAMType].SR28 == 0x1C) && - (pVBInfo->MCLKData[XGINew_RAMType].SR29 == 0x01) && - (((pVBInfo->ECLKData[XGINew_RAMType].SR2E == 0x1C) && - (pVBInfo->ECLKData[XGINew_RAMType].SR2F == 0x01)) || - ((pVBInfo->ECLKData[XGINew_RAMType].SR2E == 0x22) && - (pVBInfo->ECLKData[XGINew_RAMType].SR2F == 0x01)))) + if ((pVBInfo->MCLKData[pVBInfo->ram_type].SR28 == 0x1C) && + (pVBInfo->MCLKData[pVBInfo->ram_type].SR29 == 0x01) && + (((pVBInfo->ECLKData[pVBInfo->ram_type].SR2E == 0x1C) && + (pVBInfo->ECLKData[pVBInfo->ram_type].SR2F == 0x01)) || + ((pVBInfo->ECLKData[pVBInfo->ram_type].SR2E == 0x22) && + (pVBInfo->ECLKData[pVBInfo->ram_type].SR2F == 0x01)))) xgifb_reg_set(pVBInfo->P3c4, 0x32, ((unsigned char) xgifb_reg_get( @@ -174,8 +174,7 @@ static void XGINew_DDRII_Bootup_XG27( unsigned long P3c4, struct vb_device_info *pVBInfo) { unsigned long P3d4 = P3c4 + 0x10; - XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, - pVBInfo); + pVBInfo->ram_type = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); /* Set Double Frequency */ @@ -250,8 +249,7 @@ static void XGINew_DDR2_MRS_XG20(struct xgi_hw_device_info *HwDeviceExtension, { unsigned long P3d4 = P3c4 + 0x10; - XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, - pVBInfo); + pVBInfo->ram_type = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); xgifb_reg_set(P3d4, 0x97, 0x11); /* CR97 */ @@ -307,7 +305,9 @@ static void XGINew_DDR1x_MRS_XG20(unsigned long P3c4, xgifb_reg_set(P3c4, 0x16, 0x00); xgifb_reg_set(P3c4, 0x16, 0x80); udelay(60); - xgifb_reg_set(P3c4, 0x18, pVBInfo->SR15[2][XGINew_RAMType]); /* SR18 */ + xgifb_reg_set(P3c4, + 0x18, + pVBInfo->SR15[2][pVBInfo->ram_type]); /* SR18 */ /* xgifb_reg_set(P3c4, 0x18, 0x31); */ xgifb_reg_set(P3c4, 0x19, 0x01); xgifb_reg_set(P3c4, 0x16, 0x03); @@ -316,7 +316,9 @@ static void XGINew_DDR1x_MRS_XG20(unsigned long P3c4, xgifb_reg_set(P3c4, 0x1B, 0x03); udelay(500); /* xgifb_reg_set(P3c4, 0x18, 0x31); */ - xgifb_reg_set(P3c4, 0x18, pVBInfo->SR15[2][XGINew_RAMType]); /* SR18 */ + xgifb_reg_set(P3c4, + 0x18, + pVBInfo->SR15[2][pVBInfo->ram_type]); /* SR18 */ xgifb_reg_set(P3c4, 0x19, 0x00); xgifb_reg_set(P3c4, 0x16, 0x03); xgifb_reg_set(P3c4, 0x16, 0x83); @@ -333,13 +335,13 @@ static void XGINew_DDR1x_DefaultRegister( XGINew_SetMemoryClock(HwDeviceExtension, pVBInfo); xgifb_reg_set(P3d4, 0x82, - pVBInfo->CR40[11][XGINew_RAMType]); /* CR82 */ + pVBInfo->CR40[11][pVBInfo->ram_type]); /* CR82 */ xgifb_reg_set(P3d4, 0x85, - pVBInfo->CR40[12][XGINew_RAMType]); /* CR85 */ + pVBInfo->CR40[12][pVBInfo->ram_type]); /* CR85 */ xgifb_reg_set(P3d4, 0x86, - pVBInfo->CR40[13][XGINew_RAMType]); /* CR86 */ + pVBInfo->CR40[13][pVBInfo->ram_type]); /* CR86 */ xgifb_reg_set(P3d4, 0x98, 0x01); xgifb_reg_set(P3d4, 0x9A, 0x02); @@ -354,15 +356,15 @@ static void XGINew_DDR1x_DefaultRegister( /* CR82 */ xgifb_reg_set(P3d4, 0x82, - pVBInfo->CR40[11][XGINew_RAMType]); + pVBInfo->CR40[11][pVBInfo->ram_type]); /* CR85 */ xgifb_reg_set(P3d4, 0x85, - pVBInfo->CR40[12][XGINew_RAMType]); + pVBInfo->CR40[12][pVBInfo->ram_type]); /* CR86 */ xgifb_reg_set(P3d4, 0x86, - pVBInfo->CR40[13][XGINew_RAMType]); + pVBInfo->CR40[13][pVBInfo->ram_type]); break; default: xgifb_reg_set(P3d4, 0x82, 0x88); @@ -373,7 +375,7 @@ static void XGINew_DDR1x_DefaultRegister( xgifb_reg_get(P3d4, 0x86); xgifb_reg_set(P3d4, 0x86, - pVBInfo->CR40[13][XGINew_RAMType]); + pVBInfo->CR40[13][pVBInfo->ram_type]); xgifb_reg_set(P3d4, 0x82, 0x77); xgifb_reg_set(P3d4, 0x85, 0x00); @@ -386,11 +388,11 @@ static void XGINew_DDR1x_DefaultRegister( /* CR85 */ xgifb_reg_set(P3d4, 0x85, - pVBInfo->CR40[12][XGINew_RAMType]); + pVBInfo->CR40[12][pVBInfo->ram_type]); /* CR82 */ xgifb_reg_set(P3d4, 0x82, - pVBInfo->CR40[11][XGINew_RAMType]); + pVBInfo->CR40[11][pVBInfo->ram_type]); break; } @@ -415,16 +417,18 @@ static void XGINew_DDR2_DefaultRegister( 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][XGINew_RAMType]); + 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][XGINew_RAMType]); /* CR85 */ + 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][XGINew_RAMType]); + xgifb_reg_set(P3d4, 0x82, pVBInfo->CR40[11][pVBInfo->ram_type]); else xgifb_reg_set(P3d4, 0x82, 0xA8); /* CR82 */ @@ -444,15 +448,15 @@ static void XGINew_SetDRAMDefaultRegister340( unsigned long P3d4 = Port, P3c4 = Port - 0x10; - xgifb_reg_set(P3d4, 0x6D, pVBInfo->CR40[8][XGINew_RAMType]); - xgifb_reg_set(P3d4, 0x68, pVBInfo->CR40[5][XGINew_RAMType]); - xgifb_reg_set(P3d4, 0x69, pVBInfo->CR40[6][XGINew_RAMType]); - xgifb_reg_set(P3d4, 0x6A, pVBInfo->CR40[7][XGINew_RAMType]); + 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]); temp2 = 0; for (i = 0; i < 4; i++) { /* CR6B DQS fine tune delay */ - temp = pVBInfo->CR6B[XGINew_RAMType][i]; + temp = pVBInfo->CR6B[pVBInfo->ram_type][i]; for (j = 0; j < 4; j++) { temp1 = ((temp >> (2 * j)) & 0x03) << 2; temp2 |= temp1; @@ -467,7 +471,7 @@ static void XGINew_SetDRAMDefaultRegister340( temp2 = 0; for (i = 0; i < 4; i++) { /* CR6E DQM fine tune delay */ - temp = pVBInfo->CR6E[XGINew_RAMType][i]; + temp = pVBInfo->CR6E[pVBInfo->ram_type][i]; for (j = 0; j < 4; j++) { temp1 = ((temp >> (2 * j)) & 0x03) << 2; temp2 |= temp1; @@ -486,7 +490,7 @@ static void XGINew_SetDRAMDefaultRegister340( temp2 = 0; for (i = 0; i < 8; i++) { /* CR6F DQ fine tune delay */ - temp = pVBInfo->CR6F[XGINew_RAMType][8 * k + i]; + temp = pVBInfo->CR6F[pVBInfo->ram_type][8 * k + i]; for (j = 0; j < 4; j++) { temp1 = (temp >> (2 * j)) & 0x03; temp2 |= temp1; @@ -500,12 +504,16 @@ static void XGINew_SetDRAMDefaultRegister340( temp3 += 0x01; } - xgifb_reg_set(P3d4, 0x80, pVBInfo->CR40[9][XGINew_RAMType]); /* CR80 */ - xgifb_reg_set(P3d4, 0x81, pVBInfo->CR40[10][XGINew_RAMType]); /* CR81 */ + 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 */ - temp = pVBInfo->CR89[XGINew_RAMType][0]; + temp = pVBInfo->CR89[pVBInfo->ram_type][0]; for (j = 0; j < 4; j++) { temp1 = (temp >> (2 * j)) & 0x03; temp2 |= temp1; @@ -515,45 +523,49 @@ static void XGINew_SetDRAMDefaultRegister340( temp2 += 0x10; } - temp = pVBInfo->CR89[XGINew_RAMType][1]; + temp = pVBInfo->CR89[pVBInfo->ram_type][1]; temp1 = temp & 0x03; temp2 |= temp1; xgifb_reg_set(P3d4, 0x89, temp2); - temp = pVBInfo->CR40[3][XGINew_RAMType]; + 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][XGINew_RAMType]); /* CR41 */ + xgifb_reg_set(P3d4, + 0x41, + pVBInfo->CR40[0][pVBInfo->ram_type]); /* CR41 */ if (HwDeviceExtension->jChipType == XG27) xgifb_reg_set(P3d4, 0x8F, *pVBInfo->pCR8F); /* CR8F */ for (j = 0; j <= 6; j++) /* CR90 - CR96 */ xgifb_reg_set(P3d4, (0x90 + j), - pVBInfo->CR40[14 + j][XGINew_RAMType]); + 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][XGINew_RAMType]); + 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][XGINew_RAMType]); + pVBInfo->CR40[1 + j][pVBInfo->ram_type]); if ((HwDeviceExtension->jChipType == XG41) || (HwDeviceExtension->jChipType == XG42)) xgifb_reg_set(P3d4, 0x8C, 0x87); - xgifb_reg_set(P3d4, 0x59, pVBInfo->CR40[4][XGINew_RAMType]); /* CR59 */ + 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, *pVBInfo->pCRCF); /* CRCF */ - if (XGINew_RAMType) { + if (pVBInfo->ram_type) { /* xgifb_reg_set(P3c4, 0x17, 0xC0); */ /* SR17 DDRII */ xgifb_reg_set(P3c4, 0x17, 0x80); /* SR17 DDRII */ if (HwDeviceExtension->jChipType == XG27) @@ -571,11 +583,13 @@ static void XGINew_SetDRAMDefaultRegister340( xgifb_reg_set(P3d4, 0xB0, 0x80); /* DDRII Dual frequency mode */ XGINew_DDR2_DefaultRegister(HwDeviceExtension, P3d4, pVBInfo); } - xgifb_reg_set(P3c4, 0x1B, pVBInfo->SR15[3][XGINew_RAMType]); /* SR1B */ + xgifb_reg_set(P3c4, + 0x1B, + pVBInfo->SR15[3][pVBInfo->ram_type]); /* SR1B */ } static void XGINew_SetDRAMSizingType(int index, - unsigned short DRAMTYPE_TABLE[][5], + const unsigned short DRAMTYPE_TABLE[][5], struct vb_device_info *pVBInfo) { unsigned short data; @@ -587,14 +601,14 @@ static void XGINew_SetDRAMSizingType(int index, } static unsigned short XGINew_SetDRAMSizeReg(int index, - unsigned short DRAMTYPE_TABLE[][5], + const unsigned short DRAMTYPE_TABLE[][5], struct vb_device_info *pVBInfo) { unsigned short data = 0, memsize = 0; int RankSize; unsigned char ChannelNo; - RankSize = DRAMTYPE_TABLE[index][3] * XGINew_DataBusWidth / 32; + RankSize = DRAMTYPE_TABLE[index][3] * pVBInfo->ram_bus / 32; data = xgifb_reg_get(pVBInfo->P3c4, 0x13); data &= 0x80; @@ -603,10 +617,10 @@ static unsigned short XGINew_SetDRAMSizeReg(int index, data = 0; - if (XGINew_ChannelAB == 3) + if (pVBInfo->ram_channel == 3) ChannelNo = 4; else - ChannelNo = XGINew_ChannelAB; + ChannelNo = pVBInfo->ram_channel; if (ChannelNo * RankSize <= 256) { while ((RankSize >>= 1) > 0) @@ -620,8 +634,8 @@ static unsigned short XGINew_SetDRAMSizeReg(int index, (xgifb_reg_get(pVBInfo->P3c4, 0x14) & 0x0F) | (data & 0xF0)); - /* data |= XGINew_ChannelAB << 2; */ - /* data |= (XGINew_DataBusWidth / 64) << 1; */ + /* data |= pVBInfo->ram_channel << 2; */ + /* data |= (pVBInfo->ram_bus / 64) << 1; */ /* xgifb_reg_set(pVBInfo->P3c4, 0x14, data); */ /* should delay */ @@ -631,14 +645,14 @@ static unsigned short XGINew_SetDRAMSizeReg(int index, } static unsigned short XGINew_SetDRAMSize20Reg(int index, - unsigned short DRAMTYPE_TABLE[][5], + const unsigned short DRAMTYPE_TABLE[][5], struct vb_device_info *pVBInfo) { unsigned short data = 0, memsize = 0; int RankSize; unsigned char ChannelNo; - RankSize = DRAMTYPE_TABLE[index][3] * XGINew_DataBusWidth / 8; + RankSize = DRAMTYPE_TABLE[index][3] * pVBInfo->ram_bus / 8; data = xgifb_reg_get(pVBInfo->P3c4, 0x13); data &= 0x80; @@ -647,10 +661,10 @@ static unsigned short XGINew_SetDRAMSize20Reg(int index, data = 0; - if (XGINew_ChannelAB == 3) + if (pVBInfo->ram_channel == 3) ChannelNo = 4; else - ChannelNo = XGINew_ChannelAB; + ChannelNo = pVBInfo->ram_channel; if (ChannelNo * RankSize <= 256) { while ((RankSize >>= 1) > 0) @@ -665,8 +679,8 @@ static unsigned short XGINew_SetDRAMSize20Reg(int index, (data & 0xF0)); udelay(15); - /* data |= XGINew_ChannelAB << 2; */ - /* data |= (XGINew_DataBusWidth / 64) << 1; */ + /* data |= pVBInfo->ram_channel << 2; */ + /* data |= (pVBInfo->ram_bus / 64) << 1; */ /* xgifb_reg_set(pVBInfo->P3c4, 0x14, data); */ /* should delay */ @@ -680,12 +694,13 @@ static int XGINew_ReadWriteRest(unsigned short StopAddr, { int i; unsigned long Position = 0; + void __iomem *fbaddr = pVBInfo->FBAddr; - *((unsigned long *) (pVBInfo->FBAddr + Position)) = Position; + writel(Position, fbaddr + Position); for (i = StartAddr; i <= StopAddr; i++) { Position = 1 << i; - *((unsigned long *) (pVBInfo->FBAddr + Position)) = Position; + writel(Position, fbaddr + Position); } udelay(500); /* [Vicent] 2004/04/16. @@ -693,13 +708,12 @@ static int XGINew_ReadWriteRest(unsigned short StopAddr, Position = 0; - if ((*(unsigned long *) (pVBInfo->FBAddr + Position)) != Position) + if (readl(fbaddr + Position) != Position) return 0; for (i = StartAddr; i <= StopAddr; i++) { Position = 1 << i; - if ((*(unsigned long *) (pVBInfo->FBAddr + Position)) != - Position) + if (readl(fbaddr + Position) != Position) return 0; } return 1; @@ -730,14 +744,14 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, case XG21: data = xgifb_reg_get(pVBInfo->P3d4, 0x97); data = data & 0x01; - XGINew_ChannelAB = 1; /* XG20 "JUST" one channel */ + pVBInfo->ram_channel = 1; /* XG20 "JUST" one channel */ if (data == 0) { /* Single_32_16 */ if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x1000000) { - XGINew_DataBusWidth = 32; /* 32 bits */ + pVBInfo->ram_bus = 32; /* 32 bits */ /* 22bit + 2 rank + 32bit */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x52); @@ -766,7 +780,7 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x800000) { - XGINew_DataBusWidth = 16; /* 16 bits */ + pVBInfo->ram_bus = 16; /* 16 bits */ /* 22bit + 2 rank + 16bit */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x41); @@ -784,7 +798,7 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, } else { /* Dual_16_8 */ if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x800000) { - XGINew_DataBusWidth = 16; /* 16 bits */ + pVBInfo->ram_bus = 16; /* 16 bits */ /* (0x31:12x8x2) 22bit + 2 rank */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); /* 0x41:16Mx16 bit*/ @@ -815,7 +829,7 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, if ((HwDeviceExtension->ulVideoMemorySize - 1) > 0x400000) { - XGINew_DataBusWidth = 8; /* 8 bits */ + pVBInfo->ram_bus = 8; /* 8 bits */ /* (0x31:12x8x2) 22bit + 2 rank */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xB1); /* 0x30:8Mx8 bit*/ @@ -834,21 +848,21 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, break; case XG27: - XGINew_DataBusWidth = 16; /* 16 bits */ - XGINew_ChannelAB = 1; /* Single channel */ + pVBInfo->ram_bus = 16; /* 16 bits */ + pVBInfo->ram_channel = 1; /* Single channel */ xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x51); /* 32Mx16 bit*/ break; case XG41: if (XGINew_CheckFrequence(pVBInfo) == 1) { - XGINew_DataBusWidth = 32; /* 32 bits */ - XGINew_ChannelAB = 3; /* Quad Channel */ + pVBInfo->ram_bus = 32; /* 32 bits */ + pVBInfo->ram_channel = 3; /* Quad Channel */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1); xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x4C); if (XGINew_ReadWriteRest(25, 23, pVBInfo) == 1) return; - XGINew_ChannelAB = 2; /* Dual channels */ + pVBInfo->ram_channel = 2; /* Dual channels */ xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x48); if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) @@ -859,7 +873,7 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) return; - XGINew_ChannelAB = 3; + pVBInfo->ram_channel = 3; xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x21); xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x3C); @@ -873,15 +887,15 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, else xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x39); } else { /* DDR */ - XGINew_DataBusWidth = 64; /* 64 bits */ - XGINew_ChannelAB = 2; /* Dual channels */ + pVBInfo->ram_bus = 64; /* 64 bits */ + pVBInfo->ram_channel = 2; /* Dual channels */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1); xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x5A); if (XGINew_ReadWriteRest(25, 24, pVBInfo) == 1) return; - XGINew_ChannelAB = 1; /* Single channels */ + pVBInfo->ram_channel = 1; /* Single channels */ xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x52); if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) @@ -892,14 +906,14 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) return; - XGINew_ChannelAB = 2; /* Dual channels */ + pVBInfo->ram_channel = 2; /* Dual channels */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0x21); xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x4A); if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) return; - XGINew_ChannelAB = 1; /* Single channels */ + pVBInfo->ram_channel = 1; /* Single channels */ xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x42); if (XGINew_ReadWriteRest(8, 4, pVBInfo) == 1) @@ -919,8 +933,8 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, It's Different from Other XG40 Series. */ if (XGINew_CheckFrequence(pVBInfo) == 1) { /* DDRII, DDR2x */ - XGINew_DataBusWidth = 32; /* 32 bits */ - XGINew_ChannelAB = 2; /* 2 Channel */ + 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); @@ -932,7 +946,7 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, if (XGINew_ReadWriteRest(23, 22, pVBInfo) == 1) return; - XGINew_ChannelAB = 1; /* Single Channel */ + pVBInfo->ram_channel = 1; /* Single Channel */ xgifb_reg_set(pVBInfo->P3c4, 0x13, 0xA1); xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x40); @@ -943,8 +957,8 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x30); } } else { /* DDR */ - XGINew_DataBusWidth = 64; /* 64 bits */ - XGINew_ChannelAB = 1; /* 1 channels */ + 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); @@ -961,15 +975,15 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, default: /* XG40 */ if (XGINew_CheckFrequence(pVBInfo) == 1) { /* DDRII */ - XGINew_DataBusWidth = 32; /* 32 bits */ - XGINew_ChannelAB = 3; + 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; - XGINew_ChannelAB = 2; /* 2 channels */ + pVBInfo->ram_channel = 2; /* 2 channels */ xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x48); if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) @@ -979,14 +993,14 @@ static void XGINew_CheckChannel(struct xgi_hw_device_info *HwDeviceExtension, xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x3C); if (XGINew_ReadWriteRest(24, 23, pVBInfo) == 1) { - XGINew_ChannelAB = 3; /* 4 channels */ + pVBInfo->ram_channel = 3; /* 4 channels */ } else { - XGINew_ChannelAB = 2; /* 2 channels */ + pVBInfo->ram_channel = 2; /* 2 channels */ xgifb_reg_set(pVBInfo->P3c4, 0x14, 0x38); } } else { /* DDR */ - XGINew_DataBusWidth = 64; /* 64 bits */ - XGINew_ChannelAB = 2; /* 2 channels */ + 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); @@ -1022,7 +1036,7 @@ static int XGINew_DDRSizing340(struct xgi_hw_device_info *HwDeviceExtension, if (memsize == 0) continue; - addr = memsize + (XGINew_ChannelAB - 2) + 20; + addr = memsize + (pVBInfo->ram_channel - 2) + 20; if ((HwDeviceExtension->ulVideoMemorySize - 1) < (unsigned long) (1 << addr)) continue; @@ -1042,7 +1056,7 @@ static int XGINew_DDRSizing340(struct xgi_hw_device_info *HwDeviceExtension, if (memsize == 0) continue; - addr = memsize + (XGINew_ChannelAB - 2) + 20; + addr = memsize + (pVBInfo->ram_channel - 2) + 20; if ((HwDeviceExtension->ulVideoMemorySize - 1) < (unsigned long) (1 << addr)) continue; @@ -1429,8 +1443,10 @@ static unsigned char GetXG27FPBits(struct vb_device_info *pVBInfo) return temp; } -unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) +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; @@ -1439,8 +1455,6 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) /* unsigned long j, k; */ - unsigned long Temp; - pVBInfo->ROMAddr = HwDeviceExtension->pjVirtualRomBase; pVBInfo->FBAddr = HwDeviceExtension->pjVideoMemoryAddress; @@ -1552,8 +1566,7 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) /* 3.SetMemoryClock - XGINew_RAMType = (int)XGINew_GetXG20DRAMType(HwDeviceExtension, - pVBInfo); + pVBInfo->ram_type = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); */ printk("11"); @@ -1580,6 +1593,8 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) printk("12"); if (HwDeviceExtension->jChipType < XG20) { /* kuku 2004/06/25 */ + u32 Temp; + /* Set AGP Rate */ /* temp1 = xgifb_reg_get(pVBInfo->P3c4, 0x3B); @@ -1646,10 +1661,7 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) /* if (ChipsetID == 0x25308086) */ /* xgifb_reg_set(pVBInfo->P3d4, 0x77, 0xF0); */ - HwDeviceExtension->pQueryVGAConfigSpace(HwDeviceExtension, - 0x50, - 0, - &Temp); /* Get */ + pci_read_config_dword(pdev, 0x50, &Temp); Temp >>= 20; Temp &= 0xF; @@ -1733,15 +1745,6 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) printk("183"); /* XGINew_DetectMonitor(HwDeviceExtension); */ - pVBInfo->IF_DEF_CH7007 = 0; - if ((HwDeviceExtension->jChipType == XG21) && - (pVBInfo->IF_DEF_CH7007)) { - printk("184"); - /* sense CRT2 */ - XGI_GetSenseStatus(HwDeviceExtension, pVBInfo); - printk("185"); - - } if (HwDeviceExtension->jChipType == XG21) { printk("186"); @@ -1764,8 +1767,7 @@ unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension) } printk("19"); - XGINew_RAMType = (int) XGINew_GetXG20DRAMType(HwDeviceExtension, - pVBInfo); + pVBInfo->ram_type = XGINew_GetXG20DRAMType(HwDeviceExtension, pVBInfo); XGINew_SetDRAMDefaultRegister340(HwDeviceExtension, pVBInfo->P3d4, diff --git a/drivers/staging/xgifb/vb_init.h b/drivers/staging/xgifb/vb_init.h index 6b77230..a27b4fe 100644 --- a/drivers/staging/xgifb/vb_init.h +++ b/drivers/staging/xgifb/vb_init.h @@ -1,6 +1,6 @@ #ifndef _VBINIT_ #define _VBINIT_ -extern unsigned char XGIInitNew(struct xgi_hw_device_info *HwDeviceExtension); +extern unsigned char XGIInitNew(struct pci_dev *pdev); extern struct XGI21_LVDSCapStruct XGI21_LCDCapList[13]; #endif diff --git a/drivers/staging/xgifb/vb_setmode.c b/drivers/staging/xgifb/vb_setmode.c index 2669b1b..81c0cc4 100644 --- a/drivers/staging/xgifb/vb_setmode.c +++ b/drivers/staging/xgifb/vb_setmode.c @@ -2,24 +2,21 @@ #include <linux/io.h> #include <linux/delay.h> #include <linux/types.h> -#include <linux/version.h> #include "XGIfb.h" #include "vb_def.h" #include "vgatypes.h" #include "vb_struct.h" +#include "vb_init.h" #include "vb_util.h" #include "vb_table.h" #include "vb_setmode.h" #define IndexMask 0xff -#ifndef XGI_MASK_DUAL_CHIP -#define XGI_MASK_DUAL_CHIP 0x04 /* SR3A */ -#endif -static unsigned short XGINew_MDA_DAC[] = { +static const unsigned short XGINew_MDA_DAC[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, @@ -29,7 +26,7 @@ static unsigned short XGINew_MDA_DAC[] = { 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F}; -static unsigned short XGINew_CGA_DAC[] = { +static const unsigned short XGINew_CGA_DAC[] = { 0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15, 0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15, 0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F, @@ -39,7 +36,7 @@ static unsigned short XGINew_CGA_DAC[] = { 0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F, 0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F}; -static unsigned short XGINew_EGA_DAC[] = { +static const unsigned short XGINew_EGA_DAC[] = { 0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x05, 0x15, 0x20, 0x30, 0x24, 0x34, 0x21, 0x31, 0x25, 0x35, 0x08, 0x18, 0x0C, 0x1C, 0x09, 0x19, 0x0D, 0x1D, @@ -49,7 +46,7 @@ static unsigned short XGINew_EGA_DAC[] = { 0x0A, 0x1A, 0x0E, 0x1E, 0x0B, 0x1B, 0x0F, 0x1F, 0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F}; -static unsigned short XGINew_VGA_DAC[] = { +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, @@ -145,11 +142,6 @@ void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo) pVBInfo->TimingV = (struct XGI_TimingVStruct *) XGI_TimingV; pVBInfo->UpdateCRT1 = (struct XGI_XG21CRT1Struct *) XGI_UpdateCRT1Table; - pVBInfo->CHTVVCLKUNTSC = XGI330_CHTVVCLKUNTSC; - pVBInfo->CHTVVCLKONTSC = XGI330_CHTVVCLKONTSC; - pVBInfo->CHTVVCLKUPAL = XGI330_CHTVVCLKUPAL; - pVBInfo->CHTVVCLKOPAL = XGI330_CHTVVCLKOPAL; - /* 310 customization related */ if ((pVBInfo->VBType & VB_XGI301LV) || (pVBInfo->VBType & VB_XGI302LV)) pVBInfo->LCDCapList = XGI_LCDDLCapList; @@ -208,19 +200,6 @@ static unsigned char XGI_GetModePtr(unsigned short ModeNo, return index; /* Get pVBInfo->StandTable index */ } -/* -unsigned char XGI_SetBIOSData(unsigned short ModeNo, - unsigned short ModeIdIndex) { - return (0); -} -*/ - -/* unsigned char XGI_ClearBankRegs(unsigned short ModeNo, - unsigned short ModeIdIndex) { - return( 0 ) ; -} -*/ - static void XGI_SetSeqRegs(unsigned short ModeNo, unsigned short StandTableIndex, unsigned short ModeIdIndex, @@ -491,11 +470,6 @@ static unsigned char XGI_AjustCRT2Rate(unsigned short ModeNo, } } } else { /* for LVDS */ - if (pVBInfo->IF_DEF_CH7005 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) - tempax |= SupportCHTV; - } - if (pVBInfo->VBInfo & SetCRT2ToLCD) { tempax |= SupportLCD; @@ -1002,65 +976,10 @@ static void XGI_SetXG27CRTC(unsigned short ModeNo, } } -/* --------------------------------------------------------------------- */ -/* Function : XGI_SetXG21LCD */ -/* Input : */ -/* Output : FCLK duty cycle, FCLK delay compensation */ -/* Description : All values set zero */ -/* --------------------------------------------------------------------- */ -static void XGI_SetXG21LCD(struct vb_device_info *pVBInfo, - unsigned short RefreshRateTableIndex, unsigned short ModeNo) -{ - unsigned short Data, Temp, b3CC; - unsigned short XGI_P3cc; - - XGI_P3cc = pVBInfo->P3cc; - - 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 (((*pVBInfo->pDVOSetting) & 0xC0) == 0xC0) { - xgifb_reg_set(pVBInfo->P3d4, 0x2E, *pVBInfo->pCR2E); - xgifb_reg_set(pVBInfo->P3d4, 0x2F, *pVBInfo->pCR2F); - xgifb_reg_set(pVBInfo->P3d4, 0x46, *pVBInfo->pCR46); - xgifb_reg_set(pVBInfo->P3d4, 0x47, *pVBInfo->pCR47); - } - - Temp = xgifb_reg_get(pVBInfo->P3d4, 0x37); - - if (Temp & 0x01) { - xgifb_reg_or(pVBInfo->P3c4, 0x06, 0x40); /* 18 bits FP */ - xgifb_reg_or(pVBInfo->P3c4, 0x09, 0x40); - } - - xgifb_reg_or(pVBInfo->P3c4, 0x1E, 0x01); /* Negative blank polarity */ - - xgifb_reg_and(pVBInfo->P3c4, 0x30, ~0x20); - xgifb_reg_and(pVBInfo->P3c4, 0x35, ~0x80); - - if (ModeNo <= 0x13) { - b3CC = (unsigned char) inb(XGI_P3cc); - if (b3CC & 0x40) - /* Hsync polarity */ - xgifb_reg_or(pVBInfo->P3c4, 0x30, 0x20); - if (b3CC & 0x80) - /* Vsync polarity */ - xgifb_reg_or(pVBInfo->P3c4, 0x35, 0x80); - } else { - Data = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_InfoFlag; - if (Data & 0x4000) - /* Hsync polarity */ - xgifb_reg_or(pVBInfo->P3c4, 0x30, 0x20); - if (Data & 0x8000) - /* Vsync polarity */ - xgifb_reg_or(pVBInfo->P3c4, 0x35, 0x80); - } -} - -static void XGI_SetXG27LCD(struct vb_device_info *pVBInfo, - unsigned short RefreshRateTableIndex, - unsigned short ModeNo) +static void xgifb_set_lcd(int chip_id, + struct vb_device_info *pVBInfo, + unsigned short RefreshRateTableIndex, + unsigned short ModeNo) { unsigned short Data, Temp, b3CC; unsigned short XGI_P3cc; @@ -1072,10 +991,12 @@ static void XGI_SetXG27LCD(struct vb_device_info *pVBInfo, xgifb_reg_set(pVBInfo->P3d4, 0x46, 0x00); xgifb_reg_set(pVBInfo->P3d4, 0x47, 0x00); - 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) { + 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 (((*pVBInfo->pDVOSetting) & 0xC0) == 0xC0) { @@ -1085,7 +1006,16 @@ static void XGI_SetXG27LCD(struct vb_device_info *pVBInfo, xgifb_reg_set(pVBInfo->P3d4, 0x47, *pVBInfo->pCR47); } - XGI_SetXG27FPBits(pVBInfo); + 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 */ @@ -1337,8 +1267,6 @@ static unsigned short XGI_GetVCLK2Ptr(unsigned short ModeNo, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo) { - unsigned short tempbx; - unsigned short LCDXlat1VCLK[4] = { VCLK65 + 2, VCLK65 + 2, VCLK65 + 2, @@ -1359,7 +1287,6 @@ static unsigned short XGI_GetVCLK2Ptr(unsigned short ModeNo, unsigned short CRT2Index, VCLKIndex; unsigned short modeflag, resinfo; - unsigned char *CHTVVCLKPtr = NULL; if (ModeNo <= 0x13) { /* si+St_ResInfo */ @@ -1460,47 +1387,15 @@ static unsigned short XGI_GetVCLK2Ptr(unsigned short ModeNo, else VCLKIndex = CRT2Index; - if (pVBInfo->IF_DEF_CH7005 == 1) { - if (!(pVBInfo->VBInfo & SetCRT2ToLCD)) { - VCLKIndex &= 0x1f; - tempbx = 0; - - if (pVBInfo->VBInfo & SetPALTV) - tempbx += 2; - - if (pVBInfo->VBInfo & SetCHTVOverScan) - tempbx += 1; - - switch (tempbx) { - case 0: - CHTVVCLKPtr = pVBInfo->CHTVVCLKUNTSC; - break; - case 1: - CHTVVCLKPtr = pVBInfo->CHTVVCLKONTSC; - break; - case 2: - CHTVVCLKPtr = pVBInfo->CHTVVCLKUPAL; - break; - case 3: - CHTVVCLKPtr = pVBInfo->CHTVVCLKOPAL; - break; - default: - break; - } - - VCLKIndex = CHTVVCLKPtr[VCLKIndex]; - } - } else { - VCLKIndex = VCLKIndex >> 6; - if ((pVBInfo->LCDResInfo == Panel800x600) || - (pVBInfo->LCDResInfo == Panel320x480)) - VCLKIndex = LVDSXlat1VCLK[VCLKIndex]; - else if ((pVBInfo->LCDResInfo == Panel1024x768) || - (pVBInfo->LCDResInfo == Panel1024x768x75)) - VCLKIndex = LVDSXlat2VCLK[VCLKIndex]; - else - VCLKIndex = LVDSXlat3VCLK[VCLKIndex]; - } + VCLKIndex = VCLKIndex >> 6; + if ((pVBInfo->LCDResInfo == Panel800x600) || + (pVBInfo->LCDResInfo == Panel320x480)) + VCLKIndex = LVDSXlat1VCLK[VCLKIndex]; + else if ((pVBInfo->LCDResInfo == Panel1024x768) || + (pVBInfo->LCDResInfo == Panel1024x768x75)) + VCLKIndex = LVDSXlat2VCLK[VCLKIndex]; + else + VCLKIndex = LVDSXlat3VCLK[VCLKIndex]; } /* VCLKIndex = VCLKIndex&IndexMask; */ @@ -1772,60 +1667,6 @@ static void XGI_SetCRT1ModeRegs(struct xgi_hw_device_info *HwDeviceExtension, } -/* -void XGI_VesaLowResolution(unsigned short ModeNo, - unsigned short ModeIdIndex, - struct vb_device_info *pVBInfo) -{ - unsigned short modeflag; - - if (ModeNo > 0x13) - modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; - else - modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; - - if (ModeNo > 0x13) { - if (modeflag & DoubleScanMode) { - if (modeflag & HalfDCLK) { - if (pVBInfo->VBType & VB_XGI301B | - VB_XGI302B | - VB_XGI301LV | - VB_XGI302LV | - VB_XGI301C)) { - if (!(pVBInfo->VBInfo & - SetCRT2ToRAMDAC)) { - if (pVBInfo->VBInfo & - SetInSlaveMode) { - xgifb_reg_and_or( - pVBInfo->P3c4, - 0x01, - 0xf7, - 0x00); - xgifb_reg_and_or( - pVBInfo->P3c4, - 0x0f, - 0x7f, - 0x00); - return; - } - } - } - xgifb_reg_and_or(pVBInfo->P3c4, - 0x0f, - 0xff, - 0x80); - xgifb_reg_and_or(pVBInfo->P3c4, - 0x01, - 0xf7, - 0x00); - return; - } - } - } - xgifb_reg_and_or(pVBInfo->P3c4, 0x0f, 0x7f, 0x00); -} -*/ - static void XGI_WriteDAC(unsigned short dl, unsigned short ah, unsigned short al, @@ -1860,7 +1701,8 @@ static void XGI_LoadDAC(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { unsigned short data, data2, time, i, j, k, m, n, o, si, di, bx, dl, al, - ah, dh, *table = NULL; + ah, dh; + const unsigned short *table = NULL; if (ModeNo <= 0x13) data = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; @@ -2062,10 +1904,8 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, switch (tempbx) { case 0: - tempdi = XGI_EPLLCDCRT1Ptr_H; - break; case 1: - tempdi = XGI_EPLLCDCRT1Ptr_V; + tempdi = xgifb_epllcd_crt1; break; case 2: tempdi = XGI_EPLLCDDataPtr; @@ -2315,10 +2155,8 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, return &XGI_CetLCD1280x1024Data[tempal]; break; case 6: - return &XGI_ExtLCD1400x1050Data[tempal]; - break; case 7: - return &XGI_StLCD1400x1050Data[tempal]; + return &xgifb_lcd_1400x1050[tempal]; break; case 8: return &XGI_CetLCD1400x1050Data[tempal]; @@ -2342,10 +2180,8 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, return &XGI_CetLCD1024x768x75Data[tempal]; break; case 15: - return &XGI_ExtLCD1280x1024x75Data[tempal]; - break; case 16: - return &XGI_StLCD1280x1024x75Data[tempal]; + return &xgifb_lcd_1280x1024x75[tempal]; break; case 17: return &XGI_CetLCD1280x1024x75Data[tempal]; @@ -2389,18 +2225,12 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, return &XGI_CetLCDDes1280x1024Data[tempal]; break; case 6: - if ((pVBInfo->VBType & VB_XGI301LV) || - (pVBInfo->VBType & VB_XGI302LV)) - return &XGI_ExtLCDDLDes1400x1050Data[tempal]; - else - return &XGI_ExtLCDDes1400x1050Data[tempal]; - break; case 7: if ((pVBInfo->VBType & VB_XGI301LV) || (pVBInfo->VBType & VB_XGI302LV)) - return &XGI_StLCDDLDes1400x1050Data[tempal]; + return &xgifb_lcddldes_1400x1050[tempal]; else - return &XGI_StLCDDes1400x1050Data[tempal]; + return &xgifb_lcddes_1400x1050[tempal]; break; case 8: return &XGI_CetLCDDes1400x1050Data[tempal]; @@ -2426,27 +2256,19 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, return &XGI_NoScalingDesData[tempal]; break; case 13: - return &XGI_ExtLCDDes1024x768x75Data[tempal]; - break; case 14: - return &XGI_StLCDDes1024x768x75Data[tempal]; + return &xgifb_lcddes_1024x768x75[tempal]; break; case 15: return &XGI_CetLCDDes1024x768x75Data[tempal]; break; case 16: - if ((pVBInfo->VBType & VB_XGI301LV) || - (pVBInfo->VBType & VB_XGI302LV)) - return &XGI_ExtLCDDLDes1280x1024x75Data[tempal]; - else - return &XGI_ExtLCDDes1280x1024x75Data[tempal]; - break; case 17: if ((pVBInfo->VBType & VB_XGI301LV) || (pVBInfo->VBType & VB_XGI302LV)) - return &XGI_StLCDDLDes1280x1024x75Data[tempal]; + return &xgifb_lcddldes_1280x1024x75[tempal]; else - return &XGI_StLCDDes1280x1024x75Data[tempal]; + return &xgifb_lcddes_1280x1024x75[tempal]; break; case 18: if ((pVBInfo->VBType & VB_XGI301LV) || @@ -2500,18 +2322,13 @@ static void *XGI_GetTVPtr(unsigned short BX, unsigned short ModeNo, switch (tempbx) { case 0: tempdi = NULL; /*EPLCHTVCRT1Ptr_H;*/ - if (pVBInfo->IF_DEF_CH7007 == 1) - tempdi = XGI_EPLCHTVCRT1Ptr; - break; case 1: tempdi = NULL; /*EPLCHTVCRT1Ptr_V;*/ - if (pVBInfo->IF_DEF_CH7007 == 1) - tempdi = XGI_EPLCHTVCRT1Ptr; - break; case 2: - tempdi = XGI_EPLCHTVDataPtr; + case 6: + tempdi = xgifb_chrontel_tv; break; case 3: tempdi = NULL; @@ -2522,9 +2339,6 @@ static void *XGI_GetTVPtr(unsigned short BX, unsigned short ModeNo, case 5: tempdi = NULL; break; - case 6: - tempdi = XGI_EPLCHTVRegPtr; - break; default: break; } @@ -2626,7 +2440,6 @@ static void XGI_GetLVDSData(unsigned short ModeNo, unsigned short ModeIdIndex, { unsigned short tempbx; struct XGI330_LVDSDataStruct *LCDPtr = NULL; - struct XGI330_CHTVDataStruct *TVPtr = NULL; tempbx = 2; @@ -2639,17 +2452,6 @@ static void XGI_GetLVDSData(unsigned short ModeNo, unsigned short ModeIdIndex, pVBInfo->HT = LCDPtr->LCDHT; pVBInfo->VT = LCDPtr->LCDVT; } - if (pVBInfo->IF_DEF_CH7017 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) { - TVPtr = (struct XGI330_CHTVDataStruct *) XGI_GetTVPtr( - tempbx, ModeNo, ModeIdIndex, - RefreshRateTableIndex, pVBInfo); - pVBInfo->VGAHT = TVPtr->VGAHT; - pVBInfo->VGAVT = TVPtr->VGAVT; - pVBInfo->HT = TVPtr->LCDHT; - pVBInfo->VT = TVPtr->LCDVT; - } - } if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { if (!(pVBInfo->LCDInfo & (SetLCDtoNonExpanding @@ -2682,9 +2484,6 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short tempbx, i; struct XGI_LVDSCRT1HDataStruct *LCDPtr = NULL; struct XGI_LVDSCRT1VDataStruct *LCDPtr1 = NULL; - /* struct XGI330_CHTVDataStruct *TVPtr = NULL; */ - struct XGI_CH7007TV_TimingHStruct *CH7007TV_TimingHPtr = NULL; - struct XGI_CH7007TV_TimingVStruct *CH7007TV_TimingVPtr = NULL; if (ModeNo <= 0x13) index = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC; @@ -2693,113 +2492,36 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex, index = index & IndexMask; - if ((pVBInfo->IF_DEF_ScaleLCD == 0) || - ((pVBInfo->IF_DEF_ScaleLCD == 1) && - (!(pVBInfo->LCDInfo & EnableScalingLCD)))) { - tempbx = 0; - - if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { - LCDPtr = (struct XGI_LVDSCRT1HDataStruct *) - XGI_GetLcdPtr(tempbx, ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - - for (i = 0; i < 8; i++) - pVBInfo->TimingH[0].data[i] = LCDPtr[0].Reg[i]; - } - - if (pVBInfo->IF_DEF_CH7007 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) { - CH7007TV_TimingHPtr = - (struct XGI_CH7007TV_TimingHStruct *) - XGI_GetTVPtr( - tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - - for (i = 0; i < 8; i++) - pVBInfo->TimingH[0].data[i] = - CH7007TV_TimingHPtr[0].data[i]; - } - } - - /* if (pVBInfo->IF_DEF_CH7017 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) - TVPtr = (struct XGI330_CHTVDataStruct *) - XGI_GetTVPtr( - tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - } - */ - - XGI_SetCRT1Timing_H(pVBInfo, HwDeviceExtension); - - if (pVBInfo->IF_DEF_CH7007 == 1) { - xgifb_reg_set(pVBInfo->P3c4, 0x2E, - CH7007TV_TimingHPtr[0].data[8]); - xgifb_reg_set(pVBInfo->P3c4, 0x2F, - CH7007TV_TimingHPtr[0].data[9]); - } - - tempbx = 1; + tempbx = 0; - if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { - LCDPtr1 = (struct XGI_LVDSCRT1VDataStruct *) - XGI_GetLcdPtr( - tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - for (i = 0; i < 7; i++) - pVBInfo->TimingV[0].data[i] = LCDPtr1[0].Reg[i]; - } - - if (pVBInfo->IF_DEF_CH7007 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) { - CH7007TV_TimingVPtr = - (struct XGI_CH7007TV_TimingVStruct *) - XGI_GetTVPtr( - tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); + if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { + LCDPtr = (struct XGI_LVDSCRT1HDataStruct *) + XGI_GetLcdPtr(tempbx, ModeNo, + ModeIdIndex, + RefreshRateTableIndex, + pVBInfo); - for (i = 0; i < 7; i++) - pVBInfo->TimingV[0].data[i] = - CH7007TV_TimingVPtr[0].data[i]; - } - } - /* if (pVBInfo->IF_DEF_CH7017 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) - TVPtr = (struct XGI330_CHTVDataStruct *) - XGI_GetTVPtr(tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - } - */ + for (i = 0; i < 8; i++) + pVBInfo->TimingH[0].data[i] = LCDPtr[0].Reg[i]; + } - XGI_SetCRT1Timing_V(ModeIdIndex, ModeNo, pVBInfo); + XGI_SetCRT1Timing_H(pVBInfo, HwDeviceExtension); - if (pVBInfo->IF_DEF_CH7007 == 1) { - xgifb_reg_and_or(pVBInfo->P3c4, 0x33, ~0x01, - CH7007TV_TimingVPtr[0].data[7] & 0x01); - xgifb_reg_set(pVBInfo->P3c4, 0x34, - CH7007TV_TimingVPtr[0].data[8]); - xgifb_reg_set(pVBInfo->P3c4, 0x3F, - CH7007TV_TimingVPtr[0].data[9]); + tempbx = 1; - } + if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { + LCDPtr1 = (struct XGI_LVDSCRT1VDataStruct *) + XGI_GetLcdPtr( + tempbx, + ModeNo, + ModeIdIndex, + RefreshRateTableIndex, + pVBInfo); + for (i = 0; i < 7; i++) + pVBInfo->TimingV[0].data[i] = LCDPtr1[0].Reg[i]; } + + XGI_SetCRT1Timing_V(ModeIdIndex, ModeNo, pVBInfo); } static unsigned short XGI_GetLCDCapPtr(struct vb_device_info *pVBInfo) @@ -2888,287 +2610,263 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, else modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; - if (!(pVBInfo->SetFlag & Win9xDOSMode)) { - if ((pVBInfo->IF_DEF_CH7017 == 0) || (pVBInfo->VBInfo - & (SetCRT2ToLCD | SetCRT2ToLCDA))) { - if (pVBInfo->IF_DEF_OEMUtil == 1) { - tempbx = 8; - LCDPtr = (struct XGI330_LCDDataDesStruct *) - XGI_GetLcdPtr(tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - } - - if ((pVBInfo->IF_DEF_OEMUtil == 0) || - (LCDPtr == NULL)) { - tempbx = 3; - if (pVBInfo->LCDInfo & EnableScalingLCD) - LCDPtr1 = - (struct XGI330_LCDDataDesStruct2 *) - XGI_GetLcdPtr( - tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - else - LCDPtr = - (struct XGI330_LCDDataDesStruct *) - XGI_GetLcdPtr( - tempbx, - ModeNo, - ModeIdIndex, - RefreshRateTableIndex, - pVBInfo); - } + tempbx = 3; + if (pVBInfo->LCDInfo & EnableScalingLCD) + LCDPtr1 = + (struct XGI330_LCDDataDesStruct2 *) + XGI_GetLcdPtr( + tempbx, + ModeNo, + ModeIdIndex, + RefreshRateTableIndex, + pVBInfo); + else + LCDPtr = + (struct XGI330_LCDDataDesStruct *) + XGI_GetLcdPtr( + tempbx, + ModeNo, + ModeIdIndex, + RefreshRateTableIndex, + pVBInfo); - XGI_GetLCDSync(&tempax, &tempbx, pVBInfo); - push1 = tempbx; - push2 = tempax; + XGI_GetLCDSync(&tempax, &tempbx, pVBInfo); + push1 = tempbx; + push2 = tempax; + + /* GetLCDResInfo */ + if ((pVBInfo->LCDResInfo == Panel1024x768) || + (pVBInfo->LCDResInfo == Panel1024x768x75)) { + tempax = 1024; + tempbx = 768; + } else if ((pVBInfo->LCDResInfo == Panel1280x1024) || + (pVBInfo->LCDResInfo == Panel1280x1024x75)) { + tempax = 1280; + tempbx = 1024; + } else if (pVBInfo->LCDResInfo == Panel1400x1050) { + tempax = 1400; + tempbx = 1050; + } else { + tempax = 1600; + tempbx = 1200; + } - /* GetLCDResInfo */ - if ((pVBInfo->LCDResInfo == Panel1024x768) || - (pVBInfo->LCDResInfo == Panel1024x768x75)) { - tempax = 1024; - tempbx = 768; - } else if ((pVBInfo->LCDResInfo == Panel1280x1024) || - (pVBInfo->LCDResInfo == Panel1280x1024x75)) { - tempax = 1280; - tempbx = 1024; - } else if (pVBInfo->LCDResInfo == Panel1400x1050) { - 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; + } - if (pVBInfo->LCDInfo & SetLCDtoNonExpanding) { - pVBInfo->HDE = tempax; - pVBInfo->VDE = tempbx; - pVBInfo->VGAHDE = tempax; - pVBInfo->VGAVDE = tempbx; - } + tempax = pVBInfo->HT; - if ((pVBInfo->IF_DEF_ScaleLCD == 1) && - (pVBInfo->LCDInfo & EnableScalingLCD)) { - tempax = pVBInfo->HDE; - tempbx = pVBInfo->VDE; - } + if (pVBInfo->LCDInfo & EnableScalingLCD) + tempbx = LCDPtr1->LCDHDES; + else + tempbx = LCDPtr->LCDHDES; - tempax = pVBInfo->HT; + tempcx = pVBInfo->HDE; + tempbx = tempbx & 0x0fff; + tempcx += tempbx; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDHDES; - else - tempbx = LCDPtr->LCDHDES; + if (tempcx >= tempax) + tempcx -= tempax; - tempcx = pVBInfo->HDE; - tempbx = tempbx & 0x0fff; - tempcx += tempbx; + xgifb_reg_set(pVBInfo->Part1Port, 0x1A, tempbx & 0x07); - if (tempcx >= tempax) - tempcx -= tempax; + tempcx = tempcx >> 3; + tempbx = tempbx >> 3; - xgifb_reg_set(pVBInfo->Part1Port, 0x1A, tempbx & 0x07); + xgifb_reg_set(pVBInfo->Part1Port, 0x16, + (unsigned short) (tempbx & 0xff)); + xgifb_reg_set(pVBInfo->Part1Port, 0x17, + (unsigned short) (tempcx & 0xff)); - tempcx = tempcx >> 3; - tempbx = tempbx >> 3; + tempax = pVBInfo->HT; - xgifb_reg_set(pVBInfo->Part1Port, 0x16, - (unsigned short) (tempbx & 0xff)); - xgifb_reg_set(pVBInfo->Part1Port, 0x17, - (unsigned short) (tempcx & 0xff)); + if (pVBInfo->LCDInfo & EnableScalingLCD) + tempbx = LCDPtr1->LCDHRS; + else + tempbx = LCDPtr->LCDHRS; - tempax = pVBInfo->HT; + tempcx = push2; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDHRS; - else - tempbx = LCDPtr->LCDHRS; + if (pVBInfo->LCDInfo & EnableScalingLCD) + tempcx = LCDPtr1->LCDHSync; - tempcx = push2; + tempcx += tempbx; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempcx = LCDPtr1->LCDHSync; + if (tempcx >= tempax) + tempcx -= tempax; - tempcx += tempbx; + tempax = tempbx & 0x07; + tempax = tempax >> 5; + tempcx = tempcx >> 3; + tempbx = tempbx >> 3; - if (tempcx >= tempax) - tempcx -= tempax; + tempcx &= 0x1f; + tempax |= tempcx; - tempax = tempbx & 0x07; - tempax = tempax >> 5; - tempcx = tempcx >> 3; - tempbx = tempbx >> 3; + xgifb_reg_set(pVBInfo->Part1Port, 0x15, tempax); + xgifb_reg_set(pVBInfo->Part1Port, 0x14, + (unsigned short) (tempbx & 0xff)); - tempcx &= 0x1f; - tempax |= tempcx; + tempax = pVBInfo->VT; + if (pVBInfo->LCDInfo & EnableScalingLCD) + tempbx = LCDPtr1->LCDVDES; + else + tempbx = LCDPtr->LCDVDES; + tempcx = pVBInfo->VDE; - xgifb_reg_set(pVBInfo->Part1Port, 0x15, tempax); - xgifb_reg_set(pVBInfo->Part1Port, 0x14, - (unsigned short) (tempbx & 0xff)); + tempbx = tempbx & 0x0fff; + tempcx += tempbx; + if (tempcx >= tempax) + tempcx -= tempax; - tempax = pVBInfo->VT; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDVDES; - else - tempbx = LCDPtr->LCDVDES; - tempcx = pVBInfo->VDE; + xgifb_reg_set(pVBInfo->Part1Port, 0x1b, + (unsigned short) (tempbx & 0xff)); + xgifb_reg_set(pVBInfo->Part1Port, 0x1c, + (unsigned short) (tempcx & 0xff)); - tempbx = tempbx & 0x0fff; - tempcx += tempbx; - if (tempcx >= tempax) - tempcx -= tempax; + tempbx = (tempbx >> 8) & 0x07; + tempcx = (tempcx >> 8) & 0x07; - xgifb_reg_set(pVBInfo->Part1Port, 0x1b, - (unsigned short) (tempbx & 0xff)); - xgifb_reg_set(pVBInfo->Part1Port, 0x1c, - (unsigned short) (tempcx & 0xff)); + xgifb_reg_set(pVBInfo->Part1Port, 0x1d, + (unsigned short) ((tempcx << 3) + | tempbx)); - tempbx = (tempbx >> 8) & 0x07; - tempcx = (tempcx >> 8) & 0x07; + tempax = pVBInfo->VT; + if (pVBInfo->LCDInfo & EnableScalingLCD) + tempbx = LCDPtr1->LCDVRS; + else + tempbx = LCDPtr->LCDVRS; - xgifb_reg_set(pVBInfo->Part1Port, 0x1d, - (unsigned short) ((tempcx << 3) - | tempbx)); + /* tempbx = tempbx >> 4; */ + tempcx = push1; - tempax = pVBInfo->VT; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempbx = LCDPtr1->LCDVRS; - else - tempbx = LCDPtr->LCDVRS; + if (pVBInfo->LCDInfo & EnableScalingLCD) + tempcx = LCDPtr1->LCDVSync; - /* tempbx = tempbx >> 4; */ - tempcx = push1; + tempcx += tempbx; + if (tempcx >= tempax) + tempcx -= tempax; - if (pVBInfo->LCDInfo & EnableScalingLCD) - tempcx = LCDPtr1->LCDVSync; + xgifb_reg_set(pVBInfo->Part1Port, 0x18, + (unsigned short) (tempbx & 0xff)); + xgifb_reg_and_or(pVBInfo->Part1Port, 0x19, ~0x0f, + (unsigned short) (tempcx & 0x0f)); - tempcx += tempbx; - if (tempcx >= tempax) - tempcx -= tempax; + tempax = ((tempbx >> 8) & 0x07) << 3; - xgifb_reg_set(pVBInfo->Part1Port, 0x18, - (unsigned short) (tempbx & 0xff)); - xgifb_reg_and_or(pVBInfo->Part1Port, 0x19, ~0x0f, - (unsigned short) (tempcx & 0x0f)); + tempbx = pVBInfo->VGAVDE; + if (tempbx != pVBInfo->VDE) + tempax |= 0x40; - tempax = ((tempbx >> 8) & 0x07) << 3; + if (pVBInfo->LCDInfo & EnableLVDSDDA) + tempax |= 0x40; - tempbx = pVBInfo->VGAVDE; - if (tempbx != pVBInfo->VDE) - tempax |= 0x40; + xgifb_reg_and_or(pVBInfo->Part1Port, 0x1a, 0x07, + tempax); - if (pVBInfo->LCDInfo & EnableLVDSDDA) - tempax |= 0x40; + tempcx = pVBInfo->VGAVT; + tempbx = pVBInfo->VDE; + tempax = pVBInfo->VGAVDE; + tempcx -= tempax; - xgifb_reg_and_or(pVBInfo->Part1Port, 0x1a, 0x07, - tempax); + temp = tempax; /* 0430 ylshieh */ + temp1 = (temp << 18) / tempbx; - tempcx = pVBInfo->VGAVT; - tempbx = pVBInfo->VDE; - tempax = pVBInfo->VGAVDE; - tempcx -= tempax; + tempdx = (unsigned short) ((temp << 18) % tempbx); - temp = tempax; /* 0430 ylshieh */ - temp1 = (temp << 18) / tempbx; + if (tempdx != 0) + temp1 += 1; - tempdx = (unsigned short) ((temp << 18) % tempbx); + temp2 = temp1; + push3 = temp2; - if (tempdx != 0) - temp1 += 1; + xgifb_reg_set(pVBInfo->Part1Port, 0x37, + (unsigned short) (temp2 & 0xff)); + xgifb_reg_set(pVBInfo->Part1Port, 0x36, + (unsigned short) ((temp2 >> 8) & 0xff)); - temp2 = temp1; - push3 = temp2; + tempbx = (unsigned short) (temp2 >> 16); + tempax = tempbx & 0x03; - xgifb_reg_set(pVBInfo->Part1Port, 0x37, - (unsigned short) (temp2 & 0xff)); - xgifb_reg_set(pVBInfo->Part1Port, 0x36, - (unsigned short) ((temp2 >> 8) & 0xff)); + tempbx = pVBInfo->VGAVDE; + if (tempbx == pVBInfo->VDE) + tempax |= 0x04; - tempbx = (unsigned short) (temp2 >> 16); - tempax = tempbx & 0x03; + xgifb_reg_set(pVBInfo->Part1Port, 0x35, tempax); - 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); - } + 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; + tempcx = pVBInfo->VGAHDE; + tempbx = pVBInfo->HDE; - temp1 = tempcx << 16; + temp1 = tempcx << 16; - tempax = (unsigned short) (temp1 / tempbx); + tempax = (unsigned short) (temp1 / tempbx); - if ((tempbx & 0xffff) == (tempcx & 0xffff)) - tempax = 65535; + if ((tempbx & 0xffff) == (tempcx & 0xffff)) + tempax = 65535; - temp3 = tempax; - temp1 = pVBInfo->VGAHDE << 16; + temp3 = tempax; + temp1 = pVBInfo->VGAHDE << 16; - temp1 /= temp3; - temp3 = temp3 << 16; - temp1 -= 1; + temp1 /= temp3; + temp3 = temp3 << 16; + temp1 -= 1; - temp3 = (temp3 & 0xffff0000) + (temp1 & 0xffff); + temp3 = (temp3 & 0xffff0000) + (temp1 & 0xffff); - tempax = (unsigned short) (temp3 & 0xff); - xgifb_reg_set(pVBInfo->Part1Port, 0x1f, tempax); + tempax = (unsigned short) (temp3 & 0xff); + xgifb_reg_set(pVBInfo->Part1Port, 0x1f, tempax); - temp1 = pVBInfo->VGAVDE << 18; - temp1 = temp1 / push3; - tempbx = (unsigned short) (temp1 & 0xffff); + temp1 = pVBInfo->VGAVDE << 18; + temp1 = temp1 / push3; + tempbx = (unsigned short) (temp1 & 0xffff); - if (pVBInfo->LCDResInfo == Panel1024x768) - tempbx -= 1; + if (pVBInfo->LCDResInfo == Panel1024x768) + 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)); + 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 = temp3 >> 16; + temp3 = temp3 >> 16; - if (modeflag & HalfDCLK) - temp3 = temp3 >> 1; + if (modeflag & HalfDCLK) + temp3 = temp3 >> 1; - xgifb_reg_set(pVBInfo->Part1Port, 0x22, - (unsigned short) ((temp3 >> 8) & 0xff)); - xgifb_reg_set(pVBInfo->Part1Port, 0x23, - (unsigned short) (temp3 & 0xff)); - } - } + xgifb_reg_set(pVBInfo->Part1Port, 0x22, + (unsigned short) ((temp3 >> 8) & 0xff)); + xgifb_reg_set(pVBInfo->Part1Port, 0x23, + (unsigned short) (temp3 & 0xff)); } /* --------------------------------------------------------------------- */ @@ -3183,11 +2881,6 @@ static void XGI_GetLCDVCLKPtr(unsigned char *di_0, unsigned char *di_1, unsigned short index; if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { - if (pVBInfo->IF_DEF_ScaleLCD == 1) { - if (pVBInfo->LCDInfo & EnableScalingLCD) - return; - } - /* index = XGI_GetLCDCapPtr(pVBInfo); */ index = XGI_GetLCDCapPtr1(pVBInfo); @@ -3208,9 +2901,7 @@ static unsigned char XGI_GetVCLKPtr(unsigned short RefreshRateTableIndex, { unsigned short index, modeflag; - unsigned short tempbx; unsigned char tempal; - unsigned char *CHTVVCLKPtr = NULL; if (ModeNo <= 0x13) /* si+St_ResInfo */ @@ -3268,95 +2959,8 @@ static unsigned char XGI_GetVCLKPtr(unsigned short RefreshRateTableIndex, if (pVBInfo->VBInfo & SetCRT2ToTV) return tempal; } - /* else if ((pVBInfo->IF_DEF_CH7017==1) && - (pVBInfo->VBType&VB_CH7017)) { - if (ModeNo<=0x13) - *tempal = pVBInfo->SModeIDTable[ModeIdIndex]. - St_CRT2CRTC; - else - *tempal = pVBInfo->RefIndex[ - RefreshRateTableIndex].Ext_CRT2CRTC; - *tempal = *tempal & 0x1F; - tempbx = 0; - if (pVBInfo->TVInfo & SetPALTV) - tempbx = tempbx + 2; - if (pVBInfo->TVInfo & SetCHTVOverScan) - tempbx++; - tempbx = tempbx << 1; - } */ } /* {End of VB} */ - if ((pVBInfo->IF_DEF_CH7007 == 1) && - (pVBInfo->VBType & VB_CH7007)) { /* [Billy] 07/05/08 CH7007 */ - /* VideoDebugPrint(( - 0, - "XGI_GetVCLKPtr: pVBInfo->IF_DEF_CH7007==1\n")); */ - if ((pVBInfo->VBInfo & SetCRT2ToTV)) { - if (ModeNo <= 0x13) { - tempal = pVBInfo->SModeIDTable[ModeIdIndex]. - St_CRT2CRTC; - } else { - tempal = pVBInfo->RefIndex[ - RefreshRateTableIndex].Ext_CRT2CRTC; - } - - tempal = tempal & 0x0F; - tempbx = 0; - - if (pVBInfo->TVInfo & SetPALTV) - tempbx = tempbx + 2; - - if (pVBInfo->TVInfo & SetCHTVOverScan) - tempbx++; - - /** tempbx = tempbx << 1; CH7007 ? **/ - - /* [Billy]07/05/29 CH7007 */ - if (pVBInfo->IF_DEF_CH7007 == 1) { - switch (tempbx) { - case 0: - CHTVVCLKPtr = XGI7007_CHTVVCLKUNTSC; - break; - case 1: - CHTVVCLKPtr = XGI7007_CHTVVCLKONTSC; - break; - case 2: - CHTVVCLKPtr = XGI7007_CHTVVCLKUPAL; - break; - case 3: - CHTVVCLKPtr = XGI7007_CHTVVCLKOPAL; - break; - default: - break; - - } - } - /* else { - switch(tempbx) { - case 0: - CHTVVCLKPtr = pVBInfo->CHTVVCLKUNTSC; - break; - case 1: - CHTVVCLKPtr = pVBInfo->CHTVVCLKONTSC; - break; - case 2: - CHTVVCLKPtr = pVBInfo->CHTVVCLKUPAL; - break; - case 3: - CHTVVCLKPtr = pVBInfo->CHTVVCLKOPAL; - break; - default: - break; - } - } - */ - - tempal = CHTVVCLKPtr[tempal]; - return tempal; - } - - } - tempal = (unsigned char) inb((pVBInfo->P3ca + 0x02)); tempal = tempal >> 2; tempal &= 0x03; @@ -3375,13 +2979,7 @@ static unsigned char XGI_GetVCLKPtr(unsigned short RefreshRateTableIndex, static void XGI_GetVCLKLen(unsigned char tempal, unsigned char *di_0, unsigned char *di_1, struct vb_device_info *pVBInfo) { - if (pVBInfo->IF_DEF_CH7007 == 1) { /* [Billy] 2007/05/16 */ - /* VideoDebugPrint(( - 0, - "XGI_GetVCLKLen: pVBInfo->IF_DEF_CH7007==1\n")); */ - *di_0 = (unsigned char) XGI_CH7007VCLKData[tempal].SR2B; - *di_1 = (unsigned char) XGI_CH7007VCLKData[tempal].SR2C; - } else if (pVBInfo->VBType & (VB_XGI301 | VB_XGI301B | VB_XGI302B + if (pVBInfo->VBType & (VB_XGI301 | VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C)) { if ((!(pVBInfo->VBInfo & SetCRT2ToLCDA)) && (pVBInfo->SetFlag & ProgrammingCRT2)) { @@ -3409,10 +3007,7 @@ static void XGI_SetCRT2ECLK(unsigned short ModeNo, unsigned short ModeIdIndex, for (i = 0; i < 4; i++) { xgifb_reg_and_or(pVBInfo->P3d4, 0x31, ~0x30, (unsigned short) (0x10 * i)); - if (pVBInfo->IF_DEF_CH7007 == 1) { - xgifb_reg_set(pVBInfo->P3c4, 0x2b, di_0); - xgifb_reg_set(pVBInfo->P3c4, 0x2c, di_1); - } else if ((!(pVBInfo->VBInfo & SetCRT2ToLCDA)) + if ((!(pVBInfo->VBInfo & SetCRT2ToLCDA)) && (!(pVBInfo->VBInfo & SetInSlaveMode))) { xgifb_reg_set(pVBInfo->P3c4, 0x2e, di_0); xgifb_reg_set(pVBInfo->P3c4, 0x2f, di_1); @@ -3527,10 +3122,6 @@ void XGI_GetVBType(struct vb_device_info *pVBInfo) { unsigned short flag, tempbx, tempah; - if (pVBInfo->IF_DEF_CH7007 == 1) { - pVBInfo->VBType = VB_CH7007; - return; - } if (pVBInfo->IF_DEF_LVDS == 0) { tempbx = VB_XGI302B; flag = xgifb_reg_get(pVBInfo->Part4Port, 0x00); @@ -3567,13 +3158,6 @@ void XGI_GetVBType(struct vb_device_info *pVBInfo) } pVBInfo->VBType = tempbx; } - /* - else if (pVBInfo->IF_DEF_CH7017 == 1) - pVBInfo->VBType = VB_CH7017; - else //LVDS - pVBInfo->VBType = VB_LVDS_NS; - */ - } void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, @@ -3631,17 +3215,6 @@ void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, SetCRT2ToLCDA; } } - } else if (pVBInfo->IF_DEF_CH7017 == 1) { - if (pVBInfo->VBType & VB_CH7017) { - if (temp & EnableDualEdge) { - tempbx |= - SetCRT2ToDualEdge; - - if (temp & SetToLCDA) - tempbx |= - SetCRT2ToLCDA; - } - } } } } @@ -3651,11 +3224,7 @@ void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, if (((pVBInfo->IF_DEF_LVDS == 0) && ((pVBInfo->VBType & VB_XGI301LV) || (pVBInfo->VBType & VB_XGI302LV) || - (pVBInfo->VBType & VB_XGI301C))) || - ((pVBInfo->IF_DEF_CH7017 == 1) && - (pVBInfo->VBType & VB_CH7017)) || - ((pVBInfo->IF_DEF_CH7007 == 1) && - (pVBInfo->VBType & VB_CH7007))) { + (pVBInfo->VBType & VB_XGI301C)))) { if (temp & SetYPbPr) { /* temp = CR38 */ if (pVBInfo->IF_DEF_HiVision == 1) { /* shampoo add for new @@ -3694,15 +3263,7 @@ void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, temp = 0x017C; } } else { /* 3nd party chip */ - if (pVBInfo->IF_DEF_CH7017 == 1) - temp = (SetCRT2ToTV | - SetCRT2ToLCD | - SetCRT2ToLCDA); - /* [Billy] 07/05/03 */ - else if (pVBInfo->IF_DEF_CH7007 == 1) - temp = SetCRT2ToTV; - else - temp = SetCRT2ToLCD; + temp = SetCRT2ToLCD; } if (!(tempbx & temp)) { @@ -3790,34 +3351,6 @@ void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, tempbx |= (SetInSlaveMode | SetSimuScanMode); } - - if (pVBInfo->IF_DEF_VideoCapture == 1) { - if (((HwDeviceExtension->jChipType == - XG40) && - (pVBInfo->Set_VGAType == XG40)) || - ((HwDeviceExtension->jChipType == - XG41) && - (pVBInfo->Set_VGAType == XG41)) || - ((HwDeviceExtension->jChipType == - XG42) && - (pVBInfo->Set_VGAType == XG42)) || - ((HwDeviceExtension->jChipType == - XG45) && - (pVBInfo->Set_VGAType == XG45))) { - if (ModeNo <= 13) { - if (!(tempbx & - SetCRT2ToRAMDAC)) { - /*CRT2 not need - * to support*/ - tempbx &= - (0x00FF | - (~SetInSlaveMode)); - pVBInfo->SetFlag - |= EnableVCMode; - } - } - } - } } /* LCD+TV can't support in slave mode @@ -3884,20 +3417,6 @@ void XGI_GetTVInfo(unsigned short ModeNo, unsigned short ModeIdIndex, */ } - if (pVBInfo->IF_DEF_CH7017 == 1) { - tempbx = xgifb_reg_get(pVBInfo->P3d4, 0x35); - - if (tempbx & TVOverScan) - tempbx |= SetCHTVOverScan; - } - - if (pVBInfo->IF_DEF_CH7007 == 1) { /* [Billy] 07/05/04 */ - tempbx = xgifb_reg_get(pVBInfo->P3d4, 0x35); - - if (tempbx & TVOverScan) - tempbx |= SetCHTVOverScan; - } - if (pVBInfo->IF_DEF_LVDS == 0) { if (pVBInfo->VBInfo & SetCRT2ToSCART) tempbx |= SetPALTV; @@ -4004,9 +3523,6 @@ unsigned char XGI_GetLCDInfo(unsigned short ModeNo, unsigned short ModeIdIndex, /* End of LCD75 */ - if (pVBInfo->IF_DEF_OEMUtil == 1) - pVBInfo->LCDTypeInfo = (temp & 0xf0) >> 4; - if (!(pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))) return 0; @@ -4016,9 +3532,6 @@ unsigned char XGI_GetLCDInfo(unsigned short ModeNo, unsigned short ModeIdIndex, temp &= (ScalingLCD | LCDNonExpanding | LCDSyncBit | SetPWDEnable); - if ((pVBInfo->IF_DEF_ScaleLCD == 1) && (temp & LCDNonExpanding)) - temp &= ~EnableScalingLCD; - tempbx |= temp; LCDIdIndex = XGI_GetLCDCapPtr1(pVBInfo); @@ -4032,11 +3545,6 @@ unsigned char XGI_GetLCDInfo(unsigned short ModeNo, unsigned short ModeIdIndex, } } - if (pVBInfo->IF_DEF_CH7017 == 1) { - if (tempax & LCDDualLink) - tempbx |= SetLCDDualLink; - } - if (pVBInfo->IF_DEF_LVDS == 0) { if ((pVBInfo->LCDResInfo == Panel1400x1050) && (pVBInfo->VBInfo & SetCRT2ToLCD) && (ModeNo > 0x13) && (resinfo @@ -4078,16 +3586,6 @@ unsigned char XGI_GetLCDInfo(unsigned short ModeNo, unsigned short ModeIdIndex, pVBInfo->LCDInfo = tempbx; - if (pVBInfo->IF_DEF_PWD == 1) { - if (pVBInfo->LCDInfo & SetPWDEnable) { - if ((pVBInfo->VBType & VB_XGI302LV) || - (pVBInfo->VBType & VB_XGI301C)) { - if (!(tempax & PWDEnable)) - pVBInfo->LCDInfo &= ~SetPWDEnable; - } - } - } - if (pVBInfo->IF_DEF_LVDS == 0) { if (tempax & (LockLCDBToA | StLCDBToA)) { if (pVBInfo->VBInfo & SetInSlaveMode) { @@ -4170,102 +3668,6 @@ unsigned char XGI_SearchModeID(unsigned short ModeNo, return 1; } -/* win2000 MM adapter not support standard mode! */ - -#if 0 -static unsigned char XGINew_CheckMemorySize( - struct xgi_hw_device_info *HwDeviceExtension, - unsigned short ModeNo, - unsigned short ModeIdIndex, - struct vb_device_info *pVBInfo) -{ - unsigned short memorysize, modeflag, temp, temp1, tmp; - - /* - if ((HwDeviceExtension->jChipType == XGI_650) || - (HwDeviceExtension->jChipType == XGI_650M)) { - return 1; - } - */ - - if (ModeNo <= 0x13) - modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; - else - modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; - - /* ModeType = modeflag&ModeInfoFlag; // Get mode type */ - - memorysize = modeflag & MemoryInfoFlag; - memorysize = memorysize > MemorySizeShift; - memorysize++; /* Get memory size */ - - temp = xgifb_reg_get(pVBInfo->P3c4, 0x14); /* Get DRAM Size */ - tmp = temp; - - if (HwDeviceExtension->jChipType == XG40) { - /* memory size per channel SR14[7:4] */ - temp = 1 << ((temp & 0x0F0) >> 4); - if ((tmp & 0x0c) == 0x0C) { /* Qual channels */ - temp <<= 2; - } else if ((tmp & 0x0c) == 0x08) { /* Dual channels */ - temp <<= 1; - } - } else if (HwDeviceExtension->jChipType == XG42) { - /* memory size per channel SR14[7:4] */ - temp = 1 << ((temp & 0x0F0) >> 4); - if ((tmp & 0x04) == 0x04) { /* Dual channels */ - temp <<= 1; - } - } else if (HwDeviceExtension->jChipType == XG45) { - /* memory size per channel SR14[7:4] */ - temp = 1 << ((temp & 0x0F0) >> 4); - if ((tmp & 0x0c) == 0x0C) { /* Qual channels */ - temp <<= 2; - } else if ((tmp & 0x0c) == 0x08) { /* triple channels */ - temp1 = temp; - temp <<= 1; - temp += temp1; - } else if ((tmp & 0x0c) == 0x04) { /* Dual channels */ - temp <<= 1; - } - } - if (temp < memorysize) - return 0; - else - return 1; -} -#endif - -/* -void XGINew_IsLowResolution(unsigned short ModeNo, - unsigned short ModeIdIndex, - unsigned char XGINew_CheckMemorySize( - struct xgi_hw_device_info *HwDeviceExtension, - unsigned short ModeNo, - unsigned short ModeIdIndex, - struct vb_device_info *pVBInfo) -{ - unsigned short data ; - unsigned short ModeFlag ; - - data = xgifb_reg_get(pVBInfo->P3c4, 0x0F); - data &= 0x7F; - xgifb_reg_set(pVBInfo->P3c4, 0x0F, data); - - if (ModeNo > 0x13) { - ModeFlag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; - if ((ModeFlag & HalfDCLK) && (ModeFlag & DoubleScanMode)) { - data = xgifb_reg_get(pVBInfo->P3c4, 0x0F); - data |= 0x80; - xgifb_reg_set(pVBInfo->P3c4, 0x0F, data); - data = xgifb_reg_get(pVBInfo->P3c4, 0x01); - data &= 0xF7; - xgifb_reg_set(pVBInfo->P3c4, 0x01, data); - } - } -} -*/ - static unsigned char XG21GPIODataTransfer(unsigned char ujDate) { unsigned char ujRet = 0; @@ -4349,10 +3751,6 @@ void XGI_DisplayOn(struct xgi_hw_device_info *pXGIHWDE, } - /* [Billy] 07/05/23 For CH7007 */ - if (pVBInfo->IF_DEF_CH7007 == 1) { - } - if (pXGIHWDE->jChipType == XG27) { if (pVBInfo->IF_DEF_LVDS == 1) { if (!(XGI_XG27GetPSCValue(pVBInfo) & 0x1)) { @@ -4389,12 +3787,6 @@ void XGI_DisplayOff(struct xgi_hw_device_info *pXGIHWDE, } } - if (pVBInfo->IF_DEF_CH7007 == 1) { /* [Billy] 07/05/23 For CH7007 */ - /* if (IsCH7007TVMode(pVBInfo) == 0) */ - { - } - } - if (pXGIHWDE->jChipType == XG27) { if ((XGI_XG27GetPSCValue(pVBInfo) & 0x2)) { /* LVDS backlight off */ @@ -4419,20 +3811,9 @@ static void XGI_WaitDisply(struct vb_device_info *pVBInfo) break; } -#if 0 -static void XGI_WaitDisplay(struct vb_device_info *pVBInfo) -{ - while (!(inb(pVBInfo->P3da) & 0x01)) - ; - while (inb(pVBInfo->P3da) & 0x01) - ; -} -#endif - static void XGI_AutoThreshold(struct vb_device_info *pVBInfo) { - if (!(pVBInfo->SetFlag & Win9xDOSMode)) - xgifb_reg_or(pVBInfo->Part1Port, 0x01, 0x40); + xgifb_reg_or(pVBInfo->Part1Port, 0x01, 0x40); } static void XGI_SaveCRT2Info(unsigned short ModeNo, @@ -5027,11 +4408,6 @@ static void XGI_SetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex, tempcx = (pVBInfo->VGAVT - 1); temp = tempcx & 0x00FF; - if (pVBInfo->IF_DEF_CH7005 == 1) { - if (pVBInfo->VBInfo & 0x0C) - temp--; - } - xgifb_reg_set(pVBInfo->Part1Port, 0x0E, temp); tempbx = pVBInfo->VGAVDE - 1; temp = tempbx & 0x00FF; @@ -6177,27 +5553,24 @@ static struct XGI301C_Tap4TimingStruct *XGI_GetTap4Ptr(unsigned short tempcx, tempbx = pVBInfo->VDE; } - if (tempax < tempbx) - return &EnlargeTap4Timing[0]; - else if (tempax == tempbx) - return &NoScaleTap4Timing[0]; /* 1:1 */ + if (tempax <= tempbx) + return &xgifb_tap4_timing[0]; else - Tap4TimingPtr = NTSCTap4Timing; /* NTSC */ + Tap4TimingPtr = xgifb_ntsc_525_tap4_timing; /* NTSC */ if (pVBInfo->TVInfo & SetPALTV) Tap4TimingPtr = PALTap4Timing; if (pVBInfo->VBInfo & SetCRT2ToYPbPr) { - if (pVBInfo->TVInfo & SetYPbPrMode525i) - Tap4TimingPtr = YPbPr525iTap4Timing; - if (pVBInfo->TVInfo & SetYPbPrMode525p) - Tap4TimingPtr = YPbPr525pTap4Timing; + if ((pVBInfo->TVInfo & SetYPbPrMode525i) || + (pVBInfo->TVInfo & SetYPbPrMode525p)) + Tap4TimingPtr = xgifb_ntsc_525_tap4_timing; if (pVBInfo->TVInfo & SetYPbPrMode750p) Tap4TimingPtr = YPbPr750pTap4Timing; } if (pVBInfo->VBInfo & SetCRT2ToHiVisionTV) - Tap4TimingPtr = HiTVTap4Timing; + Tap4TimingPtr = xgifb_tap4_timing; i = 0; while (Tap4TimingPtr[i].DE != 0xFFFF) { @@ -6217,10 +5590,6 @@ static void XGI_SetTap4Regs(struct vb_device_info *pVBInfo) if (!(pVBInfo->VBType & VB_XGI301C)) return; -#ifndef Tap4 - xgifb_reg_and(pVBInfo->Part2Port, 0x4E, 0xEB); /* Disable Tap4 */ -#else /* Tap4 Setting */ - 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]); @@ -6242,7 +5611,6 @@ static void XGI_SetTap4Regs(struct vb_device_info *pVBInfo) else /* Enable H.Scaling */ xgifb_reg_and_or(pVBInfo->Part2Port, 0x4E, ~0x14, 0x10); -#endif } static void XGI_SetGroup3(unsigned short ModeNo, unsigned short ModeIdIndex, @@ -6743,204 +6111,10 @@ void XGI_SetXG27FPBits(struct vb_device_info *pVBInfo) } -static void XGI_SetXG21LVDSPara(unsigned short ModeNo, - unsigned short ModeIdIndex, - struct vb_device_info *pVBInfo) -{ - unsigned char temp, Miscdata; - unsigned short xres, yres, modeflag, resindex, lvdstableindex; - unsigned short LVDSHT, LVDSHBS, LVDSHRS, LVDSHRE, LVDSHBE; - unsigned short LVDSVT, LVDSVBS, LVDSVRS, LVDSVRE, LVDSVBE; - unsigned short value; - - lvdstableindex = XGI_GetLVDSOEMTableIndex(pVBInfo); - - temp = (unsigned char) ((pVBInfo->XG21_LVDSCapList[lvdstableindex]. - LVDS_Capability & - (LCDPolarity << 8)) >> 8); - temp &= LCDPolarity; - Miscdata = (unsigned char) inb(pVBInfo->P3cc); - - outb((Miscdata & 0x3F) | temp, pVBInfo->P3c2); - - temp = (unsigned char) (pVBInfo->XG21_LVDSCapList[lvdstableindex]. - 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); - - XGI_SetXG21FPBits(pVBInfo); - resindex = XGI_GetResInfo(ModeNo, ModeIdIndex, pVBInfo); - if (ModeNo <= 0x13) { - xres = pVBInfo->StResInfo[resindex].HTotal; - yres = pVBInfo->StResInfo[resindex].VTotal; - /* si+St_ResInfo */ - modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; - } else { - xres = pVBInfo->ModeResInfo[resindex].HTotal; /* xres->ax */ - yres = pVBInfo->ModeResInfo[resindex].VTotal; /* yres->bx */ - /* si+St_ModeFlag */ - modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; - } - - if (!(modeflag & Charx8Dot)) - xres = xres * 8 / 9; - - LVDSHT = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHT; - - LVDSHBS = xres + (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE - - xres) / 2; - if ((ModeNo <= 0x13) && (modeflag & HalfDCLK)) - LVDSHBS -= xres / 4; - - if (LVDSHBS > LVDSHT) - LVDSHBS -= LVDSHT; - - LVDSHRS = LVDSHBS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHFP; - if (LVDSHRS > LVDSHT) - LVDSHRS -= LVDSHT; - - LVDSHRE = LVDSHRS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHSYNC; - if (LVDSHRE > LVDSHT) - LVDSHRE -= LVDSHT; - - LVDSHBE = LVDSHBS + LVDSHT - - pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE; - - LVDSVT = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVT; - - LVDSVBS = yres + (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE - - yres) / 2; - if ((ModeNo > 0x13) && (modeflag & DoubleScanMode)) - LVDSVBS += yres / 2; - - if (LVDSVBS > LVDSVT) - LVDSVBS -= LVDSVT; - - LVDSVRS = LVDSVBS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVFP; - if (LVDSVRS > LVDSVT) - LVDSVRS -= LVDSVT; - - LVDSVRE = LVDSVRS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVSYNC; - if (LVDSVRE > LVDSVT) - LVDSVRE -= LVDSVT; - - LVDSVBE = LVDSVBS + LVDSVT - - pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE; - - temp = (unsigned char) 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)); - - /* 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] *//* 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, - pVBInfo->XG21_LVDSCapList[lvdstableindex]. - VCLKData1); - xgifb_reg_set(pVBInfo->P3c4, - 0x2C, - pVBInfo->XG21_LVDSCapList[lvdstableindex]. - 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 */ - } - -} - -/* no shadow case */ -static void XGI_SetXG27LVDSPara(unsigned short ModeNo, - unsigned short ModeIdIndex, - struct vb_device_info *pVBInfo) +static void xgifb_set_lvds(int chip_id, + unsigned short ModeNo, + unsigned short ModeIdIndex, + struct vb_device_info *pVBInfo) { unsigned char temp, Miscdata; unsigned short xres, yres, modeflag, resindex, lvdstableindex; @@ -6964,7 +6138,11 @@ static void XGI_SetXG27LVDSPara(unsigned short ModeNo, /* SR30[5] FP HSync polarity */ xgifb_reg_and_or(pVBInfo->P3c4, 0x30, ~0x20, (temp & 0x40) >> 1); - XGI_SetXG27FPBits(pVBInfo); + if (chip_id == XG27) + XGI_SetXG27FPBits(pVBInfo); + else + XGI_SetXG21FPBits(pVBInfo); + resindex = XGI_GetResInfo(ModeNo, ModeIdIndex, pVBInfo); if (ModeNo <= 0x13) { xres = pVBInfo->StResInfo[resindex].HTotal; @@ -7091,9 +6269,18 @@ static void XGI_SetXG27LVDSPara(unsigned short ModeNo, xgifb_reg_and_or(pVBInfo->P3d4, 0x07, ~0x04, (value & 0x100) >> 6); xgifb_reg_set(pVBInfo->P3d4, 0x10, (value & 0xFF)); - /* 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); + 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; @@ -7101,7 +6288,13 @@ static void XGI_SetXG27LVDSPara(unsigned short ModeNo, xgifb_reg_and_or(pVBInfo->P3d4, 0x11, ~0x0F, value & 0x0F); /* Panel VRE SR3F[7:2] */ - xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0xFC, (value << 2) & 0xFC); + 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++) { @@ -7210,30 +6403,6 @@ void XGI_DisableBridge(struct xgi_hw_device_info *HwDeviceExtension, { unsigned short tempah = 0; - if (pVBInfo->SetFlag == Win9xDOSMode) - return; - - /* - if (CH7017) { - if (!(pVBInfo->VBInfo & - (SetCRT2ToLCD | SetCRT2toLCDA)) || - (XGI_DisableChISLCD(pVBInfo))) { - if (!XGI_IsLCDON(pVBInfo)) { - if (DISCHARGE) { - tempbx = XGINew_GetCH7005(0x61); - // first time we power up - if (tempbx < 0x01) - // and disable power sequence - XGINew_SetCH7005(0x0066); - else - // leave VDD on - disable power - XGINew_SetCH7005(0x5f66); - } - } - } - } - */ - if (pVBInfo->VBType & (VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C)) { tempah = 0x3F; @@ -7713,28 +6882,16 @@ static void XGI_SetYFilter(unsigned short ModeNo, unsigned short ModeIdIndex, case 0x02: case 0x05: case 0x0D: - filterPtr = PALMYFilter1; - break; - case 0x03: - filterPtr = PALNYFilter1; + filterPtr = xgifb_palmn_yfilter1; break; case 0x08: case 0x0C: - filterPtr = NTSCYFilter2; - break; - case 0x0A: - filterPtr = PALMYFilter2; - break; - case 0x0B: - filterPtr = PALNYFilter2; - break; - case 0x09: - filterPtr = PALYFilter2; + filterPtr = xgifb_yfilter2; break; default: @@ -7783,9 +6940,6 @@ static void XGI_OEM310Setting(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo) { - if (pVBInfo->SetFlag & Win9xDOSMode) - return; - /* GetPart1IO(); */ XGI_SetDelayComp(pVBInfo); @@ -8034,13 +7188,6 @@ static void XGI_CloseCRTC(struct xgi_hw_device_info *HwDeviceExtension, } -void XGI_OpenCRTC(struct xgi_hw_device_info *HwDeviceExtension, - struct vb_device_info *pVBInfo) -{ - unsigned short tempbx; - tempbx = 0; -} - void XGI_UnLockCRT2(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo) { @@ -8138,13 +7285,6 @@ unsigned short XGI_GetRatePtrCRT2(struct xgi_hw_device_info *pXGIHWDE, else modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; - if (pVBInfo->IF_DEF_CH7005 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) { - if (modeflag & HalfDCLK) - return 0; - } - } - if (ModeNo < 0x14) return 0xFFFF; @@ -8159,11 +7299,6 @@ unsigned short XGI_GetRatePtrCRT2(struct xgi_hw_device_info *pXGIHWDE, index--; if (pVBInfo->SetFlag & ProgrammingCRT2) { - if (pVBInfo->IF_DEF_CH7005 == 1) { - if (pVBInfo->VBInfo & SetCRT2ToTV) - index = 0; - } - if (pVBInfo->VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { if (pVBInfo->IF_DEF_LVDS == 0) { if (pVBInfo->VBType & (VB_XGI301B | VB_XGI302B @@ -8402,16 +7537,6 @@ void XGI_EnableBridge(struct xgi_hw_device_info *HwDeviceExtension, { unsigned short tempah; - if (pVBInfo->SetFlag == Win9xDOSMode) { - if (pVBInfo->VBType & (VB_XGI301B | VB_XGI302B | VB_XGI301LV - | VB_XGI302LV | VB_XGI301C)) { - XGI_DisplayOn(HwDeviceExtension, pVBInfo); - return; - } else - /* LVDS or CH7017 */ - return; - } - if (pVBInfo->VBType & (VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C)) { if (!(pVBInfo->SetFlag & DisableChA)) { @@ -8512,11 +7637,6 @@ void XGI_EnableBridge(struct xgi_hw_device_info *HwDeviceExtension, /* EnablePart4_1F */ xgifb_reg_or(pVBInfo->Part4Port, 0x1F, tempah); - if (pVBInfo->SetFlag & Win9xDOSMode) { - XGI_DisplayOn(HwDeviceExtension, pVBInfo); - return; - } - if (!(pVBInfo->SetFlag & DisableChA)) { XGI_VBLongWait(pVBInfo); if (!(pVBInfo->SetFlag & GatingCRT)) { @@ -8630,21 +7750,12 @@ static void XGI_SetCRT1Group(struct xgi_hw_device_info *HwDeviceExtension, XGI_UpdateXG21CRTC(ModeNo, pVBInfo, RefreshRateTableIndex); - if (HwDeviceExtension->jChipType == XG27) - XGI_SetXG27LCD(pVBInfo, RefreshRateTableIndex, - ModeNo); - else - XGI_SetXG21LCD(pVBInfo, RefreshRateTableIndex, - ModeNo); + xgifb_set_lcd(HwDeviceExtension->jChipType, + pVBInfo, RefreshRateTableIndex, ModeNo); - if (pVBInfo->IF_DEF_LVDS == 1) { - if (HwDeviceExtension->jChipType == XG27) - XGI_SetXG27LVDSPara(ModeNo, - ModeIdIndex, pVBInfo); - else - XGI_SetXG21LVDSPara(ModeNo, - ModeIdIndex, pVBInfo); - } + if (pVBInfo->IF_DEF_LVDS == 1) + xgifb_set_lvds(HwDeviceExtension->jChipType, + ModeNo, ModeIdIndex, pVBInfo); /* P. ON */ /* xgifb_reg_or(pVBInfo->P3d4, 0x48, 0x20); */ } @@ -8672,14 +7783,7 @@ unsigned char XGISetModeNew(struct xgi_hw_device_info *HwDeviceExtension, pVBInfo->ROMAddr = HwDeviceExtension->pjVirtualRomBase; pVBInfo->BaseAddr = (unsigned long) HwDeviceExtension->pjIOAddress; pVBInfo->IF_DEF_LVDS = 0; - pVBInfo->IF_DEF_CH7005 = 0; pVBInfo->IF_DEF_LCDA = 1; - pVBInfo->IF_DEF_CH7017 = 0; - pVBInfo->IF_DEF_CH7007 = 0; /* [Billy] 2007/05/14 */ - pVBInfo->IF_DEF_VideoCapture = 0; - pVBInfo->IF_DEF_ScaleLCD = 0; - pVBInfo->IF_DEF_OEMUtil = 0; - pVBInfo->IF_DEF_PWD = 0; if (HwDeviceExtension->jChipType >= XG20) { /* kuku 2004/06/25 */ pVBInfo->IF_DEF_YPbPr = 0; @@ -8749,7 +7853,6 @@ unsigned char XGISetModeNew(struct xgi_hw_device_info *HwDeviceExtension, XGI_GetTVInfo(ModeNo, ModeIdIndex, pVBInfo); XGI_GetLCDInfo(ModeNo, ModeIdIndex, pVBInfo); XGI_DisableBridge(HwDeviceExtension, pVBInfo); - /* XGI_OpenCRTC(HwDeviceExtension, pVBInfo); */ if (pVBInfo->VBInfo & (SetSimuScanMode | SetCRT2ToLCDA)) { XGI_SetCRT1Group(HwDeviceExtension, ModeNo, @@ -8809,8 +7912,7 @@ unsigned char XGISetModeNew(struct xgi_hw_device_info *HwDeviceExtension, } pVBInfo->SetFlag = 0; - if (pVBInfo->IF_DEF_CH7007 != 1) - pVBInfo->VBInfo = DisableCRT2Display; + pVBInfo->VBInfo = DisableCRT2Display; XGI_DisplayOff(HwDeviceExtension, pVBInfo); diff --git a/drivers/staging/xgifb/vb_struct.h b/drivers/staging/xgifb/vb_struct.h index 377d27c..f9ade6f 100644 --- a/drivers/staging/xgifb/vb_struct.h +++ b/drivers/staging/xgifb/vb_struct.h @@ -1,16 +1,6 @@ #ifndef _VB_STRUCT_ #define _VB_STRUCT_ -#ifdef _INITNEW_ -#define EXTERN -#else -#define EXTERN extern -#endif - -struct XGI_PanelDelayTblStruct { - unsigned char timer[2]; -}; - struct XGI_LCDDataStruct { unsigned short RVBHCMAX; unsigned short RVBHCFACT; @@ -45,24 +35,6 @@ struct XGI_TVDataStruct { unsigned char RY4COE; }; -struct XGI_LVDSDataStruct { - unsigned short VGAHT; - unsigned short VGAVT; - unsigned short LCDHT; - unsigned short LCDVT; -}; - -struct XGI_LVDSDesStruct { - unsigned short LCDHDES; - unsigned short LCDVDES; -}; - -struct XGI_LVDSCRT1DataStruct { - unsigned char CR[15]; -}; - -/*add for LCDA*/ - struct XGI_StStruct { unsigned char St_ModeID; unsigned short St_ModeFlag; @@ -146,10 +118,6 @@ struct XGI_ModeResInfoStruct { unsigned char YChar; }; -struct XGI_LCDNBDesStruct { - unsigned char NB[12]; -}; - /*add for new UNIVGABIOS*/ struct XGI_LCDDesStruct { unsigned short LCDHDES; @@ -165,12 +133,6 @@ struct XGI_LCDDataTablStruct { unsigned short DATAPTR; }; -struct XGI_TVTablDataStruct { - unsigned short MASK; - unsigned short CAP; - unsigned short DATAPTR; -}; - struct XGI330_LCDDataDesStruct { unsigned short LCDHDES; unsigned short LCDHRS; @@ -246,22 +208,10 @@ struct XGI_TimingVStruct { unsigned char data[7]; }; -struct XGI_CH7007TV_TimingHStruct { - unsigned char data[10]; -}; - -struct XGI_CH7007TV_TimingVStruct { - unsigned char data[10]; -}; - struct XGI_XG21CRT1Struct { unsigned char ModeID, CR02, CR03, CR15, CR16; }; -struct XGI330_CHTVRegDataStruct { - unsigned char Reg[16]; -}; - struct XGI330_LCDCapStruct { unsigned char LCD_ID; unsigned short LCD_Capability; @@ -324,18 +274,6 @@ struct XGI301C_Tap4TimingStruct { unsigned char Reg[64]; /* C0-FF */ }; -struct XGI_New_StandTableStruct { - unsigned char CRT_COLS; - unsigned char ROWS; - unsigned char CHAR_HEIGHT; - unsigned short CRT_LEN; - unsigned char SR[4]; - unsigned char MISC; - unsigned char CRTC[0x19]; - unsigned char ATTR[0x14]; - unsigned char GRC[9]; -}; - struct vb_device_info { unsigned char ISXPDOS; unsigned long P3c4, P3d4, P3c0, P3ce, P3c2, P3cc; @@ -350,12 +288,10 @@ struct vb_device_info { unsigned short ModeType; /* ,IF_DEF_FSTN; add for dstn */ unsigned short IF_DEF_LVDS, IF_DEF_TRUMPION, IF_DEF_DSTN; - unsigned short IF_DEF_CRT2Monitor, IF_DEF_VideoCapture; - unsigned short IF_DEF_LCDA, IF_DEF_CH7017, IF_DEF_YPbPr, - IF_DEF_ScaleLCD, IF_DEF_OEMUtil, IF_DEF_PWD; + unsigned short IF_DEF_CRT2Monitor; + unsigned short IF_DEF_LCDA, IF_DEF_YPbPr; unsigned short IF_DEF_ExpLink; - unsigned short IF_DEF_CH7005, IF_DEF_HiVision; - unsigned short IF_DEF_CH7007; /* Billy 2007/05/03 */ + unsigned short IF_DEF_HiVision; unsigned short LCDResInfo, LCDTypeInfo, VBType;/*301b*/ unsigned short VBInfo, TVInfo, LCDInfo, Set_VGAType; unsigned short VBExtInfo;/*301lv*/ @@ -364,7 +300,7 @@ struct vb_device_info { unsigned short SelectCRT2Rate; unsigned char *ROMAddr; - unsigned char *FBAddr; + void __iomem *FBAddr; unsigned long BaseAddr; unsigned long RelIO; @@ -420,10 +356,6 @@ struct vb_device_info { unsigned char *XGI_TVDelayList; unsigned char *XGI_TVDelayList2; - unsigned char *CHTVVCLKUNTSC; - unsigned char *CHTVVCLKONTSC; - unsigned char *CHTVVCLKUPAL; - unsigned char *CHTVVCLKOPAL; unsigned char *NTSCTiming; unsigned char *PALTiming; unsigned char *HiTVExtTiming; @@ -460,23 +392,10 @@ struct vb_device_info { struct XGI_StResInfoStruct *StResInfo; struct XGI_ModeResInfoStruct *ModeResInfo; struct XGI_XG21CRT1Struct *UpdateCRT1; -}; /* _struct vb_device_info */ + int ram_type; + int ram_channel; + int ram_bus; +}; /* _struct vb_device_info */ -struct TimingInfo { - unsigned short Horizontal_ACTIVE; - unsigned short Horizontal_FP; - unsigned short Horizontal_SYNC; - unsigned short Horizontal_BP; - unsigned short Vertical_ACTIVE; - unsigned short Vertical_FP; - unsigned short Vertical_SYNC; - unsigned short Vertical_BP; - double DCLK; - unsigned char FrameRate; - unsigned char Interlace; - unsigned short Margin; -}; - -#define _VB_STRUCT_ #endif /* _VB_STRUCT_ */ diff --git a/drivers/staging/xgifb/vb_table.h b/drivers/staging/xgifb/vb_table.h index d10de48..b81ac77 100644 --- a/drivers/staging/xgifb/vb_table.h +++ b/drivers/staging/xgifb/vb_table.h @@ -1,5 +1,3 @@ -#define Tap4 - /* yilin modify for xgi20 */ static struct XGI_MCLKDataStruct XGI340New_MCLKData[] = { {0x16, 0x01, 0x01, 166}, @@ -109,62 +107,12 @@ static unsigned char XGI340_CR6B[8][4] = { {0x00, 0x00, 0x00, 0x00} }; -static unsigned char XGI340_CR6E[8][4] = { - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00} -}; +static unsigned char XGI340_CR6E[8][4]; + +static unsigned char XGI340_CR6F[8][32]; + +static unsigned char XGI340_CR89[8][2]; -static unsigned char XGI340_CR6F[8][32] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} -}; - -static unsigned char XGI340_CR89[8][2] = { - {0x00, 0x00}, - {0x00, 0x00}, - {0x00, 0x00}, - {0x00, 0x00}, - {0x00, 0x00}, - {0x00, 0x00}, - {0x00, 0x00}, - {0x00, 0x00} -}; /* CR47,CR48,CR49,CR4A,CR4B,CR4C,CR70,CR71,CR74,CR75,CR76,CR77 */ static unsigned char XGI340_AGPReg[12] = { 0x28, 0x23, 0x00, 0x20, 0x00, 0x20, @@ -173,41 +121,10 @@ static unsigned char XGI340_AGPReg[12] = { static unsigned char XGI340_SR16[4] = {0x03, 0x83, 0x03, 0x83}; -#if 0 -static unsigned char XGI330_SR15_1[8][8] = { - {0x0, 0x0, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00}, - {0x5, 0x15, 0x15, 0x15, 0x15, 0x15, 0x00, 0x00}, - {0xba, 0xba, 0xba, 0xba, 0xBA, 0xBA, 0x00, 0x00}, - {0x55, 0x57, 0x57, 0xAB, 0xAB, 0xAB, 0x00, 0x00}, - {0x60, 0x34, 0x34, 0x34, 0x34, 0x34, 0x00, 0x00}, - {0x0, 0x80, 0x80, 0x80, 0x83, 0x83, 0x00, 0x00}, - {0x50, 0x50, 0x50, 0x3C, 0x3C, 0x3C, 0x00, 0x00}, - {0x0, 0xa5, 0xfb, 0xf6, 0xF6, 0xF6, 0x00, 0x00} -}; - -static unsigned char XGI330_cr40_1[15][8] = { - {0x66, 0x40, 0x40, 0x28, 0x24, 0x24, 0x00, 0x00}, - {0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00}, - {0x00, 0xf0, 0xf0, 0xf0, 0xF0, 0xF0, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x88, 0x88, 0x88, 0xAA, 0xAC, 0xAC, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0xA2, 0x00, 0x00, 0xA2, 0xA2, 0x00, 0x00}, -}; -#endif - -static unsigned char XGI330_sr25[] = {0x00, 0x0}; +static unsigned char XGI330_sr25[2]; static unsigned char XGI330_sr31 = 0xc0; static unsigned char XGI330_sr32 = 0x11; -static unsigned char XGI330_SR33 = 0x00; +static unsigned char XGI330_SR33; static unsigned char XG40_CRCF = 0x13; static unsigned char XG40_DRAMTypeDefinition = 0xFF ; @@ -816,13 +733,9 @@ static struct XGI_StandTableStruct XGI330_StandTable[] = { } }; -static struct XGI_TimingHStruct XGI_TimingH[] = { - { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} } -}; +static struct XGI_TimingHStruct XGI_TimingH[1]; -static struct XGI_TimingVStruct XGI_TimingV[] = { - { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} } -}; +static struct XGI_TimingVStruct XGI_TimingV[1]; static struct XGI_XG21CRT1Struct XGI_UpdateCRT1Table[] = { {0x01, 0x27, 0x91, 0x8f, 0xc0}, /* 00 */ @@ -1007,112 +920,6 @@ static struct XGI_CRT1TableStruct XGI_CRT1Table[] = { 0x03, 0xDE, 0xC0, 0x84, 0xBF, 0x04, 0x90} } /* 0x47 */ }; -#if 0 -static struct XGI330_CHTVRegDataStruct XGI_CHTVRegUNTSC[] = { - /* Index: 000h, 001h, 002h, 004h, 003h, 005h, 006h, 007h, - 008h, 015h, 01Fh, 00Ch, 00Dh, 00Eh, 00Fh, 010h */ - /* 00 (640x200,640x400) */ - { {0x4A, 0x77, 0xBB, 0x94, 0x84, 0x48, 0xFE, 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01 } }, - /* 01 (640x350) */ - { {0x4A, 0x77, 0xBB, 0x94, 0x84, 0x48, 0xFE, 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01 } }, - /* 02 (720x400) */ - { {0x4A, 0x77, 0xBB, 0x94, 0x84, 0x48, 0xFE, 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01 } }, - /* 03 (720x350) */ - { {0x4A, 0x77, 0xBB, 0x94, 0x84, 0x48, 0xFE, 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01 } }, - /* 04 (640x480) ;;5/6/02 */ - { {0x6A, 0x77, 0xBB, 0x6E, 0x84, 0x2E, 0x02, 0x5A, - 0x04, 0x00, 0x80, 0x20, 0x7E, 0x80, 0x97, 0x00 } }, - /* 05 (800x600) ;;1/12/02 */ - { {0xCF, 0x77, 0xB7, 0xC8, 0x84, 0x3B, 0x02, 0x5A, - 0x04, 0x00, 0x80, 0x19, 0x88, 0xAE, 0xA3, 0x00 } }, - /* 06 (1024x768) ;;5/6/02 */ - { {0xEE, 0x77, 0xBB, 0x66, 0x87, 0x32, 0x01, 0x5A, - 0x04, 0x00, 0x80, 0x1B, 0xD4, 0x2F, 0x6F, 0x00 } } -}; - -static struct XGI330_CHTVRegDataStruct XGI_CHTVRegONTSC[] = { - /* Index: 000h, 001h, 002h, 004h, 003h, 005h, 006h, 007h, - 008h, 015h, 01Fh, 00Ch, 00Dh, 00Eh, 00Fh, 010h */ - /* 00 (640x200,640x400) */ - { {0x49, 0x77, 0xBB, 0x7B, 0x84, 0x34, 0x00, 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 01 (640x350) */ - { {0x49, 0x77, 0xBB, 0x7B, 0x84, 0x34, 0x00 , 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 02 (720x400) */ - { {0x49, 0x77, 0xBB, 0x7B, 0x84, 0x34, 0x00 , 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 03 (720x350) */ - { {0x49, 0x77, 0xBB, 0x7B, 0x84, 0x34, 0x00 , 0x50, - 0x04, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 04 (640x480) ;;5/6/02 */ - { {0x69, 0x77, 0xBB, 0x6E, 0x84, 0x1E, 0x00 , 0x5A, - 0x04, 0x00, 0x80, 0x25, 0x1A, 0x80, 0x26, 0x00} }, - /* 05 (800x600) ;;5/6/02 */ - { {0xCE, 0x77, 0xB7, 0xB6, 0x83, 0x2C, 0x02 , 0x5A, - 0x04, 0x00, 0x80, 0x1C, 0x00, 0x82, 0x97, 0x00} }, - /* 06 (1024x768) ;;5/6/02 */ - { {0xED, 0x77, 0xBB, 0x66, 0x8C, 0x21, 0x02 , 0x5A, - 0x04, 0x00, 0x80, 0x1F, 0xA0, 0x7E, 0x73, 0x00} } -}; - -static struct XGI330_CHTVRegDataStruct XGI_CHTVRegUPAL[] = { - /* Index: 000h, 001h, 002h, 004h, 003h, 005h, 006h, 007h, - 008h, 015h, 01Fh, 00Ch, 00Dh, 00Eh, 00Fh, 010h */ - /* ; 00 (640x200,640x400) */ - { {0x41, 0x7F, 0xB7, 0x34, 0xAD, 0x50, 0x34, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* ; 01 (640x350) */ - { {0x41, 0x7F, 0xB7, 0x80, 0x85, 0x50, 0x00, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* ; 02 (720x400) */ - { {0x41, 0x7F, 0xB7, 0x34, 0xAD, 0x50, 0x34, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* ; 03 (720x350) */ - { {0x41, 0x7F, 0xB7, 0x12, 0x85, 0x50, 0x00, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* ; 04 (640x480) */ - { {0x61, 0x7F, 0xB7, 0x99, 0x84, 0x35, 0x04, 0x5A, - 0x05, 0x00, 0x80, 0x26, 0x2A, 0x55, 0x5D, 0x00} }, - /* ; 05 (800x600) ;;1/12/02 */ - { {0xC3, 0x7F, 0xB7, 0x7A, 0x84, 0x40, 0x02, 0x5A, - 0x05, 0x00, 0x80, 0x1F, 0x84, 0x3D, 0x28, 0x00} }, - /* ; 06 (1024x768) ;;1/12/02 */ - { {0xE5, 0x7F, 0xB7, 0x1D, 0xA7, 0x3E, 0x04, 0x5A, - 0x05, 0x00, 0x80, 0x20, 0x3E, 0xE4, 0x22, 0x00} } -}; - -static struct XGI330_CHTVRegDataStruct XGI_CHTVRegOPAL[] = { - /* Index: 000, 0x01, 0x02, 0x04, 0x03, 0x05, 0x06, 0x07, - 0x08, 0x15, 0x1F, 0x0C, 0x0D, 0x0E, 0x0F, 0x10h */ - /* 00 (640x200,640x400) */ - { {0x41, 0x7F, 0xB7, 0x36, 0xAD, 0x50, 0x34, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 01 (640x350) */ - { {0x41, 0x7F, 0xB7, 0x86, 0x85, 0x50, 0x00, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 02 (720x400) */ - { {0x41, 0x7F, 0xB7, 0x36, 0xAD, 0x50, 0x34, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 03 (720x350) */ - { {0x41, 0x7F, 0xB7, 0x86, 0x85, 0x50, 0x00, 0x83, - 0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01} }, - /* 04 (640x480) */ - { {0x61, 0x7F, 0xB7, 0x99, 0x84, 0x35, 0x04, 0x5A, - 0x05, 0x00, 0x80, 0x26, 0x2A, 0x55, 0x5D, 0x00} }, - /* 05 (800x600) ;;1/12/02 */ - { {0xC1, 0x7F, 0xB7, 0x4D, 0x8C, 0x1E, 0x31, 0x5A, - 0x05, 0x00, 0x80, 0x26, 0x78, 0x19, 0x34, 0x00} }, - /* 06 (1024x768) ;;1/12/02 */ - { {0xE4, 0x7F, 0xB7, 0x1E, 0xAF, 0x29, 0x37, 0x5A, - 0x05, 0x00, 0x80, 0x25, 0x8C, 0xB2, 0x2A, 0x00} } -}; -#endif - static unsigned char XGI_CH7017LV1024x768[] = { 0x60, 0x02, 0x00, 0x07, 0x40, 0xED, 0xA3, 0xC8, 0xC7, 0xAC, 0xE0, 0x02}; @@ -1151,16 +958,6 @@ static struct XGI330_LCDDataStruct XGI_ExtLCD1024x768Data[] = { {1, 1, 1344, 806, 1344, 806} }; -/*struct XGI330_LCDDataStruct XGI_St2LCD1024x768Data[] = { - {62, 25, 800, 546, 1344, 806}, - {32, 15, 930, 546, 1344, 806}, - {62, 25, 800, 546, 1344, 806}, - {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 struct XGI330_LCDDataStruct XGI_CetLCD1024x768Data[] = { {1, 1, 1344, 806, 1344, 806}, /* ; 00 (320x200,320x400, 640x200,640x400) */ @@ -1194,19 +991,6 @@ static struct XGI330_LCDDataStruct XGI_ExtLCD1280x1024Data[] = { {1, 1, 1688, 1066, 1688, 1066} }; -#if 0 -static struct XGI330_LCDDataStruct XGI_St2LCD1280x1024Data[] = { - {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} -}; -#endif - static struct XGI330_LCDDataStruct XGI_CetLCD1280x1024Data[] = { {1, 1, 1688, 1066, 1688, 1066}, /* 00 (320x200,320x400, 640x200,640x400) */ @@ -1220,21 +1004,7 @@ static struct XGI330_LCDDataStruct XGI_CetLCD1280x1024Data[] = { {1, 1, 1688, 1066, 1688, 1066} /* 08 (1400x1050x60Hz) */ }; -static struct XGI330_LCDDataStruct XGI_StLCD1400x1050Data[] = { - {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 struct XGI330_LCDDataStruct XGI_ExtLCD1400x1050Data[] = { +static struct XGI330_LCDDataStruct xgifb_lcd_1400x1050[] = { {211, 100, 2100, 408, 1688, 1066}, /* 00 (320x200,320x400, 640x200,640x400) */ {211, 64, 1536, 358, 1688, 1066}, /* 01 (320x350,640x350) */ @@ -1315,19 +1085,6 @@ static struct XGI330_LCDDataStruct XGI_ExtLCD1024x768x75Data[] = { {1, 1, 1312, 800, 1312, 800} /* ; 06 (1024x768x75Hz) */ }; -#if 0 -static struct XGI330_LCDDataStruct XGI_StLCD1024x768x75Data[] = { - {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) */ -}; -#endif - static struct XGI330_LCDDataStruct XGI_CetLCD1024x768x75Data[] = { {1, 1, 1312, 800, 1312, 800}, /* ; 00 (320x200,320x400, 640x200,640x400) */ @@ -1339,19 +1096,7 @@ static struct XGI330_LCDDataStruct XGI_CetLCD1024x768x75Data[] = { {1, 1, 1312, 800, 1312, 800} /* ; 06 (1024x768x75Hz) */ }; -static struct XGI330_LCDDataStruct XGI_ExtLCD1280x1024x75Data[] = { - {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) */ -}; - -static struct XGI330_LCDDataStruct XGI_StLCD1280x1024x75Data[] = { +static struct XGI330_LCDDataStruct xgifb_lcd_1280x1024x75[] = { {211, 60, 1024, 501, 1688, 1066}, /* ; 00 (320x200,320x400, 640x200,640x400) */ {211, 60, 1024, 508, 1688, 1066}, /* ; 01 (320x350,640x350) */ @@ -1487,7 +1232,7 @@ static struct XGI330_LCDDataDesStruct XGI_CetLCDDes1280x1024Data[] = { {9, 1337, 1065, 1024} /* 07 (1280x1024x60Hz) */ }; -static struct XGI330_LCDDataDesStruct XGI_StLCDDLDes1400x1050Data[] = { +static struct XGI330_LCDDataDesStruct 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) */ @@ -1499,31 +1244,7 @@ static struct XGI330_LCDDataDesStruct XGI_StLCDDLDes1400x1050Data[] = { {18, 1464, 0, 1051} /* 08 (1400x1050x60Hz) */ }; -static struct XGI330_LCDDataDesStruct XGI_ExtLCDDLDes1400x1050Data[] = { - {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 struct XGI330_LCDDataDesStruct XGI_StLCDDes1400x1050Data[] = { - {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 struct XGI330_LCDDataDesStruct XGI_ExtLCDDes1400x1050Data[] = { +static struct XGI330_LCDDataDesStruct 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) */ @@ -1624,17 +1345,7 @@ static struct XGI330_LCDDataDesStruct2 XGI_NoScalingDesData[] = { }; /* ;;1024x768x75Hz */ -static struct XGI330_LCDDataDesStruct XGI_ExtLCDDes1024x768x75Data[] = { - {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) */ -}; - -static struct XGI330_LCDDataDesStruct XGI_StLCDDes1024x768x75Data[] = { +static struct XGI330_LCDDataDesStruct 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) */ @@ -1656,18 +1367,7 @@ static struct XGI330_LCDDataDesStruct XGI_CetLCDDes1024x768x75Data[] = { }; /* ;;1280x1024x75Hz */ -static struct XGI330_LCDDataDesStruct XGI_ExtLCDDLDes1280x1024x75Data[] = { - {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) */ -}; - -static struct XGI330_LCDDataDesStruct XGI_StLCDDLDes1280x1024x75Data[] = { +static struct XGI330_LCDDataDesStruct 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) */ @@ -1691,18 +1391,7 @@ static struct XGI330_LCDDataDesStruct XGI_CetLCDDLDes1280x1024x75Data[] = { }; /* ;;1280x1024x75Hz */ -static struct XGI330_LCDDataDesStruct XGI_ExtLCDDes1280x1024x75Data[] = { - {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) */ -}; - -static struct XGI330_LCDDataDesStruct XGI_StLCDDes1280x1024x75Data[] = { +static struct XGI330_LCDDataDesStruct 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) */ @@ -2041,63 +1730,6 @@ static unsigned char XGI330_Ren750pGroup3[] = { 0x18, 0x1D, 0x23, 0x28, 0x4C, 0xAA, 0x01 }; -#if 0 -static struct XGI_PanelDelayTblStruct XGI330_PanelDelayTbl[] = { - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} }, - { {0x00, 0x00} } -}; - -static struct XGI330_LVDSDataStruct XGI330_LVDS320x480Data_1[] = { - {848, 433, 400, 525}, - {848, 389, 400, 525}, - {848, 433, 400, 525}, - {848, 389, 400, 525}, - {848, 518, 400, 525}, - {1056, 628, 400, 525}, - {400, 525, 400, 525}, - {800, 449, 1000, 644}, - {800, 525, 1000, 635} -}; - -static struct XGI330_LVDSDataStruct XGI330_LVDS800x600Data_1[] = { - {848, 433, 1060, 629}, - {848, 389, 1060, 629}, - {848, 433, 1060, 629}, - {848, 389, 1060, 629}, - {848, 518, 1060, 629}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {800, 449, 1000, 644}, - {800, 525, 1000, 635} -}; - -static struct XGI330_LVDSDataStruct XGI330_LVDS800x600Data_2[] = { - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {800, 449, 1000, 644}, - {800, 525, 1000, 635} -}; -#endif - static struct XGI330_LVDSDataStruct XGI_LVDS1024x768Data_1[] = { { 960, 438, 1344, 806}, /* 00 (320x200,320x400,640x200,640x400) */ { 960, 388, 1344, 806}, /* 01 (320x350,640x350) */ @@ -2143,79 +1775,7 @@ static struct XGI330_LVDSDataStruct XGI_LVDS1280x1024Data_2[] = { {800, 449, 1280, 801}, {800, 525, 1280, 813} }; -/* -struct XGI330_LVDSDataStruct XGI_LVDS1280x768Data_1[] = { - {768, 438, 1408, 806}, - {768, 388, 1408, 806}, - {768, 438, 1408, 806}, - {768, 388, 1408, 806}, - {768, 518, 1408, 806}, - {928, 638, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806} -}; - -struct XGI330_LVDSDataStruct XGI_LVDS1280x768Data_2[] = { - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806}, - {1408, 806, 1408, 806} -}; - -struct XGI330_LVDSDataStruct XGI_LVDS1280x768NData_1[] = { - {704, 438, 1344, 806}, - {704, 388, 1344, 806}, - {704, 438, 1344, 806}, - {704, 388, 1344, 806}, - {704, 518, 1344, 806}, - {864, 638, 1344, 806}, - {1088, 806, 1344, 806}, - {1344, 806, 1344, 806}, - {1344, 806, 1344, 806} -}; -struct XGI330_LVDSDataStruct XGI_LVDS1280x768NData_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}, - {1344, 806, 1344, 806}, - {1344, 806, 1344, 806} -}; - -struct XGI330_LVDSDataStruct XGI_LVDS1280x768SData_1[] = { - {1048, 438, 1688, 806}, - {1048, 388, 1688, 806}, - {1148, 438, 1688, 806}, - {1148, 388, 1688, 806}, - {1048, 518, 1688, 806}, - {1208, 638, 1688, 806}, - {1432, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806} -}; - -struct XGI330_LVDSDataStruct XGI_LVDS1280x768SData_2[] = { - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806}, - {1688, 806, 1688, 806} -}; -*/ static struct XGI330_LVDSDataStruct XGI_LVDS1400x1050Data_1[] = { {928, 416, 1688, 1066}, {928, 366, 1688, 1066}, @@ -2502,20 +2062,6 @@ static struct XGI330_LCDDataDesStruct2 XGI_LVDSNoScalingDesDatax75[] = { {0, 1328, 0, 771, 112, 6} /* ; 0A (1280x768x75Hz) */ }; -#if 0 -static struct XGI330_LVDSDataStruct XGI330_LVDS640x480Data_1[] = { - { 800, 449, 800, 449}, - { 800, 449, 800, 449}, - { 800, 449, 800, 449}, - { 800, 449, 800, 449}, - { 800, 525, 800, 525}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628}, - {1056, 628, 1056, 628} -}; -#endif - static struct XGI330_CHTVDataStruct XGI_CHTVUNTSCData[] = { { 840, 600, 840, 600}, { 840, 600, 840, 600}, @@ -2805,68 +2351,6 @@ static struct XGI_LVDSCRT1VDataStruct XGI_LVDSCRT11280x1024_2_Vx75[] = { { {0x28, 0x5A, 0x13, 0x87, 0xFF, 0x29, 0xA9} } /* ; 05 (x1024) */ }; -#if 0 -static struct XGI_LVDSCRT1DataStruct XGI_CHTVCRT1UNTSC[] = { - { {0x64, 0x4f, 0x88, 0x56, 0x9f, 0x56, 0x3e, - 0xe8, 0x84, 0x8f, 0x57, 0x20, 0x00, 0x01, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x56, 0x9f, 0x56, 0x3e, - 0xd0, 0x82, 0x5d, 0x57, 0x00, 0x00, 0x01, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x56, 0x9f, 0x56, 0x3e, - 0xe8, 0x84, 0x8f, 0x57, 0x20, 0x00, 0x01, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x56, 0x9f, 0x56, 0x3e, - 0xd0, 0x82, 0x5d, 0x57, 0x00, 0x00, 0x01, 0x00 } }, - { {0x5d, 0x4f, 0x81, 0x53, 0x9c, 0x56, 0xba, - 0x18, 0x84, 0xdf, 0x57, 0x00, 0x00, 0x01, 0x00 } }, - { {0x80, 0x63, 0x84, 0x6c, 0x17, 0xec, 0xf0, - x90, 0x8c, 0x57, 0xed, 0x20, 0x00, 0x06, 0x01 } } -}; - -static struct XGI_LVDSCRT1DataStruct XGI_CHTVCRT1ONTSC[] = { - { {0x64, 0x4f, 0x88, 0x5a, 0x9f, 0x0b, 0x3e, - 0xc0, 0x84, 0x8f, 0x0c, 0x20, 0x00, 0x01, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x5a, 0x9f, 0x0b, 0x3e, - 0xb0, 0x8d, 0x5d, 0x0c, 0x00, 0x00, 0x01, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x5a, 0x9f, 0x0b, 0x3e, - 0xc0, 0x84, 0x8f, 0x0c, 0x20, 0x00, 0x01, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x5a, 0x9f, 0x0b, 0x3e, - 0xb0, 0x8d, 0x5d, 0x0c, 0x00, 0x00, 0x01, 0x00 } }, - { {0x5d, 0x4f, 0x81, 0x56, 0x9c, 0x0b, 0x3e, - 0xe8, 0x84, 0xdf, 0x0c, 0x00, 0x00, 0x01, 0x00 } }, - { {0x7d, 0x63, 0x81, 0x6a, 0x16, 0xba, 0xf0, - x7f, 0x86, 0x57, 0xbb, 0x00, 0x00, 0x06, 0x01 } } -}; - -static struct XGI_LVDSCRT1DataStruct XGI_CHTVCRT1UPAL[] = { - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xf8, 0x83, 0x8f, 0x70, 0x20, 0x00, 0x05, 0x00 } }, - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xde, 0x81, 0x5d, 0x70, 0x00, 0x00, 0x05, 0x00 } }, - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xf8, 0x83, 0x8f, 0x70, 0x20, 0x00, 0x05, 0x00 } }, - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xde, 0x81, 0x5d, 0x70, 0x00, 0x00, 0x05, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x55, 0x80, 0xec, 0xba, - 0x50, 0x84, 0xdf, 0xed, 0x00, 0x00, 0x05, 0x00 } }, - { {0x70, 0x63, 0x94, 0x68, 0x8d, 0x42, 0xf1, - xc8, 0x8c, 0x57, 0xe9, 0x20, 0x00, 0x05, 0x01 } } -}; - -static struct XGI_LVDSCRT1DataStruct XGI_CHTVCRT1OPAL[] = { - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xf0, 0x83, 0x8f, 0x70, 0x20, 0x00, 0x05, 0x00 } }, - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xde, 0x81, 0x5d, 0x70, 0x00, 0x00, 0x05, 0x00 } }, - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xf0, 0x83, 0x8f, 0x70, 0x20, 0x00, 0x05, 0x00 } }, - { {0x79, 0x4f, 0x9d, 0x5a, 0x90, 0x6f, 0x3e, - 0xde, 0x81, 0x5d, 0x70, 0x00, 0x00, 0x05, 0x00 } }, - { {0x64, 0x4f, 0x88, 0x55, 0x80, 0x6f, 0xba, - 0x20, 0x83, 0xdf, 0x70, 0x00, 0x00, 0x05, 0x00 } }, - { {0x73, 0x63, 0x97, 0x69, 0x8e, 0xec, 0xf0, - x90, 0x8c, 0x57, 0xed, 0x20, 0x00, 0x05, 0x01 } } -}; -#endif - /*add for new UNIVGABIOS*/ static struct XGI330_LCDDataTablStruct XGI_LCDDataTable[] = { {Panel1024x768, 0x0019, 0x0001, 0}, /* XGI_ExtLCD1024x768Data */ @@ -2918,33 +2402,18 @@ static struct XGI330_LCDDataTablStruct XGI_LCDDesDataTable[] = { {0xFF, 0x0000, 0x0000, 0} }; -static struct XGI330_LCDDataTablStruct XGI_EPLLCDCRT1Ptr_H[] = { - {Panel1024x768, 0x0018, 0x0000, 0}, /* XGI_LVDSCRT11024x768_1_H */ - {Panel1024x768, 0x0018, 0x0010, 1}, /* XGI_LVDSCRT11024x768_2_H */ - {Panel1280x1024, 0x0018, 0x0000, 2}, /* XGI_LVDSCRT11280x1024_1_H */ - {Panel1280x1024, 0x0018, 0x0010, 3}, /* XGI_LVDSCRT11280x1024_2_H */ - {Panel1400x1050, 0x0018, 0x0000, 4}, /* XGI_LVDSCRT11400x1050_1_H */ - {Panel1400x1050, 0x0018, 0x0010, 5}, /* XGI_LVDSCRT11400x1050_2_H */ - {Panel1600x1200, 0x0018, 0x0000, 6}, /* XGI_LVDSCRT11600x1200_1_H */ - {Panel1024x768x75, 0x0018, 0x0000, 7}, /* XGI_LVDSCRT11024x768_1_Hx75 */ - {Panel1024x768x75, 0x0018, 0x0010, 8}, /* XGI_LVDSCRT11024x768_2_Hx75 */ - {Panel1280x1024x75, 0x0018, 0x0000, 9}, /*XGI_LVDSCRT11280x1024_1_Hx75*/ - {Panel1280x1024x75, 0x0018, 0x0010, 10},/*XGI_LVDSCRT11280x1024_2_Hx75*/ - {0xFF, 0x0000, 0x0000, 0} -}; - -static struct XGI330_LCDDataTablStruct XGI_EPLLCDCRT1Ptr_V[] = { - {Panel1024x768, 0x0018, 0x0000, 0}, /* XGI_LVDSCRT11024x768_1_V */ - {Panel1024x768, 0x0018, 0x0010, 1}, /* XGI_LVDSCRT11024x768_2_V */ - {Panel1280x1024, 0x0018, 0x0000, 2}, /* XGI_LVDSCRT11280x1024_1_V */ - {Panel1280x1024, 0x0018, 0x0010, 3}, /* XGI_LVDSCRT11280x1024_2_V */ - {Panel1400x1050, 0x0018, 0x0000, 4}, /* XGI_LVDSCRT11400x1050_1_V */ - {Panel1400x1050, 0x0018, 0x0010, 5}, /* XGI_LVDSCRT11400x1050_2_V */ - {Panel1600x1200, 0x0018, 0x0000, 6}, /* XGI_LVDSCRT11600x1200_1_V */ - {Panel1024x768x75, 0x0018, 0x0000, 7}, /* XGI_LVDSCRT11024x768_1_Vx75 */ - {Panel1024x768x75, 0x0018, 0x0010, 8}, /* XGI_LVDSCRT11024x768_2_Vx75 */ - {Panel1280x1024x75, 0x0018, 0x0000, 9}, /*XGI_LVDSCRT11280x1024_1_Vx75*/ - {Panel1280x1024x75, 0x0018, 0x0010, 10},/*XGI_LVDSCRT11280x1024_2_Vx75*/ +static struct XGI330_LCDDataTablStruct xgifb_epllcd_crt1[] = { + {Panel1024x768, 0x0018, 0x0000, 0}, /* XGI_LVDSCRT11024x768_1 */ + {Panel1024x768, 0x0018, 0x0010, 1}, /* XGI_LVDSCRT11024x768_2 */ + {Panel1280x1024, 0x0018, 0x0000, 2}, /* XGI_LVDSCRT11280x1024_1 */ + {Panel1280x1024, 0x0018, 0x0010, 3}, /* XGI_LVDSCRT11280x1024_2 */ + {Panel1400x1050, 0x0018, 0x0000, 4}, /* XGI_LVDSCRT11400x1050_1 */ + {Panel1400x1050, 0x0018, 0x0010, 5}, /* XGI_LVDSCRT11400x1050_2 */ + {Panel1600x1200, 0x0018, 0x0000, 6}, /* XGI_LVDSCRT11600x1200_1 */ + {Panel1024x768x75, 0x0018, 0x0000, 7}, /* XGI_LVDSCRT11024x768_1x75 */ + {Panel1024x768x75, 0x0018, 0x0010, 8}, /* XGI_LVDSCRT11024x768_2x75 */ + {Panel1280x1024x75, 0x0018, 0x0000, 9}, /*XGI_LVDSCRT11280x1024_1x75*/ + {Panel1280x1024x75, 0x0018, 0x0010, 10},/*XGI_LVDSCRT11280x1024_2x75*/ {0xFF, 0x0000, 0x0000, 0} }; @@ -3007,43 +2476,12 @@ static struct XGI330_TVDataTablStruct XGI_TVDataTable[] = { {0xffff, 0x0000, 12} /* END */ }; -#if 0 -static unsigned short TVLenList[] = { - LVDSCRT1Len_H, - LVDSCRT1Len_V, - LVDSDataLen, - 0, - TVDataLen, - 0, - 0, - CHTVRegLen -}; -#endif - -/* Chrontel 7017 TV CRT1 Timing List */ -static struct XGI330_TVDataTablStruct XGI_EPLCHTVCRT1Ptr[] = { - {0x0011, 0x0000, 0}, /* XGI_CHTVCRT1UNTSC */ - {0x0011, 0x0010, 1}, /* XGI_CHTVCRT1ONTSC */ - {0x0011, 0x0001, 2}, /* XGI_CHTVCRT1UPAL */ - {0x0011, 0x0011, 3}, /* XGI_CHTVCRT1OPAL */ - {0xFFFF, 0x0000, 4} -}; - -/* ;;Chrontel 7017 TV Timing List */ -static struct XGI330_TVDataTablStruct XGI_EPLCHTVDataPtr[] = { - {0x0011, 0x0000, 0}, /* XGI_CHTVUNTSCData */ - {0x0011, 0x0010, 1}, /* XGI_CHTVONTSCData */ - {0x0011, 0x0001, 2}, /* XGI_CHTVUPALData */ - {0x0011, 0x0011, 3}, /* XGI_CHTVOPALData */ - {0xFFFF, 0x0000, 4} -}; - -/* ;;Chrontel 7017 TV Reg. List */ -static struct XGI330_TVDataTablStruct XGI_EPLCHTVRegPtr[] = { - {0x0011, 0x0000, 0}, /* XGI_CHTVRegUNTSC */ - {0x0011, 0x0010, 1}, /* XGI_CHTVRegONTSC */ - {0x0011, 0x0001, 2}, /* XGI_CHTVRegUPAL */ - {0x0011, 0x0011, 3}, /* XGI_CHTVRegOPAL */ +/* Chrontel 7017 TV List */ +static struct XGI330_TVDataTablStruct xgifb_chrontel_tv[] = { + {0x0011, 0x0000, 0}, /* UNTSC */ + {0x0011, 0x0010, 1}, /* ONTSC */ + {0x0011, 0x0001, 2}, /* UPAL */ + {0x0011, 0x0011, 3}, /* OPAL */ {0xFFFF, 0x0000, 4} }; @@ -3060,44 +2498,6 @@ static unsigned short LCDLenList[] = { 0 }; -#if 0 -/* 660, Dual link */ -static struct XGI330_LCDCapStruct XGI660_LCDDLCapList[] = { -/* LCDCap1024x768 */ - {Panel1024x768, DefaultLCDCap, 0, 0x014, 0x88, 0x06, VCLK65, - 0x6C, 0xC3, 0x35, 0x62, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x28, 0x10}, -/* LCDCap1280x1024 */ - {Panel1280x1024, LCDDualLink+DefaultLCDCap, StLCDBToA, - 0x053, 0x70, 0x03, VCLK108_2, - 0x70, 0x44, 0xF8, 0x2F, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCap1400x1050 */ - {Panel1400x1050, LCDDualLink+DefaultLCDCap, StLCDBToA, - 0x053, 0x70, 0x03, VCLK108_2, - 0x70, 0x44, 0xF8, 0x2F, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCap1600x1200 */ - {Panel1600x1200, LCDDualLink+DefaultLCDCap, LCDToFull, - 0x053, 0xC0, 0x03, VCLK162, - 0x43, 0x22, 0x70, 0x24, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCap1024x768x75 */ - {Panel1024x768x75, DefaultLCDCap, 0, 0x014, 0x60, 0, VCLK78_75, - 0x2B, 0x61, 0x2B, 0x61, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x28, 0x10}, -/* LCDCap1280x1024x75 */ - {Panel1280x1024x75, LCDDualLink+DefaultLCDCap, StLCDBToA, - 0x053, 0x90, 0x03, VCLK135_5, - 0x54, 0x42, 0x4A, 0x61, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCapDefault */ - {0xFF, DefaultLCDCap, 0, 0x053, 0x88, 0x06, VCLK65, - 0x6C, 0xC3, 0x35, 0x62, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x28, 0x10} -}; -#endif - /* Dual link only */ static struct XGI330_LCDCapStruct XGI_LCDDLCapList[] = { /* LCDCap1024x768 */ @@ -3134,40 +2534,6 @@ static struct XGI330_LCDCapStruct XGI_LCDDLCapList[] = { 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x28, 0x10} }; -#if 0 -static struct XGI330_LCDCapStruct XGI660_LCDCapList[] = { -/* LCDCap1024x768 */ - {Panel1024x768, DefaultLCDCap, 0, 0x014, 0x88, 0x06, VCLK65, - 0x6C, 0xC3, 0x35, 0x62, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x28, 0x10}, -/* LCDCap1280x1024 */ - {Panel1280x1024, DefaultLCDCap, StLCDBToA, 0x053, 0x70, 0x03, VCLK108_2, - 0x70, 0x44, 0xF8, 0x2F, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCap1400x1050 */ - {Panel1400x1050, DefaultLCDCap, StLCDBToA, 0x053, 0x70, 0x03, VCLK108_2, - 0x70, 0x44, 0xF8, 0x2F, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCap1600x1200 */ - {Panel1600x1200, DefaultLCDCap, LCDToFull, 0x053, 0xC0, 0x03, VCLK162, - 0x5A, 0x23, 0x5A, 0x23, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCap1024x768x75 */ - {Panel1024x768x75, DefaultLCDCap, 0, 0x014, 0x60, 0, VCLK78_75, - 0x2B, 0x61, 0x2B, 0x61, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x28, 0x10}, -/* LCDCap1280x1024x75 */ - {Panel1280x1024x75, + DefaultLCDCap, StLCDBToA, - 0x053, 0x90, 0x03, VCLK135_5, - 0x54, 0x42, 0x4A, 0x61, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x30, 0x10}, -/* LCDCapDefault */ - {0xFF, DefaultLCDCap, 0, 0x053, 0x88, 0x06, VCLK65, - 0x6C, 0xC3, 0x35, 0x62, 0x02, 0x14, 0x0A, 0x02, 0x00, - 0x30, 0x10, 0x5A, 0x10, 0x10, 0x0A, 0xC0, 0x28, 0x10} -}; -#endif - static struct XGI330_LCDCapStruct XGI_LCDCapList[] = { /* LCDCap1024x768 */ {Panel1024x768, DefaultLCDCap, 0, 0x012, 0x88, 0x06, VCLK65, @@ -3384,169 +2750,6 @@ static struct XGI_Ext2Struct XGI330_RefIndex[] = { 0x30, 0x47, 0x37, 1024, 768},/* 48 1024x768x160Hz */ }; - -#if 0 -static struct XGI330_VCLKDataStruct XGI330_VCLKData[] = { - {0x1b, 0xe1, 25}, /* 0x0 */ - {0x4e, 0xe4, 28}, /* 0x1 */ - {0x57, 0xe4, 31}, /* 0x2 */ - {0xc3, 0xc8, 36}, /* 0x3 */ - {0x42, 0xe2, 40}, /* 0x4 */ - {0xfe, 0xcd, 43}, /* 0x5 */ - {0x5d, 0xc4, 44}, /* 0x6 */ - {0x52, 0xe2, 49}, /* 0x7 */ - {0x53, 0xe2, 50}, /* 0x8 */ - {0x74, 0x67, 52}, /* 0x9 */ - {0x6d, 0x66, 56}, /* 0xa */ - {0x6c, 0xc3, 65}, /* 0xb */ - {0x46, 0x44, 67}, /* 0xc */ - {0xb1, 0x46, 68}, /* 0xd */ - {0xd3, 0x4a, 72}, /* 0xe */ - {0x29, 0x61, 75}, /* 0xf */ - {0x6e, 0x46, 76}, /* 0x10 */ - {0x2b, 0x61, 78}, /* 0x11 */ - {0x31, 0x42, 79}, /* 0x12 */ - {0xab, 0x44, 83}, /* 0x13 */ - {0x46, 0x25, 84}, /* 0x14 */ - {0x78, 0x29, 86}, /* 0x15 */ - {0x62, 0x44, 94}, /* 0x16 */ - {0x2b, 0x41, 104}, /* 0x17 */ - {0x3a, 0x23, 105}, /* 0x18 */ - {0x70, 0x44, 108}, /* 0x19 */ - {0x3c, 0x23, 109}, /* 0x1a */ - {0x5e, 0x43, 113}, /* 0x1b */ - {0xbc, 0x44, 116}, /* 0x1c */ - {0xe0, 0x46, 132}, /* 0x1d */ - {0x54, 0x42, 135}, /* 0x1e */ - {0xea, 0x2a, 139}, /* 0x1f */ - {0x41, 0x22, 157}, /* 0x20 */ - {0x70, 0x24, 162}, /* 0x21 */ - {0x30, 0x21, 175}, /* 0x22 */ - {0x4e, 0x22, 189}, /* 0x23 */ - {0xde, 0x26, 194}, /* 0x24 */ - {0x62, 0x06, 202}, /* 0x25 */ - {0x3f, 0x03, 229}, /* 0x26 */ - {0xb8, 0x06, 234}, /* 0x27 */ - {0x34, 0x02, 253}, /* 0x28 */ - {0x58, 0x04, 255}, /* 0x29 */ - {0x24, 0x01, 265}, /* 0x2a */ - {0x9b, 0x02, 267}, /* 0x2b */ - {0x70, 0x05, 270}, /* 0x2c */ - {0x25, 0x01, 272}, /* 0x2d */ - {0x9c, 0x02, 277}, /* 0x2e */ - {0x27, 0x01, 286}, /* 0x2f */ - {0x3c, 0x02, 291}, /* 0x30 */ - {0xef, 0x0a, 292}, /* 0x31 */ - {0xf6, 0x0a, 310}, /* 0x32 */ - {0x95, 0x01, 315}, /* 0x33 */ - {0xf0, 0x09, 324}, /* 0x34 */ - {0xfe, 0x0a, 331}, /* 0x35 */ - {0xf3, 0x09, 332}, /* 0x36 */ - {0xea, 0x08, 340}, /* 0x37 */ - {0xe8, 0x07, 376}, /* 0x38 */ - {0xde, 0x06, 389}, /* 0x39 */ - {0x52, 0x2a, 54}, /* 0x3a */ - {0x52, 0x6a, 27}, /* 0x3b */ - {0x62, 0x24, 70}, /* 0x3c */ - {0x62, 0x64, 70}, /* 0x3d */ - {0xa8, 0x4c, 30}, /* 0x3e */ - {0x20, 0x26, 33}, /* 0x3f */ - {0x31, 0xc2, 39}, /* 0x40 */ - {0x60, 0x36, 30}, /* 0x41 */ - {0x40, 0x4A, 28}, /* 0x42 */ - {0x9F, 0x46, 44}, /* 0x43 */ - {0x97, 0x2C, 26}, /* 0x44 */ - {0x44, 0xE4, 25}, /* 0x45 */ - {0x7E, 0x32, 47}, /* 0x46 */ - {0x08, 0x24, 31}, /* 0x47 */ - {0x97, 0x2c, 26}, /* 0x48 */ - {0xCE, 0x3c, 39}, /* 0x49 */ - {0x52, 0x4A, 36}, /* 0x4a */ - {0x2C, 0x61, 95}, /* 0x4b */ - {0x78, 0x27, 108}, /* 0x4c */ - {0x66, 0x43, 123}, /* 0x4d */ - {0x2c, 0x61, 80}, /* 0x4e */ - {0x3b, 0x61, 108} /* 0x4f */ -}; - -static struct XGI_VBVCLKDataStruct XGI330_VBVCLKData[] = { - {0x1b, 0xe1, 25}, /* 0x0 */ - {0x4e, 0xe4, 28}, /* 0x1 */ - {0x57, 0xe4, 31}, /* 0x2 */ - {0xc3, 0xc8, 36}, /* 0x3 */ - {0x42, 0x47, 40}, /* 0x4 */ - {0xfe, 0xcd, 43}, /* 0x5 */ - {0x5d, 0xc4, 44}, /* 0x6 */ - {0x52, 0x47, 49}, /* 0x7 */ - {0x53, 0x47, 50}, /* 0x8 */ - {0x74, 0x67, 52}, /* 0x9 */ - {0x6d, 0x66, 56}, /* 0xa */ - {0x5a, 0x64, 65}, /* 0xb */ - {0x46, 0x44, 67}, /* 0xc */ - {0xb1, 0x46, 68}, /* 0xd */ - {0xd3, 0x4a, 72}, /* 0xe */ - {0x29, 0x61, 75}, /* 0xf */ - {0x6d, 0x46, 75}, /* 0x10 */ - {0x41, 0x43, 78}, /* 0x11 */ - {0x31, 0x42, 79}, /* 0x12 */ - {0xab, 0x44, 83}, /* 0x13 */ - {0x46, 0x25, 84}, /* 0x14 */ - {0x78, 0x29, 86}, /* 0x15 */ - {0x62, 0x44, 94}, /* 0x16 */ - {0x2b, 0x22, 104}, /* 0x17 */ - {0x49, 0x24, 105}, /* 0x18 */ - {0xf8, 0x2f, 108}, /* 0x19 */ - {0x3c, 0x23, 109}, /* 0x1a */ - {0x5e, 0x43, 113}, /* 0x1b */ - {0xbc, 0x44, 116}, /* 0x1c */ - {0xe0, 0x46, 132}, /* 0x1d */ - {0xd4, 0x28, 135}, /* 0x1e */ - {0xea, 0x2a, 139}, /* 0x1f */ - {0x41, 0x22, 157}, /* 0x20 */ - {0x70, 0x24, 162}, /* 0x21 */ - {0x30, 0x21, 175}, /* 0x22 */ - {0x4e, 0x22, 189}, /* 0x23 */ - {0xde, 0x26, 194}, /* 0x24 */ - {0x70, 0x07, 202}, /* 0x25 */ - {0x3f, 0x03, 229}, /* 0x26 */ - {0xb8, 0x06, 234}, /* 0x27 */ - {0x34, 0x02, 253}, /* 0x28 */ - {0x58, 0x04, 255}, /* 0x29 */ - {0x24, 0x01, 265}, /* 0x2a */ - {0x9b, 0x02, 267}, /* 0x2b */ - {0x70, 0x05, 270}, /* 0x2c */ - {0x25, 0x01, 272}, /* 0x2d */ - {0x9c, 0x02, 277}, /* 0x2e */ - {0x27, 0x01, 286}, /* 0x2f */ - {0x3c, 0x02, 291}, /* 0x30 */ - {0xef, 0x0a, 292}, /* 0x31 */ - {0xf6, 0x0a, 310}, /* 0x32 */ - {0x95, 0x01, 315}, /* 0x33 */ - {0xf0, 0x09, 324}, /* 0x34 */ - {0xfe, 0x0a, 331}, /* 0x35 */ - {0xf3, 0x09, 332}, /* 0x36 */ - {0xea, 0x08, 340}, /* 0x37 */ - {0xe8, 0x07, 376}, /* 0x38 */ - {0xde, 0x06, 389}, /* 0x39 */ - {0x52, 0x2a, 54}, /* 0x3a */ - {0x52, 0x6a, 27}, /* 0x3b */ - {0x62, 0x24, 70}, /* 0x3c */ - {0x62, 0x64, 70}, /* 0x3d */ - {0xa8, 0x4c, 30}, /* 0x3e */ - {0x20, 0x26, 33}, /* 0x3f */ - {0x31, 0xc2, 39}, /* 0x40 */ - {0x2e, 0x48, 25}, /* 0x41 */ - {0x24, 0x46, 25}, /* 0x42 */ - {0x26, 0x64, 28}, /* 0x43 */ - {0x37, 0x64, 40}, /* 0x44 */ - {0xa1, 0x42, 108}, /* 0x45 */ - {0x37, 0x61, 100}, /* 0x46 */ - {0x78, 0x27, 108}, /* 0x47 */ - {0x5e, 0x64, 68}, /* 0x48 chiawen for fuj1280x768*/ - {0x70, 0x44, 108}, /* 0x49 chiawen for 1400x1050*/ -}; -#endif - static unsigned char XGI330_ScreenOffset[] = { 0x14, 0x19, 0x20, 0x28, 0x32, 0x40, 0x50, 0x64, 0x78, 0x80, 0x2d, 0x35, @@ -3591,49 +2794,16 @@ static unsigned char XGI330_OutputSelect = 0x40; static unsigned char XGI330_SoftSetting = 0x30; static unsigned char XGI330_SR07 = 0x18; -#if 0 -static unsigned char XGI330New_SR15[8][8] = { - { 0x0, 0x4, 0x60, 0x60}, - { 0xf, 0xf, 0xf, 0xf}, - {0xba, 0xba, 0xba, 0xba}, - {0xa9, 0xa9, 0xac, 0xac}, - {0xa0, 0xa0, 0xa0, 0xa8}, - { 0x0, 0x0, 0x2, 0x2}, - {0x30, 0x30, 0x40, 0x40}, - { 0x0, 0xa5, 0xfb, 0xf6} -}; - -static unsigned char XGI330New_CR40[5][8] = { - {0x77, 0x77, 0x44, 0x44}, - {0x77, 0x77, 0x44, 0x44}, - { 0x0, 0x0, 0x0, 0x0}, - {0x5b, 0x5b, 0xab, 0xab}, - { 0x0, 0x0, 0xf0, 0xf8} -}; -#endif - static unsigned char XGI330_CR49[] = {0xaa, 0x88}; -static unsigned char XGI330_SR1F = 0x0; +static unsigned char XGI330_SR1F; static unsigned char XGI330_SR21 = 0xa3; -#if 0 -static unsigned char XGI330_650_SR21 = 0xa7; -#endif static unsigned char XGI330_SR22 = 0xfb; static unsigned char XGI330_SR23 = 0xf6; static unsigned char XGI330_SR24 = 0xd; -#if 0 -static unsigned char XGI660_SR21 = 0xa3;/* 2003.0312 */ -static unsigned char XGI660_SR22 = 0xf3;/* 2003.0312 */ - -static unsigned char XGI330_LVDS_SR32 = 0x00; /* ynlai for 650 LVDS */ -static unsigned char XGI330_LVDS_SR33 = 0x00; /* chiawen for 650 LVDS */ -static unsigned char XGI330_650_SR31 = 0x40; -static unsigned char XGI330_650_SR33 = 0x04; -#endif -static unsigned char XGI330_CRT2Data_1_2 = 0x0; -static unsigned char XGI330_CRT2Data_4_D = 0x0; -static unsigned char XGI330_CRT2Data_4_E = 0x0; +static unsigned char XGI330_CRT2Data_1_2; +static unsigned char XGI330_CRT2Data_4_D; +static unsigned char XGI330_CRT2Data_4_E; static unsigned char XGI330_CRT2Data_4_10 = 0x80; static unsigned short XGI330_RGBSenseData = 0xd1; static unsigned short XGI330_VideoSenseData = 0xb9; @@ -3641,22 +2811,14 @@ static unsigned short XGI330_YCSenseData = 0xb3; static unsigned short XGI330_RGBSenseData2 = 0x0190; /*301b*/ static unsigned short XGI330_VideoSenseData2 = 0x0110; static unsigned short XGI330_YCSenseData2 = 0x016B; -#if 0 -static unsigned char XGI330_NTSCPhase[] = {0x21, 0xed, 0x8a, 0x8}; -static unsigned char XGI330_PALPhase[] = {0x2a, 0x5, 0xd3, 0x0}; -static unsigned char XGI330_NTSCPhase2[] = {0x21, 0xF0, 0x7B, 0xD6};/*301b*/ -static unsigned char XGI330_PALPhase2[] = {0x2a, 0x09, 0x86, 0xe9}; -static unsigned char XGI330_PALMPhase[] = {0x21, 0xE4, 0x2E, 0x9B}; /*palmn*/ -static unsigned char XGI330_PALNPhase[] = {0x21, 0xF4, 0x3E, 0xBA}; -#endif -static unsigned char XG40_I2CDefinition = 0x00 ; +static unsigned char XG40_I2CDefinition; static unsigned char XG20_CR97 = 0x10 ; -static unsigned char XG21_DVOSetting = 0x00 ; -static unsigned char XG21_CR2E = 0x00 ; -static unsigned char XG21_CR2F = 0x00 ; -static unsigned char XG21_CR46 = 0x00 ; -static unsigned char XG21_CR47 = 0x00 ; +static unsigned char XG21_DVOSetting; +static unsigned char XG21_CR2E; +static unsigned char XG21_CR2F; +static unsigned char XG21_CR46; +static unsigned char XG21_CR47; static unsigned char XG27_CR97 = 0xC1 ; static unsigned char XG27_SR36 = 0x30 ; @@ -3664,68 +2826,10 @@ static unsigned char XG27_CR8F = 0x0C ; static unsigned char XG27_CRD0[] = { 0, 0, 0, 0, 0, 0, 0, 0x82, 0x00, 0x66, 0x01, 0x00 }; -static unsigned char XG27_CRDE[] = {0, 0}; +static unsigned char XG27_CRDE[2]; static unsigned char XG27_SR40 = 0x04 ; static unsigned char XG27_SR41 = 0x00 ; -static unsigned char XGI330_CHTVVCLKUNTSC[] = {0x00}; - -static unsigned char XGI330_CHTVVCLKONTSC[] = {0x00}; - -static unsigned char XGI330_CHTVVCLKUPAL[] = {0x00}; - -static unsigned char XGI330_CHTVVCLKOPAL[] = {0x00}; - -static unsigned char XGI7007_CHTVVCLKUNTSC[] = { - CH7007TVVCLK30_2, - CH7007TVVCLK30_2, - CH7007TVVCLK30_2, - CH7007TVVCLK30_2, - CH7007TVVCLK28_1, - CH7007TVVCLK47_8 -}; - -static unsigned char XGI7007_CHTVVCLKONTSC[] = { - CH7007TVVCLK26_4, - CH7007TVVCLK26_4, - CH7007TVVCLK26_4, - CH7007TVVCLK26_4, - CH7007TVVCLK24_6, - CH7007TVVCLK43_6 -}; - -static unsigned char XGI7007_CHTVVCLKUPAL[] = { - CH7007TVVCLK31_5, - CH7007TVVCLK31_5, - CH7007TVVCLK31_5, - CH7007TVVCLK31_5, - CH7007TVVCLK26_2, - CH7007TVVCLK39 -}; - -static unsigned char XGI7007_CHTVVCLKOPAL[] = { - CH7007TVVCLK31_5, - CH7007TVVCLK31_5, - CH7007TVVCLK31_5, - CH7007TVVCLK31_5, - CH7007TVVCLK26_2, - CH7007TVVCLK36 -}; - -static struct XGI330_VCLKDataStruct XGI_CH7007VCLKData[] = { - {0x60, 0x36, 30}, /* 0 30.2 MHZ */ - {0x40, 0x4A, 28}, /* 1 28.19 MHZ */ - {0x9F, 0x46, 44}, /* 2 43.6 MHZ */ - {0x97, 0x2C, 26}, /* 3 26.4 MHZ */ - {0x44, 0xE4, 25}, /* 4 24.6 MHZ */ - {0x7E, 0x32, 47}, /* 5 47.832 MHZ */ - {0x8A, 0x24, 31}, /* 6 31.5 MHZ */ - {0x97, 0x2C, 26}, /* 7 26.2 MHZ */ - {0xCE, 0x3C, 39}, /* 8 39 MHZ */ - {0x52, 0x4A, 36}, /* 9 36 MHZ */ - {0xFF, 0x00, 0} /* End mark */ -}; - static struct XGI330_VCLKDataStruct XGI_VCLKData[] = { /* SR2B,SR2C,SR2D */ {0x1B, 0xE1, 25}, /* 00 (25.175MHz) */ @@ -3805,21 +2909,6 @@ static struct XGI330_VCLKDataStruct XGI_VCLKData[] = { {0x66, 0x43, 123}, /* 4A (122.61Mhz) */ {0x2C, 0x61, 80}, /* 4B (80.350Mhz) */ {0x3B, 0x61, 108}, /* 4C (107.385Mhz) */ -/* - {0x60, 0x36, 30},// 4D (30.200MHz) }// No use - {0x60, 0x36, 30},// 4E (30.200MHz) }// No use - {0x60, 0x36, 30},// 4F (30.200MHz) }// No use - {0x60, 0x36, 30},// 50 (30.200MHz) }// CHTV - {0x40, 0x4A, 28},// 51 (28.190MHz) - {0x9F, 0x46, 44},// 52 (43.600MHz) - {0x97, 0x2C, 26},// 53 (26.400MHz) - {0x44, 0xE4, 25},// 54 (24.600MHz) - {0x7E, 0x32, 47},// 55 (47.832MHz) - {0x8A, 0x24, 31},// 56 (31.500MHz) - {0x97, 0x2C, 26},// 57 (26.200MHz) - {0xCE, 0x3C, 39},// 58 (39.000MHz) - {0x52, 0x4A, 36},// 59 (36.000MHz) -*/ {0x69, 0x61, 191}, /* 4D (190.96MHz ) */ {0x4F, 0x22, 192}, /* 4E (192.069MHz) */ {0x28, 0x26, 322}, /* 4F (322.273MHz) */ @@ -3912,21 +3001,6 @@ static struct XGI330_VCLKDataStruct XGI_VBVCLKData[] = { {0x66, 0x43, 123}, /* 4A (122.61Mhz) */ {0x2C, 0x61, 80 }, /* 4B (80.350Mhz) */ {0x3B, 0x61, 108}, /* 4C (107.385Mhz) */ -/* - {0x60, 0x36, 30}, // 4D (30.200MHz) }// No use - {0x60, 0x36, 30}, // 4E (30.200MHz) }// No use - {0x60, 0x36, 30}, // 4F (30.200MHz) }// No use - {0x60, 0x36, 30}, // 50 (30.200MHz) }// CHTV - {0x40, 0x4A, 28}, // 51 (28.190MHz) - {0x9F, 0x46, 44}, // 52 (43.600MHz) - {0x97, 0x2C, 26}, // 53 (26.400MHz) - {0x44, 0xE4, 25}, // 54 (24.600MHz) - {0x7E, 0x32, 47}, // 55 (47.832MHz) - {0x8A, 0x24, 31}, // 56 (31.500MHz) - {0x97, 0x2C, 26}, // 57 (26.200MHz) - {0xCE, 0x3C, 39}, // 58 (39.000MHz) - {0x52, 0x4A, 36}, // 59 (36.000MHz) -*/ {0x69, 0x61, 191}, /* 4D (190.96MHz ) */ {0x4F, 0x22, 192}, /* 4E (192.069MHz) */ {0x28, 0x26, 322}, /* 4F (322.273MHz) */ @@ -3941,38 +3015,6 @@ static struct XGI330_VCLKDataStruct XGI_VBVCLKData[] = { {0xFF, 0x00, 0} /* End mark */ }; -#if 0 -static unsigned char XGI660_TVDelayList[] = { - 0x44, /* ; 0 ExtNTSCDelay */ - 0x44, /* ; 1 StNTSCDelay */ - 0x44, /* ; 2 ExtPALDelay */ - 0x44, /* ; 3 StPALDelay */ - 0x44, /* ; 4 ExtHiTVDelay(1080i) */ - 0x44, /* ; 5 StHiTVDelay(1080i) */ - 0x44, /* ; 6 ExtYPbPrDelay(525i) */ - 0x44, /* ; 7 StYPbPrDealy(525i) */ - 0x44, /* ; 8 ExtYPbPrDelay(525p) */ - 0x44, /* ; 9 StYPbPrDealy(525p) */ - 0x44, /* ; A ExtYPbPrDelay(750p) */ - 0x44 /* ; B StYPbPrDealy(750p) */ -}; - -static unsigned char XGI660_TVDelayList2[] = { - 0x44, /* ; 0 ExtNTSCDelay */ - 0x44, /* ; 1 StNTSCDelay */ - 0x44, /* ; 2 ExtPALDelay */ - 0x44, /* ; 3 StPALDelay */ - 0x44, /* ; 4 ExtHiTVDelay */ - 0x44, /* ; 5 StHiTVDelay */ - 0x44, /* ; 6 ExtYPbPrDelay(525i) */ - 0x44, /* ; 7 StYPbPrDealy(525i) */ - 0x44, /* ; 8 ExtYPbPrDelay(525p) */ - 0x44, /* ; 9 StYPbPrDealy(525p) */ - 0x44, /* ; A ExtYPbPrDelay(750p) */ - 0x44 /* ; B StYPbPrDealy(750p) */ -}; -#endif - static unsigned char XGI301TVDelayList[] = { 0x22, /* ; 0 ExtNTSCDelay */ 0x22, /* ; 1 StNTSCDelay */ @@ -4062,7 +3104,7 @@ static unsigned char PALYFilter1[] = { 0xFC, 0xFB, 0x14, 0x2A /* 6 : 800x gra. mode */ }; -static unsigned char PALMYFilter1[] = { +static 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 */ @@ -4073,51 +3115,7 @@ static unsigned char PALMYFilter1[] = { 0xFF, 0xFF, 0xFF, 0xFF /* End of Table */ }; -static unsigned char PALNYFilter1[] = { - 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 unsigned char NTSCYFilter2[] = { - 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 unsigned char PALYFilter2[] = { - 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 unsigned char PALMYFilter2[] = { - 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 unsigned char PALNYFilter2[] = { +static 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 */ @@ -4134,35 +3132,7 @@ static unsigned char XGI_NTSC1024AdjTime[] = { 0x58, 0xe4, 0x73, 0xd0, 0x13 }; -static struct XGI301C_Tap4TimingStruct HiTVTap4Timing[] = { - {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 struct XGI301C_Tap4TimingStruct EnlargeTap4Timing[] = { - {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 struct XGI301C_Tap4TimingStruct NoScaleTap4Timing[] = { +static 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 */ @@ -4212,7 +3182,7 @@ static struct XGI301C_Tap4TimingStruct PALTap4Timing[] = { } }; -static struct XGI301C_Tap4TimingStruct NTSCTap4Timing[] = { +static 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 */ @@ -4248,78 +3218,6 @@ static struct XGI301C_Tap4TimingStruct NTSCTap4Timing[] = { } }; -static struct XGI301C_Tap4TimingStruct YPbPr525pTap4Timing[] = { - {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 struct XGI301C_Tap4TimingStruct YPbPr525iTap4Timing[] = { - {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 struct XGI301C_Tap4TimingStruct YPbPr750pTap4Timing[] = { {0xFFFF, { 0x05, 0x19, 0x05, 0x7D, 0x03, 0x19, 0x06, 0x7E, /* ; C0-C7 */ diff --git a/drivers/staging/xgifb/vb_util.c b/drivers/staging/xgifb/vb_util.c index ea2b795..b5c9989 100644 --- a/drivers/staging/xgifb/vb_util.c +++ b/drivers/staging/xgifb/vb_util.c @@ -1,10 +1,11 @@ +#include <linux/io.h> +#include <linux/types.h> + #include "vb_def.h" #include "vgatypes.h" #include "vb_struct.h" #include "XGIfb.h" -#include <linux/io.h> -#include <linux/types.h> #include "vb_util.h" diff --git a/drivers/staging/xgifb/vgatypes.h b/drivers/staging/xgifb/vgatypes.h index 5aeb3a4..9b939b7 100644 --- a/drivers/staging/xgifb/vgatypes.h +++ b/drivers/staging/xgifb/vgatypes.h @@ -47,18 +47,13 @@ enum XGI_LCD_TYPE { }; #endif -struct XGI_DSReg { - unsigned char jIdx; - unsigned char jVal; -}; - struct xgi_hw_device_info { unsigned long ulExternalChip; /* NO VB or other video bridge*/ /* if ujVBChipID = VB_CHIP_UNKNOWN, */ unsigned char *pjVirtualRomBase; /* ROM image */ - unsigned char *pjVideoMemoryAddress;/* base virtual memory address */ + void __iomem *pjVideoMemoryAddress;/* base virtual memory address */ /* of Linear VGA memory */ unsigned long ulVideoMemorySize; /* size, in bytes, of the @@ -78,10 +73,6 @@ struct xgi_hw_device_info { /* "XGI_VB_CHIP_TYPE" */ unsigned long ulCRT2LCDType; /* defined in the data structure type */ - - unsigned char(*pQueryVGAConfigSpace)(struct xgi_hw_device_info *, - unsigned long, unsigned long, - unsigned long *); }; /* Additional IOCTL for communication xgifb <> X driver */ |