} 
} 
SiS_GetLCDResInfo(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,		  PSIS_HW_INFO HwInfo){#ifdef SIS300  UCHAR *ROMAddr = HwInfo->pjVirtualRomBase;  const unsigned char SiS300SeriesLCDRes[] =          { 0,  1,  2,  3,  7,  4,  5,  8,	    0,  0, 10,  0,  0,  0,  0, 15 };#endif#ifdef SIS315H  UCHAR   *myptr = NULL;#endif  USHORT  temp,modeflag,resinfo=0,modexres=0,modeyres=0;  BOOLEAN panelcanscale = FALSE;  SiS_Pr->SiS_LCDResInfo  = 0;  SiS_Pr->SiS_LCDTypeInfo = 0;  SiS_Pr->SiS_LCDInfo     = 0;  SiS_Pr->PanelHRS        = 999; /* HSync start */  SiS_Pr->PanelHRE        = 999; /* HSync end */  SiS_Pr->PanelVRS        = 999; /* VSync start */  SiS_Pr->PanelVRE        = 999; /* VSync end */  SiS_Pr->SiS_NeedRomModeData = FALSE;  if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))) return;  if(ModeNo <= 0x13) {     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;  } else if(SiS_Pr->UseCustomMode) {     modeflag = SiS_Pr->CModeFlag;  } else {     modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;     resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;     modexres = SiS_Pr->SiS_ModeResInfo[resinfo].HTotal;     modeyres = SiS_Pr->SiS_ModeResInfo[resinfo].VTotal;  }  temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);  /* For broken BIOSes: Assume 1024x768 */  if(temp == 0) temp = 0x02;  if((HwInfo->jChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {     SiS_Pr->SiS_LCDTypeInfo = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x7c) >> 2;  } else if((HwInfo->jChipType < SIS_315H) || (HwInfo->jChipType >= SIS_661)) {     SiS_Pr->SiS_LCDTypeInfo = temp >> 4;  } else {     SiS_Pr->SiS_LCDTypeInfo = (temp & 0x0F) - 1;  }  temp &= 0x0f;#ifdef SIS300  if(HwInfo->jChipType < SIS_315H) {     /* Very old BIOSes only know 7 sizes (NetVista 2179, 1.01g) */     if(SiS_Pr->SiS_VBType & VB_SIS301) {        if(temp < 0x0f) temp &= 0x07;     }     /* Translate 300 series LCDRes to 315 series for unified usage */     temp = SiS300SeriesLCDRes[temp];  }#endif  /* Translate to our internal types */  if(HwInfo->jChipType == SIS_550) {     if(temp == Panel310_640x480_2) temp = Panel_640x480_2;     if(temp == Panel310_640x480_3) temp = Panel_640x480_3;  }  if(SiS_Pr->SiS_VBType & VB_SISLVDS) {	/* SiS LVDS */     if(temp == Panel310_1280x768) {        temp = Panel_1280x768_2;     }     if(SiS_Pr->SiS_ROMNew) {        if(temp == Panel661_1280x800) {	   temp = Panel_1280x800_2;	}     }  }  SiS_Pr->SiS_LCDResInfo = temp;  if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {     if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {        SiS_Pr->SiS_LCDResInfo = Panel_Barco1366;     } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848) {        SiS_Pr->SiS_LCDResInfo = Panel_848x480;     }  }  if(SiS_Pr->SiS_VBType & VB_SISVB) {     if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMin301)	SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMin301;  } else {     if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMinLVDS)	SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMinLVDS;  }  temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);  SiS_Pr->SiS_LCDInfo = temp & ~0x000e;  /* Need temp below! */  /* These can't scale no matter what */  switch(SiS_Pr->SiS_LCDResInfo) {  case Panel_1280x960:      SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;  }  panelcanscale = (SiS_Pr->SiS_LCDInfo & DontExpandLCD) ? TRUE : FALSE;  if(!SiS_Pr->UsePanelScaler)          SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;  else if(SiS_Pr->UsePanelScaler == 1) SiS_Pr->SiS_LCDInfo |= DontExpandLCD;  /* Dual link, Pass 1:1 BIOS default, etc. */#ifdef SIS315H  if(HwInfo->jChipType >= SIS_661) {     if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {        if(temp & 0x08) SiS_Pr->SiS_LCDInfo |= LCDPass11;     }     if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {        if(SiS_Pr->SiS_ROMNew) {	   if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;	} else if((myptr = GetLCDStructPtr661(SiS_Pr, HwInfo))) {           if(myptr[2] & 0x01) SiS_Pr->SiS_LCDInfo |= LCDDualLink;	}     }  } else if(HwInfo->jChipType >= SIS_315H) {     if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {        if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x01) SiS_Pr->SiS_LCDInfo |= LCDPass11;     }     if((SiS_Pr->SiS_ROMNew) && (!(SiS_Pr->PanelSelfDetected))) {        SiS_Pr->SiS_LCDInfo &= ~(LCDRGB18Bit);	temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);        if(temp & 0x01) SiS_Pr->SiS_LCDInfo |= LCDRGB18Bit;	if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {	   if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;	}     } else if(!(SiS_Pr->SiS_ROMNew)) {        if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV)) {           if((SiS_Pr->SiS_CustomT == CUT_CLEVO1024) &&	      (SiS_Pr->SiS_LCDResInfo == Panel_1024x768)) {	      SiS_Pr->SiS_LCDInfo |= LCDDualLink;	   }           if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||	      (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||              (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||	      (SiS_Pr->SiS_LCDResInfo == Panel_1680x1050)) {	      SiS_Pr->SiS_LCDInfo |= LCDDualLink;	   }        }     }  }#endif  /* Pass 1:1 */  if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {     /* Always center screen on LVDS (if scaling is disabled) */     SiS_Pr->SiS_LCDInfo &= ~LCDPass11;  } else if(SiS_Pr->SiS_VBType & VB_SISVB) {     if(SiS_Pr->SiS_VBType & VB_SISLVDS) {        /* Always center screen on SiS LVDS (if scaling is disabled) */        SiS_Pr->SiS_LCDInfo &= ~LCDPass11;     } else {        /* By default, pass 1:1 on SiS TMDS (if scaling is supported) */        if(panelcanscale)             SiS_Pr->SiS_LCDInfo |= LCDPass11;        if(SiS_Pr->CenterScreen == 1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;     }  }  SiS_Pr->PanelVCLKIdx300 = VCLK65_300;  SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;  switch(SiS_Pr->SiS_LCDResInfo) {     case Panel_320x480:    SiS_Pr->PanelXRes =  320; SiS_Pr->PanelYRes =  480;     			    SiS_Pr->PanelHT   =  400; SiS_Pr->PanelVT   =  525;			    SiS_Pr->PanelVCLKIdx300 = VCLK28;			    SiS_Pr->PanelVCLKIdx315 = VCLK28;			    break;     case Panel_640x480_2:     case Panel_640x480_3:  SiS_Pr->PanelXRes =  640; SiS_Pr->PanelYRes =  480;     			    SiS_Pr->PanelVRS  =   24; SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx300 = VCLK28;			    SiS_Pr->PanelVCLKIdx315 = VCLK28;			    break;     case Panel_640x480:    SiS_Pr->PanelXRes =  640; SiS_Pr->PanelYRes =  480;     			    			      SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx300 = VCLK28;			    SiS_Pr->PanelVCLKIdx315 = VCLK28;			    break;     case Panel_800x600:    SiS_Pr->PanelXRes =  800; SiS_Pr->PanelYRes =  600;     			    SiS_Pr->PanelHT   = 1056; SiS_Pr->PanelVT   =  628;			    SiS_Pr->PanelHRS  =   40; SiS_Pr->PanelHRE  =  128;			    SiS_Pr->PanelVRS  =    1; SiS_Pr->PanelVRE  =    4;			    SiS_Pr->PanelVCLKIdx300 = VCLK40;			    SiS_Pr->PanelVCLKIdx315 = VCLK40;			    break;     case Panel_1024x600:   SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  600;     			    SiS_Pr->PanelHT   = 1344; SiS_Pr->PanelVT   =  800;			    SiS_Pr->PanelHRS  =   24; SiS_Pr->PanelHRE  =  136;			    SiS_Pr->PanelVRS  =    2 /* 88 */ ; SiS_Pr->PanelVRE  =    6;     			    SiS_Pr->PanelVCLKIdx300 = VCLK65_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK65_315;     			    break;     case Panel_1024x768:   SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  768;     			    SiS_Pr->PanelHT   = 1344; SiS_Pr->PanelVT   =  806;			    SiS_Pr->PanelHRS  =   24; SiS_Pr->PanelHRE  =  136;			    SiS_Pr->PanelVRS  =    3; SiS_Pr->PanelVRE  =    6;			    if(HwInfo->jChipType < SIS_315H) {			       SiS_Pr->PanelHRS = 23;			       			      SiS_Pr->PanelVRE  =    5;			    }			    SiS_Pr->PanelVCLKIdx300 = VCLK65_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK65_315;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1152x768:   SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes =  768;     			    SiS_Pr->PanelHT   = 1344; SiS_Pr->PanelVT   =  806;			    SiS_Pr->PanelHRS  =   24;			    SiS_Pr->PanelVRS  =    3; SiS_Pr->PanelVRE  =    6;			    if(HwInfo->jChipType < SIS_315H) {			       SiS_Pr->PanelHRS = 23;			       			      SiS_Pr->PanelVRE  =    5;			    }     			    SiS_Pr->PanelVCLKIdx300 = VCLK65_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK65_315;     			    break;     case Panel_1152x864:   SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes =  864;     			    break;     case Panel_1280x720:   SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  720;     			    SiS_Pr->PanelHT   = 1650; SiS_Pr->PanelVT   =  750;			    SiS_Pr->PanelHRS  =  110; SiS_Pr->PanelHRE  =   40;			    SiS_Pr->PanelVRS  =    5; SiS_Pr->PanelVRE  =    5;			    SiS_Pr->PanelVCLKIdx315 = VCLK_1280x720;			    /* Data above for TMDS (projector); get from BIOS for LVDS */			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1280x768:   SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  768;     			    if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {			       SiS_Pr->PanelHT   = 1408; SiS_Pr->PanelVT   =  806;			       SiS_Pr->PanelVCLKIdx300 = VCLK81_300; /* ? */			       SiS_Pr->PanelVCLKIdx315 = VCLK81_315; /* ? */			    } else {     			       SiS_Pr->PanelHT   = 1688; SiS_Pr->PanelVT   =  802;			       SiS_Pr->PanelHRS  =   48; SiS_Pr->PanelHRS  =  112;			       SiS_Pr->PanelVRS  =    3; SiS_Pr->PanelVRE  =    6;			       SiS_Pr->PanelVCLKIdx300 = VCLK81_300;			       SiS_Pr->PanelVCLKIdx315 = VCLK81_315;			    }			    break;     case Panel_1280x768_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  768;     			    SiS_Pr->PanelHT   = 1660; SiS_Pr->PanelVT   =  806;			    SiS_Pr->PanelHRS  =   48; SiS_Pr->PanelHRE  =  112;			    SiS_Pr->PanelVRS  =    3; SiS_Pr->PanelVRE  =    6;			    SiS_Pr->PanelVCLKIdx315 = VCLK_1280x768_2;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1280x800:   SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  800;     			    SiS_Pr->PanelHT   = 1408; SiS_Pr->PanelVT   =  816;			    SiS_Pr->PanelHRS   =  21; SiS_Pr->PanelHRE  =   24;			    SiS_Pr->PanelVRS   =   4; SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1280x800_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  800;     			    SiS_Pr->PanelHT   = 1552; SiS_Pr->PanelVT   =  812;			    SiS_Pr->PanelHRS   =  48; SiS_Pr->PanelHRE  =  112;			    SiS_Pr->PanelVRS   =   4; SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315_2;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1280x960:   SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes =  960;     			    SiS_Pr->PanelHT   = 1800; SiS_Pr->PanelVT   = 1000;			    SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK108_3_315;		 	    if(resinfo == SIS_RI_1280x1024) {			       SiS_Pr->PanelVCLKIdx300 = VCLK100_300;			       SiS_Pr->PanelVCLKIdx315 = VCLK100_315;			    }			    break;     case Panel_1280x1024:  SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 1024;     			    SiS_Pr->PanelHT   = 1688; SiS_Pr->PanelVT   = 1066;			    SiS_Pr->PanelHRS  =   48; SiS_Pr->PanelHRE  =  112;			    SiS_Pr->PanelVRS  =    1; SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1400x1050:  SiS_Pr->PanelXRes = 1400; SiS_Pr->PanelYRes = 1050;     			    SiS_Pr->PanelHT   = 1688; SiS_Pr->PanelVT   = 1066;			    SiS_Pr->PanelHRS  =   48; SiS_Pr->PanelHRE  =  112; /* HRE OK for LVDS, not for LCDA */			    SiS_Pr->PanelVRS  =    1; SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1600x1200:  SiS_Pr->PanelXRes = 1600; SiS_Pr->PanelYRes = 1200;     			    SiS_Pr->PanelHT   = 2160; SiS_Pr->PanelVT   = 1250;			    SiS_Pr->PanelHRS  =   64; SiS_Pr->PanelHRE  =  192;			    SiS_Pr->PanelVRS  =    1; SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx315 = VCLK162_315;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1680x1050:  SiS_Pr->PanelXRes = 1680; SiS_Pr->PanelYRes = 1050;     			    SiS_Pr->PanelHT   = 1900; SiS_Pr->PanelVT   = 1066;			    SiS_Pr->PanelHRS  =   26; SiS_Pr->PanelHRE  =   76;			    SiS_Pr->PanelVRS  =    3; SiS_Pr->PanelVRE  =    6;			    SiS_Pr->PanelVCLKIdx315 = VCLK121_315;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_Barco1366:  SiS_Pr->PanelXRes = 1360; SiS_Pr->PanelYRes = 1024;     			    SiS_Pr->PanelHT   = 1688; SiS_Pr->PanelVT   = 1066;     			    break;     case Panel_848x480:    SiS_Pr->PanelXRes =  848; SiS_Pr->PanelYRes =  480;     			    SiS_Pr->PanelHT   = 1088; SiS_Pr->PanelVT   =  525;     			    break;     case Panel_Custom:     SiS_Pr->PanelXRes = SiS_Pr->CP_MaxX;    			    SiS_Pr->PanelYRes = SiS_Pr->CP_MaxY;			    SiS_Pr->PanelHT   = SiS_Pr->CHTotal;			    SiS_Pr->PanelVT   = SiS_Pr->CVTotal;			    if(SiS_Pr->CP_PreferredIndex != -1) {			       SiS_Pr->PanelXRes = SiS_Pr->CP_HDisplay[SiS_Pr->CP_PreferredIndex];    			       SiS_Pr->PanelYRes = SiS_Pr->CP_VDisplay[SiS_Pr->CP_PreferredIndex];			       SiS_Pr->PanelHT   = SiS_Pr->CP_HTotal[SiS_Pr->CP_PreferredIndex];			       SiS_Pr->PanelVT   = SiS_Pr->CP_VTotal[SiS_Pr->CP_PreferredIndex];			       SiS_Pr->PanelHRS  = SiS_Pr->CP_HSyncStart[SiS_Pr->CP_PreferredIndex];			       SiS_Pr->PanelHRE  = SiS_Pr->CP_HSyncEnd[SiS_Pr->CP_PreferredIndex];			       SiS_Pr->PanelVRS  = SiS_Pr->CP_VSyncStart[SiS_Pr->CP_PreferredIndex];			       SiS_Pr->PanelVRE  = SiS_Pr->CP_VSyncEnd[SiS_Pr->CP_PreferredIndex];			       SiS_Pr->PanelHRS -= SiS_Pr->PanelXRes;			       SiS_Pr->PanelHRE -= SiS_Pr->PanelHRS;			       SiS_Pr->PanelVRS -= SiS_Pr->PanelYRes;			       SiS_Pr->PanelVRE -= SiS_Pr->PanelVRS;			       if(SiS_Pr->CP_PrefClock) {			          int idx;			          SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;				  SiS_Pr->PanelVCLKIdx300 = VCLK_CUSTOM_300;				  if(HwInfo->jChipType < SIS_315H) idx = VCLK_CUSTOM_300;				  else				   idx = VCLK_CUSTOM_315;      			          SiS_Pr->SiS_VCLKData[idx].CLOCK =	 		             SiS_Pr->SiS_VBVCLKData[idx].CLOCK = SiS_Pr->CP_PrefClock;      			          SiS_Pr->SiS_VCLKData[idx].SR2B =  	 			     SiS_Pr->SiS_VBVCLKData[idx].Part4_A = SiS_Pr->CP_PrefSR2B;      			          SiS_Pr->SiS_VCLKData[idx].SR2C =	 			     SiS_Pr->SiS_VBVCLKData[idx].Part4_B = SiS_Pr->CP_PrefSR2C;			       }			    }			    break;     default:		    SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  768;     			    SiS_Pr->PanelHT   = 1344; SiS_Pr->PanelVT   =  806;			    break;  }  /* Special cases */  if( (SiS_Pr->SiS_IF_DEF_FSTN)              ||      (SiS_Pr->SiS_IF_DEF_DSTN)              ||      (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||      (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||      (SiS_Pr->SiS_CustomT == CUT_PANEL848) ) {     SiS_Pr->PanelHRS = 999;     SiS_Pr->PanelHRE = 999;  }  if( (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||      (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||      (SiS_Pr->SiS_CustomT == CUT_PANEL848) ) {     SiS_Pr->PanelVRS = 999;     SiS_Pr->PanelVRE = 999;  }  /* DontExpand overrule */  if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {     if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (modeflag & NoSupportLCDScale)) {	/* No scaling for this mode on any panel (LCD=CRT2)*/	SiS_Pr->SiS_LCDInfo |= DontExpandLCD;     }     switch(SiS_Pr->SiS_LCDResInfo) {     case Panel_Custom:     case Panel_1152x864:     case Panel_1280x768:	/* TMDS only */        SiS_Pr->SiS_LCDInfo |= DontExpandLCD;	break;     case Panel_800x600: {        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, 0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);	break;     }     case Panel_1024x768: {        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	   SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	   0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);	break;     }     case Panel_1280x720: {        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	   SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	   0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);	if(SiS_Pr->PanelHT == 1650) {	   SiS_Pr->SiS_LCDInfo |= DontExpandLCD;	}	break;     }     case Panel_1280x768_2: {  /* LVDS only */        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	   SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	   SIS_RI_1152x768,0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);	switch(resinfo) {	case SIS_RI_1280x720:  if(SiS_Pr->UsePanelScaler == -1) {	      			  SiS_Pr->SiS_LCDInfo |= DontExpandLCD;	   		       }	   		       break;	}        break;     }     case Panel_1280x800: {  	/* SiS TMDS special (Averatec 6200 series) */        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	   SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	   SIS_RI_1152x768,SIS_RI_1280x720,SIS_RI_1280x768,0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);        break;     }     case Panel_1280x800_2:  { 	/* SiS LVDS */        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	   SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	   SIS_RI_1152x768,0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);	switch(resinfo) {	case SIS_RI_1280x720:	case SIS_RI_1280x768:  if(SiS_Pr->UsePanelScaler == -1) {	      			  SiS_Pr->SiS_LCDInfo |= DontExpandLCD;	   		       }	   		       break;	}        break;     }     case Panel_1280x960: {        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	   SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	   SIS_RI_1152x768,SIS_RI_1152x864,SIS_RI_1280x720,SIS_RI_1280x768,SIS_RI_1280x800,	   0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);        break;     }     case Panel_1280x1024: {        static const UCHAR nonscalingmodes[] = {	   SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	   SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	   SIS_RI_1152x768,SIS_RI_1152x864,SIS_RI_1280x720,SIS_RI_1280x768,SIS_RI_1280x800,	   SIS_RI_1280x960,0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);	break;     }     case Panel_1400x1050: {        static const UCHAR nonscalingmodes[] = {	     SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	     SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	     SIS_RI_1152x768,SIS_RI_1152x864,SIS_RI_1280x768,SIS_RI_1280x800,SIS_RI_1280x960,	     0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);        switch(resinfo) {	case SIS_RI_1280x720:  if(SiS_Pr->UsePanelScaler == -1) {	      			  SiS_Pr->SiS_LCDInfo |= DontExpandLCD;	   		       }	   		       break;	case SIS_RI_1280x1024: SiS_Pr->SiS_LCDInfo |= DontExpandLCD;	      		       break;	}	break;     }     case Panel_1600x1200: {        static const UCHAR nonscalingmodes[] = {	     SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	     SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	     SIS_RI_1152x768,SIS_RI_1152x864,SIS_RI_1280x720,SIS_RI_1280x768,SIS_RI_1280x800,	     SIS_RI_1280x960,SIS_RI_1360x768,SIS_RI_1360x1024,0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);        break;     }     case Panel_1680x1050: {        static const UCHAR nonscalingmodes[] = {	     SIS_RI_720x480, SIS_RI_720x576, SIS_RI_768x576, SIS_RI_800x480, SIS_RI_848x480,	     SIS_RI_856x480, SIS_RI_960x540, SIS_RI_960x600, SIS_RI_1024x576,SIS_RI_1024x600,	     SIS_RI_1152x768,SIS_RI_1152x864,SIS_RI_1280x960,SIS_RI_1360x768,SIS_RI_1360x1024,	     0xff	};	SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);	break;     }     }  }  if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {     if(SiS_Pr->SiS_CustomT == CUT_PANEL848) {        SiS_Pr->SiS_LCDInfo = 0x80 | 0x40 | 0x20;   /* neg h/v sync, RGB24(D0 = 0) */     }  }#ifdef SIS300  if(HwInfo->jChipType < SIS_315H) {     if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {        if(SiS_Pr->SiS_UseROM) {	   if((ROMAddr[0x233] == 0x12) && (ROMAddr[0x234] == 0x34)) {              if(!(ROMAddr[0x235] & 0x02)) {	         SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD); 	      }	   }        }     } else if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {	if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {           SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);	}     }  }#endif  /* Special cases */  if(modexres == SiS_Pr->PanelXRes && modeyres == SiS_Pr->PanelYRes) {     SiS_Pr->SiS_LCDInfo &= ~LCDPass11;  }  if(SiS_Pr->SiS_IF_DEF_TRUMPION) {     SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);  }  switch(SiS_Pr->SiS_LCDResInfo) {  case Panel_640x480:     SiS_Pr->SiS_LCDInfo |= LCDPass11;     break;  case Panel_1280x800:     /* Don't pass 1:1 by default (TMDS special) */     if(SiS_Pr->CenterScreen == -1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;     break;  case Panel_1280x960:     SiS_Pr->SiS_LCDInfo &= ~LCDPass11;     break;  case Panel_Custom:     if((!SiS_Pr->CP_PrefClock) ||        (modexres > SiS_Pr->PanelXRes) || (modeyres > SiS_Pr->PanelYRes)) {        SiS_Pr->SiS_LCDInfo |= LCDPass11;     }     break;  }  if(SiS_Pr->UseCustomMode) {     SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);  }  /* (In)validate LCDPass11 flag */  if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {     SiS_Pr->SiS_LCDInfo &= ~LCDPass11;  }  /* LVDS DDA */  if(!((HwInfo->jChipType < SIS_315H) && (SiS_Pr->SiS_SetFlag & SetDOSMode))) {     if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {	if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {	   if(ModeNo == 0x12) {	      if(SiS_Pr->SiS_LCDInfo & LCDPass11) {	         SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;	      }	   } else if(ModeNo > 0x13) {	      if(SiS_Pr->SiS_LCDResInfo == Panel_1024x600) {	         if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {	            if((resinfo == SIS_RI_800x600) || (resinfo == SIS_RI_400x300)) {                       SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;		    }		 }	      }	   }	}     }     if(modeflag & HalfDCLK) {        if(SiS_Pr->SiS_IF_DEF_TRUMPION == 1) {	   SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;        } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {	   SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;	} else if(SiS_Pr->SiS_LCDResInfo == Panel_640x480) {	   SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;	} else if(ModeNo > 0x13) {           if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {              if(resinfo == SIS_RI_512x384) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;           } else if(SiS_Pr->SiS_LCDResInfo == Panel_800x600) {              if(resinfo == SIS_RI_400x300) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;           }	}     }  }  /* VESA timing */  if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {     if(SiS_Pr->SiS_VBInfo & SetNotSimuMode) {     	SiS_Pr->SiS_SetFlag |= LCDVESATiming;     }  } else {     SiS_Pr->SiS_SetFlag |= LCDVESATiming;  }#ifdef LINUX_KERNEL#ifdef TWDEBUG  printk(KERN_DEBUG "sisfb: (LCDInfo=0x%04x LCDResInfo=0x%02x LCDTypeInfo=0x%02x)\n",	SiS_Pr->SiS_LCDInfo, SiS_Pr->SiS_LCDResInfo, SiS_Pr->SiS_LCDTypeInfo);#endif#endif#ifdef LINUX_XF86  xf86DrvMsgVerb(0, X_PROBED, 4,  	"(init301: LCDInfo=0x%04x LCDResInfo=0x%02x LCDTypeInfo=0x%02x SetFlag=0x%04x)\n",	SiS_Pr->SiS_LCDInfo, SiS_Pr->SiS_LCDResInfo, SiS_Pr->SiS_LCDTypeInfo, SiS_Pr->SiS_SetFlag);#endif}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/544393fe584d333480659a4bed30f5295355df11/init301.c/clean/drivers/video/sis/init301.c