Merge 3.4-rc5 into staging-next
[cascardo/linux.git] / drivers / staging / xgifb / vb_setmode.c
index 60d4adf..b2f4338 100644 (file)
 
 #define  IndexMask 0xff
 
-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,
-       0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
-       0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
-       0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F};
-
-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,
-       0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
-       0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
-       0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
-       0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
-       0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F};
-
-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,
-       0x28, 0x38, 0x2C, 0x3C, 0x29, 0x39, 0x2D, 0x3D,
-       0x02, 0x12, 0x06, 0x16, 0x03, 0x13, 0x07, 0x17,
-       0x22, 0x32, 0x26, 0x36, 0x23, 0x33, 0x27, 0x37,
-       0x0A, 0x1A, 0x0E, 0x1E, 0x0B, 0x1B, 0x0F, 0x1F,
-       0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F};
-
 static const unsigned short XGINew_VGA_DAC[] = {
        0x00, 0x10, 0x04, 0x14, 0x01, 0x11, 0x09, 0x15,
        0x2A, 0x3A, 0x2E, 0x3E, 0x2B, 0x3B, 0x2F, 0x3F,
@@ -60,8 +30,7 @@ static const unsigned short XGINew_VGA_DAC[] = {
 
 void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
 {
-       pVBInfo->SModeIDTable = (struct XGI_StStruct *) XGI330_SModeIDTable;
-       pVBInfo->StandTable = (struct SiS_StandTable_S *) XGI330_StandTable;
+       pVBInfo->StandTable = (struct SiS_StandTable_S *) &XGI330_StandTable;
        pVBInfo->EModeIDTable = (struct XGI_ExtStruct *) XGI330_EModeIDTable;
        pVBInfo->RefIndex = (struct XGI_Ext2Struct *) XGI330_RefIndex;
        pVBInfo->XGINEWUB_CRT1Table
@@ -182,38 +151,17 @@ void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
 
 }
 
-static unsigned char XGI_GetModePtr(unsigned short ModeNo,
-                                   unsigned short ModeIdIndex,
-                                   struct vb_device_info *pVBInfo)
-{
-       unsigned char index;
-
-       if (ModeNo <= 0x13)
-               index = pVBInfo->SModeIDTable[ModeIdIndex].St_StTableIndex;
-       else {
-               if (pVBInfo->ModeType <= 0x02)
-                       index = 0x1B; /* 02 -> ModeEGA */
-               else
-                       index = 0x0F;
-       }
-       return index; /* Get pVBInfo->StandTable index */
-}
-
 static void XGI_SetSeqRegs(unsigned short ModeNo,
-                          unsigned short StandTableIndex,
                           unsigned short ModeIdIndex,
                           struct vb_device_info *pVBInfo)
 {
        unsigned char tempah, SRdata;
        unsigned short i, modeflag;
 
-       if (ModeNo <= 0x13)
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
 
        xgifb_reg_set(pVBInfo->P3c4, 0x00, 0x03); /* Set SR0 */
-       tempah = pVBInfo->StandTable[StandTableIndex].SR[0];
+       tempah = pVBInfo->StandTable->SR[0];
 
        i = XGI_SetCRT2ToLCDA;
        if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
@@ -230,13 +178,12 @@ static void XGI_SetSeqRegs(unsigned short ModeNo,
 
        for (i = 02; i <= 04; i++) {
                /* Get SR2,3,4 from file */
-               SRdata = pVBInfo->StandTable[StandTableIndex].SR[i - 1];
+               SRdata = pVBInfo->StandTable->SR[i - 1];
                xgifb_reg_set(pVBInfo->P3c4, i, SRdata); /* Set SR2 3 4 */
        }
 }
 
 static void XGI_SetCRTCRegs(struct xgi_hw_device_info *HwDeviceExtension,
-                           unsigned short StandTableIndex,
                            struct vb_device_info *pVBInfo)
 {
        unsigned char CRTCdata;
@@ -248,26 +195,22 @@ static void XGI_SetCRTCRegs(struct xgi_hw_device_info *HwDeviceExtension,
 
        for (i = 0; i <= 0x18; i++) {
                /* Get CRTC from file */
-               CRTCdata = pVBInfo->StandTable[StandTableIndex].CRTC[i];
+               CRTCdata = pVBInfo->StandTable->CRTC[i];
                xgifb_reg_set(pVBInfo->P3d4, i, CRTCdata); /* Set CRTC(3d4) */
        }
 }
 
 static void XGI_SetATTRegs(unsigned short ModeNo,
-                          unsigned short StandTableIndex,
                           unsigned short ModeIdIndex,
                           struct vb_device_info *pVBInfo)
 {
        unsigned char ARdata;
        unsigned short i, modeflag;
 
-       if (ModeNo <= 0x13)
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
 
        for (i = 0; i <= 0x13; i++) {
-               ARdata = pVBInfo->StandTable[StandTableIndex].ATTR[i];
+               ARdata = pVBInfo->StandTable->ATTR[i];
                if (modeflag & Charx8Dot) { /* ifndef Dot9 */
                        if (i == 0x13) {
                                if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
@@ -295,15 +238,14 @@ static void XGI_SetATTRegs(unsigned short ModeNo,
        outb(0x20, pVBInfo->P3c0);
 }
 
-static void XGI_SetGRCRegs(unsigned short StandTableIndex,
-                          struct vb_device_info *pVBInfo)
+static void XGI_SetGRCRegs(struct vb_device_info *pVBInfo)
 {
        unsigned char GRdata;
        unsigned short i;
 
        for (i = 0; i <= 0x08; i++) {
                /* Get GR from file */
-               GRdata = pVBInfo->StandTable[StandTableIndex].GRC[i];
+               GRdata = pVBInfo->StandTable->GRC[i];
                xgifb_reg_set(pVBInfo->P3ce, i, GRdata); /* Set GR(3ce) */
        }
 
@@ -344,12 +286,7 @@ static unsigned char XGI_AjustCRT2Rate(unsigned short ModeNo,
 {
        unsigned short tempax, tempbx, resinfo, modeflag, infoflag;
 
-       if (ModeNo <= 0x13)
-               /* si+St_ModeFlag */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
        resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
        tempbx = pVBInfo->RefIndex[RefreshRateTableIndex + (*i)].ModeID;
        tempax = 0;
@@ -584,11 +521,7 @@ static void XGI_SetCRT1Timing_V(unsigned short ModeIdIndex,
        data &= 0x80;
        data = data >> 2;
 
-       if (ModeNo <= 0x13)
-               i = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               i = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-
+       i = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
        i &= DoubleScanMode;
        if (i)
                data |= 0x80;
@@ -641,158 +574,97 @@ static void XGI_SetXG21CRTC(unsigned short ModeNo, unsigned short ModeIdIndex,
                unsigned short RefreshRateTableIndex,
                struct vb_device_info *pVBInfo)
 {
-       unsigned char StandTableIndex, index, Tempax, Tempbx, Tempcx, Tempdx;
+       unsigned char index, Tempax, Tempbx, Tempcx, Tempdx;
        unsigned short Temp1, Temp2, Temp3;
 
-       if (ModeNo <= 0x13) {
-               StandTableIndex = XGI_GetModePtr(ModeNo, ModeIdIndex, pVBInfo);
-               /* CR04 HRS */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[4];
-               /* SR2E [7:0]->HRS */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
-               /* Tempbx: CR05 HRE */
-               Tempbx = pVBInfo->StandTable[StandTableIndex].CRTC[5];
-               Tempbx &= 0x1F; /* Tempbx: HRE[4:0] */
-               Tempcx = Tempax;
-               Tempcx &= 0xE0; /* Tempcx: HRS[7:5] */
-               Tempdx = Tempcx | Tempbx; /* Tempdx(HRE): HRS[7:5]HRE[4:0] */
-               if (Tempbx < (Tempax & 0x1F)) /* IF HRE < HRS */
-                       Tempdx |= 0x20; /* Tempdx: HRE = HRE + 0x20 */
-               Tempdx <<= 2; /* Tempdx << 2 */
-               /* SR2F [7:2]->HRE */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempdx);
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
-
-               /* Tempax: CR16 VRS */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[16];
-               Tempbx = Tempax; /* Tempbx=Tempax */
-               Tempax &= 0x01; /* Tempax: VRS[0] */
-               xgifb_reg_or(pVBInfo->P3c4, 0x33, Tempax); /* SR33[0]->VRS */
-
-               /* Tempax: CR7 VRS */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[7];
-               Tempdx = Tempbx >> 1; /* Tempdx: VRS[7:1] */
-               Tempcx = Tempax & 0x04; /* Tempcx: CR7[2] */
-               Tempcx <<= 5; /* Tempcx[7]: VRS[8] */
-               Tempdx |= Tempcx; /* Tempdx: VRS[8:1] */
-               /* SR34[7:0]: VRS[8:1] */
-               xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempdx);
-
-               /* Temp1[8]: VRS[8] unsigned char -> unsigned short */
-               Temp1 = Tempcx << 1;
-               Temp1 |= Tempbx; /* Temp1[8:0]: VRS[8:0] */
-               Tempax &= 0x80; /* Tempax[7]: CR7[7] */
-               Temp2 = Tempax << 2; /* Temp2[9]: VRS[9] */
-               Temp1 |= Temp2; /* Temp1[9:0]: VRS[9:0] */
-
-               /* CR16 VRE */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[17];
-               Tempax &= 0x0F; /* Tempax[3:0]: VRE[3:0] */
-               Temp2 = Temp1 & 0x3F0; /* Temp2[9:4]: VRS[9:4] */
-               Temp2 |= Tempax; /* Temp2[9:0]: VRE[9:0] */
-               Temp3 = Temp1 & 0x0F; /* Temp3[3:0]: VRS[3:0] */
-               if (Tempax < Temp3) /* VRE[3:0]<VRS[3:0] */
-                       Temp2 |= 0x10; /* Temp2: VRE + 0x10 */
-               Temp2 &= 0xFF; /* Temp2[7:0]: VRE[7:0] */
-               Tempax = (unsigned char) Temp2; /* Tempax[7:0]: VRE[7:0] */
-               Tempax <<= 2; /* Tempax << 2: VRE[5:0] */
-               Temp1 &= 0x600; /* Temp1[10:9]: VRS[10:9] */
-               Temp1 >>= 9; /* [10:9]->[1:0] */
-               Tempbx = (unsigned char) Temp1; /* Tempbx[1:0]: VRS[10:9] */
-               Tempax |= Tempbx; /* VRE[5:0]VRS[10:9] */
-               Tempax &= 0x7F;
-               /* SR3F D[7:2]->VRE D[1:0]->VRS */
-               xgifb_reg_set(pVBInfo->P3c4, 0x3F, Tempax);
-       } else {
-               index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-               /* Tempax: CR4 HRS */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[3];
-               Tempcx = Tempax; /* Tempcx: HRS */
-               /* SR2E[7:0]->HRS */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
-
-               Tempdx = pVBInfo->XGINEWUB_CRT1Table[index].CR[5]; /* SRB */
-               Tempdx &= 0xC0; /* Tempdx[7:6]: SRB[7:6] */
-               Temp1 = Tempdx; /* Temp1[7:6]: HRS[9:8] */
-               Temp1 <<= 2; /* Temp1[9:8]: HRS[9:8] */
-               Temp1 |= Tempax; /* Temp1[9:0]: HRS[9:0] */
-
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[4]; /* CR5 HRE */
-               Tempax &= 0x1F; /* Tempax[4:0]: HRE[4:0] */
-
-               Tempbx = pVBInfo->XGINEWUB_CRT1Table[index].CR[6]; /* SRC */
-               Tempbx &= 0x04; /* Tempbx[2]: HRE[5] */
-               Tempbx <<= 3; /* Tempbx[5]: HRE[5] */
-               Tempax |= Tempbx; /* Tempax[5:0]: HRE[5:0] */
-
-               Temp2 = Temp1 & 0x3C0; /* Temp2[9:6]: HRS[9:6] */
-               Temp2 |= Tempax; /* Temp2[9:0]: HRE[9:0] */
-
-               Tempcx &= 0x3F; /* Tempcx[5:0]: HRS[5:0] */
-               if (Tempax < Tempcx) /* HRE < HRS */
-                       Temp2 |= 0x40; /* Temp2 + 0x40 */
-
-               Temp2 &= 0xFF;
-               Tempax = (unsigned char) Temp2; /* Tempax: HRE[7:0] */
-               Tempax <<= 2; /* Tempax[7:2]: HRE[5:0] */
-               Tempdx >>= 6; /* Tempdx[7:6]->[1:0] HRS[9:8] */
-               Tempax |= Tempdx; /* HRE[5:0]HRS[9:8] */
-               /* SR2F D[7:2]->HRE, D[1:0]->HRS */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempax);
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
-
-               /* CR10 VRS */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[10];
-               Tempbx = Tempax; /* Tempbx: VRS */
-               Tempax &= 0x01; /* Tempax[0]: VRS[0] */
-               xgifb_reg_or(pVBInfo->P3c4, 0x33, Tempax); /* SR33[0]->VRS[0] */
-               /* CR7[2][7] VRE */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[9];
-               Tempcx = Tempbx >> 1; /* Tempcx[6:0]: VRS[7:1] */
-               Tempdx = Tempax & 0x04; /* Tempdx[2]: CR7[2] */
-               Tempdx <<= 5; /* Tempdx[7]: VRS[8] */
-               Tempcx |= Tempdx; /* Tempcx[7:0]: VRS[8:1] */
-               xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempcx); /* SR34[8:1]->VRS */
-
-               Temp1 = Tempdx; /* Temp1[7]: Tempdx[7] */
-               Temp1 <<= 1; /* Temp1[8]: VRS[8] */
-               Temp1 |= Tempbx; /* Temp1[8:0]: VRS[8:0] */
-               Tempax &= 0x80;
-               Temp2 = Tempax << 2; /* Temp2[9]: VRS[9] */
-               Temp1 |= Temp2; /* Temp1[9:0]: VRS[9:0] */
-               /* Tempax: SRA */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
-               Tempax &= 0x08; /* Tempax[3]: VRS[3] */
-               Temp2 = Tempax;
-               Temp2 <<= 7; /* Temp2[10]: VRS[10] */
-               Temp1 |= Temp2; /* Temp1[10:0]: VRS[10:0] */
-
-               /* Tempax: CR11 VRE */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[11];
-               Tempax &= 0x0F; /* Tempax[3:0]: VRE[3:0] */
-               /* Tempbx: SRA */
-               Tempbx = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
-               Tempbx &= 0x20; /* Tempbx[5]: VRE[5] */
-               Tempbx >>= 1; /* Tempbx[4]: VRE[4] */
-               Tempax |= Tempbx; /* Tempax[4:0]: VRE[4:0] */
-               Temp2 = Temp1 & 0x7E0; /* Temp2[10:5]: VRS[10:5] */
-               Temp2 |= Tempax; /* Temp2[10:5]: VRE[10:5] */
-
-               Temp3 = Temp1 & 0x1F; /* Temp3[4:0]: VRS[4:0] */
-               if (Tempax < Temp3) /* VRE < VRS */
-                       Temp2 |= 0x20; /* VRE + 0x20 */
-
-               Temp2 &= 0xFF;
-               Tempax = (unsigned char) Temp2; /* Tempax: VRE[7:0] */
-               Tempax <<= 2; /* Tempax[7:0]; VRE[5:0]00 */
-               Temp1 &= 0x600; /* Temp1[10:9]: VRS[10:9] */
-               Temp1 >>= 9; /* Temp1[1:0]: VRS[10:9] */
-               Tempbx = (unsigned char) Temp1;
-               Tempax |= Tempbx; /* Tempax[7:0]: VRE[5:0]VRS[10:9] */
-               Tempax &= 0x7F;
-               /* SR3F D[7:2]->VRE D[1:0]->VRS */
-               xgifb_reg_set(pVBInfo->P3c4, 0x3F, Tempax);
-       }
+       index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
+       /* Tempax: CR4 HRS */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[3];
+       Tempcx = Tempax; /* Tempcx: HRS */
+       /* SR2E[7:0]->HRS */
+       xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
+
+       Tempdx = pVBInfo->XGINEWUB_CRT1Table[index].CR[5]; /* SRB */
+       Tempdx &= 0xC0; /* Tempdx[7:6]: SRB[7:6] */
+       Temp1 = Tempdx; /* Temp1[7:6]: HRS[9:8] */
+       Temp1 <<= 2; /* Temp1[9:8]: HRS[9:8] */
+       Temp1 |= Tempax; /* Temp1[9:0]: HRS[9:0] */
+
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[4]; /* CR5 HRE */
+       Tempax &= 0x1F; /* Tempax[4:0]: HRE[4:0] */
+
+       Tempbx = pVBInfo->XGINEWUB_CRT1Table[index].CR[6]; /* SRC */
+       Tempbx &= 0x04; /* Tempbx[2]: HRE[5] */
+       Tempbx <<= 3; /* Tempbx[5]: HRE[5] */
+       Tempax |= Tempbx; /* Tempax[5:0]: HRE[5:0] */
+
+       Temp2 = Temp1 & 0x3C0; /* Temp2[9:6]: HRS[9:6] */
+       Temp2 |= Tempax; /* Temp2[9:0]: HRE[9:0] */
+
+       Tempcx &= 0x3F; /* Tempcx[5:0]: HRS[5:0] */
+       if (Tempax < Tempcx) /* HRE < HRS */
+               Temp2 |= 0x40; /* Temp2 + 0x40 */
+
+       Temp2 &= 0xFF;
+       Tempax = (unsigned char) Temp2; /* Tempax: HRE[7:0] */
+       Tempax <<= 2; /* Tempax[7:2]: HRE[5:0] */
+       Tempdx >>= 6; /* Tempdx[7:6]->[1:0] HRS[9:8] */
+       Tempax |= Tempdx; /* HRE[5:0]HRS[9:8] */
+       /* SR2F D[7:2]->HRE, D[1:0]->HRS */
+       xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempax);
+       xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
+
+       /* CR10 VRS */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[10];
+       Tempbx = Tempax; /* Tempbx: VRS */
+       Tempax &= 0x01; /* Tempax[0]: VRS[0] */
+       xgifb_reg_or(pVBInfo->P3c4, 0x33, Tempax); /* SR33[0]->VRS[0] */
+       /* CR7[2][7] VRE */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[9];
+       Tempcx = Tempbx >> 1; /* Tempcx[6:0]: VRS[7:1] */
+       Tempdx = Tempax & 0x04; /* Tempdx[2]: CR7[2] */
+       Tempdx <<= 5; /* Tempdx[7]: VRS[8] */
+       Tempcx |= Tempdx; /* Tempcx[7:0]: VRS[8:1] */
+       xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempcx); /* SR34[8:1]->VRS */
+
+       Temp1 = Tempdx; /* Temp1[7]: Tempdx[7] */
+       Temp1 <<= 1; /* Temp1[8]: VRS[8] */
+       Temp1 |= Tempbx; /* Temp1[8:0]: VRS[8:0] */
+       Tempax &= 0x80;
+       Temp2 = Tempax << 2; /* Temp2[9]: VRS[9] */
+       Temp1 |= Temp2; /* Temp1[9:0]: VRS[9:0] */
+       /* Tempax: SRA */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
+       Tempax &= 0x08; /* Tempax[3]: VRS[3] */
+       Temp2 = Tempax;
+       Temp2 <<= 7; /* Temp2[10]: VRS[10] */
+       Temp1 |= Temp2; /* Temp1[10:0]: VRS[10:0] */
+
+       /* Tempax: CR11 VRE */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[11];
+       Tempax &= 0x0F; /* Tempax[3:0]: VRE[3:0] */
+       /* Tempbx: SRA */
+       Tempbx = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
+       Tempbx &= 0x20; /* Tempbx[5]: VRE[5] */
+       Tempbx >>= 1; /* Tempbx[4]: VRE[4] */
+       Tempax |= Tempbx; /* Tempax[4:0]: VRE[4:0] */
+       Temp2 = Temp1 & 0x7E0; /* Temp2[10:5]: VRS[10:5] */
+       Temp2 |= Tempax; /* Temp2[10:5]: VRE[10:5] */
+
+       Temp3 = Temp1 & 0x1F; /* Temp3[4:0]: VRS[4:0] */
+       if (Tempax < Temp3) /* VRE < VRS */
+               Temp2 |= 0x20; /* VRE + 0x20 */
+
+       Temp2 &= 0xFF;
+       Tempax = (unsigned char) Temp2; /* Tempax: VRE[7:0] */
+       Tempax <<= 2; /* Tempax[7:0]; VRE[5:0]00 */
+       Temp1 &= 0x600; /* Temp1[10:9]: VRS[10:9] */
+       Temp1 >>= 9; /* Temp1[1:0]: VRS[10:9] */
+       Tempbx = (unsigned char) Temp1;
+       Tempax |= Tempbx; /* Tempax[7:0]: VRE[5:0]VRS[10:9] */
+       Tempax &= 0x7F;
+       /* SR3F D[7:2]->VRE D[1:0]->VRS */
+       xgifb_reg_set(pVBInfo->P3c4, 0x3F, Tempax);
 }
 
 static void XGI_SetXG27CRTC(unsigned short ModeNo,
@@ -800,139 +672,88 @@ static void XGI_SetXG27CRTC(unsigned short ModeNo,
                            unsigned short RefreshRateTableIndex,
                            struct vb_device_info *pVBInfo)
 {
-       unsigned short StandTableIndex, index, Tempax, Tempbx, Tempcx, Tempdx;
-
-       if (ModeNo <= 0x13) {
-               StandTableIndex = XGI_GetModePtr(ModeNo, ModeIdIndex, pVBInfo);
-               /* CR04 HRS */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[4];
-               /* SR2E [7:0]->HRS */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
-               /* Tempbx: CR05 HRE */
-               Tempbx = pVBInfo->StandTable[StandTableIndex].CRTC[5];
-               Tempbx &= 0x1F; /* Tempbx: HRE[4:0] */
-               Tempcx = Tempax;
-               Tempcx &= 0xE0; /* Tempcx: HRS[7:5] */
-               Tempdx = Tempcx | Tempbx; /* Tempdx(HRE): HRS[7:5]HRE[4:0] */
-               if (Tempbx < (Tempax & 0x1F)) /* IF HRE < HRS */
-                       Tempdx |= 0x20; /* Tempdx: HRE = HRE + 0x20 */
-               Tempdx <<= 2; /* Tempdx << 2 */
-               /* SR2F [7:2]->HRE */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempdx);
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
-
-               /* Tempax: CR10 VRS */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[16];
-               xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempax); /* SR34[7:0]->VRS */
-               Tempcx = Tempax; /* Tempcx=Tempax=VRS[7:0] */
-               /* Tempax[7][2]: CR7[7][2] VRS[9][8] */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[7];
-               Tempbx = Tempax; /* Tempbx=CR07 */
-               Tempax &= 0x04; /* Tempax[2]: CR07[2] VRS[8] */
-               Tempax >>= 2;
-               /* SR35 D[0]->VRS D[8] */
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x01, Tempax);
-               Tempcx |= (Tempax << 8); /* Tempcx[8] |= VRS[8] */
-               Tempcx |= (Tempbx & 0x80) << 2; /* Tempcx[9] |= VRS[9] */
-
-               /* CR11 VRE */
-               Tempax = pVBInfo->StandTable[StandTableIndex].CRTC[17];
-               Tempax &= 0x0F; /* Tempax: VRE[3:0] */
-               Tempbx = Tempcx; /* Tempbx=Tempcx=VRS[9:0] */
-               Tempbx &= 0x3F0; /* Tempbx[9:4]: VRS[9:4] */
-               Tempbx |= Tempax; /* Tempbx[9:0]: VRE[9:0] */
-               if (Tempax <= (Tempcx & 0x0F)) /* VRE[3:0]<=VRS[3:0] */
-                       Tempbx |= 0x10; /* Tempbx: VRE + 0x10 */
-               /* Tempax[7:0]: VRE[7:0] */
-               Tempax = (unsigned char) Tempbx & 0xFF;
-               Tempax <<= 2; /* Tempax << 2: VRE[5:0] */
-               Tempcx = (Tempcx & 0x600) >> 8; /* Tempcx VRS[10:9] */
-               /* SR3F D[7:2]->VRE D[5:0] */
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0xFC, Tempax);
-               /* SR35 D[2:1]->VRS[10:9] */
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x06, Tempcx);
-       } else {
-               index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-               /* Tempax: CR4 HRS */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[3];
-               Tempbx = Tempax; /* Tempbx: HRS[7:0] */
-               /* SR2E[7:0]->HRS */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
-
-               /* SR0B */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[5];
-               Tempax &= 0xC0; /* Tempax[7:6]: SR0B[7:6]: HRS[9:8]*/
-               Tempbx |= (Tempax << 2); /* Tempbx: HRS[9:0] */
-
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[4]; /* CR5 HRE */
-               Tempax &= 0x1F; /* Tempax[4:0]: HRE[4:0] */
-               Tempcx = Tempax; /* Tempcx: HRE[4:0] */
-
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[6]; /* SRC */
-               Tempax &= 0x04; /* Tempax[2]: HRE[5] */
-               Tempax <<= 3; /* Tempax[5]: HRE[5] */
-               Tempcx |= Tempax; /* Tempcx[5:0]: HRE[5:0] */
-
-               Tempbx = Tempbx & 0x3C0; /* Tempbx[9:6]: HRS[9:6] */
-               Tempbx |= Tempcx; /* Tempbx: HRS[9:6]HRE[5:0] */
-
-               /* Tempax: CR4 HRS */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[3];
-               Tempax &= 0x3F; /* Tempax: HRS[5:0] */
-               if (Tempcx <= Tempax) /* HRE[5:0] < HRS[5:0] */
-                       Tempbx += 0x40; /* Tempbx= Tempbx + 0x40 : HRE[9:0]*/
-
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[5]; /* SR0B */
-               Tempax &= 0xC0; /* Tempax[7:6]: SR0B[7:6]: HRS[9:8]*/
-               Tempax >>= 6; /* Tempax[1:0]: HRS[9:8]*/
-               Tempax |= ((Tempbx << 2) & 0xFF); /* Tempax[7:2]: HRE[5:0] */
-               /* SR2F [7:2][1:0]: HRE[5:0]HRS[9:8] */
-               xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempax);
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
-
-               /* CR10 VRS */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[10];
-               /* SR34[7:0]->VRS[7:0] */
-               xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempax);
-
-               Tempcx = Tempax; /* Tempcx <= VRS[7:0] */
-               /* CR7[7][2] VRS[9][8] */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[9];
-               Tempbx = Tempax; /* Tempbx <= CR07[7:0] */
-               Tempax = Tempax & 0x04; /* Tempax[2]: CR7[2]: VRS[8] */
-               Tempax >>= 2; /* Tempax[0]: VRS[8] */
-               /* SR35[0]: VRS[8] */
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x01, Tempax);
-               Tempcx |= (Tempax << 8); /* Tempcx <= VRS[8:0] */
-               Tempcx |= ((Tempbx & 0x80) << 2); /* Tempcx <= VRS[9:0] */
-               /* Tempax: SR0A */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
-               Tempax &= 0x08; /* SR0A[3] VRS[10] */
-               Tempcx |= (Tempax << 7); /* Tempcx <= VRS[10:0] */
-
-               /* Tempax: CR11 VRE */
-               Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[11];
-               Tempax &= 0x0F; /* Tempax[3:0]: VRE[3:0] */
-               /* Tempbx: SR0A */
-               Tempbx = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
-               Tempbx &= 0x20; /* Tempbx[5]: SR0A[5]: VRE[4] */
-               Tempbx >>= 1; /* Tempbx[4]: VRE[4] */
-               Tempax |= Tempbx; /* Tempax[4:0]: VRE[4:0] */
-               Tempbx = Tempcx; /* Tempbx: VRS[10:0] */
-               Tempbx &= 0x7E0; /* Tempbx[10:5]: VRS[10:5] */
-               Tempbx |= Tempax; /* Tempbx: VRS[10:5]VRE[4:0] */
-
-               if (Tempbx <= Tempcx) /* VRE <= VRS */
-                       Tempbx |= 0x20; /* VRE + 0x20 */
-
-               /* Tempax: Tempax[7:0]; VRE[5:0]00 */
-               Tempax = (Tempbx << 2) & 0xFF;
-               /* SR3F[7:2]:VRE[5:0] */
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0xFC, Tempax);
-               Tempax = Tempcx >> 8;
-               /* SR35[2:0]:VRS[10:8] */
-               xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x07, Tempax);
-       }
+       unsigned short index, Tempax, Tempbx, Tempcx;
+
+       index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
+       /* Tempax: CR4 HRS */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[3];
+       Tempbx = Tempax; /* Tempbx: HRS[7:0] */
+       /* SR2E[7:0]->HRS */
+       xgifb_reg_set(pVBInfo->P3c4, 0x2E, Tempax);
+
+       /* SR0B */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[5];
+       Tempax &= 0xC0; /* Tempax[7:6]: SR0B[7:6]: HRS[9:8]*/
+       Tempbx |= (Tempax << 2); /* Tempbx: HRS[9:0] */
+
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[4]; /* CR5 HRE */
+       Tempax &= 0x1F; /* Tempax[4:0]: HRE[4:0] */
+       Tempcx = Tempax; /* Tempcx: HRE[4:0] */
+
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[6]; /* SRC */
+       Tempax &= 0x04; /* Tempax[2]: HRE[5] */
+       Tempax <<= 3; /* Tempax[5]: HRE[5] */
+       Tempcx |= Tempax; /* Tempcx[5:0]: HRE[5:0] */
+
+       Tempbx = Tempbx & 0x3C0; /* Tempbx[9:6]: HRS[9:6] */
+       Tempbx |= Tempcx; /* Tempbx: HRS[9:6]HRE[5:0] */
+
+       /* Tempax: CR4 HRS */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[3];
+       Tempax &= 0x3F; /* Tempax: HRS[5:0] */
+       if (Tempcx <= Tempax) /* HRE[5:0] < HRS[5:0] */
+               Tempbx += 0x40; /* Tempbx= Tempbx + 0x40 : HRE[9:0]*/
+
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[5]; /* SR0B */
+       Tempax &= 0xC0; /* Tempax[7:6]: SR0B[7:6]: HRS[9:8]*/
+       Tempax >>= 6; /* Tempax[1:0]: HRS[9:8]*/
+       Tempax |= ((Tempbx << 2) & 0xFF); /* Tempax[7:2]: HRE[5:0] */
+       /* SR2F [7:2][1:0]: HRE[5:0]HRS[9:8] */
+       xgifb_reg_set(pVBInfo->P3c4, 0x2F, Tempax);
+       xgifb_reg_and_or(pVBInfo->P3c4, 0x30, 0xE3, 00);
+
+       /* CR10 VRS */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[10];
+       /* SR34[7:0]->VRS[7:0] */
+       xgifb_reg_set(pVBInfo->P3c4, 0x34, Tempax);
+
+       Tempcx = Tempax; /* Tempcx <= VRS[7:0] */
+       /* CR7[7][2] VRS[9][8] */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[9];
+       Tempbx = Tempax; /* Tempbx <= CR07[7:0] */
+       Tempax = Tempax & 0x04; /* Tempax[2]: CR7[2]: VRS[8] */
+       Tempax >>= 2; /* Tempax[0]: VRS[8] */
+       /* SR35[0]: VRS[8] */
+       xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x01, Tempax);
+       Tempcx |= (Tempax << 8); /* Tempcx <= VRS[8:0] */
+       Tempcx |= ((Tempbx & 0x80) << 2); /* Tempcx <= VRS[9:0] */
+       /* Tempax: SR0A */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
+       Tempax &= 0x08; /* SR0A[3] VRS[10] */
+       Tempcx |= (Tempax << 7); /* Tempcx <= VRS[10:0] */
+
+       /* Tempax: CR11 VRE */
+       Tempax = pVBInfo->XGINEWUB_CRT1Table[index].CR[11];
+       Tempax &= 0x0F; /* Tempax[3:0]: VRE[3:0] */
+       /* Tempbx: SR0A */
+       Tempbx = pVBInfo->XGINEWUB_CRT1Table[index].CR[14];
+       Tempbx &= 0x20; /* Tempbx[5]: SR0A[5]: VRE[4] */
+       Tempbx >>= 1; /* Tempbx[4]: VRE[4] */
+       Tempax |= Tempbx; /* Tempax[4:0]: VRE[4:0] */
+       Tempbx = Tempcx; /* Tempbx: VRS[10:0] */
+       Tempbx &= 0x7E0; /* Tempbx[10:5]: VRS[10:5] */
+       Tempbx |= Tempax; /* Tempbx: VRS[10:5]VRE[4:0] */
+
+       if (Tempbx <= Tempcx) /* VRE <= VRS */
+               Tempbx |= 0x20; /* VRE + 0x20 */
+
+       /* Tempax: Tempax[7:0]; VRE[5:0]00 */
+       Tempax = (Tempbx << 2) & 0xFF;
+       /* SR3F[7:2]:VRE[5:0] */
+       xgifb_reg_and_or(pVBInfo->P3c4, 0x3F, ~0xFC, Tempax);
+       Tempax = Tempcx >> 8;
+       /* SR35[2:0]:VRS[10:8] */
+       xgifb_reg_and_or(pVBInfo->P3c4, 0x35, ~0x07, Tempax);
 }
 
 static void XGI_SetXG27FPBits(struct vb_device_info *pVBInfo)
