if(HwInfo->jChipType >= SIS_315H) { SiS_SetupCR5x(SiS_Pr, HwInfo); } 
SiS_OpenCRTC(SiS_Pr); 
SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo,USHORT ModeNo)#endif{   USHORT  ModeIdIndex;   SISIOADDRESS BaseAddr = HwInfo->ulIOAddress;   unsigned char backupreg=0;#ifdef LINUX_KERNEL   USHORT  KeepLockReg;   ULONG   temp;   SiS_Pr->UseCustomMode = FALSE;   SiS_Pr->CRT1UsesCustomMode = FALSE;#endif   if(SiS_Pr->UseCustomMode) {      ModeNo = 0xfe;   }   SiSInitPtr(SiS_Pr, HwInfo);   SiSRegInit(SiS_Pr, BaseAddr);   SiS_GetSysFlags(SiS_Pr, HwInfo);#if defined(LINUX_XF86) && (defined(i386) || defined(__i386) || defined(__i386__) || defined(__AMD64__))   if(pScrn) SiS_Pr->SiS_VGAINFO = SiS_GetSetBIOSScratch(pScrn, 0x489, 0xff);   else#endif         SiS_Pr->SiS_VGAINFO = 0x11;   SiSInitPCIetc(SiS_Pr, HwInfo);   SiSSetLVDSetc(SiS_Pr, HwInfo);   SiSDetermineROMUsage(SiS_Pr, HwInfo);   SiS_Pr->SiS_flag_clearbuffer = 0;   if(!SiS_Pr->UseCustomMode) {#ifdef LINUX_KERNEL      if(!(ModeNo & 0x80)) SiS_Pr->SiS_flag_clearbuffer = 1;#endif      ModeNo &= 0x7f;   }#ifdef LINUX_KERNEL   KeepLockReg = SiS_GetReg(SiS_Pr->SiS_P3c4,0x05);#endif   SiS_SetReg(SiS_Pr->SiS_P3c4,0x05,0x86);   SiS_UnLockCRT2(SiS_Pr, HwInfo);   if(!SiS_Pr->UseCustomMode) {      if(!(SiS_SearchModeID(SiS_Pr, &ModeNo, &ModeIdIndex))) return FALSE;   } else {      ModeIdIndex = 0;   }   SiS_GetVBType(SiS_Pr, HwInfo);   /* Init/restore some VB registers */   if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {      if(HwInfo->jChipType >= SIS_315H) {         SiS_ResetVB(SiS_Pr, HwInfo);	 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x32,0x10);	 SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x00,0x0c);         backupreg = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);      } else {         backupreg = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);      }   }   /* Get VB information (connectors, connected devices) */   SiS_GetVBInfo(SiS_Pr, ModeNo, ModeIdIndex, HwInfo, (SiS_Pr->UseCustomMode) ? 0 : 1);   SiS_SetYPbPr(SiS_Pr, HwInfo);   SiS_SetTVMode(SiS_Pr, ModeNo, ModeIdIndex, HwInfo);   SiS_GetLCDResInfo(SiS_Pr, ModeNo, ModeIdIndex, HwInfo);   SiS_SetLowModeTest(SiS_Pr, ModeNo, HwInfo);#ifdef LINUX_KERNEL   /* 3. Check memory size (Kernel framebuffer driver only) */   temp = SiS_CheckMemorySize(SiS_Pr, HwInfo, ModeNo, ModeIdIndex);   if(!temp) return(0);#endif   if(HwInfo->jChipType >= SIS_315H) {      SiS_SetupCR5x(SiS_Pr, HwInfo);   }   if(SiS_Pr->UseCustomMode) {      SiS_Pr->CRT1UsesCustomMode = TRUE;      SiS_Pr->CSRClock_CRT1 = SiS_Pr->CSRClock;      SiS_Pr->CModeFlag_CRT1 = SiS_Pr->CModeFlag;   } else {      SiS_Pr->CRT1UsesCustomMode = FALSE;   }   /* Set mode on CRT1 */   if( (SiS_Pr->SiS_VBInfo & (SetSimuScanMode | SetCRT2ToLCDA)) ||       (!(SiS_Pr->SiS_VBInfo & SwitchCRT2)) ) {      SiS_SetCRT1Group(SiS_Pr, HwInfo, ModeNo, ModeIdIndex);   }   /* Set mode on CRT2 */   if(SiS_Pr->SiS_VBInfo & (SetSimuScanMode | SwitchCRT2 | SetCRT2ToLCDA)) {      if( (SiS_Pr->SiS_VBType & VB_SISVB)    ||          (SiS_Pr->SiS_IF_DEF_LVDS     == 1) ||          (SiS_Pr->SiS_IF_DEF_CH70xx   != 0) ||          (SiS_Pr->SiS_IF_DEF_TRUMPION != 0) ) {         SiS_SetCRT2Group(SiS_Pr, HwInfo, ModeNo);      }   }   SiS_HandleCRT1(SiS_Pr);   SiS_StrangeStuff(SiS_Pr, HwInfo);   SiS_DisplayOn(SiS_Pr);   SiS_SetRegByte(SiS_Pr->SiS_P3c6,0xFF);   if(HwInfo->jChipType >= SIS_315H) {      if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {         if(!(SiS_IsDualEdge(SiS_Pr, HwInfo))) {	    SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);	 }      }   }   if(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV) {      if(HwInfo->jChipType >= SIS_315H) {         if(!SiS_Pr->SiS_ROMNew) {	    if(SiS_IsVAMode(SiS_Pr,HwInfo)) {	       SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x35,0x01);	    } else {	       SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x35,0xFE);	    }	 }	 SiS_SetReg(SiS_Pr->SiS_P3d4,0x38,backupreg);	 if((IS_SIS650) && (SiS_GetReg(SiS_Pr->SiS_P3d4,0x30) & 0xfc)) {	    if((ModeNo == 0x03) || (ModeNo == 0x10)) {	       SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x51,0x80);	       SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x56,0x08);            }	 }	 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x30) & SetCRT2ToLCD) {	    SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x38,0xfc);	 }      } else if((HwInfo->jChipType == SIS_630) ||                (HwInfo->jChipType == SIS_730)) {         SiS_SetReg(SiS_Pr->SiS_P3d4,0x35,backupreg);      }   }#ifdef LINUX_XF86   if(pScrn) {      /* SetPitch: Adapt to virtual size & position */      if((ModeNo > 0x13) && (dosetpitch)) {         SiS_SetPitch(SiS_Pr, pScrn);      }      /* Backup/Set ModeNo in BIOS scratch area */      SiS_GetSetModeID(pScrn, ModeNo);   }#endif#ifdef LINUX_KERNEL  /* We never lock registers in XF86 */   if(KeepLockReg == 0xA1) SiS_SetReg(SiS_Pr->SiS_P3c4,0x05,0x86);   else SiS_SetReg(SiS_Pr->SiS_P3c4,0x05,0x00);#endif   return TRUE;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/544393fe584d333480659a4bed30f5295355df11/init.c/clean/drivers/video/sis/init.c