diff options
author | Thomas Winischhofer <thomas@winischhofer.net> | 2005-09-09 13:04:45 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-09 13:58:01 -0700 |
commit | 544393fe584d333480659a4bed30f5295355df11 (patch) | |
tree | 873b30c67cdbb5cb93e6fd816692db312ed6ddd6 /drivers/video/sis/init.c | |
parent | 5c06e2aa6339112befdc87b350b8bf712890d7a7 (diff) |
[PATCH] sisfb update
This lifts sisfb from version 1.7.17 to version 1.8.9. Changes include:
- Added support for XGI V3XT, V5, V8, Z7 chipsets, including POSTing of
all of these chipsets.
- Added support for latest SiS chipsets (761).
- Added support for SiS76x memory "hybrid" mode.
- Added support for new LCD resolutions (eg 1280x854, 856x480).
- Fixed support for 320x240 STN panels (for embedded devices).
- Fixed many HDTV modes (525p, 750p, 1080i).
- Fixed PCI config register reading/writing to use proper kernel
functions for this purpose.
- Fixed PCI ROM handling to use the kernel's proper functions.
- Removed lots of "typedef"s.
- Removed lots of code which was for X.org/XFree86 only.
- Fixed coding style in many places.
- Removed lots of 2.4 cruft.
- Reduced stack size by unifying two previously separate structs into
one.
- Added new hooks for memory allocation (for DRM). Now the driver can
truly handle multiple cards, including memory management.
- Fixed numerous minor bugs.
Signed-off-by: Thomas Winischhofer <thomas@winischhofer.net>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/video/sis/init.c')
-rw-r--r-- | drivers/video/sis/init.c | 5603 |
1 files changed, 2265 insertions, 3338 deletions
diff --git a/drivers/video/sis/init.c b/drivers/video/sis/init.c index ecfd72178db..2ab3868efde 100644 --- a/drivers/video/sis/init.c +++ b/drivers/video/sis/init.c @@ -2,11 +2,12 @@ /* $XdotOrg$ */ /* * Mode initializing code (CRT1 section) for - * for SiS 300/305/540/630/730 and - * SiS 315/550/650/M650/651/661FX/M661FX/740/741(GX)/M741/330/660/M660/760/M760 - * (Universal module for Linux kernel framebuffer and XFree86 4.x) + * for SiS 300/305/540/630/730, + * SiS 315/550/[M]650/651/[M]661[FGM]X/[M]74x[GX]/330/[M]76x[GX], + * XGI Volari V3XT/V5/V8, Z7 + * (Universal module for Linux kernel framebuffer and X.org/XFree86 4.x) * - * Copyright (C) 2001-2004 by Thomas Winischhofer, Vienna, Austria + * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria * * If distributed as part of the Linux kernel, the following license terms * apply: @@ -53,17 +54,12 @@ * * Formerly based on non-functional code-fragements for 300 series by SiS, Inc. * Used by permission. - * - * TW says: This code looks awful, I know. But please don't do anything about - * this otherwise debugging will be hell. - * The code is extremely fragile as regards the different chipsets, different - * video bridges and combinations thereof. If anything is changed, extreme - * care has to be taken that that change doesn't break it for other chipsets, - * bridges or combinations thereof. - * All comments in this file are by me, regardless if they are marked TW or not. - * */ - + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include "init.h" #ifdef SIS300 @@ -84,24 +80,13 @@ #if defined(SIS300) || defined(SIS315H) static void -InitCommonPointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) +InitCommonPointer(struct SiS_Private *SiS_Pr) { + SiS_Pr->SiS_SModeIDTable = SiS_SModeIDTable; SiS_Pr->SiS_StResInfo = SiS_StResInfo; SiS_Pr->SiS_ModeResInfo = SiS_ModeResInfo; SiS_Pr->SiS_StandTable = SiS_StandTable; - SiS_Pr->SiS_NTSCPhase = SiS_NTSCPhase; - SiS_Pr->SiS_PALPhase = SiS_PALPhase; - SiS_Pr->SiS_NTSCPhase2 = SiS_NTSCPhase2; - SiS_Pr->SiS_PALPhase2 = SiS_PALPhase2; - SiS_Pr->SiS_PALMPhase = SiS_PALMPhase; - SiS_Pr->SiS_PALNPhase = SiS_PALNPhase; - SiS_Pr->SiS_PALMPhase2 = SiS_PALMPhase2; - SiS_Pr->SiS_PALNPhase2 = SiS_PALNPhase2; - SiS_Pr->SiS_SpecialPhase = SiS_SpecialPhase; - SiS_Pr->SiS_SpecialPhaseM = SiS_SpecialPhaseM; - SiS_Pr->SiS_SpecialPhaseJ = SiS_SpecialPhaseJ; - SiS_Pr->SiS_NTSCTiming = SiS_NTSCTiming; SiS_Pr->SiS_PALTiming = SiS_PALTiming; SiS_Pr->SiS_HiTVSt1Timing = SiS_HiTVSt1Timing; @@ -137,6 +122,7 @@ InitCommonPointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) SiS_Pr->SiS_ExtLCD1280x768_2Data = SiS_ExtLCD1280x768_2Data; SiS_Pr->SiS_LCD1280x800Data = SiS_LCD1280x800Data; SiS_Pr->SiS_LCD1280x800_2Data = SiS_LCD1280x800_2Data; + SiS_Pr->SiS_LCD1280x854Data = SiS_LCD1280x854Data; SiS_Pr->SiS_LCD1280x960Data = SiS_LCD1280x960Data; SiS_Pr->SiS_StLCD1400x1050Data = SiS_StLCD1400x1050Data; SiS_Pr->SiS_ExtLCD1400x1050Data = SiS_ExtLCD1400x1050Data; @@ -145,67 +131,30 @@ InitCommonPointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) SiS_Pr->SiS_ExtLCD1600x1200Data = SiS_ExtLCD1600x1200Data; SiS_Pr->SiS_NoScaleData = SiS_NoScaleData; - SiS_Pr->SiS_LVDS320x480Data_1 = SiS_LVDS320x480Data_1; + SiS_Pr->SiS_LVDS320x240Data_1 = SiS_LVDS320x240Data_1; + SiS_Pr->SiS_LVDS320x240Data_2 = SiS_LVDS320x240Data_2; + SiS_Pr->SiS_LVDS640x480Data_1 = SiS_LVDS640x480Data_1; SiS_Pr->SiS_LVDS800x600Data_1 = SiS_LVDS800x600Data_1; - SiS_Pr->SiS_LVDS800x600Data_2 = SiS_LVDS800x600Data_2; - SiS_Pr->SiS_LVDS1024x768Data_1 = SiS_LVDS1024x768Data_1; - SiS_Pr->SiS_LVDS1024x768Data_2 = SiS_LVDS1024x768Data_2; - SiS_Pr->SiS_LVDS1280x1024Data_1 = SiS_LVDS1280x1024Data_1; - SiS_Pr->SiS_LVDS1280x1024Data_2 = SiS_LVDS1280x1024Data_2; - SiS_Pr->SiS_LVDS1400x1050Data_1 = SiS_LVDS1400x1050Data_1; - SiS_Pr->SiS_LVDS1400x1050Data_2 = SiS_LVDS1400x1050Data_2; - SiS_Pr->SiS_LVDS1600x1200Data_1 = SiS_LVDS1600x1200Data_1; - SiS_Pr->SiS_LVDS1600x1200Data_2 = SiS_LVDS1600x1200Data_2; - SiS_Pr->SiS_LVDS1280x768Data_1 = SiS_LVDS1280x768Data_1; - SiS_Pr->SiS_LVDS1280x768Data_2 = SiS_LVDS1280x768Data_2; SiS_Pr->SiS_LVDS1024x600Data_1 = SiS_LVDS1024x600Data_1; - SiS_Pr->SiS_LVDS1024x600Data_2 = SiS_LVDS1024x600Data_2; - SiS_Pr->SiS_LVDS1152x768Data_1 = SiS_LVDS1152x768Data_1; - SiS_Pr->SiS_LVDS1152x768Data_2 = SiS_LVDS1152x768Data_2; - SiS_Pr->SiS_LVDSXXXxXXXData_1 = SiS_LVDSXXXxXXXData_1; - SiS_Pr->SiS_LVDS1280x960Data_1 = SiS_LVDS1280x960Data_1; - SiS_Pr->SiS_LVDS1280x960Data_2 = SiS_LVDS1280x960Data_2; - SiS_Pr->SiS_LVDS640x480Data_1 = SiS_LVDS640x480Data_1; - SiS_Pr->SiS_LVDS1280x960Data_1 = SiS_LVDS1280x1024Data_1; - SiS_Pr->SiS_LVDS1280x960Data_2 = SiS_LVDS1280x1024Data_2; - SiS_Pr->SiS_LVDS640x480Data_1 = SiS_LVDS640x480Data_1; - SiS_Pr->SiS_LVDS640x480Data_2 = SiS_LVDS640x480Data_2; - - SiS_Pr->SiS_LVDS848x480Data_1 = SiS_LVDS848x480Data_1; - SiS_Pr->SiS_LVDS848x480Data_2 = SiS_LVDS848x480Data_2; - SiS_Pr->SiS_LVDSBARCO1024Data_1 = SiS_LVDSBARCO1024Data_1; - SiS_Pr->SiS_LVDSBARCO1024Data_2 = SiS_LVDSBARCO1024Data_2; - SiS_Pr->SiS_LVDSBARCO1366Data_1 = SiS_LVDSBARCO1366Data_1; - SiS_Pr->SiS_LVDSBARCO1366Data_2 = SiS_LVDSBARCO1366Data_2; + SiS_Pr->SiS_LVDS1024x768Data_1 = SiS_LVDS1024x768Data_1; - SiS_Pr->SiS_LVDSCRT11280x768_1 = SiS_LVDSCRT11280x768_1; + SiS_Pr->SiS_LVDSCRT1320x240_1 = SiS_LVDSCRT1320x240_1; + SiS_Pr->SiS_LVDSCRT1320x240_2 = SiS_LVDSCRT1320x240_2; + SiS_Pr->SiS_LVDSCRT1320x240_2_H = SiS_LVDSCRT1320x240_2_H; + SiS_Pr->SiS_LVDSCRT1320x240_3 = SiS_LVDSCRT1320x240_3; + SiS_Pr->SiS_LVDSCRT1320x240_3_H = SiS_LVDSCRT1320x240_3_H; + SiS_Pr->SiS_LVDSCRT1640x480_1 = SiS_LVDSCRT1640x480_1; + SiS_Pr->SiS_LVDSCRT1640x480_1_H = SiS_LVDSCRT1640x480_1_H; +#if 0 SiS_Pr->SiS_LVDSCRT11024x600_1 = SiS_LVDSCRT11024x600_1; - SiS_Pr->SiS_LVDSCRT11152x768_1 = SiS_LVDSCRT11152x768_1; - SiS_Pr->SiS_LVDSCRT11280x768_1_H = SiS_LVDSCRT11280x768_1_H; SiS_Pr->SiS_LVDSCRT11024x600_1_H = SiS_LVDSCRT11024x600_1_H; - SiS_Pr->SiS_LVDSCRT11152x768_1_H = SiS_LVDSCRT11152x768_1_H; - SiS_Pr->SiS_LVDSCRT11280x768_2 = SiS_LVDSCRT11280x768_2; SiS_Pr->SiS_LVDSCRT11024x600_2 = SiS_LVDSCRT11024x600_2; - SiS_Pr->SiS_LVDSCRT11152x768_2 = SiS_LVDSCRT11152x768_2; - SiS_Pr->SiS_LVDSCRT11280x768_2_H = SiS_LVDSCRT11280x768_2_H; SiS_Pr->SiS_LVDSCRT11024x600_2_H = SiS_LVDSCRT11024x600_2_H; - SiS_Pr->SiS_LVDSCRT11152x768_2_H = SiS_LVDSCRT11152x768_2_H; - SiS_Pr->SiS_LVDSCRT1320x480_1 = SiS_LVDSCRT1320x480_1; - SiS_Pr->SiS_LVDSCRT1640x480_1 = SiS_LVDSCRT1640x480_1; - SiS_Pr->SiS_LVDSCRT1640x480_1_H = SiS_LVDSCRT1640x480_1_H; - SiS_Pr->SiS_LVDSCRT1640x480_2 = SiS_LVDSCRT1640x480_2; - SiS_Pr->SiS_LVDSCRT1640x480_2_H = SiS_LVDSCRT1640x480_2_H; - SiS_Pr->SiS_LVDSCRT1640x480_3 = SiS_LVDSCRT1640x480_3; - SiS_Pr->SiS_LVDSCRT1640x480_3_H = SiS_LVDSCRT1640x480_3_H; +#endif SiS_Pr->SiS_CHTVUNTSCData = SiS_CHTVUNTSCData; SiS_Pr->SiS_CHTVONTSCData = SiS_CHTVONTSCData; - SiS_Pr->SiS_CHTVUNTSCDesData = SiS_CHTVUNTSCDesData; - SiS_Pr->SiS_CHTVONTSCDesData = SiS_CHTVONTSCDesData; - SiS_Pr->SiS_CHTVUPALDesData = SiS_CHTVUPALDesData; - SiS_Pr->SiS_CHTVOPALDesData = SiS_CHTVOPALDesData; - SiS_Pr->SiS_PanelMinLVDS = Panel_800x600; /* lowest value LVDS/LCDA */ SiS_Pr->SiS_PanelMin301 = Panel_1024x768; /* lowest value 301 */ } @@ -213,50 +162,24 @@ InitCommonPointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) #ifdef SIS300 static void -InitTo300Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) +InitTo300Pointer(struct SiS_Private *SiS_Pr) { - InitCommonPointer(SiS_Pr, HwInfo); + InitCommonPointer(SiS_Pr); - SiS_Pr->SiS_SModeIDTable = SiS300_SModeIDTable; SiS_Pr->SiS_VBModeIDTable = SiS300_VBModeIDTable; SiS_Pr->SiS_EModeIDTable = SiS300_EModeIDTable; SiS_Pr->SiS_RefIndex = SiS300_RefIndex; SiS_Pr->SiS_CRT1Table = SiS300_CRT1Table; - if(HwInfo->jChipType == SIS_300) { - SiS_Pr->SiS_MCLKData_0 = SiS300_MCLKData_300; /* 300 */ + if(SiS_Pr->ChipType == SIS_300) { + SiS_Pr->SiS_MCLKData_0 = SiS300_MCLKData_300; /* 300 */ } else { - SiS_Pr->SiS_MCLKData_0 = SiS300_MCLKData_630; /* 630, 730 */ + SiS_Pr->SiS_MCLKData_0 = SiS300_MCLKData_630; /* 630, 730 */ } SiS_Pr->SiS_VCLKData = SiS300_VCLKData; - SiS_Pr->SiS_VBVCLKData = (SiS_VBVCLKDataStruct *)SiS300_VCLKData; + SiS_Pr->SiS_VBVCLKData = (struct SiS_VBVCLKData *)SiS300_VCLKData; SiS_Pr->SiS_SR15 = SiS300_SR15; -#ifdef LINUX_KERNEL - SiS_Pr->pSiS_SR07 = &SiS300_SR07; - SiS_Pr->SiS_CR40 = SiS300_CR40; - SiS_Pr->SiS_CR49 = SiS300_CR49; - SiS_Pr->pSiS_SR1F = &SiS300_SR1F; - SiS_Pr->pSiS_SR21 = &SiS300_SR21; - SiS_Pr->pSiS_SR22 = &SiS300_SR22; - SiS_Pr->pSiS_SR23 = &SiS300_SR23; - SiS_Pr->pSiS_SR24 = &SiS300_SR24; - SiS_Pr->SiS_SR25 = SiS300_SR25; - SiS_Pr->pSiS_SR31 = &SiS300_SR31; - SiS_Pr->pSiS_SR32 = &SiS300_SR32; - SiS_Pr->pSiS_SR33 = &SiS300_SR33; - SiS_Pr->pSiS_CRT2Data_1_2 = &SiS300_CRT2Data_1_2; - SiS_Pr->pSiS_CRT2Data_4_D = &SiS300_CRT2Data_4_D; - SiS_Pr->pSiS_CRT2Data_4_E = &SiS300_CRT2Data_4_E; - SiS_Pr->pSiS_CRT2Data_4_10 = &SiS300_CRT2Data_4_10; - SiS_Pr->pSiS_RGBSenseData = &SiS300_RGBSenseData; - SiS_Pr->pSiS_VideoSenseData = &SiS300_VideoSenseData; - SiS_Pr->pSiS_YCSenseData = &SiS300_YCSenseData; - SiS_Pr->pSiS_RGBSenseData2 = &SiS300_RGBSenseData2; - SiS_Pr->pSiS_VideoSenseData2 = &SiS300_VideoSenseData2; - SiS_Pr->pSiS_YCSenseData2 = &SiS300_YCSenseData2; -#endif - SiS_Pr->SiS_PanelDelayTbl = SiS300_PanelDelayTbl; SiS_Pr->SiS_PanelDelayTblLVDS = SiS300_PanelDelayTbl; @@ -266,11 +189,8 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) SiS_Pr->SiS_St2LCD1280x1024Data = SiS300_St2LCD1280x1024Data; SiS_Pr->SiS_CRT2Part2_1024x768_1 = SiS300_CRT2Part2_1024x768_1; - SiS_Pr->SiS_CRT2Part2_1280x1024_1 = SiS300_CRT2Part2_1280x1024_1; SiS_Pr->SiS_CRT2Part2_1024x768_2 = SiS300_CRT2Part2_1024x768_2; - SiS_Pr->SiS_CRT2Part2_1280x1024_2 = SiS300_CRT2Part2_1280x1024_2; SiS_Pr->SiS_CRT2Part2_1024x768_3 = SiS300_CRT2Part2_1024x768_3; - SiS_Pr->SiS_CRT2Part2_1280x1024_3 = SiS300_CRT2Part2_1280x1024_3; SiS_Pr->SiS_CHTVUPALData = SiS300_CHTVUPALData; SiS_Pr->SiS_CHTVOPALData = SiS300_CHTVOPALData; @@ -280,64 +200,16 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) SiS_Pr->SiS_CHTVOPALNData = SiS300_CHTVOPALData; /* not supported on 300 series */ SiS_Pr->SiS_CHTVSOPALData = SiS300_CHTVSOPALData; - SiS_Pr->SiS_PanelType00_1 = SiS300_PanelType00_1; - SiS_Pr->SiS_PanelType01_1 = SiS300_PanelType01_1; - SiS_Pr->SiS_PanelType02_1 = SiS300_PanelType02_1; - SiS_Pr->SiS_PanelType03_1 = SiS300_PanelType03_1; - SiS_Pr->SiS_PanelType04_1 = SiS300_PanelType04_1; - SiS_Pr->SiS_PanelType05_1 = SiS300_PanelType05_1; - SiS_Pr->SiS_PanelType06_1 = SiS300_PanelType06_1; - SiS_Pr->SiS_PanelType07_1 = SiS300_PanelType07_1; - SiS_Pr->SiS_PanelType08_1 = SiS300_PanelType08_1; - SiS_Pr->SiS_PanelType09_1 = SiS300_PanelType09_1; - SiS_Pr->SiS_PanelType0a_1 = SiS300_PanelType0a_1; - SiS_Pr->SiS_PanelType0b_1 = SiS300_PanelType0b_1; - SiS_Pr->SiS_PanelType0c_1 = SiS300_PanelType0c_1; - SiS_Pr->SiS_PanelType0d_1 = SiS300_PanelType0d_1; - SiS_Pr->SiS_PanelType0e_1 = SiS300_PanelType0e_1; - SiS_Pr->SiS_PanelType0f_1 = SiS300_PanelType0f_1; - SiS_Pr->SiS_PanelType00_2 = SiS300_PanelType00_2; - SiS_Pr->SiS_PanelType01_2 = SiS300_PanelType01_2; - SiS_Pr->SiS_PanelType02_2 = SiS300_PanelType02_2; - SiS_Pr->SiS_PanelType03_2 = SiS300_PanelType03_2; - SiS_Pr->SiS_PanelType04_2 = SiS300_PanelType04_2; - SiS_Pr->SiS_PanelType05_2 = SiS300_PanelType05_2; - SiS_Pr->SiS_PanelType06_2 = SiS300_PanelType06_2; - SiS_Pr->SiS_PanelType07_2 = SiS300_PanelType07_2; - SiS_Pr->SiS_PanelType08_2 = SiS300_PanelType08_2; - SiS_Pr->SiS_PanelType09_2 = SiS300_PanelType09_2; - SiS_Pr->SiS_PanelType0a_2 = SiS300_PanelType0a_2; - SiS_Pr->SiS_PanelType0b_2 = SiS300_PanelType0b_2; - SiS_Pr->SiS_PanelType0c_2 = SiS300_PanelType0c_2; - SiS_Pr->SiS_PanelType0d_2 = SiS300_PanelType0d_2; - SiS_Pr->SiS_PanelType0e_2 = SiS300_PanelType0e_2; - SiS_Pr->SiS_PanelType0f_2 = SiS300_PanelType0f_2; - SiS_Pr->SiS_PanelTypeNS_1 = SiS300_PanelTypeNS_1; - SiS_Pr->SiS_PanelTypeNS_2 = SiS300_PanelTypeNS_2; - - if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) { - SiS_Pr->SiS_PanelType04_1 = SiS300_PanelType04_1a; - SiS_Pr->SiS_PanelType04_2 = SiS300_PanelType04_2a; - } - if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) { - SiS_Pr->SiS_PanelType04_1 = SiS300_PanelType04_1b; - SiS_Pr->SiS_PanelType04_2 = SiS300_PanelType04_2b; - } - - SiS_Pr->SiS_LVDSCRT1800x600_1 = SiS300_LVDSCRT1800x600_1; - SiS_Pr->SiS_LVDSCRT1800x600_1_H = SiS300_LVDSCRT1800x600_1_H; - SiS_Pr->SiS_LVDSCRT1800x600_2 = SiS300_LVDSCRT1800x600_2; - SiS_Pr->SiS_LVDSCRT1800x600_2_H = SiS300_LVDSCRT1800x600_2_H; - SiS_Pr->SiS_LVDSCRT11024x768_1 = SiS300_LVDSCRT11024x768_1; - SiS_Pr->SiS_LVDSCRT11024x768_1_H = SiS300_LVDSCRT11024x768_1_H; - SiS_Pr->SiS_LVDSCRT11024x768_2 = SiS300_LVDSCRT11024x768_2; - SiS_Pr->SiS_LVDSCRT11024x768_2_H = SiS300_LVDSCRT11024x768_2_H; - SiS_Pr->SiS_LVDSCRT11280x1024_1 = SiS300_LVDSCRT11280x1024_1; - SiS_Pr->SiS_LVDSCRT11280x1024_1_H = SiS300_LVDSCRT11280x1024_1_H; - SiS_Pr->SiS_LVDSCRT11280x1024_2 = SiS300_LVDSCRT11280x1024_2; - SiS_Pr->SiS_LVDSCRT11280x1024_2_H = SiS300_LVDSCRT11280x1024_2_H; - SiS_Pr->SiS_LVDSCRT1XXXxXXX_1 = SiS300_LVDSCRT1XXXxXXX_1; - SiS_Pr->SiS_LVDSCRT1XXXxXXX_1_H = SiS300_LVDSCRT1XXXxXXX_1_H; + SiS_Pr->SiS_LVDS848x480Data_1 = SiS300_LVDS848x480Data_1; + SiS_Pr->SiS_LVDS848x480Data_2 = SiS300_LVDS848x480Data_2; + SiS_Pr->SiS_LVDSBARCO1024Data_1 = SiS300_LVDSBARCO1024Data_1; + SiS_Pr->SiS_LVDSBARCO1366Data_1 = SiS300_LVDSBARCO1366Data_1; + SiS_Pr->SiS_LVDSBARCO1366Data_2 = SiS300_LVDSBARCO1366Data_2; + + SiS_Pr->SiS_PanelType04_1a = SiS300_PanelType04_1a; + SiS_Pr->SiS_PanelType04_2a = SiS300_PanelType04_2a; + SiS_Pr->SiS_PanelType04_1b = SiS300_PanelType04_1b; + SiS_Pr->SiS_PanelType04_2b = SiS300_PanelType04_2b; SiS_Pr->SiS_CHTVCRT1UNTSC = SiS300_CHTVCRT1UNTSC; SiS_Pr->SiS_CHTVCRT1ONTSC = SiS300_CHTVCRT1ONTSC; @@ -367,64 +239,38 @@ InitTo300Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) #ifdef SIS315H static void -InitTo310Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) +InitTo310Pointer(struct SiS_Private *SiS_Pr) { - InitCommonPointer(SiS_Pr, HwInfo); + InitCommonPointer(SiS_Pr); - SiS_Pr->SiS_SModeIDTable = SiS310_SModeIDTable; SiS_Pr->SiS_EModeIDTable = SiS310_EModeIDTable; - SiS_Pr->SiS_RefIndex = (SiS_Ext2Struct *)SiS310_RefIndex; + SiS_Pr->SiS_RefIndex = SiS310_RefIndex; SiS_Pr->SiS_CRT1Table = SiS310_CRT1Table; - if(HwInfo->jChipType >= SIS_340) { - SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_340; /* 340 */ - } else if(HwInfo->jChipType >= SIS_761) { + if(SiS_Pr->ChipType >= SIS_340) { + SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_340; /* 340 + XGI */ + } else if(SiS_Pr->ChipType >= SIS_761) { SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_761; /* 761 - preliminary */ - } else if(HwInfo->jChipType >= SIS_760) { + } else if(SiS_Pr->ChipType >= SIS_760) { SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_760; /* 760 */ - } else if(HwInfo->jChipType >= SIS_661) { + } else if(SiS_Pr->ChipType >= SIS_661) { SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_660; /* 661/741 */ - } else if(HwInfo->jChipType == SIS_330) { + } else if(SiS_Pr->ChipType == SIS_330) { SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_330; /* 330 */ - } else if(HwInfo->jChipType > SIS_315PRO) { + } else if(SiS_Pr->ChipType > SIS_315PRO) { SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_650; /* 550, 650, 740 */ } else { SiS_Pr->SiS_MCLKData_0 = SiS310_MCLKData_0_315; /* 315 */ } - if(HwInfo->jChipType >= SIS_340) { - SiS_Pr->SiS_MCLKData_1 = SiS310_MCLKData_1_340; + if(SiS_Pr->ChipType >= SIS_340) { + SiS_Pr->SiS_MCLKData_1 = SiS310_MCLKData_1_340; } else { - SiS_Pr->SiS_MCLKData_1 = SiS310_MCLKData_1; + SiS_Pr->SiS_MCLKData_1 = SiS310_MCLKData_1; } SiS_Pr->SiS_VCLKData = SiS310_VCLKData; SiS_Pr->SiS_VBVCLKData = SiS310_VBVCLKData; SiS_Pr->SiS_SR15 = SiS310_SR15; -#ifdef LINUX_KERNEL - SiS_Pr->pSiS_SR07 = &SiS310_SR07; - SiS_Pr->SiS_CR40 = SiS310_CR40; - SiS_Pr->SiS_CR49 = SiS310_CR49; - SiS_Pr->pSiS_SR1F = &SiS310_SR1F; - SiS_Pr->pSiS_SR21 = &SiS310_SR21; - SiS_Pr->pSiS_SR22 = &SiS310_SR22; - SiS_Pr->pSiS_SR23 = &SiS310_SR23; - SiS_Pr->pSiS_SR24 = &SiS310_SR24; - SiS_Pr->SiS_SR25 = SiS310_SR25; - SiS_Pr->pSiS_SR31 = &SiS310_SR31; - SiS_Pr->pSiS_SR32 = &SiS310_SR32; - SiS_Pr->pSiS_SR33 = &SiS310_SR33; - SiS_Pr->pSiS_CRT2Data_1_2 = &SiS310_CRT2Data_1_2; - SiS_Pr->pSiS_CRT2Data_4_D = &SiS310_CRT2Data_4_D; - SiS_Pr->pSiS_CRT2Data_4_E = &SiS310_CRT2Data_4_E; - SiS_Pr->pSiS_CRT2Data_4_10 = &SiS310_CRT2Data_4_10; - SiS_Pr->pSiS_RGBSenseData = &SiS310_RGBSenseData; - SiS_Pr->pSiS_VideoSenseData = &SiS310_VideoSenseData; - SiS_Pr->pSiS_YCSenseData = &SiS310_YCSenseData; - SiS_Pr->pSiS_RGBSenseData2 = &SiS310_RGBSenseData2; - SiS_Pr->pSiS_VideoSenseData2 = &SiS310_VideoSenseData2; - SiS_Pr->pSiS_YCSenseData2 = &SiS310_YCSenseData2; -#endif - SiS_Pr->SiS_PanelDelayTbl = SiS310_PanelDelayTbl; SiS_Pr->SiS_PanelDelayTblLVDS = SiS310_PanelDelayTblLVDS; @@ -435,41 +281,6 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) SiS_Pr->SiS_CRT2Part2_1024x768_1 = SiS310_CRT2Part2_1024x768_1; - SiS_Pr->SiS_PanelType00_1 = SiS310_PanelType00_1; - SiS_Pr->SiS_PanelType01_1 = SiS310_PanelType01_1; - SiS_Pr->SiS_PanelType02_1 = SiS310_PanelType02_1; - SiS_Pr->SiS_PanelType03_1 = SiS310_PanelType03_1; - SiS_Pr->SiS_PanelType04_1 = SiS310_PanelType04_1; - SiS_Pr->SiS_PanelType05_1 = SiS310_PanelType05_1; - SiS_Pr->SiS_PanelType06_1 = SiS310_PanelType06_1; - SiS_Pr->SiS_PanelType07_1 = SiS310_PanelType07_1; - SiS_Pr->SiS_PanelType08_1 = SiS310_PanelType08_1; - SiS_Pr->SiS_PanelType09_1 = SiS310_PanelType09_1; - SiS_Pr->SiS_PanelType0a_1 = SiS310_PanelType0a_1; - SiS_Pr->SiS_PanelType0b_1 = SiS310_PanelType0b_1; - SiS_Pr->SiS_PanelType0c_1 = SiS310_PanelType0c_1; - SiS_Pr->SiS_PanelType0d_1 = SiS310_PanelType0d_1; - SiS_Pr->SiS_PanelType0e_1 = SiS310_PanelType0e_1; - SiS_Pr->SiS_PanelType0f_1 = SiS310_PanelType0f_1; - SiS_Pr->SiS_PanelType00_2 = SiS310_PanelType00_2; - SiS_Pr->SiS_PanelType01_2 = SiS310_PanelType01_2; - SiS_Pr->SiS_PanelType02_2 = SiS310_PanelType02_2; - SiS_Pr->SiS_PanelType03_2 = SiS310_PanelType03_2; - SiS_Pr->SiS_PanelType04_2 = SiS310_PanelType04_2; - SiS_Pr->SiS_PanelType05_2 = SiS310_PanelType05_2; - SiS_Pr->SiS_PanelType06_2 = SiS310_PanelType06_2; - SiS_Pr->SiS_PanelType07_2 = SiS310_PanelType07_2; - SiS_Pr->SiS_PanelType08_2 = SiS310_PanelType08_2; - SiS_Pr->SiS_PanelType09_2 = SiS310_PanelType09_2; - SiS_Pr->SiS_PanelType0a_2 = SiS310_PanelType0a_2; - SiS_Pr->SiS_PanelType0b_2 = SiS310_PanelType0b_2; - SiS_Pr->SiS_PanelType0c_2 = SiS310_PanelType0c_2; - SiS_Pr->SiS_PanelType0d_2 = SiS310_PanelType0d_2; - SiS_Pr->SiS_PanelType0e_2 = SiS310_PanelType0e_2; - SiS_Pr->SiS_PanelType0f_2 = SiS310_PanelType0f_2; - SiS_Pr->SiS_PanelTypeNS_1 = SiS310_PanelTypeNS_1; - SiS_Pr->SiS_PanelTypeNS_2 = SiS310_PanelTypeNS_2; - SiS_Pr->SiS_CHTVUPALData = SiS310_CHTVUPALData; SiS_Pr->SiS_CHTVOPALData = SiS310_CHTVOPALData; SiS_Pr->SiS_CHTVUPALMData = SiS310_CHTVUPALMData; @@ -478,33 +289,11 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) SiS_Pr->SiS_CHTVOPALNData = SiS310_CHTVOPALNData; SiS_Pr->SiS_CHTVSOPALData = SiS310_CHTVSOPALData; - SiS_Pr->SiS_LVDSCRT1800x600_1 = SiS310_LVDSCRT1800x600_1; - SiS_Pr->SiS_LVDSCRT11024x768_1 = SiS310_LVDSCRT11024x768_1; - SiS_Pr->SiS_LVDSCRT11280x1024_1 = SiS310_LVDSCRT11280x1024_1; - SiS_Pr->SiS_LVDSCRT11400x1050_1 = SiS310_LVDSCRT11400x1050_1; - SiS_Pr->SiS_LVDSCRT11600x1200_1 = SiS310_LVDSCRT11600x1200_1; - SiS_Pr->SiS_LVDSCRT1800x600_1_H = SiS310_LVDSCRT1800x600_1_H; - SiS_Pr->SiS_LVDSCRT11024x768_1_H = SiS310_LVDSCRT11024x768_1_H; - SiS_Pr->SiS_LVDSCRT11280x1024_1_H = SiS310_LVDSCRT11280x1024_1_H; - SiS_Pr->SiS_LVDSCRT11400x1050_1_H = SiS310_LVDSCRT11400x1050_1_H; - SiS_Pr->SiS_LVDSCRT11600x1200_1_H = SiS310_LVDSCRT11600x1200_1_H; - SiS_Pr->SiS_LVDSCRT1800x600_2 = SiS310_LVDSCRT1800x600_2; - SiS_Pr->SiS_LVDSCRT11024x768_2 = SiS310_LVDSCRT11024x768_2; - SiS_Pr->SiS_LVDSCRT11280x1024_2 = SiS310_LVDSCRT11280x1024_2; - SiS_Pr->SiS_LVDSCRT11400x1050_2 = SiS310_LVDSCRT11400x1050_2; - SiS_Pr->SiS_LVDSCRT11600x1200_2 = SiS310_LVDSCRT11600x1200_2; - SiS_Pr->SiS_LVDSCRT1800x600_2_H = SiS310_LVDSCRT1800x600_2_H; - SiS_Pr->SiS_LVDSCRT11024x768_2_H = SiS310_LVDSCRT11024x768_2_H; - SiS_Pr->SiS_LVDSCRT11280x1024_2_H = SiS310_LVDSCRT11280x1024_2_H; - SiS_Pr->SiS_LVDSCRT11400x1050_2_H = SiS310_LVDSCRT11400x1050_2_H; - SiS_Pr->SiS_LVDSCRT11600x1200_2_H = SiS310_LVDSCRT11600x1200_2_H; - SiS_Pr->SiS_LVDSCRT1XXXxXXX_1 = SiS310_LVDSCRT1XXXxXXX_1; - SiS_Pr->SiS_LVDSCRT1XXXxXXX_1_H = SiS310_LVDSCRT1XXXxXXX_1_H; - SiS_Pr->SiS_CHTVCRT1UNTSC = SiS310_CHTVCRT1UNTSC; - SiS_Pr->SiS_CHTVCRT1ONTSC = SiS310_CHTVCRT1ONTSC; - SiS_Pr->SiS_CHTVCRT1UPAL = SiS310_CHTVCRT1UPAL; - SiS_Pr->SiS_CHTVCRT1OPAL = SiS310_CHTVCRT1OPAL; - SiS_Pr->SiS_CHTVCRT1SOPAL = SiS310_CHTVCRT1OPAL; + SiS_Pr->SiS_CHTVCRT1UNTSC = SiS310_CHTVCRT1UNTSC; + SiS_Pr->SiS_CHTVCRT1ONTSC = SiS310_CHTVCRT1ONTSC; + SiS_Pr->SiS_CHTVCRT1UPAL = SiS310_CHTVCRT1UPAL; + SiS_Pr->SiS_CHTVCRT1OPAL = SiS310_CHTVCRT1OPAL; + SiS_Pr->SiS_CHTVCRT1SOPAL = SiS310_CHTVCRT1OPAL; SiS_Pr->SiS_CHTVReg_UNTSC = SiS310_CHTVReg_UNTSC; SiS_Pr->SiS_CHTVReg_ONTSC = SiS310_CHTVReg_ONTSC; @@ -528,208 +317,203 @@ InitTo310Pointer(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) } #endif -static void -SiSInitPtr(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo) +BOOLEAN +SiSInitPtr(struct SiS_Private *SiS_Pr) { - switch(HwInfo->jChipType) { -#ifdef SIS315H - case SIS_315H: - case SIS_315: - case SIS_315PRO: - case SIS_550: - case SIS_650: - case SIS_740: - case SIS_330: - case SIS_661: - case SIS_741: - case SIS_660: - case SIS_760: - case SIS_761: - case SIS_340: - InitTo310Pointer(SiS_Pr, HwInfo); - break; -#endif + if(SiS_Pr->ChipType < SIS_315H) { #ifdef SIS300 - case SIS_300: - case SIS_540: - case SIS_630: - case SIS_730: - InitTo300Pointer(SiS_Pr, HwInfo); - break; + InitTo300Pointer(SiS_Pr); +#else + return FALSE; +#endif + } else { +#ifdef SIS315H + InitTo310Pointer(SiS_Pr); +#else + return FALSE; #endif - default: - break; } + return TRUE; } /*********************************************/ /* HELPER: Get ModeID */ /*********************************************/ -#ifdef LINUX_XF86 -USHORT -SiS_GetModeID(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, - int Depth, BOOLEAN FSTN, int LCDwidth, int LCDheight) +#ifndef SIS_XORG_XF86 +static +#endif +unsigned short +SiS_GetModeID(int VGAEngine, unsigned int VBFlags, int HDisplay, int VDisplay, + int Depth, BOOLEAN FSTN, int LCDwidth, int LCDheight) { - USHORT ModeIndex = 0; + unsigned short ModeIndex = 0; switch(HDisplay) { - case 320: - if(VDisplay == 200) ModeIndex = ModeIndex_320x200[Depth]; - else if(VDisplay == 240) { - if(FSTN) ModeIndex = ModeIndex_320x240_FSTN[Depth]; - else ModeIndex = ModeIndex_320x240[Depth]; - } - break; - case 400: - if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 800) && (LCDwidth >= 600))) { - if(VDisplay == 300) ModeIndex = ModeIndex_400x300[Depth]; - } - break; - case 512: - if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 1024) && (LCDwidth >= 768))) { - if(VDisplay == 384) ModeIndex = ModeIndex_512x384[Depth]; - } - break; - case 640: - if(VDisplay == 480) ModeIndex = ModeIndex_640x480[Depth]; - else if(VDisplay == 400) ModeIndex = ModeIndex_640x400[Depth]; - break; - case 720: - if(VDisplay == 480) ModeIndex = ModeIndex_720x480[Depth]; - else if(VDisplay == 576) ModeIndex = ModeIndex_720x576[Depth]; - break; - case 768: - if(VDisplay == 576) ModeIndex = ModeIndex_768x576[Depth]; - break; - case 800: - if(VDisplay == 600) ModeIndex = ModeIndex_800x600[Depth]; - else if(VDisplay == 480) ModeIndex = ModeIndex_800x480[Depth]; - break; - case 848: - if(VDisplay == 480) ModeIndex = ModeIndex_848x480[Depth]; - break; - case 856: - if(VDisplay == 480) ModeIndex = ModeIndex_856x480[Depth]; - break; - case 960: - if(VGAEngine == SIS_315_VGA) { - if(VDisplay == 540) ModeIndex = ModeIndex_960x540[Depth]; - else if(VDisplay == 600) ModeIndex = ModeIndex_960x600[Depth]; - } - break; - case 1024: - if(VDisplay == 576) ModeIndex = ModeIndex_1024x576[Depth]; - else if(VDisplay == 768) ModeIndex = ModeIndex_1024x768[Depth]; - else if(VGAEngine == SIS_300_VGA) { - if(VDisplay == 600) ModeIndex = ModeIndex_1024x600[Depth]; - } - break; - case 1152: - if(VDisplay == 864) ModeIndex = ModeIndex_1152x864[Depth]; - if(VGAEngine == SIS_300_VGA) { - if(VDisplay == 768) ModeIndex = ModeIndex_1152x768[Depth]; - } - break; - case 1280: - switch(VDisplay) { - case 720: - ModeIndex = ModeIndex_1280x720[Depth]; - break; - case 768: - if(VGAEngine == SIS_300_VGA) { - ModeIndex = ModeIndex_300_1280x768[Depth]; - } else { - ModeIndex = ModeIndex_310_1280x768[Depth]; - } - break; - case 800: - if(VGAEngine == SIS_315_VGA) { - ModeIndex = ModeIndex_1280x800[Depth]; - } - break; - case 960: - ModeIndex = ModeIndex_1280x960[Depth]; - break; - case 1024: - ModeIndex = ModeIndex_1280x1024[Depth]; - break; - } - break; - case 1360: - if(VDisplay == 768) ModeIndex = ModeIndex_1360x768[Depth]; - if(VGAEngine == SIS_300_VGA) { - if(VDisplay == 1024) ModeIndex = ModeIndex_300_1360x1024[Depth]; - } - break; - case 1400: - if(VGAEngine == SIS_315_VGA) { - if(VDisplay == 1050) { - ModeIndex = ModeIndex_1400x1050[Depth]; - } - } - break; - case 1600: - if(VDisplay == 1200) ModeIndex = ModeIndex_1600x1200[Depth]; - break; - case 1680: - if(VGAEngine == SIS_315_VGA) { - if(VDisplay == 1050) ModeIndex = ModeIndex_1680x1050[Depth]; - } - break; - case 1920: - if(VDisplay == 1440) ModeIndex = ModeIndex_1920x1440[Depth]; - else if(VGAEngine == SIS_315_VGA) { - if(VDisplay == 1080) ModeIndex = ModeIndex_1920x1080[Depth]; - } - break; - case 2048: - if(VDisplay == 1536) { - if(VGAEngine == SIS_300_VGA) { - ModeIndex = ModeIndex_300_2048x1536[Depth]; - } else { - ModeIndex = ModeIndex_310_2048x1536[Depth]; - } - } - break; + case 320: + if(VDisplay == 200) ModeIndex = ModeIndex_320x200[Depth]; + else if(VDisplay == 240) { + if((VBFlags & CRT2_LCD) && (FSTN)) + ModeIndex = ModeIndex_320x240_FSTN[Depth]; + else + ModeIndex = ModeIndex_320x240[Depth]; + } + break; + case 400: + if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 800) && (LCDwidth >= 600))) { + if(VDisplay == 300) ModeIndex = ModeIndex_400x300[Depth]; + } + break; + case 512: + if((!(VBFlags & CRT1_LCDA)) || ((LCDwidth >= 1024) && (LCDwidth >= 768))) { + if(VDisplay == 384) ModeIndex = ModeIndex_512x384[Depth]; + } + break; + case 640: + if(VDisplay == 480) ModeIndex = ModeIndex_640x480[Depth]; + else if(VDisplay == 400) ModeIndex = ModeIndex_640x400[Depth]; + break; + case 720: + if(VDisplay == 480) ModeIndex = ModeIndex_720x480[Depth]; + else if(VDisplay == 576) ModeIndex = ModeIndex_720x576[Depth]; + break; + case 768: + if(VDisplay == 576) ModeIndex = ModeIndex_768x576[Depth]; + break; + case 800: + if(VDisplay == 600) ModeIndex = ModeIndex_800x600[Depth]; + else if(VDisplay == 480) ModeIndex = ModeIndex_800x480[Depth]; + break; + case 848: + if(VDisplay == 480) ModeIndex = ModeIndex_848x480[Depth]; + break; + case 856: + if(VDisplay == 480) ModeIndex = ModeIndex_856x480[Depth]; + break; + case 960: + if(VGAEngine == SIS_315_VGA) { + if(VDisplay == 540) ModeIndex = ModeIndex_960x540[Depth]; + else if(VDisplay == 600) ModeIndex = ModeIndex_960x600[Depth]; + } + break; + case 1024: + if(VDisplay == 576) ModeIndex = ModeIndex_1024x576[Depth]; + else if(VDisplay == 768) ModeIndex = ModeIndex_1024x768[Depth]; + else if(VGAEngine == SIS_300_VGA) { + if(VDisplay == 600) ModeIndex = ModeIndex_1024x600[Depth]; + } + break; + case 1152: + if(VDisplay == 864) ModeIndex = ModeIndex_1152x864[Depth]; + if(VGAEngine == SIS_300_VGA) { + if(VDisplay == 768) ModeIndex = ModeIndex_1152x768[Depth]; + } + break; + case 1280: + switch(VDisplay) { + case 720: + ModeIndex = ModeIndex_1280x720[Depth]; + break; + case 768: + if(VGAEngine == SIS_300_VGA) { + ModeIndex = ModeIndex_300_1280x768[Depth]; + } else { + ModeIndex = ModeIndex_310_1280x768[Depth]; + } + break; + case 800: + if(VGAEngine == SIS_315_VGA) { + ModeIndex = ModeIndex_1280x800[Depth]; + } + break; + case 854: + if(VGAEngine == SIS_315_VGA) { + ModeIndex = ModeIndex_1280x854[Depth]; + } + break; + case 960: + ModeIndex = ModeIndex_1280x960[Depth]; + break; + case 1024: + ModeIndex = ModeIndex_1280x1024[Depth]; + break; + } + break; + case 1360: + if(VDisplay == 768) ModeIndex = ModeIndex_1360x768[Depth]; + if(VGAEngine == SIS_300_VGA) { + if(VDisplay == 1024) ModeIndex = ModeIndex_300_1360x1024[Depth]; + } + break; + case 1400: + if(VGAEngine == SIS_315_VGA) { + if(VDisplay == 1050) { + ModeIndex = ModeIndex_1400x1050[Depth]; + } + } + break; + case 1600: + if(VDisplay == 1200) ModeIndex = ModeIndex_1600x1200[Depth]; + break; + case 1680: + if(VGAEngine == SIS_315_VGA) { + if(VDisplay == 1050) ModeIndex = ModeIndex_1680x1050[Depth]; + } + break; + case 1920: + if(VDisplay == 1440) ModeIndex = ModeIndex_1920x1440[Depth]; + else if(VGAEngine == SIS_315_VGA) { + if(VDisplay == 1080) ModeIndex = ModeIndex_1920x1080[Depth]; + } + break; + case 2048: + if(VDisplay == 1536) { + if(VGAEngine == SIS_300_VGA) { + ModeIndex = ModeIndex_300_2048x1536[Depth]; + } else { + ModeIndex = ModeIndex_310_2048x1536[Depth]; + } + } + break; } - return(ModeIndex); + return ModeIndex; } -#endif -USHORT -SiS_GetModeID_LCD(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, - int Depth, BOOLEAN FSTN, USHORT CustomT, int LCDwidth, int LCDheight) +unsigned short +SiS_GetModeID_LCD(int VGAEngine, unsigned int VBFlags, int HDisplay, int VDisplay, + int Depth, BOOLEAN FSTN, unsigned short CustomT, int LCDwidth, int LCDheight, + unsigned int VBFlags2) { - USHORT ModeIndex = 0; + unsigned short ModeIndex = 0; - if(VBFlags & (VB_LVDS | VB_30xBDH)) { + if(VBFlags2 & (VB2_LVDS | VB2_30xBDH)) { switch(HDisplay) { case 320: - if(CustomT != CUT_PANEL848) { - if(VDisplay == 200) ModeIndex = ModeIndex_320x200[Depth]; - else if(VDisplay == 240) { + if((CustomT != CUT_PANEL848) && (CustomT != CUT_PANEL856)) { + if(VDisplay == 200) { + if(!FSTN) ModeIndex = ModeIndex_320x200[Depth]; + } else if(VDisplay == 240) { if(!FSTN) ModeIndex = ModeIndex_320x240[Depth]; - else if(VGAEngine == SIS_315_VGA) { - ModeIndex = ModeIndex_320x240_FSTN[Depth]; + else if(VGAEngine == SIS_315_VGA) { + ModeIndex = ModeIndex_320x240_FSTN[Depth]; } } } - break; - case 400: - if(CustomT != CUT_PANEL848) { - if(!((VGAEngine == SIS_300_VGA) && (VBFlags & VB_TRUMPION))) { - if(VDisplay == 300) ModeIndex = ModeIndex_400x300[Depth]; + break; + case 400: + if((CustomT != CUT_PANEL848) && (CustomT != CUT_PANEL856)) { + if(!((VGAEngine == SIS_300_VGA) && (VBFlags2 & VB2_TRUMPION))) { + if(VDisplay == 300) ModeIndex = ModeIndex_400x300[Depth]; } } - break; + break; case 512: - if(CustomT != CUT_PANEL848) { - if(!((VGAEngine == SIS_300_VGA) && (VBFlags & VB_TRUMPION))) { + if((CustomT != CUT_PANEL848) && (CustomT != CUT_PANEL856)) { + if(!((VGAEngine == SIS_300_VGA) && (VBFlags2 & VB2_TRUMPION))) { if(LCDwidth >= 1024 && LCDwidth != 1152 && LCDheight >= 768) { if(VDisplay == 384) { ModeIndex = ModeIndex_512x384[Depth]; @@ -739,9 +523,10 @@ SiS_GetModeID_LCD(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, } break; case 640: - if(VDisplay == 480) ModeIndex = ModeIndex_640x480[Depth]; + if(VDisplay == 480) ModeIndex = ModeIndex_640x480[Depth]; else if(VDisplay == 400) { - if(CustomT != CUT_PANEL848) ModeIndex = ModeIndex_640x400[Depth]; + if((CustomT != CUT_PANEL848) && (CustomT != CUT_PANEL856)) + ModeIndex = ModeIndex_640x400[Depth]; } break; case 800: @@ -752,6 +537,11 @@ SiS_GetModeID_LCD(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, if(VDisplay == 480) ModeIndex = ModeIndex_848x480[Depth]; } break; + case 856: + if(CustomT == CUT_PANEL856) { + if(VDisplay == 480) ModeIndex = ModeIndex_856x480[Depth]; + } + break; case 1024: if(VDisplay == 768) ModeIndex = ModeIndex_1024x768[Depth]; else if(VGAEngine == SIS_300_VGA) { @@ -762,7 +552,7 @@ SiS_GetModeID_LCD(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, break; case 1152: if(VGAEngine == SIS_300_VGA) { - if((VDisplay == 768) && (LCDheight == 768)) { + if((VDisplay == 768) && (LCDheight == 768)) { ModeIndex = ModeIndex_1152x768[Depth]; } } @@ -770,49 +560,49 @@ SiS_GetModeID_LCD(int VGAEngine, ULONG VBFlags, int HDisplay, int VDisplay, case 1280: if(VDisplay == 1024) ModeIndex = ModeIndex_1280x1024[Depth]; else if(VGAEngine == SIS_315_VGA) { - if((VDisplay == 768) && (LCDheight == 768)) { + if((VDisplay == 768) && (LCDheight == 768)) { ModeIndex = ModeIndex_310_1280x768[Depth]; } } break; case 1360: if(VGAEngine == SIS_300_VGA) { - if(CustomT == CUT_BARCO1366) { + if(CustomT == CUT_BARCO1366) { if(VDisplay == 1024) ModeIndex = ModeIndex_300_1360x1024[Depth]; } } if(CustomT == CUT_PANEL848) { - if(VDisplay == 768) ModeIndex = ModeIndex_1360x768[Depth]; + if(VDisplay == 768) ModeIndex = ModeIndex_1360x768[Depth]; } break; case 1400: if(VGAEngine == SIS_315_VGA) { - if(VDisplay == 1050) ModeIndex = ModeIndex_1400x1050[Depth]; + if(VDisplay == 1050) ModeIndex = ModeIndex_1400x1050[Depth]; } break; < |