@@ -954,7 +775,7 @@ static void xgifb_set_lcd(int chip_id,
                          unsigned short RefreshRateTableIndex,
                          unsigned short ModeNo)
 {
-       unsigned short Data, Temp, b3CC;
+       unsigned short Data, Temp;
        unsigned short XGI_P3cc;
 
        XGI_P3cc = pVBInfo->P3cc;
@@ -995,23 +816,13 @@ static void xgifb_set_lcd(int chip_id,
        xgifb_reg_and(pVBInfo->P3c4, 0x30, ~0x20); /* Hsync polarity */
        xgifb_reg_and(pVBInfo->P3c4, 0x35, ~0x80); /* Vsync polarity */
 
-       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);
-       }
+       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);
 }
 
 /* --------------------------------------------------------------------- */
@@ -1024,30 +835,22 @@ static void XGI_UpdateXG21CRTC(unsigned short ModeNo,
                               struct vb_device_info *pVBInfo,
                               unsigned short RefreshRateTableIndex)
 {
-       int i, index = -1;
+       int index = -1;
 
        xgifb_reg_and(pVBInfo->P3d4, 0x11, 0x7F); /* Unlock CR0~7 */
-       if (ModeNo <= 0x13) {
-               for (i = 0; i < 12; i++) {
-                       if (ModeNo == pVBInfo->UpdateCRT1[i].ModeID)
-                               index = i;
-               }
-       } else {
-               if (ModeNo == 0x2E &&
-                   (pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC ==
-                                                             RES640x480x60))
-                       index = 12;
-               else if (ModeNo == 0x2E &&
-                        (pVBInfo->RefIndex[RefreshRateTableIndex].
+       if (ModeNo == 0x2E &&
+           (pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC ==
+                                                     RES640x480x60))
+               index = 12;
+       else if (ModeNo == 0x2E && (pVBInfo->RefIndex[RefreshRateTableIndex].
                                Ext_CRT1CRTC == RES640x480x72))
-                       index = 13;
-               else if (ModeNo == 0x2F)
-                       index = 14;
-               else if (ModeNo == 0x50)
-                       index = 15;
-               else if (ModeNo == 0x59)
-                       index = 16;
-       }
+               index = 13;
+       else if (ModeNo == 0x2F)
+               index = 14;
+       else if (ModeNo == 0x50)
+               index = 15;
+       else if (ModeNo == 0x59)
+               index = 16;
 
        if (index != -1) {
                xgifb_reg_set(pVBInfo->P3d4, 0x02,
@@ -1061,20 +864,6 @@ static void XGI_UpdateXG21CRTC(unsigned short ModeNo,
        }
 }
 
-static unsigned short XGI_GetResInfo(unsigned short ModeNo,
-               unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
-{
-       unsigned short resindex;
-
-       if (ModeNo <= 0x13)
-               /* si+St_ResInfo */
-               resindex = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-       else
-               /* si+Ext_ResInfo */
-               resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-       return resindex;
-}
-
 static void XGI_SetCRT1DE(struct xgi_hw_device_info *HwDeviceExtension,
                unsigned short ModeNo, unsigned short ModeIdIndex,
                unsigned short RefreshRateTableIndex,
@@ -1084,33 +873,25 @@ static void XGI_SetCRT1DE(struct xgi_hw_device_info *HwDeviceExtension,
 
        unsigned char data;
 
-       resindex = XGI_GetResInfo(ModeNo, ModeIdIndex, pVBInfo);
+       resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
 
-       if (ModeNo <= 0x13) {
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               tempax = pVBInfo->StResInfo[resindex].HTotal;
-               tempbx = pVBInfo->StResInfo[resindex].VTotal;
-       } else {
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               tempax = pVBInfo->ModeResInfo[resindex].HTotal;
-               tempbx = pVBInfo->ModeResInfo[resindex].VTotal;
-       }
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       tempax = pVBInfo->ModeResInfo[resindex].HTotal;
+       tempbx = pVBInfo->ModeResInfo[resindex].VTotal;
 
        if (modeflag & HalfDCLK)
                tempax = tempax >> 1;
 
-       if (ModeNo > 0x13) {
-               if (modeflag & HalfDCLK)
-                       tempax = tempax << 1;
+       if (modeflag & HalfDCLK)
+               tempax = tempax << 1;
 
-               temp = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
+       temp = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
 
-               if (temp & InterlaceMode)
-                       tempbx = tempbx >> 1;
+       if (temp & InterlaceMode)
+               tempbx = tempbx >> 1;
 
-               if (modeflag & DoubleScanMode)
-                       tempbx = tempbx << 1;
-       }
+       if (modeflag & DoubleScanMode)
+               tempbx = tempbx << 1;
 
        tempcx = 8;
 
@@ -1258,18 +1039,10 @@ static unsigned short XGI_GetVCLK2Ptr(unsigned short ModeNo,
        unsigned short CRT2Index, VCLKIndex;
        unsigned short modeflag, resinfo;
 
-       if (ModeNo <= 0x13) {
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               resinfo = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-               CRT2Index = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-       } else {
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-               CRT2Index = pVBInfo->RefIndex[RefreshRateTableIndex].
-                               Ext_CRT2CRTC;
-       }
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       CRT2Index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
 
        if (pVBInfo->IF_DEF_LVDS == 0) {
                CRT2Index = CRT2Index >> 6; /*  for LCD */
@@ -1318,23 +1091,13 @@ static unsigned short XGI_GetVCLK2Ptr(unsigned short ModeNo,
                                VCLKIndex += 25;
                        }
                } else { /* for CRT2 */
-                       /* Port 3cch */
-                       VCLKIndex = (unsigned char) inb((pVBInfo->P3ca + 0x02));
-                       VCLKIndex = ((VCLKIndex >> 2) & 0x03);
-                       if (ModeNo > 0x13) {
-                               /* di+Ext_CRTVCLK */
-                               VCLKIndex = pVBInfo->RefIndex[
-                                                       RefreshRateTableIndex].
+                       /* di+Ext_CRTVCLK */
+                       VCLKIndex = pVBInfo->RefIndex[RefreshRateTableIndex].
                                                                Ext_CRTVCLK;
-                               VCLKIndex &= IndexMask;
-                       }
+                       VCLKIndex &= IndexMask;
                }
        } else { /* LVDS */
-               if (ModeNo <= 0x13)
-                       VCLKIndex = CRT2Index;
-               else
-                       VCLKIndex = CRT2Index;
-
+               VCLKIndex = CRT2Index;
                VCLKIndex = VCLKIndex >> 6;
                if ((pVBInfo->LCDResInfo == Panel_800x600) ||
                    (pVBInfo->LCDResInfo == Panel_320x480))
@@ -1431,27 +1194,13 @@ static void XGI_SetCRT1FIFO(unsigned short ModeNo,
        data &= 0xfe;
        xgifb_reg_set(pVBInfo->P3c4, 0x3D, data); /* diable auto-threshold */
 
-       if (ModeNo > 0x13) {
-               xgifb_reg_set(pVBInfo->P3c4, 0x08, 0x34);
-               data = xgifb_reg_get(pVBInfo->P3c4, 0x09);
-               data &= 0xC0;
-               xgifb_reg_set(pVBInfo->P3c4, 0x09, data | 0x30);
-               data = xgifb_reg_get(pVBInfo->P3c4, 0x3D);
-               data |= 0x01;
-               xgifb_reg_set(pVBInfo->P3c4, 0x3D, data);
-       } else {
-               if (HwDeviceExtension->jChipType == XG27) {
-                       xgifb_reg_set(pVBInfo->P3c4, 0x08, 0x0E);
-                       data = xgifb_reg_get(pVBInfo->P3c4, 0x09);
-                       data &= 0xC0;
-                       xgifb_reg_set(pVBInfo->P3c4, 0x09, data | 0x20);
-               } else {
-                       xgifb_reg_set(pVBInfo->P3c4, 0x08, 0xAE);
-                       data = xgifb_reg_get(pVBInfo->P3c4, 0x09);
-                       data &= 0xF0;
-                       xgifb_reg_set(pVBInfo->P3c4, 0x09, data);
-               }
-       }
+       xgifb_reg_set(pVBInfo->P3c4, 0x08, 0x34);
+       data = xgifb_reg_get(pVBInfo->P3c4, 0x09);
+       data &= 0xC0;
+       xgifb_reg_set(pVBInfo->P3c4, 0x09, data | 0x30);
+       data = xgifb_reg_get(pVBInfo->P3c4, 0x3D);
+       data |= 0x01;
+       xgifb_reg_set(pVBInfo->P3c4, 0x3D, data);
 
        if (HwDeviceExtension->jChipType == XG21)
                XGI_SetXG21FPBits(pVBInfo); /* Fix SR9[7:6] can't read back */
@@ -1466,13 +1215,9 @@ static void XGI_SetVCLKState(struct xgi_hw_device_info *HwDeviceExtension,
 
        unsigned char index;
 
-       if (ModeNo <= 0x13)
-               VCLK = 0;
-       else {
-               index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
-               index &= IndexMask;
-               VCLK = pVBInfo->VCLKData[index].CLOCK;
-       }
+       index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
+       index &= IndexMask;
+       VCLK = pVBInfo->VCLKData[index].CLOCK;
 
        data = xgifb_reg_get(pVBInfo->P3c4, 0x32);
        data &= 0xf3;
@@ -1508,44 +1253,26 @@ static void XGI_SetCRT1ModeRegs(struct xgi_hw_device_info *HwDeviceExtension,
        unsigned short data, data2, data3, infoflag = 0, modeflag, resindex,
                        xres;
 
-       if (ModeNo > 0x13) {
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               infoflag = pVBInfo->RefIndex[RefreshRateTableIndex].
-                               Ext_InfoFlag;
-       } else
-               /* si+St_ModeFlag */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       infoflag = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
 
        if (xgifb_reg_get(pVBInfo->P3d4, 0x31) & 0x01)
                xgifb_reg_and_or(pVBInfo->P3c4, 0x1F, 0x3F, 0x00);
 
-       if (ModeNo > 0x13)
-               data = infoflag;
-       else
-               data = 0;
-
+       data = infoflag;
        data2 = 0;
-
-       if (ModeNo > 0x13) {
-               if (pVBInfo->ModeType > 0x02) {
-                       data2 |= 0x02;
-                       data3 = pVBInfo->ModeType - ModeVGA;
-                       data3 = data3 << 2;
-                       data2 |= data3;
-               }
-       }
-
+       data2 |= 0x02;
+       data3 = pVBInfo->ModeType - ModeVGA;
+       data3 = data3 << 2;
+       data2 |= data3;
        data &= InterlaceMode;
 
        if (data)
                data2 |= 0x20;
 
        xgifb_reg_and_or(pVBInfo->P3c4, 0x06, ~0x3F, data2);
-       resindex = XGI_GetResInfo(ModeNo, ModeIdIndex, pVBInfo);
-       if (ModeNo <= 0x13)
-               xres = pVBInfo->StResInfo[resindex].HTotal;
-       else
-               xres = pVBInfo->ModeResInfo[resindex].HTotal; /* xres->ax */
+       resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       xres = pVBInfo->ModeResInfo[resindex].HTotal; /* xres->ax */
 
        data = 0x0000;
        if (infoflag & InterlaceMode) {
@@ -1568,18 +1295,10 @@ static void XGI_SetCRT1ModeRegs(struct xgi_hw_device_info *HwDeviceExtension,
        if (modeflag & LineCompareOff)
                data2 |= 0x08;
 
-       if (ModeNo > 0x13) {
-               if (pVBInfo->ModeType == ModeEGA)
-                       data2 |= 0x40;
-       }
-
        xgifb_reg_and_or(pVBInfo->P3c4, 0x0F, ~0x48, data2);
        data = 0x60;
-       if (pVBInfo->ModeType != ModeText) {
-               data = data ^ 0x60;
-               if (pVBInfo->ModeType != ModeEGA)
-                       data = data ^ 0xA0;
-       }
+       data = data ^ 0x60;
+       data = data ^ 0xA0;
        xgifb_reg_and_or(pVBInfo->P3c4, 0x21, 0x1F, data);
 
        XGI_SetVCLKState(HwDeviceExtension, ModeNo, RefreshRateTableIndex,
@@ -1644,38 +1363,13 @@ static void XGI_WriteDAC(unsigned short dl,
 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;
-       const unsigned short *table = NULL;
-
-       if (ModeNo <= 0x13)
-               data = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               data = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-
-       data &= DACInfoFlag;
-       time = 64;
-
-       if (data == 0x00)
-               table = XGINew_MDA_DAC;
-       else if (data == 0x08)
-               table = XGINew_CGA_DAC;
-       else if (data == 0x10)
-               table = XGINew_EGA_DAC;
-       else if (data == 0x18) {
-               time = 256;
-               table = XGINew_VGA_DAC;
-       }
-
-       if (time == 256)
-               j = 16;
-       else
-               j = time;
+       unsigned short data, data2, i, k, m, n, o, si, di, bx, dl, al, ah, dh;
+       const unsigned short *table = XGINew_VGA_DAC;
 
        outb(0xFF, pVBInfo->P3c6);
        outb(0x00, pVBInfo->P3c8);
 
-       for (i = 0; i < j; i++) {
+       for (i = 0; i < 16; i++) {
                data = table[i];
 
                for (k = 0; k < 3; k++) {
@@ -1692,45 +1386,43 @@ static void XGI_LoadDAC(unsigned short ModeNo, unsigned short ModeIdIndex,
                }
        }
 
-       if (time == 256) {
-               for (i = 16; i < 32; i++) {
-                       data = table[i];
-
-                       for (k = 0; k < 3; k++)
-                               outb(data, pVBInfo->P3c9);
-               }
+       for (i = 16; i < 32; i++) {
+               data = table[i];
 
-               si = 32;
+               for (k = 0; k < 3; k++)
+                       outb(data, pVBInfo->P3c9);
+       }
 
-               for (m = 0; m < 9; m++) {
-                       di = si;
-                       bx = si + 0x04;
-                       dl = 0;
+       si = 32;
 
-                       for (n = 0; n < 3; n++) {
-                               for (o = 0; o < 5; o++) {
-                                       dh = table[si];
-                                       ah = table[di];
-                                       al = table[bx];
-                                       si++;
-                                       XGI_WriteDAC(dl, ah, al, dh, pVBInfo);
-                               }
+       for (m = 0; m < 9; m++) {
+               di = si;
+               bx = si + 0x04;
+               dl = 0;
 
-                               si -= 2;
+               for (n = 0; n < 3; n++) {
+                       for (o = 0; o < 5; o++) {
+                               dh = table[si];
+                               ah = table[di];
+                               al = table[bx];
+                               si++;
+                               XGI_WriteDAC(dl, ah, al, dh, pVBInfo);
+                       }
 
-                               for (o = 0; o < 3; o++) {
-                                       dh = table[bx];
-                                       ah = table[di];
-                                       al = table[si];
-                                       si--;
-                                       XGI_WriteDAC(dl, ah, al, dh, pVBInfo);
-                               }
+                       si -= 2;
 
-                               dl++;
+                       for (o = 0; o < 3; o++) {
+                               dh = table[bx];
+                               ah = table[di];
+                               al = table[si];
+                               si--;
+                               XGI_WriteDAC(dl, ah, al, dh, pVBInfo);
                        }
 
-                       si += 5;
+                       dl++;
                }
+
+               si += 5;
        }
 }
 
@@ -1740,34 +1432,20 @@ static void XGI_GetLVDSResInfo(unsigned short ModeNo,
 {
        unsigned short resindex, xres, yres, modeflag;
 
-       if (ModeNo <= 0x13)
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-       else
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
 
-       if (ModeNo <= 0x13)
-               /* si+St_ResInfo */
-               resindex = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-       else
-               /* si+Ext_ResInfo */
-               resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       /* si+Ext_ResInfo */
+       resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
 
-       if (ModeNo <= 0x13) {
-               xres = pVBInfo->StResInfo[resindex].HTotal;
-               yres = pVBInfo->StResInfo[resindex].VTotal;
-       } else {
-               xres = pVBInfo->ModeResInfo[resindex].HTotal;
-               yres = pVBInfo->ModeResInfo[resindex].VTotal;
-       }
-       if (ModeNo > 0x13) {
-               if (modeflag & HalfDCLK)
-                       xres = xres << 1;
+       xres = pVBInfo->ModeResInfo[resindex].HTotal;
+       yres = pVBInfo->ModeResInfo[resindex].VTotal;
 
-               if (modeflag & DoubleScanMode)
-                       yres = yres << 1;
-       }
+       if (modeflag & HalfDCLK)
+               xres = xres << 1;
+
+       if (modeflag & DoubleScanMode)
+               yres = yres << 1;
 
        if (xres == 720)
                xres = 640;
@@ -1789,32 +1467,16 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo,
 
        tempbx = BX;
 
-       if (ModeNo <= 0x13) {
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               tempal = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-       } else {
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-       }
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
 
        tempal = tempal & 0x0f;
 
        if (tempbx <= 1) { /* ExpLink */
-               if (ModeNo <= 0x13) {
-                       /* find no Ext_CRT2CRTC2 */
-                       tempal = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-               } else {
-                       tempal = pVBInfo->RefIndex[RefreshRateTableIndex].
-                                       Ext_CRT2CRTC;
-               }
+               tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
 
                if (pVBInfo->VBInfo & XGI_SetCRT2ToLCDA) {
-                       if (ModeNo <= 0x13)
-                               tempal = pVBInfo->SModeIDTable[ModeIdIndex].
-                                               St_CRT2CRTC2;
-                       else
-                               tempal = pVBInfo->RefIndex[
-                                               RefreshRateTableIndex].
+                       tempal = pVBInfo->RefIndex[RefreshRateTableIndex].
                                                        Ext_CRT2CRTC2;
                }
 
@@ -1882,9 +1544,6 @@ static void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo,
                        tempbx = tempdi[i].MASK;
                        tempdx = pVBInfo->LCDInfo;
 
-                       if (ModeNo <= 0x13) /* alan 09/10/2003 */
-                               tempdx |= SetLCDStdMode;
-
                        if (modeflag & HalfDCLK)
                                tempdx |= SetLCDLowResolution;
 
@@ -2238,15 +1897,8 @@ static void *XGI_GetTVPtr(unsigned short BX, unsigned short ModeNo,
        struct XGI330_TVDataTablStruct *tempdi = NULL;
 
        tempbx = BX;
-
-       if (ModeNo <= 0x13) {
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               tempal = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-       } else {
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-       }
-
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
        tempal = tempal & 0x3f;
        table = tempbx;
 
@@ -2413,11 +2065,7 @@ static void XGI_ModCRT1Regs(unsigned short ModeNo, unsigned short ModeIdIndex,
        struct XGI_LVDSCRT1HDataStruct *LCDPtr = NULL;
        struct XGI_LVDSCRT1VDataStruct *LCDPtr1 = NULL;
 
-       if (ModeNo <= 0x13)
-               index = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-       else
-               index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
-
+       index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
        index = index & IndexMask;
 
        tempbx = 0;
@@ -2530,14 +2178,10 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
 {
        unsigned short tempbx, tempax, tempcx, tempdx, push1, push2, modeflag;
        unsigned long temp, temp1, temp2, temp3, push3;
-       struct XGI330_LCDDataDesStruct *LCDPtr = NULL;
+       struct XGI_LCDDesStruct *LCDPtr = NULL;
        struct XGI330_LCDDataDesStruct2 *LCDPtr1 = NULL;
 
-       if (ModeNo > 0x13)
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-       else
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
        tempbx = 3;
        if (pVBInfo->LCDInfo & EnableScalingLCD)
                LCDPtr1 =
@@ -2550,7 +2194,7 @@ static void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
                                          pVBInfo);
        else
                LCDPtr =
-                   (struct XGI330_LCDDataDesStruct *)
+                   (struct XGI_LCDDesStruct *)
                                XGI_GetLcdPtr(
                                          tempbx,
                                          ModeNo,
@@ -2829,12 +2473,8 @@ static unsigned char XGI_GetVCLKPtr(unsigned short RefreshRateTableIndex,
        unsigned short index, modeflag;
        unsigned char tempal;
 
-       if (ModeNo <= 0x13)
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
 
        if ((pVBInfo->SetFlag & ProgrammingCRT2) &&
            (!(pVBInfo->LCDInfo & EnableScalingLCD))) { /* {LCDA/LCDB} */
@@ -2895,9 +2535,6 @@ static unsigned char XGI_GetVCLKPtr(unsigned short RefreshRateTableIndex,
        if ((pVBInfo->LCDInfo & EnableScalingLCD) && (modeflag & Charx8Dot))
                tempal = tempal ^ tempal; /* ; set to VCLK25MHz always */
 
-       if (ModeNo <= 0x13)
-               return tempal;
-
        tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
        return tempal;
 }
@@ -3079,11 +2716,7 @@ static void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex,
 {
        unsigned short tempax, push, tempbx, temp, modeflag;
 
-       if (ModeNo <= 0x13)
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
        pVBInfo->SetFlag = 0;
        pVBInfo->ModeType = modeflag & ModeTypeMask;
        tempbx = 0;
@@ -3283,17 +2916,8 @@ static void XGI_GetTVInfo(unsigned short ModeNo, unsigned short ModeIdIndex,
        resinfo = 0;
 
        if (pVBInfo->VBInfo & SetCRT2ToTV) {
-               if (ModeNo <= 0x13) {
-                       modeflag = pVBInfo->SModeIDTable[ModeIdIndex].
-                                       St_ModeFlag; /* si+St_ModeFlag */
-                       resinfo = pVBInfo->SModeIDTable[ModeIdIndex].
-                                       St_ResInfo; /* si+St_ResInfo */
-               } else {
-                       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].
-                                       Ext_ModeFlag;
-                       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].
-                                       Ext_RESINFO; /* si+Ext_ResInfo */
-               }
+               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
 
                if (pVBInfo->VBInfo & SetCRT2ToTV) {
                        temp = xgifb_reg_get(pVBInfo->P3d4, 0x35);
@@ -3380,15 +3004,9 @@ static unsigned char XGI_GetLCDInfo(unsigned short ModeNo,
        pVBInfo->LCDTypeInfo = 0;
        pVBInfo->LCDInfo = 0;
 
-       if (ModeNo <= 0x13) {
-               /* si+St_ModeFlag // */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       } else {
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               /* si+Ext_ResInfo // */
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-       }
-
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       /* si+Ext_ResInfo // */
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
        temp = xgifb_reg_get(pVBInfo->P3d4, 0x36); /* Get LCD Res.Info */
        tempbx = temp & 0x0F;
 
@@ -3442,8 +3060,8 @@ static unsigned char XGI_GetLCDInfo(unsigned short ModeNo,
 
        if (pVBInfo->IF_DEF_LVDS == 0) {
                if ((pVBInfo->LCDResInfo == Panel_1400x1050) && (pVBInfo->VBInfo
-                               & SetCRT2ToLCD) && (ModeNo > 0x13) && (resinfo
-                               == 9) && (!(tempbx & EnableScalingLCD)))
+                               & SetCRT2ToLCD) && (resinfo == 9) &&
+                               (!(tempbx & EnableScalingLCD)))
                        /* set to center in 1280x1024 LCDB for Panel_1400x1050 */
                        tempbx |= SetLCDtoNonExpanding;
        }
@@ -3453,12 +3071,9 @@ static unsigned char XGI_GetLCDInfo(unsigned short ModeNo,
                        if (!(tempbx & SetLCDtoNonExpanding)) {
                                tempbx |= XGI_EnableLVDSDDA;
                        } else {
-                               if (ModeNo > 0x13) {
-                                       if (pVBInfo->LCDResInfo
-                                                       == Panel_1024x768) {
-                                               if (resinfo == 4) {/* 512x384 */
-                                                       tempbx |= XGI_EnableLVDSDDA;
-                                               }
+                               if (pVBInfo->LCDResInfo == Panel_1024x768) {
+                                       if (resinfo == 4) {/* 512x384 */
+                                               tempbx |= XGI_EnableLVDSDDA;
                                        }
                                }
                        }
@@ -3474,56 +3089,17 @@ static unsigned char XGI_GetLCDInfo(unsigned short ModeNo,
 
        pVBInfo->LCDInfo = tempbx;
 
-       if (pVBInfo->IF_DEF_LVDS == 0) {
-               if (tempax & (LockLCDBToA | StLCDBToA)) {
-                       if (pVBInfo->VBInfo & SetInSlaveMode) {
-                               if (!(tempax & LockLCDBToA)) {
-                                       if (ModeNo <= 0x13) {
-                                               pVBInfo->VBInfo &=
-                                                       ~(SetSimuScanMode |
-                                                         SetInSlaveMode |
-                                                         SetCRT2ToLCD);
-                                               pVBInfo->VBInfo |=
-                                                       XGI_SetCRT2ToLCDA |
-                                                       SetCRT2ToDualEdge;
-                                       }
-                               }
-                       }
-               }
-       }
-
        return 1;
 }
 
 unsigned char XGI_SearchModeID(unsigned short ModeNo,
                unsigned short *ModeIdIndex, struct vb_device_info *pVBInfo)
 {
-       if (ModeNo <= 5)
-               ModeNo |= 1;
-       if (ModeNo <= 0x13) {
-               for (*ModeIdIndex = 0;; (*ModeIdIndex)++) {
-                       if (pVBInfo->SModeIDTable[*ModeIdIndex].St_ModeID ==
-                           ModeNo)
-                               break;
-                       if (pVBInfo->SModeIDTable[*ModeIdIndex].St_ModeID ==
-                           0xFF)
-                               return 0;
-               }
-
-               if (ModeNo == 0x07)
-                       (*ModeIdIndex)++; /* 400 lines */
-               if (ModeNo <= 3)
-                       (*ModeIdIndex) += 2; /* 400 lines */
-               /* else 350 lines */
-       } else {
-               for (*ModeIdIndex = 0;; (*ModeIdIndex)++) {
-                       if (pVBInfo->EModeIDTable[*ModeIdIndex].Ext_ModeID ==
-                           ModeNo)
-                               break;
-                       if (pVBInfo->EModeIDTable[*ModeIdIndex].Ext_ModeID ==
-                           0xFF)
-                               return 0;
-               }
+       for (*ModeIdIndex = 0;; (*ModeIdIndex)++) {
+               if (pVBInfo->EModeIDTable[*ModeIdIndex].Ext_ModeID == ModeNo)
+                       break;
+               if (pVBInfo->EModeIDTable[*ModeIdIndex].Ext_ModeID == 0xFF)
+                       return 0;
        }
 
        return 1;
@@ -3789,22 +3365,17 @@ static void XGI_GetCRT2ResInfo(unsigned short ModeNo,
 {
        unsigned short xres, yres, modeflag, resindex;
 
-       resindex = XGI_GetResInfo(ModeNo, ModeIdIndex, pVBInfo);
-       if (ModeNo <= 0x13) {
-               xres = pVBInfo->StResInfo[resindex].HTotal;
-               yres = pVBInfo->StResInfo[resindex].VTotal;
-       } else {
-               xres = pVBInfo->ModeResInfo[resindex].HTotal; /* xres->ax */
-               yres = pVBInfo->ModeResInfo[resindex].VTotal; /* yres->bx */
-               /* si+St_ModeFlag */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       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 & HalfDCLK)
-                       xres *= 2;
+       if (modeflag & HalfDCLK)
+               xres *= 2;
 
-               if (modeflag & DoubleScanMode)
-                       yres *= 2;
-       }
+       if (modeflag & DoubleScanMode)
+               yres *= 2;
 
        if (pVBInfo->VBInfo & SetCRT2ToLCD) {
                if (pVBInfo->IF_DEF_LVDS == 0) {
@@ -3868,37 +3439,23 @@ static void XGI_GetRAMDAC2DATA(unsigned short ModeNo,
                               struct vb_device_info *pVBInfo)
 {
        unsigned short tempax, tempbx, temp1, temp2, modeflag = 0, tempcx,
-                       StandTableIndex, CRT1Index;
+                       CRT1Index;
 
        pVBInfo->RVBHCMAX = 1;
        pVBInfo->RVBHCFACT = 1;
-
-       if (ModeNo <= 0x13) {
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               StandTableIndex = XGI_GetModePtr(ModeNo, ModeIdIndex, pVBInfo);
-               tempax = pVBInfo->StandTable[StandTableIndex].CRTC[0];
-               tempbx = pVBInfo->StandTable[StandTableIndex].CRTC[6];
-               temp1 = pVBInfo->StandTable[StandTableIndex].CRTC[7];
-       } else {
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               CRT1Index = pVBInfo->RefIndex[RefreshRateTableIndex].
-                               Ext_CRT1CRTC;
-               CRT1Index &= IndexMask;
-               temp1 = (unsigned short) pVBInfo->
-                       XGINEWUB_CRT1Table[CRT1Index].CR[0];
-               temp2 = (unsigned short) pVBInfo->
-                       XGINEWUB_CRT1Table[CRT1Index].CR[5];
-               tempax = (temp1 & 0xFF) | ((temp2 & 0x03) << 8);
-               tempbx = (unsigned short) pVBInfo->
-                       XGINEWUB_CRT1Table[CRT1Index].CR[8];
-               tempcx = (unsigned short) pVBInfo->
-                       XGINEWUB_CRT1Table[CRT1Index].CR[14] << 8;
-               tempcx &= 0x0100;
-               tempcx = tempcx << 2;
-               tempbx |= tempcx;
-               temp1 = (unsigned short) pVBInfo->
-                       XGINEWUB_CRT1Table[CRT1Index].CR[9];
-       }
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       CRT1Index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
+       CRT1Index &= IndexMask;
+       temp1 = (unsigned short) pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[0];
+       temp2 = (unsigned short) pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[5];
+       tempax = (temp1 & 0xFF) | ((temp2 & 0x03) << 8);
+       tempbx = (unsigned short) pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[8];
+       tempcx = (unsigned short)
+                       pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[14] << 8;
+       tempcx &= 0x0100;
+       tempcx = tempcx << 2;
+       tempbx |= tempcx;
+       temp1 = (unsigned short) pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[9];
 
        if (temp1 & 0x01)
                tempbx |= 0x0100;
@@ -3928,16 +3485,9 @@ static void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex,
        struct SiS_LCDData *LCDPtr = NULL;
        struct SiS_TVData *TVPtr = NULL;
 
-       if (ModeNo <= 0x13) {
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               resinfo = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-       } else {
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-       }
-
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
        pVBInfo->NewFlickerMode = 0;
        pVBInfo->RVBHRS = 50;
 
@@ -4141,11 +3691,7 @@ static unsigned short XGI_GetColorDepth(unsigned short ModeNo,
        short index;
        unsigned short modeflag;
 
-       if (ModeNo <= 0x13)
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
        index = (modeflag & ModeTypeMask) - ModeEGA;
 
        if (index < 0)
@@ -4164,11 +3710,7 @@ static unsigned short XGI_GetOffset(unsigned short ModeNo,
                        ColorDepth[] = { 0x01, 0x02, 0x04 };
 
        modeinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeInfo;
-       if (ModeNo <= 0x14)
-               infoflag = 0;
-       else
-               infoflag = pVBInfo->
-                               RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
+       infoflag = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
 
        index = (modeinfo >> 8) & 0xFF;
 
@@ -4228,12 +3770,9 @@ static void XGI_PreSetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex,
 {
        unsigned short tempcx = 0, CRT1Index = 0, resinfo = 0;
 
-       if (ModeNo > 0x13) {
-               CRT1Index = pVBInfo->
-                               RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-               CRT1Index &= IndexMask;
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-       }
+       CRT1Index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
+       CRT1Index &= IndexMask;
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
 
        XGI_SetCRT2Offset(ModeNo, ModeIdIndex, RefreshRateTableIndex,
                        HwDeviceExtension, pVBInfo);
@@ -4254,17 +3793,10 @@ static void XGI_SetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex,
        unsigned short temp = 0, tempax = 0, tempbx = 0, tempcx = 0,
                        pushbx = 0, CRT1Index = 0, modeflag, resinfo = 0;
 
-       if (ModeNo > 0x13) {
-               CRT1Index = pVBInfo->
-                               RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-               CRT1Index &= IndexMask;
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-       }
-
-       if (ModeNo <= 0x13)
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       CRT1Index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
+       CRT1Index &= IndexMask;
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
 
        /* bainy change table name */
        if (modeflag & HalfDCLK) {
@@ -4422,18 +3954,11 @@ static void XGI_SetLockRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
        unsigned short push1, push2, tempax, tempbx = 0, tempcx, temp, resinfo,
                        modeflag, CRT1Index;
 
-       if (ModeNo <= 0x13) {
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               resinfo = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-       } else {
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-               CRT1Index = pVBInfo->
-                               RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
-               CRT1Index &= IndexMask;
-       }
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       CRT1Index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
+       CRT1Index &= IndexMask;
 
        if (!(pVBInfo->VBInfo & SetInSlaveMode))
                return;
@@ -4500,8 +4025,7 @@ static void XGI_SetLockRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
                        temp -= 6;
                        if (pVBInfo->TVInfo & TVSimuMode) {
                                temp -= 4;
-                               if (ModeNo > 0x13)
-                                       temp -= 10;
+                               temp -= 10;
                        }
                }
        } else {
@@ -4523,14 +4047,6 @@ static void XGI_SetLockRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
                        if (pVBInfo->LCDResInfo != Panel_1280x960 &&
                            pVBInfo->VGAHDE >= 800) {
                                temp -= 7;
-                               if (pVBInfo->ModeType == ModeEGA &&
-                                   pVBInfo->VGAVDE == 1024) {
-                                       temp += 15;
-                                       if (pVBInfo->LCDResInfo !=
-                                               Panel_1280x1024)
-                                               temp += 7;
-                               }
-
                                if (pVBInfo->VGAHDE >= 1280 &&
                                    pVBInfo->LCDResInfo != Panel_1280x960 &&
                                    (pVBInfo->LCDInfo & LCDNonExpanding))
@@ -4546,48 +4062,7 @@ static void XGI_SetLockRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
 
        if (pVBInfo->VBInfo & SetCRT2ToTV) {
                if (pVBInfo->TVInfo & TVSimuMode) {
-                       if ((ModeNo == 0x06) || (ModeNo == 0x10) || (ModeNo
-                                       == 0x11) || (ModeNo == 0x13) || (ModeNo
-                                       == 0x0F)) {
-                               xgifb_reg_set(pVBInfo->Part1Port, 0x07, 0x5b);
-                               xgifb_reg_set(pVBInfo->Part1Port, 0x08, 0x03);
-                       }
-
-                       if ((ModeNo == 0x00) || (ModeNo == 0x01)) {
-                               if (pVBInfo->TVInfo & SetNTSCTV) {
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x07, 0x2A);
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x08, 0x61);
-                               } else {
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x07, 0x2A);
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x08, 0x41);
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x0C, 0xF0);
-                               }
-                       }
-
-                       if ((ModeNo == 0x02) || (ModeNo == 0x03) || (ModeNo
-                                       == 0x07)) {
-                               if (pVBInfo->TVInfo & SetNTSCTV) {
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x07, 0x54);
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x08, 0x00);
-                               } else {
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x07, 0x55);
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x08, 0x00);
-                                       xgifb_reg_set(pVBInfo->Part1Port,
-                                                       0x0C, 0xF0);
-                               }
-                       }
-
-                       if ((ModeNo == 0x04) || (ModeNo == 0x05) || (ModeNo
-                                       == 0x0D) || (ModeNo == 0x50)) {
+                       if (ModeNo == 0x50) {
                                if (pVBInfo->TVInfo & SetNTSCTV) {
                                        xgifb_reg_set(pVBInfo->Part1Port,
                                                        0x07, 0x30);
@@ -4796,18 +4271,10 @@ static void XGI_SetGroup2(unsigned short ModeNo, unsigned short ModeIdIndex,
 
        unsigned long longtemp, tempeax, tempebx, temp2, tempecx;
 
-       if (ModeNo <= 0x13) {
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               resinfo = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-               crt2crtc = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC;
-       } else {
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-               crt2crtc = pVBInfo->RefIndex[RefreshRateTableIndex].
-                               Ext_CRT2CRTC;
-       }
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       crt2crtc = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
 
        tempax = 0;
 
@@ -5245,18 +4712,11 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
 
        struct XGI_LCDDesStruct *LCDBDesPtr = NULL;
 
-       if (ModeNo <= 0x13) {
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-               resinfo = pVBInfo->SModeIDTable[ModeIdIndex].St_ResInfo;
-       } else {
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-               resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
-               CRT1Index = pVBInfo->RefIndex[RefreshRateTableIndex].
-                       Ext_CRT1CRTC;
-               CRT1Index &= IndexMask;
-       }
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       resinfo = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       CRT1Index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT1CRTC;
+       CRT1Index &= IndexMask;
 
        if (!(pVBInfo->VBInfo & SetCRT2ToLCD))
                return;
@@ -5274,16 +4734,6 @@ static void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex,
        xgifb_reg_and_or(pVBInfo->Part2Port, 0x2B, 0x0F, temp);
        temp = 0x01;
 
-       if (pVBInfo->LCDResInfo == Panel_1280x1024) {
-               if (pVBInfo->ModeType == ModeEGA) {
-                       if (pVBInfo->VGAHDE >= 1024) {
-                               temp = 0x02;
-                               if (pVBInfo->LCDInfo & XGI_LCDVESATiming)
-                                       temp = 0x01;
-                       }
-               }
-       }
-
        xgifb_reg_set(pVBInfo->Part2Port, 0x0B, temp);
        tempbx = pVBInfo->VDE; /* RTVACTEO=(VDE-1)&0xFF */
        push1 = tempbx;
@@ -5542,12 +4992,8 @@ static void XGI_SetGroup3(unsigned short ModeNo, unsigned short ModeIdIndex,
        unsigned char *tempdi;
        unsigned short modeflag;
 
-       if (ModeNo <= 0x13)
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
 
        xgifb_reg_set(pVBInfo->Part3Port, 0x00, 0x00);
        if (pVBInfo->TVInfo & TVSetPAL) {
@@ -5605,13 +5051,8 @@ static void XGI_SetGroup4(unsigned short ModeNo, unsigned short ModeIdIndex,
 
        unsigned long tempebx, tempeax, templong;
 
-       if (ModeNo <= 0x13)
-               /* si+St_ResInfo */
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               /* si+Ext_ResInfo */
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-
+       /* si+Ext_ResInfo */
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
        temp = pVBInfo->RVBHCFACT;
        xgifb_reg_set(pVBInfo->Part4Port, 0x13, temp);
 
@@ -5818,32 +5259,22 @@ static unsigned char XGI_XG21CheckLVDSMode(struct xgifb_video_info *xgifb_info,
 {
        unsigned short xres, yres, colordepth, modeflag, resindex;
 
-       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;
-       }
+       resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       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 /= 9;
                xres *= 8;
        }
 
-       if (ModeNo > 0x13) {
-               if ((ModeNo > 0x13) && (modeflag & HalfDCLK))
-                       xres *= 2;
-
-               if ((ModeNo > 0x13) && (modeflag & DoubleScanMode))
-                       yres *= 2;
+       if ((ModeNo > 0x13) && (modeflag & HalfDCLK))
+               xres *= 2;
 
-       }
+       if ((ModeNo > 0x13) && (modeflag & DoubleScanMode))
+               yres *= 2;
 
        if (xres > xgifb_info->lvds_data.LVDSHDE)
                return 0;
@@ -5851,16 +5282,11 @@ static unsigned char XGI_XG21CheckLVDSMode(struct xgifb_video_info *xgifb_info,
        if (yres > xgifb_info->lvds_data.LVDSVDE)
                return 0;
 
-       if (ModeNo > 0x13) {
-               if (xres != xgifb_info->lvds_data.LVDSHDE ||
-                   yres != xgifb_info->lvds_data.LVDSVDE) {
-                       colordepth = XGI_GetColorDepth(ModeNo,
-                                                      ModeIdIndex,
-                                                      pVBInfo);
-                       if (colordepth > 2)
-                               return 0;
-
-               }
+       if (xres != xgifb_info->lvds_data.LVDSHDE ||
+           yres != xgifb_info->lvds_data.LVDSVDE) {
+               colordepth = XGI_GetColorDepth(ModeNo, ModeIdIndex, pVBInfo);
+               if (colordepth > 2)
+                       return 0;
        }
        return 1;
 }
@@ -5895,18 +5321,11 @@ static void xgifb_set_lvds(struct xgifb_video_info *xgifb_info,
        else
                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;
-       }
+       resindex = pVBInfo->EModeIDTable[ModeIdIndex].Ext_RESINFO;
+       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;
@@ -5914,8 +5333,6 @@ static void xgifb_set_lvds(struct xgifb_video_info *xgifb_info,
        LVDSHT = xgifb_info->lvds_data.LVDSHT;
 
        LVDSHBS = xres + (xgifb_info->lvds_data.LVDSHDE - xres) / 2;
-       if ((ModeNo <= 0x13) && (modeflag & HalfDCLK))
-               LVDSHBS -= xres / 4;
 
        if (LVDSHBS > LVDSHT)
                LVDSHBS -= LVDSHT;
@@ -5933,7 +5350,7 @@ static void xgifb_set_lvds(struct xgifb_video_info *xgifb_info,
        LVDSVT = xgifb_info->lvds_data.LVDSVT;
 
        LVDSVBS = yres + (xgifb_info->lvds_data.LVDSVDE - yres) / 2;
-       if ((ModeNo > 0x13) && (modeflag & DoubleScanMode))
+       if (modeflag & DoubleScanMode)
                LVDSVBS += yres / 2;
 
        if (LVDSVBS > LVDSVT)
@@ -6527,7 +5944,7 @@ static void XGI_SetAntiFlicker(unsigned short ModeNo,
                               unsigned short ModeIdIndex,
                               struct vb_device_info *pVBInfo)
 {
-       unsigned short tempbx, index;
+       unsigned short tempbx;
 
        unsigned char tempah;
 
@@ -6536,13 +5953,6 @@ static void XGI_SetAntiFlicker(unsigned short ModeNo,
 
        tempbx = XGI_GetTVPtrIndex(pVBInfo);
        tempbx &= 0xFE;
-
-       if (ModeNo <= 0x13)
-               index = pVBInfo->SModeIDTable[ModeIdIndex].VB_StTVFlickerIndex;
-       else
-               index = pVBInfo->EModeIDTable[ModeIdIndex].VB_ExtTVFlickerIndex;
-
-       tempbx += index;
        tempah = TVAntiFlickList[tempbx];
        tempah = tempah << 4;
 
@@ -6553,19 +5963,12 @@ static void XGI_SetEdgeEnhance(unsigned short ModeNo,
                               unsigned short ModeIdIndex,
                               struct vb_device_info *pVBInfo)
 {
-       unsigned short tempbx, index;
+       unsigned short tempbx;
 
        unsigned char tempah;
 
        tempbx = XGI_GetTVPtrIndex(pVBInfo);
        tempbx &= 0xFE;
-
-       if (ModeNo <= 0x13)
-               index = pVBInfo->SModeIDTable[ModeIdIndex].VB_StTVEdgeIndex;
-       else
-               index = pVBInfo->EModeIDTable[ModeIdIndex].VB_ExtTVEdgeIndex;
-
-       tempbx += index;
        tempah = TVEdgeList[tempbx];
        tempah = tempah << 5;
 
@@ -6631,13 +6034,7 @@ static void XGI_SetYFilter(unsigned short ModeNo, unsigned short ModeIdIndex,
                return;
        }
 
-       if (ModeNo <= 0x13)
-               tempal = pVBInfo->SModeIDTable[ModeIdIndex].
-                               VB_StTVYFilterIndex;
-       else
-               tempal = pVBInfo->EModeIDTable[ModeIdIndex].
-                               VB_ExtTVYFilterIndex;
-
+       tempal = pVBInfo->EModeIDTable[ModeIdIndex].VB_ExtTVYFilterIndex;
        if (tempcl == 0)
                index = tempal * 4;
        else
@@ -6712,16 +6109,14 @@ static void XGI_SetCRT2ModeRegs(unsigned short ModeNo,
                if (pVBInfo->VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToTV
                                | SetCRT2ToLCD)) {
                        tempah = 0x40; /* BTDRAM */
-                       if (ModeNo > 0x13) {
-                               tempcl = pVBInfo->ModeType;
-                               tempcl -= ModeVGA;
-                               if (tempcl >= 0) {
-                                       /* BT Color */
-                                       tempah = (0x008 >> tempcl);
-                                       if (tempah == 0)
-                                               tempah = 1;
-                                       tempah |= 0x040;
-                               }
+                       tempcl = pVBInfo->ModeType;
+                       tempcl -= ModeVGA;
+                       if (tempcl >= 0) {
+                               /* BT Color */
+                               tempah = (0x008 >> tempcl);
+                               if (tempah == 0)
+                                       tempah = 1;
+                               tempah |= 0x040;
                        }
                        if (pVBInfo->VBInfo & SetInSlaveMode)
                                tempah ^= 0x50; /* BTDAC */
@@ -6797,10 +6192,8 @@ static void XGI_SetCRT2ModeRegs(unsigned short ModeNo,
 
                if (pVBInfo->VBInfo & SetCRT2ToTV) {
                        tempah |= 0x020;
-                       if (ModeNo > 0x13) {
-                               if (pVBInfo->VBInfo & DriverMode)
-                                       tempah = tempah ^ 0x20;
-                       }
+                       if (pVBInfo->VBInfo & DriverMode)
+                               tempah = tempah ^ 0x20;
                }
 
                xgifb_reg_and_or(pVBInfo->Part4Port, 0x0D, ~0x0BF, tempah);
@@ -6925,13 +6318,7 @@ unsigned short XGI_GetRatePtrCRT2(struct xgi_hw_device_info *pXGIHWDE,
 
        unsigned short RefreshRateTableIndex, i, modeflag, index, temp;
 
-       if (ModeNo <= 0x13)
-               modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag;
-       else
-               modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
-
-       if (ModeNo < 0x14)
-               return 0xFFFF;
+       modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag;
 
        index = xgifb_reg_get(pVBInfo->P3d4, 0x33);
        index = index >> pVBInfo->SelectCRT2Rate;
@@ -7297,16 +6684,13 @@ static void XGI_SetCRT1Group(struct xgifb_video_info *xgifb_info,
                unsigned short ModeNo, unsigned short ModeIdIndex,
                struct vb_device_info *pVBInfo)
 {
-       unsigned short StandTableIndex, RefreshRateTableIndex, b3CC, temp;
+       unsigned short RefreshRateTableIndex, temp;
 
-       unsigned short XGINew_P3cc = pVBInfo->P3cc;
-
-       StandTableIndex = XGI_GetModePtr(ModeNo, ModeIdIndex, pVBInfo);
-       XGI_SetSeqRegs(ModeNo, StandTableIndex, ModeIdIndex, pVBInfo);
-       outb(pVBInfo->StandTable[StandTableIndex].MISC, pVBInfo->P3c2);
-       XGI_SetCRTCRegs(HwDeviceExtension, StandTableIndex, pVBInfo);
-       XGI_SetATTRegs(ModeNo, StandTableIndex, ModeIdIndex, pVBInfo);
-       XGI_SetGRCRegs(StandTableIndex, pVBInfo);
+       XGI_SetSeqRegs(ModeNo, ModeIdIndex, pVBInfo);
+       outb(pVBInfo->StandTable->MISC, pVBInfo->P3c2);
+       XGI_SetCRTCRegs(HwDeviceExtension, pVBInfo);
+       XGI_SetATTRegs(ModeNo, ModeIdIndex, pVBInfo);
+       XGI_SetGRCRegs(pVBInfo);
        XGI_ClearExt1Regs(pVBInfo);
 
        if (HwDeviceExtension->jChipType == XG27) {
@@ -7340,22 +6724,6 @@ static void XGI_SetCRT1Group(struct xgifb_video_info *xgifb_info,
                                RefreshRateTableIndex, pVBInfo);
        }
 
-       if ((HwDeviceExtension->jChipType >= XG20) &&
-           (HwDeviceExtension->jChipType < XG27)) { /* fix H/W DCLK/2 bug */
-               if ((ModeNo == 0x00) | (ModeNo == 0x01)) {
-                       xgifb_reg_set(pVBInfo->P3c4, 0x2B, 0x4E);
-                       xgifb_reg_set(pVBInfo->P3c4, 0x2C, 0xE9);
-                       b3CC = (unsigned char) inb(XGINew_P3cc);
-                       outb((b3CC |= 0x0C), XGINew_P3cc);
-               } else if ((ModeNo == 0x04) | (ModeNo == 0x05) | (ModeNo
-                               == 0x0D)) {
-                       xgifb_reg_set(pVBInfo->P3c4, 0x2B, 0x1B);
-                       xgifb_reg_set(pVBInfo->P3c4, 0x2C, 0xE3);
-                       b3CC = (unsigned char) inb(XGINew_P3cc);
-                       outb((b3CC |= 0x0C), XGINew_P3cc);
-               }
-       }
-
        if (HwDeviceExtension->jChipType >= XG21) {
                temp = xgifb_reg_get(pVBInfo->P3d4, 0x38);
                if (temp & 0xA0) {
@@ -7394,7 +6762,7 @@ unsigned char XGISetModeNew(struct xgifb_video_info *xgifb_info,
        unsigned short ModeIdIndex;
        struct vb_device_info VBINF;
        struct vb_device_info *pVBInfo = &VBINF;
-       pVBInfo->BaseAddr = (unsigned long) HwDeviceExtension->pjIOAddress;
+       pVBInfo->BaseAddr = xgifb_info->vga_base;
        pVBInfo->IF_DEF_LVDS = 0;
        pVBInfo->IF_DEF_LCDA = 1;
 
@@ -7509,13 +6877,8 @@ unsigned char XGISetModeNew(struct xgifb_video_info *xgifb_info,
                                                   pVBInfo))
                                return 0;
 
-               if (ModeNo <= 0x13) {
-                       pVBInfo->ModeType = pVBInfo->SModeIDTable[ModeIdIndex].
-                                               St_ModeFlag & ModeTypeMask;
-               } else {
-                       pVBInfo->ModeType = pVBInfo->EModeIDTable[ModeIdIndex].
+               pVBInfo->ModeType = pVBInfo->EModeIDTable[ModeIdIndex].
                                                Ext_ModeFlag & ModeTypeMask;
-               }
 
                pVBInfo->SetFlag = 0;
                pVBInfo->VBInfo = DisableCRT2Display;