Lines Matching refs:SiS_Pr

85 static unsigned short	SiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr);
86 static void SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
93 SiS_UnLockCRT2(struct SiS_Private *SiS_Pr)
95 if(SiS_Pr->ChipType == XGI_20)
97 else if(SiS_Pr->ChipType >= SIS_315H)
98 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2f,0x01);
100 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x24,0x01);
105 SiS_LockCRT2(struct SiS_Private *SiS_Pr)
107 if(SiS_Pr->ChipType == XGI_20)
109 else if(SiS_Pr->ChipType >= SIS_315H)
110 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2F,0xFE);
112 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x24,0xFE);
120 SiS_SetRegSR11ANDOR(struct SiS_Private *SiS_Pr, unsigned short DataAND, unsigned short DataOR)
122 if(SiS_Pr->ChipType >= SIS_661) {
126 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,DataAND,DataOR);
135 GetLCDStructPtr661(struct SiS_Private *SiS_Pr)
137 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
148 if((SiS_Pr->SiS_ROMNew) &&
149 ((SiS_Pr->SiS_VBType & VB_SISLVDS) || (!SiS_Pr->PanelSelfDetected))) {
151 if(SiS_Pr->ChipType < SIS_661) reg = 0x3c;
154 idx = (SiS_GetReg(SiS_Pr->SiS_P3d4,reg) & 0x1f) * 26;
169 GetLCDStructPtr661_2(struct SiS_Private *SiS_Pr)
171 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
181 if((SiS_Pr->SiS_ROMNew) &&
182 ((SiS_Pr->SiS_VBType & VB_SISLVDS) || (!SiS_Pr->PanelSelfDetected))) {
184 romptr += ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) * SiS_Pr->SiS661LCD2TableSize);
196 SiS_AdjustCRT2Rate(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
201 modeid = SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID;
203 if(SiS_Pr->SiS_VBType & VB_SISVB) {
205 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
208 if(SiS_Pr->ChipType >= SIS_315H) {
210 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
212 if(SiS_Pr->SiS_VBType & VB_SISRAMDAC202) {
218 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
221 if(SiS_Pr->ChipType >= SIS_315H) {
222 if(SiS_Pr->SiS_VBType & VB_SISVB) {
223 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
229 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
233 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToYPbPr525750|SetCRT2ToAVIDEO|SetCRT2ToSVIDEO|SetCRT2ToSCART)) {
236 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
238 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
239 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
249 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
250 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
255 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
262 for(; SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID == modeid; (*i)--) {
263 infoflag = SiS_Pr->SiS_RefIndex[RRTI + (*i)].Ext_InfoFlag;
272 if(SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID != modeid) break;
273 infoflag = SiS_Pr->SiS_RefIndex[RRTI + (*i)].Ext_InfoFlag;
284 SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
300 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
302 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
305 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
306 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
313 index = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x33) >> SiS_Pr->SiS_SelectCRT2Rate) & 0x0F;
318 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
319 if(SiS_Pr->SiS_VBType & VB_SISVB) {
320 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
321 if(SiS_Pr->SiS_VBType & VB_NoLCD) index = 0;
322 else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index = backupindex = 0;
324 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
325 if(!(SiS_Pr->SiS_VBType & VB_NoLCD)) {
326 temp = LCDRefreshIndex[SiS_GetBIOSLCDResInfo(SiS_Pr)];
331 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) index = 0;
332 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
333 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) index = 0;
338 RRTI = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
339 ModeNo = SiS_Pr->SiS_RefIndex[RRTI].ModeID;
341 if(SiS_Pr->ChipType >= SIS_315H) {
342 if(!(SiS_Pr->SiS_VBInfo & DriverMode)) {
343 if( (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x105) ||
344 (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x107) ) {
352 if(SiS_Pr->SiS_RefIndex[RRTI + i].ModeID != ModeNo) break;
353 temp = SiS_Pr->SiS_RefIndex[RRTI + i].Ext_InfoFlag;
355 if(temp < SiS_Pr->SiS_ModeType) break;
360 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
361 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
362 temp = SiS_Pr->SiS_RefIndex[RRTI + i - 1].Ext_InfoFlag;
369 if((SiS_Pr->SiS_SetFlag & ProgrammingCRT2) && (!(SiS_Pr->SiS_VBInfo & DisableCRT2Display))) {
371 if(!(SiS_AdjustCRT2Rate(SiS_Pr, ModeNo, ModeIdIndex, RRTI, &i))) {
384 SiS_SaveCRT2Info(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
389 SiS_SetReg(SiS_Pr->SiS_P3d4,0x34,ModeNo);
390 temp1 = (SiS_Pr->SiS_VBInfo & SetInSlaveMode) >> 8;
392 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x31,temp2,temp1);
401 SiS_CR36BIOSWord23b(struct SiS_Private *SiS_Pr)
403 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
406 if(SiS_Pr->SiS_UseROM) {
408 temp = 1 << ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) & 0x0f);
417 SiS_CR36BIOSWord23d(struct SiS_Private *SiS_Pr)
419 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
422 if(SiS_Pr->SiS_UseROM) {
424 temp = 1 << ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) & 0x0f);
438 SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime)
441 SiS_GetReg(SiS_Pr->SiS_P3c4, 0x05);
446 SiS_GenericDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
448 SiS_DDC2Delay(SiS_Pr, delay * 36);
454 SiS_LongDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
457 SiS_GenericDelay(SiS_Pr, 6623);
464 SiS_ShortDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
467 SiS_GenericDelay(SiS_Pr, 66);
473 SiS_PanelDelay(struct SiS_Private *SiS_Pr, unsigned short DelayTime)
476 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
480 if(SiS_Pr->ChipType < SIS_315H) {
484 PanelID = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
485 if(SiS_Pr->SiS_VBType & VB_SISVB) {
486 if(SiS_Pr->SiS_VBType & VB_SIS301) PanelID &= 0xf7;
487 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x18) & 0x10)) PanelID = 0x12;
495 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[0];
497 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[1];
499 if(SiS_Pr->SiS_UseROM) {
506 SiS_ShortDelay(SiS_Pr, Delay);
514 if((SiS_Pr->ChipType >= SIS_661) ||
515 (SiS_Pr->ChipType <= SIS_315PRO) ||
516 (SiS_Pr->ChipType == SIS_330) ||
517 (SiS_Pr->SiS_ROMNew)) {
520 SiS_DDC2Delay(SiS_Pr, 0x1000);
522 SiS_DDC2Delay(SiS_Pr, 0x4000);
525 } else if((SiS_Pr->SiS_IF_DEF_LVDS == 1) /* ||
526 (SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
527 (SiS_Pr->SiS_CustomT == CUT_CLEVO1400) */ ) { /* 315 series, LVDS; Special */
529 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
530 PanelID = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
531 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1400) {
532 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x1b) & 0x10)) PanelID = 0x12;
534 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
544 Delay = SiS_Pr->SiS_PanelDelayTblLVDS[DelayIndex].timer[0];
546 Delay = SiS_Pr->SiS_PanelDelayTblLVDS[DelayIndex].timer[1];
548 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
558 SiS_ShortDelay(SiS_Pr, Delay);
561 } else if(SiS_Pr->SiS_VBType & VB_SISVB) { /* 315 series, all bridges */
563 DelayIndex = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
565 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[0];
567 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[1];
570 SiS_DDC2Delay(SiS_Pr, Delay);
581 SiS_PanelDelayLoop(struct SiS_Private *SiS_Pr, unsigned short DelayTime, unsigned short DelayLoop)
585 SiS_PanelDelay(SiS_Pr, DelayTime);
595 SiS_WaitRetrace1(struct SiS_Private *SiS_Pr)
599 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x1f) & 0xc0) return;
600 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x17) & 0x80)) return;
603 while((SiS_GetRegByte(SiS_Pr->SiS_P3da) & 0x08) && --watchdog);
605 while((!(SiS_GetRegByte(SiS_Pr->SiS_P3da) & 0x08)) && --watchdog);
610 SiS_WaitRetrace2(struct SiS_Private *SiS_Pr, unsigned short reg)
615 while((SiS_GetReg(SiS_Pr->SiS_Part1Port,reg) & 0x02) && --watchdog);
617 while((!(SiS_GetReg(SiS_Pr->SiS_Part1Port,reg) & 0x02)) && --watchdog);
622 SiS_WaitVBRetrace(struct SiS_Private *SiS_Pr)
624 if(SiS_Pr->ChipType < SIS_315H) {
626 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
627 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x20)) return;
629 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x80)) {
630 SiS_WaitRetrace1(SiS_Pr);
632 SiS_WaitRetrace2(SiS_Pr, 0x25);
637 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x40)) {
638 SiS_WaitRetrace1(SiS_Pr);
640 SiS_WaitRetrace2(SiS_Pr, 0x30);
647 SiS_VBWait(struct SiS_Private *SiS_Pr)
654 tempal = SiS_GetRegByte(SiS_Pr->SiS_P3da);
668 SiS_VBLongWait(struct SiS_Private *SiS_Pr)
670 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
671 SiS_VBWait(SiS_Pr);
673 SiS_WaitRetrace1(SiS_Pr);
683 SiS_Is301B(struct SiS_Private *SiS_Pr)
685 if(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x01) >= 0xb0) return true;
691 SiS_CRT2IsLCD(struct SiS_Private *SiS_Pr)
693 if(SiS_Pr->ChipType == SIS_730) {
694 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x20) return true;
696 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x30) & 0x20) return true;
701 SiS_IsDualEdge(struct SiS_Private *SiS_Pr)
704 if(SiS_Pr->ChipType >= SIS_315H) {
705 if((SiS_Pr->ChipType != SIS_650) || (SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xf0)) {
706 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableDualEdge) return true;
714 SiS_IsVAMode(struct SiS_Private *SiS_Pr)
719 if(SiS_Pr->ChipType >= SIS_315H) {
720 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
729 SiS_IsVAorLCD(struct SiS_Private *SiS_Pr)
731 if(SiS_IsVAMode(SiS_Pr)) return true;
732 if(SiS_CRT2IsLCD(SiS_Pr)) return true;
738 SiS_IsDualLink(struct SiS_Private *SiS_Pr)
741 if(SiS_Pr->ChipType >= SIS_315H) {
742 if((SiS_CRT2IsLCD(SiS_Pr)) ||
743 (SiS_IsVAMode(SiS_Pr))) {
744 if(SiS_Pr->SiS_LCDInfo & LCDDualLink) return true;
753 SiS_TVEnabled(struct SiS_Private *SiS_Pr)
755 if((SiS_GetReg(SiS_Pr->SiS_Part2Port,0x00) & 0x0f) != 0x0c) return true;
756 if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
757 if(SiS_GetReg(SiS_Pr->SiS_Part2Port,0x4d) & 0x10) return true;
765 SiS_LCDAEnabled(struct SiS_Private *SiS_Pr)
767 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x13) & 0x04) return true;
774 SiS_WeHaveBacklightCtrl(struct SiS_Private *SiS_Pr)
776 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->ChipType < SIS_661)) {
777 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x79) & 0x10) return true;
785 SiS_IsNotM650orLater(struct SiS_Private *SiS_Pr)
789 if(SiS_Pr->ChipType == SIS_650) {
790 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xf0;
794 } else if(SiS_Pr->ChipType >= SIS_661) return false;
801 SiS_IsYPbPr(struct SiS_Private *SiS_Pr)
803 if(SiS_Pr->ChipType >= SIS_315H) {
805 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableCHYPbPr) return true;
813 SiS_IsChScart(struct SiS_Private *SiS_Pr)
815 if(SiS_Pr->ChipType >= SIS_315H) {
817 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableCHScart) return true;
825 SiS_IsTVOrYPbPrOrScart(struct SiS_Private *SiS_Pr)
829 if(SiS_Pr->ChipType >= SIS_315H) {
830 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
832 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
836 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
845 SiS_IsLCDOrLCDA(struct SiS_Private *SiS_Pr)
849 if(SiS_Pr->ChipType >= SIS_315H) {
850 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
852 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
855 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
863 SiS_HaveBridge(struct SiS_Private *SiS_Pr)
867 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
869 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
870 flag = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x00);
877 SiS_BridgeIsEnabled(struct SiS_Private *SiS_Pr)
881 if(SiS_HaveBridge(SiS_Pr)) {
882 flag = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
883 if(SiS_Pr->ChipType < SIS_315H) {
895 SiS_BridgeInSlavemode(struct SiS_Private *SiS_Pr)
899 flag1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31);
911 SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo)
916 if(!(SiS_Pr->SiS_ChSW)) return;
918 acpibase = sisfb_read_lpc_pci_dword(SiS_Pr, 0x74);
934 SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
940 SiS_Pr->SiS_SetFlag = 0;
942 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
944 SiS_Pr->SiS_ModeType = modeflag & ModeTypeMask;
946 if((ModeNo > 0x13) && (!SiS_Pr->UseCustomMode)) {
947 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
952 if(SiS_HaveBridge(SiS_Pr)) {
954 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
956 tempax = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) << 8;
961 if(SiS_Pr->ChipType >= SIS_315H) {
962 if(SiS_Pr->SiS_VBType & VB_SISLCDA) {
965 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x31,0xbf);
967 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & (DriverMode >> 8))) {
969 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x38,0xfc);
972 if(SiS_Pr->SiS_UseLCDA) {
973 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xF0) {
974 if((ModeNo <= 0x13) || (!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & (DriverMode >> 8)))) {
975 SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x38,(EnableDualEdge | SetToLCDA));
980 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
986 if(SiS_Pr->ChipType >= SIS_661) { /* New CR layout */
988 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & 0x04) {
989 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35) & 0xe0;
991 else if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
997 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
998 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1002 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1012 if(!(SiS_Pr->SiS_VBType & VB_SISVGA2)) {
1016 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1026 if(SiS_Pr->ChipType >= SIS_315H) {
1027 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1039 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1052 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1072 if(SiS_Pr->ChipType >= SIS_315H) {
1077 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1085 if(SiS_Pr->ChipType >= SIS_315H) {
1102 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
1103 if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
1104 ((SiS_Pr->SiS_VBType & VB_NoLCD) && (tempbx & SetCRT2ToLCD)) ) {
1117 if(SiS_BridgeIsEnabled(SiS_Pr)) {
1119 if(SiS_BridgeInSlavemode(SiS_Pr)) {
1143 SiS_Pr->SiS_VBInfo = tempbx;
1146 if(SiS_Pr->ChipType == SIS_630) {
1147 SiS_SetChrontelGPIO(SiS_Pr, SiS_Pr->SiS_VBInfo);
1153 SiS_Pr->SiS_VBInfo, SiS_Pr->SiS_SetFlag);
1162 SiS_SetYPbPr(struct SiS_Private *SiS_Pr)
1175 SiS_Pr->SiS_YPbPr = 0;
1176 if(SiS_Pr->ChipType >= SIS_661) return;
1178 if(SiS_Pr->SiS_VBType) {
1179 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1180 SiS_Pr->SiS_YPbPr = YPbPrHiVision;
1184 if(SiS_Pr->ChipType >= SIS_315H) {
1185 if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
1186 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1189 case 0x00: SiS_Pr->SiS_YPbPr = YPbPr525i; break;
1190 case 0x01: SiS_Pr->SiS_YPbPr = YPbPr525p; break;
1191 case 0x02: SiS_Pr->SiS_YPbPr = YPbPr750p; break;
1192 case 0x03: SiS_Pr->SiS_YPbPr = YPbPrHiVision; break;
1205 SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
1207 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
1209 unsigned char OutputSelect = *SiS_Pr->pSiS_OutputSelect;
1211 SiS_Pr->SiS_TVMode = 0;
1213 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) return;
1214 if(SiS_Pr->UseCustomMode) return;
1217 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
1220 if(SiS_Pr->ChipType < SIS_661) {
1222 if(SiS_Pr->SiS_VBInfo & SetPALTV) SiS_Pr->SiS_TVMode |= TVSetPAL;
1224 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1226 if((SiS_Pr->ChipType == SIS_630) ||
1227 (SiS_Pr->ChipType == SIS_730)) {
1230 } else if(SiS_Pr->ChipType >= SIS_315H) {
1232 if(SiS_Pr->ChipType < XGI_20) {
1234 if(SiS_Pr->ChipType >= SIS_330) romindex = 0x11b;
1238 if(romindex && SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
1241 SiS_SetRegAND(SiS_Pr->SiS_P3d4,temp,0x3F);
1244 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,temp);
1245 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
1247 SiS_Pr->SiS_TVMode |= TVSetPALM;
1248 SiS_Pr->SiS_TVMode &= ~TVSetPAL;
1250 SiS_Pr->SiS_TVMode |= TVSetPALN;
1254 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1259 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1260 if(SiS_Pr->SiS_YPbPr == YPbPr750p) SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;
1261 else if(SiS_Pr->SiS_YPbPr == YPbPr525p) SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;
1262 else if(SiS_Pr->SiS_YPbPr == YPbPrHiVision) SiS_Pr->SiS_TVMode |= TVSetHiVision;
1263 else SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;
1264 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetYPbPr525p | TVSetYPbPr525i)) {
1265 SiS_Pr->SiS_VBInfo &= ~SetCRT2ToHiVision;
1266 SiS_Pr->SiS_VBInfo |= SetCRT2ToYPbPr525750;
1267 } else if(SiS_Pr->SiS_TVMode & TVSetHiVision) {
1268 SiS_Pr->SiS_TVMode |= TVSetPAL;
1271 } else if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1272 if(SiS_Pr->SiS_CHOverScan) {
1273 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
1274 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1275 if((temp & TVOverScan) || (SiS_Pr->SiS_CHOverScan == 1)) {
1276 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1278 } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1279 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x79);
1280 if((temp & 0x80) || (SiS_Pr->SiS_CHOverScan == 1)) {
1281 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1284 if(SiS_Pr->SiS_CHSOverScan) {
1285 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1288 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1289 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1290 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
1291 if(temp & EnablePALM) SiS_Pr->SiS_TVMode |= TVSetPALM;
1292 else if(temp & EnablePALN) SiS_Pr->SiS_TVMode |= TVSetPALN;
1295 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1303 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1305 SiS_Pr->SiS_TVMode |= TVSetPAL;
1307 SiS_Pr->SiS_TVMode |= TVSetPALN;
1309 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1310 SiS_Pr->SiS_TVMode &= ~TVSetPAL;
1312 SiS_Pr->SiS_TVMode |= TVSetPALM;
1316 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1319 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1320 if(SiS_Pr->SiS_CHOverScan) {
1321 if((temp1 & 0x10) || (SiS_Pr->SiS_CHOverScan == 1)) {
1322 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1326 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1327 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
1329 if(temp1 == 0x00) SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;
1330 else if(temp1 == 0x20) SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;
1331 else if(temp1 == 0x40) SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;
1332 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1333 SiS_Pr->SiS_TVMode |= (TVSetHiVision | TVSetPAL);
1335 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToYPbPr525750 | SetCRT2ToHiVision)) {
1337 SiS_Pr->SiS_TVMode |= TVAspect169;
1339 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x39);
1341 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetHiVision)) {
1342 SiS_Pr->SiS_TVMode |= TVAspect169;
1344 SiS_Pr->SiS_TVMode |= TVAspect43LB;
1347 SiS_Pr->SiS_TVMode |= TVAspect43;
1354 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) SiS_Pr->SiS_TVMode |= TVSetPAL;
1356 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1358 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1359 SiS_Pr->SiS_TVMode |= TVSetPAL;
1360 SiS_Pr->SiS_TVMode &= ~(TVSetPALM | TVSetPALN | TVSetNTSCJ);
1361 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
1362 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525i | TVSetYPbPr525p | TVSetYPbPr750p)) {
1363 SiS_Pr->SiS_TVMode &= ~(TVSetPAL | TVSetNTSCJ | TVSetPALM | TVSetPALN);
1367 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
1368 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
1369 SiS_Pr->SiS_TVMode |= TVSetTVSimuMode;
1373 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
1375 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
1376 SiS_Pr->SiS_TVMode |= TVSet525p1024;
1377 } else if(!(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr750p))) {
1378 SiS_Pr->SiS_TVMode |= TVSetNTSC1024;
1383 SiS_Pr->SiS_TVMode |= TVRPLLDIV2XO;
1384 if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) &&
1385 (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
1386 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1387 } else if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) {
1388 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1389 } else if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) {
1390 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
1391 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1397 SiS_Pr->SiS_VBInfo &= ~SetPALTV;
1405 SiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr)
1407 unsigned short temp = SiS_Pr->SiS_LCDResInfo;
1418 SiS_GetLCDInfoBIOS(struct SiS_Private *SiS_Pr)
1424 if((ROMAddr = GetLCDStructPtr661(SiS_Pr))) {
1425 if((temp = SISGETROMW(6)) != SiS_Pr->PanelHT) {
1426 SiS_Pr->SiS_NeedRomModeData = true;
1427 SiS_Pr->PanelHT = temp;
1429 if((temp = SISGETROMW(8)) != SiS_Pr->PanelVT) {
1430 SiS_Pr->SiS_NeedRomModeData = true;
1431 SiS_Pr->PanelVT = temp;
1433 SiS_Pr->PanelHRS = SISGETROMW(10);
1434 SiS_Pr->PanelHRE = SISGETROMW(12);
1435 SiS_Pr->PanelVRS = SISGETROMW(14);
1436 SiS_Pr->PanelVRE = SISGETROMW(16);
1437 SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;
1438 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].CLOCK =
1439 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].CLOCK = (unsigned short)((unsigned char)ROMAddr[18]);
1440 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2B =
1441 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_A = ROMAddr[19];
1442 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2C =
1443 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_B = ROMAddr[20];
1450 SiS_CheckScaling(struct SiS_Private *SiS_Pr, unsigned short resinfo,
1456 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ||
1457 (SiS_Pr->UsePanelScaler == -1)) {
1458 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1466 SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
1471 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
1480 SiS_Pr->SiS_LCDResInfo = 0;
1481 SiS_Pr->SiS_LCDTypeInfo = 0;
1482 SiS_Pr->SiS_LCDInfo = 0;
1483 SiS_Pr->PanelHRS = 999; /* HSync start */
1484 SiS_Pr->PanelHRE = 999; /* HSync end */
1485 SiS_Pr->PanelVRS = 999; /* VSync start */
1486 SiS_Pr->PanelVRE = 999; /* VSync end */
1487 SiS_Pr->SiS_NeedRomModeData = false;
1490 SiS_Pr->Alternate1600x1200 = false;
1492 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))) return;
1494 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
1496 if((ModeNo > 0x13) && (!SiS_Pr->UseCustomMode)) {
1497 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
1498 modexres = SiS_Pr->SiS_ModeResInfo[resinfo].HTotal;
1499 modeyres = SiS_Pr->SiS_ModeResInfo[resinfo].VTotal;
1502 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
1507 if((SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
1508 SiS_Pr->SiS_LCDTypeInfo = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x7c) >> 2;
1509 } else if((SiS_Pr->ChipType < SIS_315H) || (SiS_Pr->ChipType >= SIS_661)) {
1510 SiS_Pr->SiS_LCDTypeInfo = temp >> 4;
1512 SiS_Pr->SiS_LCDTypeInfo = (temp & 0x0F) - 1;
1516 if(SiS_Pr->ChipType < SIS_315H) {
1518 if(SiS_Pr->SiS_VBType & VB_SIS301) {
1528 if(SiS_Pr->ChipType == SIS_550) {
1532 } else if(SiS_Pr->ChipType >= SIS_661) {
1537 if(SiS_Pr->SiS_VBType & VB_SISLVDS) { /* SiS LVDS */
1541 if(SiS_Pr->SiS_ROMNew) {
1548 SiS_Pr->SiS_LCDResInfo = temp;
1551 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1552 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
1553 SiS_Pr->SiS_LCDResInfo = Panel_Barco1366;
1554 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848) {
1555 SiS_Pr->SiS_LCDResInfo = Panel_848x480;
1556 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL856) {
1557 SiS_Pr->SiS_LCDResInfo = Panel_856x480;
1562 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1563 if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMin301)
1564 SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMin301;
1566 if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMinLVDS)
1567 SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMinLVDS;
1570 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);
1571 SiS_Pr->SiS_LCDInfo = temp & ~0x000e;
1575 switch(SiS_Pr->SiS_LCDResInfo) {
1580 SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
1583 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1586 panelcanscale = (bool)(SiS_Pr->SiS_LCDInfo & DontExpandLCD);
1588 if(!SiS_Pr->UsePanelScaler) SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
1589 else if(SiS_Pr->UsePanelScaler == 1) SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1593 if(SiS_Pr->ChipType >= SIS_661) {
1594 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
1595 if(temp & 0x08) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1597 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1598 if(SiS_Pr->SiS_ROMNew) {
1599 if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1600 } else if((myptr = GetLCDStructPtr661(SiS_Pr))) {
1601 if(myptr[2] & 0x01) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1604 } else if(SiS_Pr->ChipType >= SIS_315H) {
1605 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
1606 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x01) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1608 if((SiS_Pr->SiS_ROMNew) && (!(SiS_Pr->PanelSelfDetected))) {
1609 SiS_Pr->SiS_LCDInfo &= ~(LCDRGB18Bit);
1610 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1611 if(temp & 0x01) SiS_Pr->SiS_LCDInfo |= LCDRGB18Bit;
1612 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1613 if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1615 } else if(!(SiS_Pr->SiS_ROMNew)) {
1616 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1617 if((SiS_Pr->SiS_CustomT == CUT_CLEVO1024) &&
1618 (SiS_Pr->SiS_LCDResInfo == Panel_1024x768)) {
1619 SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1621 if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
1622 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
1623 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||
1624 (SiS_Pr->SiS_LCDResInfo == Panel_1680x1050)) {
1625 SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1633 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
1635 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1636 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
1637 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
1639 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1642 if(panelcanscale) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1643 if(SiS_Pr->CenterScreen == 1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1647 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1648 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
1650 switch(SiS_Pr->SiS_LCDResInfo) {
1653 case Panel_320x240_3: SiS_Pr->PanelXRes = 640; SiS_Pr->PanelYRes = 480;
1654 SiS_Pr->PanelVRS = 24; SiS_Pr->PanelVRE = 3;
1655 SiS_Pr->PanelVCLKIdx300 = VCLK28;
1656 SiS_Pr->PanelVCLKIdx315 = VCLK28;
1658 case Panel_640x480: SiS_Pr->PanelXRes = 640; SiS_Pr->PanelYRes = 480;
1659 SiS_Pr->PanelVRE = 3;
1660 SiS_Pr->PanelVCLKIdx300 = VCLK28;
1661 SiS_Pr->PanelVCLKIdx315 = VCLK28;
1663 case Panel_800x600: SiS_Pr->PanelXRes = 800; SiS_Pr->PanelYRes = 600;
1664 SiS_Pr->PanelHT = 1056; SiS_Pr->PanelVT = 628;
1665 SiS_Pr->PanelHRS = 40; SiS_Pr->PanelHRE = 128;
1666 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 4;
1667 SiS_Pr->PanelVCLKIdx300 = VCLK40;
1668 SiS_Pr->PanelVCLKIdx315 = VCLK40;
1670 case Panel_1024x600: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 600;
1671 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 800;
1672 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
1673 SiS_Pr->PanelVRS = 2 /* 88 */ ; SiS_Pr->PanelVRE = 6;
1674 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1675 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
1677 case Panel_1024x768: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768;
1678 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
1679 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
1680 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1681 if(SiS_Pr->ChipType < SIS_315H) {
1682 SiS_Pr->PanelHRS = 23;
1683 SiS_Pr->PanelVRE = 5;
1685 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1686 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
1687 SiS_GetLCDInfoBIOS(SiS_Pr);
1689 case Panel_1152x768: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 768;
1690 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
1691 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
1692 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1693 if(SiS_Pr->ChipType < SIS_315H) {
1694 SiS_Pr->PanelHRS = 23;
1695 SiS_Pr->PanelVRE = 5;
1697 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1698 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
1700 case Panel_1152x864: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 864;
1702 case Panel_1280x720: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 720;
1703 SiS_Pr->PanelHT = 1650; SiS_Pr->PanelVT = 750;
1704 SiS_Pr->PanelHRS = 110; SiS_Pr->PanelHRE = 40;
1705 SiS_Pr->PanelVRS = 5; SiS_Pr->PanelVRE = 5;
1706 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x720;
1708 SiS_GetLCDInfoBIOS(SiS_Pr);
1710 case Panel_1280x768: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 768;
1711 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1712 SiS_Pr->PanelHT = 1408; SiS_Pr->PanelVT = 806;
1713 SiS_Pr->PanelVCLKIdx300 = VCLK81_300; /* ? */
1714 SiS_Pr->PanelVCLKIdx315 = VCLK81_315; /* ? */
1716 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 802;
1717 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRS = 112;
1718 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1719 SiS_Pr->PanelVCLKIdx300 = VCLK81_300;
1720 SiS_Pr->PanelVCLKIdx315 = VCLK81_315;
1723 case Panel_1280x768_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 768;
1724 SiS_Pr->PanelHT = 1660; SiS_Pr->PanelVT = 806;
1725 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1726 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1727 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x768_2;
1728 SiS_GetLCDInfoBIOS(SiS_Pr);
1730 case Panel_1280x800: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 800;
1731 SiS_Pr->PanelHT = 1408; SiS_Pr->PanelVT = 816;
1732 SiS_Pr->PanelHRS = 21; SiS_Pr->PanelHRE = 24;
1733 SiS_Pr->PanelVRS = 4; SiS_Pr->PanelVRE = 3;
1734 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315;
1735 SiS_GetLCDInfoBIOS(SiS_Pr);
1737 case Panel_1280x800_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 800;
1738 SiS_Pr->PanelHT = 1552; SiS_Pr->PanelVT = 812;
1739 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1740 SiS_Pr->PanelVRS = 4; SiS_Pr->PanelVRE = 3;
1741 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315_2;
1742 SiS_GetLCDInfoBIOS(SiS_Pr);
1744 case Panel_1280x854: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 854;
1745 SiS_Pr->PanelHT = 1664; SiS_Pr->PanelVT = 861;
1746 SiS_Pr->PanelHRS = 16; SiS_Pr->PanelHRE = 112;
1747 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1748 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x854;
1749 SiS_GetLCDInfoBIOS(SiS_Pr);
1751 case Panel_1280x960: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 960;
1752 SiS_Pr->PanelHT = 1800; SiS_Pr->PanelVT = 1000;
1753 SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;
1754 SiS_Pr->PanelVCLKIdx315 = VCLK108_3_315;
1756 SiS_Pr->PanelVCLKIdx300 = VCLK100_300;
1757 SiS_Pr->PanelVCLKIdx315 = VCLK100_315;
1760 case Panel_1280x1024: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 1024;
1761 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
1762 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1763 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1764 SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;
1765 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
1766 SiS_GetLCDInfoBIOS(SiS_Pr);
1768 case Panel_1400x1050: SiS_Pr->PanelXRes = 1400; SiS_Pr->PanelYRes = 1050;
1769 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
1770 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1771 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1772 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
1773 SiS_GetLCDInfoBIOS(SiS_Pr);
1775 case Panel_1600x1200: SiS_Pr->PanelXRes = 1600; SiS_Pr->PanelYRes = 1200;
1776 SiS_Pr->PanelHT = 2160; SiS_Pr->PanelVT = 1250;
1777 SiS_Pr->PanelHRS = 64; SiS_Pr->PanelHRE = 192;
1778 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1779 SiS_Pr->PanelVCLKIdx315 = VCLK162_315;
1780 if(SiS_Pr->SiS_VBType & VB_SISTMDSLCDA) {
1781 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
1782 SiS_Pr->PanelHT = 1760; SiS_Pr->PanelVT = 1235;
1783 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 32;
1784 SiS_Pr->PanelVRS = 2; SiS_Pr->PanelVRE = 4;
1785 SiS_Pr->PanelVCLKIdx315 = VCLK130_315;
1786 SiS_Pr->Alternate1600x1200 = true;
1788 } else if(SiS_Pr->SiS_IF_DEF_LVDS) {
1789 SiS_Pr->PanelHT = 2048; SiS_Pr->PanelVT = 1320;
1790 SiS_Pr->PanelHRS = SiS_Pr->PanelHRE = 999;
1791 SiS_Pr->PanelVRS = SiS_Pr->PanelVRE = 999;
1793 SiS_GetLCDInfoBIOS(SiS_Pr);
1795 case Panel_1680x1050: SiS_Pr->PanelXRes = 1680; SiS_Pr->PanelYRes = 1050;
1796 SiS_Pr->PanelHT = 1900; SiS_Pr->PanelVT = 1066;
1797 SiS_Pr->PanelHRS = 26; SiS_Pr->PanelHRE = 76;
1798 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1799 SiS_Pr->PanelVCLKIdx315 = VCLK121_315;
1800 SiS_GetLCDInfoBIOS(SiS_Pr);
1802 case Panel_Barco1366: SiS_Pr->PanelXRes = 1360; SiS_Pr->PanelYRes = 1024;
1803 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
1805 case Panel_848x480: SiS_Pr->PanelXRes = 848; SiS_Pr->PanelYRes = 480;
1806 SiS_Pr->PanelHT = 1088; SiS_Pr->PanelVT = 525;
1808 case Panel_856x480: SiS_Pr->PanelXRes = 856; SiS_Pr->PanelYRes = 480;
1809 SiS_Pr->PanelHT = 1088; SiS_Pr->PanelVT = 525;
1811 case Panel_Custom: SiS_Pr->PanelXRes = SiS_Pr->CP_MaxX;
1812 SiS_Pr->PanelYRes = SiS_Pr->CP_MaxY;
1813 SiS_Pr->PanelHT = SiS_Pr->CHTotal;
1814 SiS_Pr->PanelVT = SiS_Pr->CVTotal;
1815 if(SiS_Pr->CP_PreferredIndex != -1) {
1816 SiS_Pr->PanelXRes = SiS_Pr->CP_HDisplay[SiS_Pr->CP_PreferredIndex];
1817 SiS_Pr->PanelYRes = SiS_Pr->CP_VDisplay[SiS_Pr->CP_PreferredIndex];
1818 SiS_Pr->PanelHT = SiS_Pr->CP_HTotal[SiS_Pr->CP_PreferredIndex];
1819 SiS_Pr->PanelVT = SiS_Pr->CP_VTotal[SiS_Pr->CP_PreferredIndex];
1820 SiS_Pr->PanelHRS = SiS_Pr->CP_HSyncStart[SiS_Pr->CP_PreferredIndex];
1821 SiS_Pr->PanelHRE = SiS_Pr->CP_HSyncEnd[SiS_Pr->CP_PreferredIndex];
1822 SiS_Pr->PanelVRS = SiS_Pr->CP_VSyncStart[SiS_Pr->CP_PreferredIndex];
1823 SiS_Pr->PanelVRE = SiS_Pr->CP_VSyncEnd[SiS_Pr->CP_PreferredIndex];
1824 SiS_Pr->PanelHRS -= SiS_Pr->PanelXRes;
1825 SiS_Pr->PanelHRE -= SiS_Pr->PanelHRS;
1826 SiS_Pr->PanelVRS -= SiS_Pr->PanelYRes;
1827 SiS_Pr->PanelVRE -= SiS_Pr->PanelVRS;
1828 if(SiS_Pr->CP_PrefClock) {
1830 SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;
1831 SiS_Pr->PanelVCLKIdx300 = VCLK_CUSTOM_300;
1832 if(SiS_Pr->ChipType < SIS_315H) idx = VCLK_CUSTOM_300;
1834 SiS_Pr->SiS_VCLKData[idx].CLOCK =
1835 SiS_Pr->SiS_VBVCLKData[idx].CLOCK = SiS_Pr->CP_PrefClock;
1836 SiS_Pr->SiS_VCLKData[idx].SR2B =
1837 SiS_Pr->SiS_VBVCLKData[idx].Part4_A = SiS_Pr->CP_PrefSR2B;
1838 SiS_Pr->SiS_VCLKData[idx].SR2C =
1839 SiS_Pr->SiS_VBVCLKData[idx].Part4_B = SiS_Pr->CP_PrefSR2C;
1843 default: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768;
1844 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
1849 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
1850 (SiS_Pr->SiS_IF_DEF_DSTN) ||
1851 (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
1852 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
1853 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
1854 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
1855 SiS_Pr->PanelHRS = 999;
1856 SiS_Pr->PanelHRE = 999;
1859 if( (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
1860 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
1861 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
1862 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
1863 SiS_Pr->PanelVRS = 999;
1864 SiS_Pr->PanelVRE = 999;
1868 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
1870 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (modeflag & NoSupportLCDScale)) {
1872 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1875 switch(SiS_Pr->SiS_LCDResInfo) {
1880 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1887 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1896 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1905 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1906 if(SiS_Pr->PanelHT == 1650) {
1907 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1917 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1919 case SIS_RI_1280x720: if(SiS_Pr->UsePanelScaler == -1) {
1920 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1932 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1941 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1944 case SIS_RI_1280x768: if(SiS_Pr->UsePanelScaler == -1) {
1945 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1957 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1961 case SIS_RI_1280x800: if(SiS_Pr->UsePanelScaler == -1) {
1962 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1975 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1985 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1995 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1997 case SIS_RI_1280x720: if(SiS_Pr->UsePanelScaler == -1) {
1998 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2001 case SIS_RI_1280x1024: SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2013 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2023 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2030 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2031 if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
2032 SiS_Pr->SiS_LCDInfo = 0x80 | 0x40 | 0x20; /* neg h/v sync, RGB24(D0 = 0) */
2036 if(SiS_Pr->ChipType < SIS_315H) {
2037 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2038 if(SiS_Pr->SiS_UseROM) {
2041 SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
2045 } else if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2046 if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {
2047 SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
2055 if(modexres == SiS_Pr->PanelXRes && modeyres == SiS_Pr->PanelYRes) {
2056 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2059 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
2060 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2063 switch(SiS_Pr->SiS_LCDResInfo) {
2065 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2069 if(SiS_Pr->CenterScreen == -1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2072 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2075 if((!SiS_Pr->CP_PrefClock) ||
2076 (modexres > SiS_Pr->PanelXRes) || (modeyres > SiS_Pr->PanelYRes)) {
2077 SiS_Pr->SiS_LCDInfo |= LCDPass11;
2082 if((SiS_Pr->UseCustomMode) || (SiS_Pr->SiS_CustomT == CUT_UNKNOWNLCD)) {
2083 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2087 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2088 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2092 if(!((SiS_Pr->ChipType < SIS_315H) && (SiS_Pr->SiS_SetFlag & SetDOSMode))) {
2094 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
2095 if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
2097 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
2098 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2101 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x600) {
2102 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2104 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2113 if(SiS_Pr->SiS_IF_DEF_TRUMPION == 1) {
2114 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2115 } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
2116 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2117 } else if(SiS_Pr->SiS_LCDResInfo == Panel_640x480) {
2118 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2120 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
2121 if(resinfo == SIS_RI_512x384) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2122 } else if(SiS_Pr->SiS_LCDResInfo == Panel_800x600) {
2123 if(resinfo == SIS_RI_400x300) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2131 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2132 if(SiS_Pr->SiS_VBInfo & SetNotSimuMode) {
2133 SiS_Pr->SiS_SetFlag |= LCDVESATiming;
2136 SiS_Pr->SiS_SetFlag |= LCDVESATiming;
2141 SiS_Pr->SiS_LCDInfo, SiS_Pr->SiS_LCDResInfo, SiS_Pr->SiS_LCDTypeInfo);
2150 SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
2158 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
2159 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
2160 CRT2Index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
2161 VCLKIndexGEN = (SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02)) >> 2) & 0x03;
2164 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
2165 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
2166 CRT2Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
2167 VCLKIndexGEN = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
2168 VCLKIndexGENCRT = SiS_GetRefCRTVCLK(SiS_Pr, RefreshRateTableIndex,
2169 (SiS_Pr->SiS_SetFlag & ProgrammingCRT2) ? SiS_Pr->SiS_UseWideCRT2 : SiS_Pr->SiS_UseWide);
2172 if(SiS_Pr->SiS_VBType & VB_SISVB) { /* 30x/B/LV */
2174 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
2177 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { /* LCD */
2179 if(SiS_Pr->ChipType < SIS_315H) {
2180 VCLKIndex = SiS_Pr->PanelVCLKIdx300;
2181 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
2185 VCLKIndex = SiS_Pr->PanelVCLKIdx315;
2186 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
2203 if(SiS_Pr->ChipType <= SIS_315PRO) {
2204 if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x42;
2206 if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x00;
2209 if(SiS_Pr->ChipType <= SIS_315PRO) {
2217 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* TV */
2219 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
2220 if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) VCLKIndex = HiTVVCLKDIV2;
2222 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) VCLKIndex = HiTVSimuVCLK;
2223 } else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) VCLKIndex = YPbPr750pVCLK;
2224 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) VCLKIndex = TVVCLKDIV2;
2225 else if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) VCLKIndex = TVVCLKDIV2;
2228 if(SiS_Pr->ChipType < SIS_315H) VCLKIndex += TVCLKBASE_300;
2234 if(SiS_Pr->ChipType < SIS_315H) {
2236 if( (SiS_Pr->ChipType == SIS_630) &&
2237 (SiS_Pr->ChipRevision >= 0x30)) {
2249 if(SiS_Pr->ChipType < SIS_315H) {
2251 if( (SiS_Pr->ChipType != SIS_630) &&
2252 (SiS_Pr->ChipType != SIS_300) ) {
2263 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
2265 if( (SiS_Pr->SiS_IF_DEF_CH70xx != 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) ) {
2269 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2270 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
2272 if(SiS_Pr->SiS_ModeType > ModeVGA) {
2273 if(SiS_Pr->SiS_CHSOverScan) tempbx = 8;
2275 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
2277 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2278 } else if(SiS_Pr->SiS_TVMode & TVSetPALN) {
2280 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2284 case 0: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUNTSC; break;
2285 case 1: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKONTSC; break;
2286 case 2: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPAL; break;
2287 case 3: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPAL; break;
2288 case 4: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPALM; break;
2289 case 5: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPALM; break;
2290 case 6: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPALN; break;
2291 case 7: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPALN; break;
2292 case 8: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKSOPAL; break;
2293 default: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPAL; break;
2297 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
2299 if(SiS_Pr->ChipType < SIS_315H) {
2300 VCLKIndex = SiS_Pr->PanelVCLKIdx300;
2302 VCLKIndex = SiS_Pr->PanelVCLKIdx315;
2307 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) VCLKIndex = 0x44;
2310 if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
2311 if(SiS_Pr->ChipType < SIS_315H) {
2324 if(SiS_Pr->ChipType < SIS_315H) {
2326 if( (SiS_Pr->ChipType == SIS_630) &&
2327 (SiS_Pr->ChipRevision >= 0x30) ) {
2337 if(SiS_Pr->ChipType < SIS_315H) {
2339 if( (SiS_Pr->ChipType != SIS_630) &&
2340 (SiS_Pr->ChipType != SIS_300) ) {
2344 if(SiS_Pr->ChipType == SIS_730) {
2364 SiS_SetCRT2ModeRegs(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
2372 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
2376 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
2378 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
2380 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xAF,0x40);
2381 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2E,0xF7);
2385 for(i=0,j=4; i<3; i++,j++) SiS_SetReg(SiS_Pr->SiS_Part1Port,j,0);
2386 if(SiS_Pr->ChipType >= SIS_315H) {
2387 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0x7F);
2390 tempcl = SiS_Pr->SiS_ModeType;
2392 if(SiS_Pr->ChipType < SIS_315H) {
2397 if(SiS_Pr->SiS_VBType & VB_NoLCD) {
2398 tempbl = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32);
2401 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) || (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
2405 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,tempbl);
2415 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0xA0;
2432 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0x50;
2438 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2440 if(SiS_Pr->ChipType < SIS_315H) {
2441 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,tempah);
2444 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2445 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xa0,tempah);
2446 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
2448 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,tempah);
2450 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xa0,tempah);
2456 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2459 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
2462 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
2464 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
2469 if(SiS_Pr->ChipType < SIS_315H) {
2471 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2474 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,tempah);
2479 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0x08;
2480 else if(!(SiS_IsDualEdge(SiS_Pr))) tempah |= 0x08;
2481 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2E,0xF0,tempah);
2486 if((SiS_Pr->SiS_ModeType == ModeVGA) && (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode))) {
2491 if(SiS_Pr->SiS_VBType & VB_SIS301) {
2492 if(SiS_Pr->PanelXRes < 1280 && SiS_Pr->PanelYRes < 960) tempah &= ~0x80;
2495 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
2496 if(!(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetYPbPr525p))) {
2497 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2503 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0D,0x40,tempah);
2506 if(SiS_Pr->SiS_VBType & VB_SIS301) {
2507 if(SiS_Pr->PanelXRes < 1280 && SiS_Pr->PanelYRes < 960) tempah = 0;
2510 if(SiS_IsDualLink(SiS_Pr)) tempah |= 0x40;
2512 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
2513 if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) {
2518 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0C,tempah);
2522 if(SiS_Pr->ChipType >= SIS_315H) {
2527 if((modeflag & CRT2Mode) && (SiS_Pr->SiS_ModeType > ModeVGA)) {
2528 if(SiS_Pr->SiS_VBInfo & DriverMode) {
2533 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) tempah |= 0x02;
2535 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempah ^= 0x01;
2537 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 1;
2539 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2e,0xF0,tempah);
2546 if( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) && (SiS_Pr->SiS_ModeType > ModeVGA) ) {
2551 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2553 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,tempah);
2562 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2564 if(SiS_Pr->ChipType >= SIS_315H) {
2567 /* unsigned char bridgerev = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x01); */
2583 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2585 if(SiS_IsDualEdge(SiS_Pr)) {
2589 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
2601 if((IS_SIS740) || (SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
2604 if((SiS_Pr->SiS_VBInfo & DisableCRT2Display) ||
2605 ((SiS_Pr->SiS_ROMNew) && (!(ROMAddr[0x5b] & 0x04)))) {
2609 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xcf,tempah);
2610 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,tempbl);
2611 } else if(SiS_Pr->SiS_VBType & VB_SIS301) {
2613 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2c,0xcf); /* For 301 */
2614 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x21,0x3f);
2615 } else if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
2616 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30); /* For 30xLV */
2617 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x21,0xc0);
2618 } else if(SiS_Pr->SiS_VBType & VB_NoLCD) { /* For 301B-DH */
2621 if(SiS_Pr->SiS_TVBlue == 0) {
2623 } else if(SiS_Pr->SiS_TVBlue == -1) {
2629 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
2630 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl2,tempah2);
2634 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2636 if(SiS_IsDualEdge(SiS_Pr)) {
2640 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
2641 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl2,tempah2);
2646 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0x00;
2647 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,0x7f,tempah);
2651 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2653 if(!(SiS_IsDualEdge(SiS_Pr))) tempah = 0x80;
2655 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,tempbl,tempah);
2660 } else if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2663 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x21,0x3f);
2665 if((SiS_Pr->SiS_VBInfo & DisableCRT2Display) ||
2666 ((SiS_Pr->SiS_VBType & VB_NoLCD) &&
2667 (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD))) {
2668 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x23,0x7F);
2670 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x23,0x80);
2676 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2677 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x0D,0x80);
2678 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
2679 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3A,0xC0);
2686 if(SiS_Pr->ChipType >= SIS_315H) {
2688 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
2692 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2694 if(SiS_IsDualEdge(SiS_Pr)) tempbl = 0xff;
2696 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
2698 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
2699 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
2702 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30);
2704 } else if(SiS_Pr->ChipType == SIS_550) {
2706 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
2707 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30);
2723 SiS_GetResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
2726 return ((unsigned short)SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo);
2728 return ((unsigned short)SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO);
2732 SiS_GetCRT2ResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
2736 if(SiS_Pr->UseCustomMode) {
2737 xres = SiS_Pr->CHDisplay;
2738 if(SiS_Pr->CModeFlag & HalfDCLK) xres <<= 1;
2739 SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
2741 SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = SiS_Pr->CVDisplay;
2745 resindex = SiS_GetResInfo(SiS_Pr,ModeNo,ModeIdIndex);
2748 xres = SiS_Pr->SiS_StResInfo[resindex].HTotal;
2749 yres = SiS_Pr->SiS_StResInfo[resindex].VTotal;
2751 xres = SiS_Pr->SiS_ModeResInfo[resindex].HTotal;
2752 yres = SiS_Pr->SiS_ModeResInfo[resindex].VTotal;
2753 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
2756 if(!SiS_Pr->SiS_IF_DEF_DSTN && !SiS_Pr->SiS_IF_DEF_FSTN) {
2758 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_IF_DEF_LVDS == 1)) {
2759 if((ModeNo != 0x03) && (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
2762 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x3a) & 0x01) {
2772 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
2774 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
2775 switch(SiS_Pr->SiS_LCDResInfo) {
2777 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
2778 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2786 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2791 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
2796 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
2805 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2806 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToHiVision)) {
2811 if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
2813 if(SiS_Pr->ChipType >= SIS_315H) {
2814 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x17) & 0x80) yres = 480;
2816 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x80) yres = 480;
2818 if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) yres = 480;
2822 SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
2823 SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = yres;
2831 SiS_GetCRT2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
2838 tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
2840 tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
2841 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
2844 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_IF_DEF_LVDS == 0)) {
2846 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) { /* LCD */
2848 tempbx = SiS_Pr->SiS_LCDResInfo;
2849 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 32;
2852 if(SiS_Pr->SiS_LCDResInfo == Panel_1680x1050) {
2855 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x800) ||
2856 (SiS_Pr->SiS_LCDResInfo == Panel_1280x800_2) ||
2857 (SiS_Pr->SiS_LCDResInfo == Panel_1280x854)) {
2861 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
2867 tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC_NS;
2872 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
2873 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
2874 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2876 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx++;
2884 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
2885 /* if(SiS_Pr->SiS_VGAVDE > 480) SiS_Pr->SiS_TVMode &= (~TVSetTVSimuMode); */
2887 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2889 if(!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) tempbx = 14;
2891 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2892 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempbx = 7;
2893 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tempbx = 6;
2895 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) tempbx += 5;
2897 if(SiS_Pr->SiS_TVMode & TVSetPAL) tempbx = 3;
2899 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) tempbx += 5;
2907 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision) {
2911 if(SiS_Pr->SiS_TVMode & (TVSetPAL | TVSetPALN)) tempal = 9;
2917 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2918 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempal = 8;
2927 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2928 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tempal = 8;
2932 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2933 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempal = 9;
2946 if((SiS_Pr->SiS_IF_DEF_CH70xx) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
2949 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
2951 if(SiS_Pr->SiS_ModeType > ModeVGA) {
2952 if(SiS_Pr->SiS_CHSOverScan) tempbx = 99;
2954 if(SiS_Pr->SiS_TVMode & TVSetPALM) tempbx = 94;
2955 else if(SiS_Pr->SiS_TVMode & TVSetPALN) tempbx = 96;
2958 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx++;
2963 switch(SiS_Pr->SiS_LCDResInfo) {
2981 switch(SiS_Pr->SiS_LCDResInfo) {
2988 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
2991 if(SiS_Pr->SiS_LCDInfo & LCDPass11) tempbx = 30;
2994 if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
2996 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
2997 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
2999 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
3011 SiS_GetRAMDAC2DATA(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3017 SiS_Pr->SiS_RVBHCMAX = 1;
3018 SiS_Pr->SiS_RVBHCFACT = 1;
3022 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3023 index = SiS_GetModePtr(SiS_Pr,ModeNo,ModeIdIndex);
3025 tempax = SiS_Pr->SiS_StandTable[index].CRTC[0];
3026 tempbx = SiS_Pr->SiS_StandTable[index].CRTC[6];
3027 temp1 = SiS_Pr->SiS_StandTable[index].CRTC[7];
3033 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
3034 index = SiS_GetRefCRT1CRTC(SiS_Pr, RefreshRateTableIndex, SiS_Pr->SiS_UseWideCRT2);
3036 tempax = SiS_Pr->SiS_CRT1Table[index].CR[0];
3037 tempax |= (SiS_Pr->SiS_CRT1Table[index].CR[14] << 8);
3039 tempbx = SiS_Pr->SiS_CRT1Table[index].CR[6];
3040 tempcx = SiS_Pr->SiS_CRT1Table[index].CR[13] << 8;
3044 temp1 = SiS_Pr->SiS_CRT1Table[index].CR[7];
3059 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3060 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = tempbx;
3064 SiS_CalcPanelLinkTiming(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
3069 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3070 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
3071 if(SiS_Pr->UseCustomMode) {
3072 ResIndex = SiS_Pr->CHTotal;
3073 if(SiS_Pr->CModeFlag & HalfDCLK) ResIndex <<= 1;
3074 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = ResIndex;
3075 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3078 ResIndex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
3080 ResIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC_NS;
3083 if(SiS_Pr->Alternate1600x1200) ResIndex = 0x20; /* 1600x1200 LCDA */
3084 else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) ResIndex = 0x21; /* 1600x1200 LVDS */
3086 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_NoScaleData[ResIndex].VGAHT;
3087 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_NoScaleData[ResIndex].VGAVT;
3088 SiS_Pr->SiS_HT = SiS_Pr->SiS_NoScaleData[ResIndex].LCDHT;
3089 SiS_Pr->SiS_VT = SiS_Pr->SiS_NoScaleData[ResIndex].LCDVT;
3092 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3093 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3097 SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
3098 SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
3099 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3100 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3101 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT - (SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE);
3102 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT - (SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE);
3107 SiS_GetCRT2DataLVDS(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3113 SiS_GetCRT2ResInfo(SiS_Pr, ModeNo, ModeIdIndex);
3115 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3116 SiS_Pr->SiS_RVBHCMAX = 1;
3117 SiS_Pr->SiS_RVBHCFACT = 1;
3118 SiS_Pr->SiS_NewFlickerMode = 0;
3119 SiS_Pr->SiS_RVBHRS = 50;
3120 SiS_Pr->SiS_RY1COE = 0;
3121 SiS_Pr->SiS_RY2COE = 0;
3122 SiS_Pr->SiS_RY3COE = 0;
3123 SiS_Pr->SiS_RY4COE = 0;
3124 SiS_Pr->SiS_RVBHRS2 = 0;
3127 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3130 SiS_CalcPanelLinkTiming(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3131 SiS_CalcLCDACRT1Timing(SiS_Pr, ModeNo, ModeIdIndex);
3137 backup = SiS_Pr->SiS_IF_DEF_LVDS;
3138 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
3139 SiS_Pr->SiS_IF_DEF_LVDS = 1;
3142 SiS_GetCRT2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
3145 SiS_Pr->SiS_IF_DEF_LVDS = backup;
3148 case 10: LVDSData = SiS_Pr->SiS_LVDS320x240Data_1; break;
3149 case 14: LVDSData = SiS_Pr->SiS_LVDS320x240Data_2; break;
3150 case 12: LVDSData = SiS_Pr->SiS_LVDS640x480Data_1; break;
3151 case 16: LVDSData = SiS_Pr->SiS_LVDS800x600Data_1; break;
3152 case 18: LVDSData = SiS_Pr->SiS_LVDS1024x600Data_1; break;
3153 case 20: LVDSData = SiS_Pr->SiS_LVDS1024x768Data_1; break;
3155 case 80: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_1; break;
3156 case 81: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_2; break;
3157 case 82: LVDSData = SiS_Pr->SiS_LVDSBARCO1024Data_1; break;
3158 case 84: LVDSData = SiS_Pr->SiS_LVDS848x480Data_1; break;
3159 case 85: LVDSData = SiS_Pr->SiS_LVDS848x480Data_2; break;
3161 case 90: LVDSData = SiS_Pr->SiS_CHTVUNTSCData; break;
3162 case 91: LVDSData = SiS_Pr->SiS_CHTVONTSCData; break;
3163 case 92: LVDSData = SiS_Pr->SiS_CHTVUPALData; break;
3164 case 93: LVDSData = SiS_Pr->SiS_CHTVOPALData; break;
3165 case 94: LVDSData = SiS_Pr->SiS_CHTVUPALMData; break;
3166 case 95: LVDSData = SiS_Pr->SiS_CHTVOPALMData; break;
3167 case 96: LVDSData = SiS_Pr->SiS_CHTVUPALNData; break;
3168 case 97: LVDSData = SiS_Pr->SiS_CHTVOPALNData; break;
3169 case 99: LVDSData = SiS_Pr->SiS_CHTVSOPALData; break;
3173 SiS_Pr->SiS_VGAHT = (LVDSData+ResIndex)->VGAHT;
3174 SiS_Pr->SiS_VGAVT = (LVDSData+ResIndex)->VGAVT;
3175 SiS_Pr->SiS_HT = (LVDSData+ResIndex)->LCDHT;
3176 SiS_Pr->SiS_VT = (LVDSData+ResIndex)->LCDVT;
3178 SiS_CalcPanelLinkTiming(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3181 if( (!(SiS_Pr->SiS_VBType & VB_SISVB)) &&
3182 (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
3183 (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) ) {
3184 if( (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ||
3185 (SiS_Pr->SiS_SetFlag & SetDOSMode) ) {
3186 SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
3187 SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
3189 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
3191 SiS_Pr->SiS_HDE = 1280;
3192 SiS_Pr->SiS_VDE = 1024;
3202 SiS_GetCRT2Data301(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3215 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3216 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
3217 } else if(SiS_Pr->UseCustomMode) {
3218 modeflag = SiS_Pr->CModeFlag;
3221 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
3222 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
3224 resinfo661 = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].ROMMODEIDX661;
3225 if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
3226 (SiS_Pr->SiS_SetFlag & LCDVESATiming) &&
3228 (SiS_Pr->SiS_NeedRomModeData) ) {
3229 if((ROMAddr = GetLCDStructPtr661(SiS_Pr))) {
3232 ROMAddr = SiS_Pr->VirtualRomBase;
3239 SiS_Pr->SiS_NewFlickerMode = 0;
3240 SiS_Pr->SiS_RVBHRS = 50;
3241 SiS_Pr->SiS_RY1COE = 0;
3242 SiS_Pr->SiS_RY2COE = 0;
3243 SiS_Pr->SiS_RY3COE = 0;
3244 SiS_Pr->SiS_RY4COE = 0;
3245 SiS_Pr->SiS_RVBHRS2 = 0;
3247 SiS_GetCRT2ResInfo(SiS_Pr,ModeNo,ModeIdIndex);
3249 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
3251 if(SiS_Pr->UseCustomMode) {
3253 SiS_Pr->SiS_RVBHCMAX = 1;
3254 SiS_Pr->SiS_RVBHCFACT = 1;
3255 SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
3256 SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
3258 tempax = SiS_Pr->CHTotal;
3260 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3261 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3265 SiS_GetRAMDAC2DATA(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3269 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
3271 SiS_GetCRT2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
3275 case 2: TVPtr = SiS_Pr->SiS_ExtHiTVData; break;
3276 case 3: TVPtr = SiS_Pr->SiS_ExtPALData; break;
3277 case 4: TVPtr = SiS_Pr->SiS_ExtNTSCData; break;
3278 case 5: TVPtr = SiS_Pr->SiS_Ext525iData; break;
3279 case 6: TVPtr = SiS_Pr->SiS_Ext525pData; break;
3280 case 7: TVPtr = SiS_Pr->SiS_Ext750pData; break;
3281 case 8: TVPtr = SiS_Pr->SiS_StPALData; break;
3282 case 9: TVPtr = SiS_Pr->SiS_StNTSCData; break;
3283 case 10: TVPtr = SiS_Pr->SiS_St525iData; break;
3284 case 11: TVPtr = SiS_Pr->SiS_St525pData; break;
3285 case 12: TVPtr = SiS_Pr->SiS_St750pData; break;
3286 case 13: TVPtr = SiS_Pr->SiS_St1HiTVData; break;
3287 case 14: TVPtr = SiS_Pr->SiS_St2HiTVData; break;
3288 default: TVPtr = SiS_Pr->SiS_StPALData; break;
3291 SiS_Pr->SiS_RVBHCMAX = (TVPtr+ResIndex)->RVBHCMAX;
3292 SiS_Pr->SiS_RVBHCFACT = (TVPtr+ResIndex)->RVBHCFACT;
3293 SiS_Pr->SiS_VGAHT = (TVPtr+ResIndex)->VGAHT;
3294 SiS_Pr->SiS_VGAVT = (TVPtr+ResIndex)->VGAVT;
3295 SiS_Pr->SiS_HDE = (TVPtr+ResIndex)->TVHDE;
3296 SiS_Pr->SiS_VDE = (TVPtr+ResIndex)->TVVDE;
3297 SiS_Pr->SiS_RVBHRS2 = (TVPtr+ResIndex)->RVBHRS2 & 0x0fff;
3299 SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->HALFRVBHRS;
3300 if(SiS_Pr->SiS_RVBHRS2) {
3301 SiS_Pr->SiS_RVBHRS2 = ((SiS_Pr->SiS_RVBHRS2 + 3) >> 1) - 3;
3303 if((TVPtr+ResIndex)->RVBHRS2 & 0x8000) SiS_Pr->SiS_RVBHRS2 -= tempax;
3304 else SiS_Pr->SiS_RVBHRS2 += tempax;
3307 SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->RVBHRS;
3309 SiS_Pr->SiS_NewFlickerMode = ((TVPtr+ResIndex)->FlickerMode) << 7;
3311 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
3317 SiS_Pr->SiS_NewFlickerMode = 0x40;
3320 if(SiS_Pr->SiS_VGAVDE == 350) SiS_Pr->SiS_TVMode |= TVSetTVSimuMode;
3322 SiS_Pr->SiS_HT = ExtHiTVHT;
3323 SiS_Pr->SiS_VT = ExtHiTVVT;
3324 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
3325 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
3326 SiS_Pr->SiS_HT = StHiTVHT;
3327 SiS_Pr->SiS_VT = StHiTVVT;
3331 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
3333 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
3334 SiS_Pr->SiS_HT = 1650;
3335 SiS_Pr->SiS_VT = 750;
3336 } else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
3337 SiS_Pr->SiS_HT = NTSCHT;
3338 if(SiS_Pr->SiS_TVMode & TVSet525p1024) SiS_Pr->SiS_HT = NTSC2HT;
3339 SiS_Pr->SiS_VT = NTSCVT;
3341 SiS_Pr->SiS_HT = NTSCHT;
3342 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) SiS_Pr->SiS_HT = NTSC2HT;
3343 SiS_Pr->SiS_VT = NTSCVT;
3348 SiS_Pr->SiS_RY1COE = (TVPtr+ResIndex)->RY1COE;
3349 SiS_Pr->SiS_RY2COE = (TVPtr+ResIndex)->RY2COE;
3350 SiS_Pr->SiS_RY3COE = (TVPtr+ResIndex)->RY3COE;
3351 SiS_Pr->SiS_RY4COE = (TVPtr+ResIndex)->RY4COE;
3354 SiS_Pr->SiS_RY1COE = 0x00;
3355 SiS_Pr->SiS_RY2COE = 0xf4;
3356 SiS_Pr->SiS_RY3COE = 0x10;
3357 SiS_Pr->SiS_RY4COE = 0x38;
3360 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
3361 SiS_Pr->SiS_HT = NTSCHT;
3362 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) SiS_Pr->SiS_HT = NTSC2HT;
3363 SiS_Pr->SiS_VT = NTSCVT;
3365 SiS_Pr->SiS_HT = PALHT;
3366 SiS_Pr->SiS_VT = PALVT;
3371 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3373 SiS_Pr->SiS_RVBHCMAX = 1;
3374 SiS_Pr->SiS_RVBHCFACT = 1;
3376 if(SiS_Pr->UseCustomMode) {
3378 SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
3379 SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
3381 tempax = SiS_Pr->CHTotal;
3383 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3384 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3390 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
3392 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT;
3393 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT;
3394 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3395 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3398 } else if( (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) && (romptr) && (ROMAddr) ) {
3401 SiS_Pr->SiS_RVBHCMAX = ROMAddr[romptr];
3402 SiS_Pr->SiS_RVBHCFACT = ROMAddr[romptr+1];
3403 SiS_Pr->SiS_VGAHT = ROMAddr[romptr+2] | ((ROMAddr[romptr+3] & 0x0f) << 8);
3404 SiS_Pr->SiS_VGAVT = (ROMAddr[romptr+4] << 4) | ((ROMAddr[romptr+3] & 0xf0) >> 4);
3405 SiS_Pr->SiS_HT = ROMAddr[romptr+5] | ((ROMAddr[romptr+6] & 0x0f) << 8);
3406 SiS_Pr->SiS_VT = (ROMAddr[romptr+7] << 4) | ((ROMAddr[romptr+6] & 0xf0) >> 4);
3407 SiS_Pr->SiS_RVBHRS2 = ROMAddr[romptr+8] | ((ROMAddr[romptr+9] & 0x0f) << 8);
3408 if((SiS_Pr->SiS_RVBHRS2) && (modeflag & HalfDCLK)) {
3409 SiS_Pr->SiS_RVBHRS2 = ((SiS_Pr->SiS_RVBHRS2 + 3) >> 1) - 3;
3411 if(ROMAddr[romptr+9] & 0x80) SiS_Pr->SiS_RVBHRS2 -= tempax;
3412 else SiS_Pr->SiS_RVBHRS2 += tempax;
3414 if(SiS_Pr->SiS_VGAHT) gotit = true;
3416 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
3417 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
3418 SiS_Pr->SiS_RVBHCMAX = 1;
3419 SiS_Pr->SiS_RVBHCFACT = 1;
3420 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT;
3421 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT;
3422 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3423 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3424 SiS_Pr->SiS_RVBHRS2 = 0;
3433 SiS_GetCRT2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
3437 case Panel_1024x768 : LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break;
3438 case Panel_1024x768 + 32: LCDPtr = SiS_Pr->SiS_St2LCD1024x768Data; break;
3440 case Panel_1280x720 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x720Data; break;
3441 case Panel_1280x768_2 : LCDPtr = SiS_Pr->SiS_ExtLCD1280x768_2Data; break;
3442 case Panel_1280x768_2+ 32: LCDPtr = SiS_Pr->SiS_StLCD1280x768_2Data; break;
3444 case Panel_1280x800 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x800Data; break;
3446 case Panel_1280x800_2+ 32: LCDPtr = SiS_Pr->SiS_LCD1280x800_2Data; break;
3448 case Panel_1280x854 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x854Data; break;
3450 case Panel_1280x960 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x960Data; break;
3451 case Panel_1280x1024 : LCDPtr = SiS_Pr->SiS_ExtLCD1280x1024Data; break;
3452 case Panel_1280x1024 + 32: LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break;
3453 case Panel_1400x1050 : LCDPtr = SiS_Pr->SiS_ExtLCD1400x1050Data; break;
3454 case Panel_1400x1050 + 32: LCDPtr = SiS_Pr->SiS_StLCD1400x1050Data; break;
3455 case Panel_1600x1200 : LCDPtr = SiS_Pr->SiS_ExtLCD1600x1200Data; break;
3456 case Panel_1600x1200 + 32: LCDPtr = SiS_Pr->SiS_StLCD1600x1200Data; break;
3458 case Panel_1680x1050 + 32: LCDPtr = SiS_Pr->SiS_LCD1680x1050Data; break;
3459 case 100 : LCDPtr = SiS_Pr->SiS_NoScaleData; break;
3462 case 201 : LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break;
3464 default : LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break;
3467 SiS_Pr->SiS_RVBHCMAX = (LCDPtr+ResIndex)->RVBHCMAX;
3468 SiS_Pr->SiS_RVBHCFACT = (LCDPtr+ResIndex)->RVBHCFACT;
3469 SiS_Pr->SiS_VGAHT = (LCDPtr+ResIndex)->VGAHT;
3470 SiS_Pr->SiS_VGAVT = (LCDPtr+ResIndex)->VGAVT;
3471 SiS_Pr->SiS_HT = (LCDPtr+ResIndex)->LCDHT;
3472 SiS_Pr->SiS_VT = (LCDPtr+ResIndex)->LCDVT;
3476 tempax = SiS_Pr->PanelXRes;
3477 tempbx = SiS_Pr->PanelYRes;
3479 switch(SiS_Pr->SiS_LCDResInfo) {
3481 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
3482 if(SiS_Pr->ChipType < SIS_315H) {
3483 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
3484 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
3487 if (SiS_Pr->SiS_VGAVDE == 357) tempbx = 527;
3488 else if(SiS_Pr->SiS_VGAVDE == 420) tempbx = 620;
3489 else if(SiS_Pr->SiS_VGAVDE == 525) tempbx = 775;
3490 else if(SiS_Pr->SiS_VGAVDE == 600) tempbx = 775;
3491 else if(SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
3492 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
3496 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 700;
3497 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 800;
3498 else if(SiS_Pr->SiS_VGAVDE == 1024) tempbx = 960;
3501 if (SiS_Pr->SiS_VGAVDE == 360) tempbx = 768;
3502 else if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 800;
3503 else if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 864;
3506 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
3507 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 875;
3508 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 1000;
3513 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3514 tempax = SiS_Pr->SiS_VGAHDE;
3515 tempbx = SiS_Pr->SiS_VGAVDE;
3518 SiS_Pr->SiS_HDE = tempax;
3519 SiS_Pr->SiS_VDE = tempbx;
3525 SiS_GetCRT2Data(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3529 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3531 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
3532 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3534 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
3536 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3538 SiS_GetCRT2Data301(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3544 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3554 SiS_GetLVDSDesPtr(struct SiS_Private *SiS_Pr)
3559 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3561 if(SiS_Pr->ChipType < SIS_315H) {
3562 if(SiS_Pr->SiS_LCDTypeInfo == 4) {
3563 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
3564 PanelDesPtr = SiS_Pr->SiS_PanelType04_1a;
3565 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3566 PanelDesPtr = SiS_Pr->SiS_PanelType04_2a;
3568 } else if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
3569 PanelDesPtr = SiS_Pr->SiS_PanelType04_1b;
3570 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3571 PanelDesPtr = SiS_Pr->SiS_PanelType04_2b;
3582 SiS_GetLVDSDesData(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3588 SiS_Pr->SiS_LCDHDES = 0;
3589 SiS_Pr->SiS_LCDVDES = 0;
3592 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3595 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
3596 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
3597 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3598 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3605 if(SiS_Pr->ChipType < SIS_315H) {
3606 if(SiS_Pr->SiS_LCDResInfo == Panel_640x480 && SiS_Pr->SiS_LCDTypeInfo == 3) {
3607 SiS_Pr->SiS_LCDHDES = 8;
3608 if (SiS_Pr->SiS_VGAVDE >= 480) SiS_Pr->SiS_LCDVDES = 512;
3609 else if(SiS_Pr->SiS_VGAVDE >= 400) SiS_Pr->SiS_LCDVDES = 436;
3610 else if(SiS_Pr->SiS_VGAVDE >= 350) SiS_Pr->SiS_LCDVDES = 440;
3617 if( (SiS_Pr->UseCustomMode) ||
3618 (SiS_Pr->SiS_LCDResInfo == Panel_Custom) ||
3619 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
3620 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ||
3621 (SiS_Pr->SiS_LCDInfo & LCDPass11) ) {
3625 if(ModeNo <= 0x13) ResIndex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
3626 else ResIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
3628 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3631 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3633 if(SiS_Pr->SiS_VGAHDE != SiS_Pr->PanelXRes) {
3634 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE) / 2);
3636 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->PanelYRes) {
3637 SiS_Pr->SiS_LCDVDES = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE) / 2);
3640 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3641 switch(SiS_Pr->SiS_CustomT) {
3645 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
3646 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3650 switch(SiS_Pr->SiS_LCDResInfo) {
3652 if(SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) {
3653 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3659 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3667 if((SiS_Pr->SiS_IF_DEF_CH70xx != 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
3669 if((SiS_Pr->SiS_TVMode & TVSetPAL) && (!(SiS_Pr->SiS_TVMode & TVSetPALM))) {
3670 if(ResIndex <= 3) SiS_Pr->SiS_LCDHDES = 256;
3673 } else if((PanelDesPtr = SiS_GetLVDSDesPtr(SiS_Pr))) {
3675 SiS_Pr->SiS_LCDHDES = (PanelDesPtr+ResIndex)->LCDHDES;
3676 SiS_Pr->SiS_LCDVDES = (PanelDesPtr+ResIndex)->LCDVDES;
3678 } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3680 if(SiS_Pr->SiS_VGAHDE != SiS_Pr->PanelXRes) {
3681 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE) / 2);
3683 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->PanelYRes) {
3684 SiS_Pr->SiS_LCDVDES = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE) / 2);
3686 if(SiS_Pr->ChipType < SIS_315H) {
3687 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3689 switch(SiS_Pr->SiS_LCDResInfo) {
3693 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT;
3696 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3704 if(SiS_Pr->ChipType < SIS_315H) {
3706 switch(SiS_Pr->SiS_LCDResInfo) {
3708 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3709 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3711 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT + 3;
3712 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT;
3713 if(SiS_Pr->SiS_VGAVDE == 400) SiS_Pr->SiS_LCDVDES -= 2;
3714 else SiS_Pr->SiS_LCDVDES -= 4;
3718 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3719 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3721 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT - 1;
3722 if(SiS_Pr->SiS_VGAVDE <= 400) SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 8;
3723 if(SiS_Pr->SiS_VGAVDE <= 350) SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 12;
3728 if( (SiS_Pr->SiS_VGAHDE == SiS_Pr->PanelXRes) &&
3729 (SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) ) {
3730 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3732 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT - 1;
3737 switch(SiS_Pr->SiS_LCDTypeInfo) {
3739 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_LCDVDES = 0;
3742 SiS_Pr->SiS_LCDHDES = 8;
3743 if (SiS_Pr->SiS_VGAVDE >= 480) SiS_Pr->SiS_LCDVDES = 512;
3744 else if(SiS_Pr->SiS_VGAVDE >= 400) SiS_Pr->SiS_LCDVDES = 436;
3745 else if(SiS_Pr->SiS_VGAVDE >= 350) SiS_Pr->SiS_LCDVDES = 440;
3751 switch(SiS_Pr->SiS_LCDResInfo) {
3754 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3755 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3761 SiS_Pr->SiS_LCDVDES = 524;
3768 if((ModeNo <= 0x13) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
3769 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3770 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3771 if(!(modeflag & HalfDCLK)) SiS_Pr->SiS_LCDHDES = 632;
3772 } else if(!(SiS_Pr->SiS_SetFlag & SetDOSMode)) {
3773 if(SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) {
3774 if(SiS_Pr->SiS_LCDResInfo >= Panel_1024x768) {
3775 if(SiS_Pr->ChipType < SIS_315H) {
3776 if(!(modeflag & HalfDCLK)) SiS_Pr->SiS_LCDHDES = 320;
3779 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) SiS_Pr->SiS_LCDHDES = 480;
3780 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) SiS_Pr->SiS_LCDHDES = 804;
3781 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) SiS_Pr->SiS_LCDHDES = 704;
3783 SiS_Pr->SiS_LCDHDES = 320;
3784 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) SiS_Pr->SiS_LCDHDES = 632;
3785 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) SiS_Pr->SiS_LCDHDES = 542;
3802 SiS_HandlePWD(struct SiS_Private *SiS_Pr)
3806 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
3807 unsigned short romptr = GetLCDStructPtr661_2(SiS_Pr);
3808 unsigned char drivermode = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & 0x40;
3811 if( (SiS_Pr->SiS_VBType & VB_SISPWD) &&
3813 (SiS_Pr->SiS_PWDOffset) ) {
3814 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2b,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 0]);
3815 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2c,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 1]);
3816 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2d,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 2]);
3817 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2e,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 3]);
3818 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2f,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 4]);
3824 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x27,0x7f,temp);
3836 SiS_DisableBridge(struct SiS_Private *SiS_Pr)
3843 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3845 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* ===== For 30xB/C/LV ===== */
3847 if(SiS_Pr->ChipType < SIS_315H) {
3851 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
3852 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3853 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFE);
3855 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
3857 SiS_PanelDelay(SiS_Pr, 3);
3859 if(SiS_Is301B(SiS_Pr)) {
3860 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,0x3f);
3861 SiS_ShortDelay(SiS_Pr,1);
3863 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF);
3864 SiS_DisplayOff(SiS_Pr);
3865 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
3866 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
3867 SiS_UnLockCRT2(SiS_Pr);
3868 if(!(SiS_Pr->SiS_VBType & VB_SISLVDS)) {
3869 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
3870 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
3872 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
3873 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
3874 SiS_PanelDelay(SiS_Pr, 2);
3875 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3876 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFD);
3878 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
3889 bool custom1 = (SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
3890 (SiS_Pr->SiS_CustomT == CUT_CLEVO1400);
3892 modenum = SiS_GetReg(SiS_Pr->SiS_P3d4,0x34) & 0x7f;
3894 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3897 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
3898 if(SiS_Pr->SiS_CustomT != CUT_CLEVO1400) {
3899 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
3904 didpwd = SiS_HandlePWD(SiS_Pr);
3907 (SiS_IsVAMode(SiS_Pr)) ||
3908 (!(SiS_IsDualEdge(SiS_Pr))) ) {
3910 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xfe);
3911 if(custom1) SiS_PanelDelay(SiS_Pr, 3);
3913 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xfc);
3918 SiS_DDC2Delay(SiS_Pr,0xff00);
3919 SiS_DDC2Delay(SiS_Pr,0xe000);
3920 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0x00);
3921 pushax = SiS_GetReg(SiS_Pr->SiS_P3c4,0x06);
3923 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
3925 SiS_PanelDelay(SiS_Pr, 3);
3930 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
3931 /* if(SiS_Pr->ChipType < SIS_340) {*/
3933 if(SiS_IsVAMode(SiS_Pr)) tempah = 0xf7;
3934 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
3938 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3939 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,~0x10);
3943 if(SiS_IsDualEdge(SiS_Pr)) {
3945 if(!(SiS_IsVAMode(SiS_Pr))) tempah = 0xbf;
3947 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,tempah);
3949 if((SiS_IsVAMode(SiS_Pr)) ||
3950 ((SiS_Pr->SiS_VBType & VB_SISLVDS) && (modenum <= 0x13))) {
3952 SiS_DisplayOff(SiS_Pr);
3953 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3954 SiS_PanelDelay(SiS_Pr, 2);
3956 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
3957 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1E,0xDF);
3961 if((!(SiS_IsVAMode(SiS_Pr))) ||
3962 ((SiS_Pr->SiS_VBType & VB_SISLVDS) && (modenum <= 0x13))) {
3964 if(!(SiS_IsDualEdge(SiS_Pr))) {
3965 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xdf);
3966 SiS_DisplayOff(SiS_Pr);
3968 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
3970 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3971 SiS_PanelDelay(SiS_Pr, 2);
3974 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
3975 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
3976 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
3977 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
3978 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,temp);
3982 if(SiS_IsNotM650orLater(SiS_Pr)) {
3983 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
3986 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3988 if( (!(SiS_IsVAMode(SiS_Pr))) &&
3989 (!(SiS_CRT2IsLCD(SiS_Pr))) &&
3990 (!(SiS_IsDualEdge(SiS_Pr))) ) {
3992 if(custom1) SiS_PanelDelay(SiS_Pr, 2);
3994 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFD);
3996 if(custom1) SiS_PanelDelay(SiS_Pr, 4);
4000 SiS_SetReg(SiS_Pr->SiS_P3c4,0x06,pushax);
4001 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4002 if(SiS_IsVAorLCD(SiS_Pr)) {
4003 SiS_PanelDelayLoop(SiS_Pr, 3, 20);
4016 if(SiS_Pr->ChipType < SIS_315H) {
4018 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4019 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4020 SiS_PanelDelay(SiS_Pr, 3);
4025 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF); /* disable VB */
4026 SiS_DisplayOff(SiS_Pr);
4028 if(SiS_Pr->ChipType >= SIS_315H) {
4029 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4032 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF); /* disable lock mode */
4034 if(SiS_Pr->ChipType >= SIS_315H) {
4035 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
4036 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
4037 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4038 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,temp);
4041 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF); /* disable CRT2 */
4042 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
4043 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
4044 SiS_PanelDelay(SiS_Pr, 2);
4045 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4054 if(SiS_Pr->ChipType < SIS_315H) {
4058 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
4059 SiS_SetCH700x(SiS_Pr,0x0E,0x09);
4062 if(SiS_Pr->ChipType == SIS_730) {
4063 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x08)) {
4064 SiS_WaitVBRetrace(SiS_Pr);
4066 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4067 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4068 SiS_PanelDelay(SiS_Pr, 3);
4071 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x08)) {
4072 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4073 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4074 SiS_WaitVBRetrace(SiS_Pr);
4075 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x06) & 0x1c)) {
4076 SiS_DisplayOff(SiS_Pr);
4078 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4079 SiS_PanelDelay(SiS_Pr, 3);
4085 SiS_DisplayOff(SiS_Pr);
4087 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4089 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4090 SiS_UnLockCRT2(SiS_Pr);
4091 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
4092 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
4094 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
4095 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
4096 SiS_PanelDelay(SiS_Pr, 2);
4097 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4106 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4107 /*if(SiS_Pr->ChipType < SIS_340) { */ /* XGI needs this */
4108 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,~0x18);
4112 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
4114 if(SiS_Pr->ChipType == SIS_740) {
4115 temp = SiS_GetCH701x(SiS_Pr,0x61);
4117 SiS_SetCH701x(SiS_Pr,0x76,0xac);
4118 SiS_SetCH701x(SiS_Pr,0x66,0x00);
4121 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4122 (SiS_IsTVOrYPbPrOrScart(SiS_Pr)) ) {
4123 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
4127 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4128 (SiS_IsVAMode(SiS_Pr)) ) {
4129 SiS_Chrontel701xBLOff(SiS_Pr);
4130 SiS_Chrontel701xOff(SiS_Pr);
4133 if(SiS_Pr->ChipType != SIS_740) {
4134 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4135 (SiS_IsTVOrYPbPrOrScart(SiS_Pr)) ) {
4136 SiS_SetCH701x(SiS_Pr,0x49,0x01);
4142 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4143 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4144 SiS_PanelDelay(SiS_Pr, 3);
4147 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4148 (!(SiS_IsDualEdge(SiS_Pr))) ||
4149 (!(SiS_IsTVOrYPbPrOrScart(SiS_Pr))) ) {
4150 SiS_DisplayOff(SiS_Pr);
4153 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4154 (!(SiS_IsDualEdge(SiS_Pr))) ||
4155 (!(SiS_IsVAMode(SiS_Pr))) ) {
4156 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4159 if(SiS_Pr->ChipType == SIS_740) {
4160 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4163 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4165 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4166 (!(SiS_IsDualEdge(SiS_Pr))) ||
4167 (!(SiS_IsVAMode(SiS_Pr))) ) {
4168 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4171 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4172 if(SiS_CRT2IsLCD(SiS_Pr)) {
4173 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4174 if(SiS_Pr->ChipType == SIS_550) {
4175 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xbf);
4176 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xef);
4180 if(SiS_Pr->ChipType == SIS_740) {
4181 if(SiS_IsLCDOrLCDA(SiS_Pr)) {
4182 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4184 } else if(SiS_IsVAMode(SiS_Pr)) {
4185 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4189 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
4190 if(SiS_IsDualEdge(SiS_Pr)) {
4191 /* SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xff); */
4193 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
4197 SiS_UnLockCRT2(SiS_Pr);
4199 if(SiS_Pr->ChipType == SIS_550) {
4200 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80); /* DirectDVD PAL?*/
4201 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40); /* VB clock / 4 ? */
4202 } else if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4203 (!(SiS_IsDualEdge(SiS_Pr))) ||
4204 (!(SiS_IsVAMode(SiS_Pr))) ) {
4205 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
4208 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4209 if(SiS_CRT2IsLCD(SiS_Pr)) {
4210 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4211 SiS_PanelDelay(SiS_Pr, 2);
4212 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4235 SiS_EnableBridge(struct SiS_Private *SiS_Pr)
4243 if(SiS_Pr->SiS_VBType & VB_SISVB) {
4245 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* ====== For 301B et al ====== */
4247 if(SiS_Pr->ChipType < SIS_315H) {
4251 if(SiS_CRT2IsLCD(SiS_Pr)) {
4252 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4253 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
4254 } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
4255 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4257 if(SiS_Pr->SiS_VBType & (VB_SISLVDS | VB_NoLCD)) {
4258 if(!(SiS_CR36BIOSWord23d(SiS_Pr))) {
4259 SiS_PanelDelay(SiS_Pr, 0);
4264 if((SiS_Pr->SiS_VBType & VB_NoLCD) &&
4265 (SiS_CRT2IsLCD(SiS_Pr))) {
4267 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* Enable CRT2 */
4268 SiS_DisplayOn(SiS_Pr);
4269 SiS_UnLockCRT2(SiS_Pr);
4270 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
4271 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4272 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
4274 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
4276 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4277 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4278 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4279 SiS_PanelDelay(SiS_Pr, 1);
4281 SiS_WaitVBRetrace(SiS_Pr);
4282 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4288 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF; /* lock mode */
4289 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4290 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4293 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4294 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4295 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20); /* enable VB processor */
4296 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
4297 SiS_DisplayOn(SiS_Pr);
4298 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4299 if(SiS_CRT2IsLCD(SiS_Pr)) {
4300 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4301 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4302 SiS_PanelDelay(SiS_Pr, 1);
4304 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
4324 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4325 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,0xef);
4327 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4328 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
4333 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4334 /*if(SiS_Pr->ChipType < SIS_340) { */
4336 if(SiS_LCDAEnabled(SiS_Pr)) {
4337 if(SiS_TVEnabled(SiS_Pr)) tempah = 0x18;
4340 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4c,tempah);
4344 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4346 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0x00);
4347 SiS_DisplayOff(SiS_Pr);
4348 pushax = SiS_GetReg(SiS_Pr->SiS_P3c4,0x06);
4350 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
4353 didpwd = SiS_HandlePWD(SiS_Pr);
4355 if(SiS_IsVAorLCD(SiS_Pr)) {
4357 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
4358 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4359 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
4360 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4361 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4362 SiS_GenericDelay(SiS_Pr, 17664);
4366 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4367 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4368 SiS_GenericDelay(SiS_Pr, 17664);
4373 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & 0x40)) {
4374 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4380 if(!(SiS_IsVAMode(SiS_Pr))) {
4382 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
4383 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4384 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4386 if(!(SiS_LCDAEnabled(SiS_Pr))) temp |= 0x20;
4389 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4391 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* enable CRT2 */
4393 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4394 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4396 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4397 SiS_PanelDelay(SiS_Pr, 2);
4402 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x20);
4406 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);
4407 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4409 if(SiS_Pr->SiS_VBType & VB_SISPOWER) {
4410 if( (SiS_LCDAEnabled(SiS_Pr)) ||
4411 (SiS_CRT2IsLCD(SiS_Pr)) ) {
4413 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x2a,0x7f);
4415 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x7f);
4420 if(SiS_IsDualEdge(SiS_Pr)) {
4422 if(!(SiS_IsVAMode(SiS_Pr))) tempah = 0x40;
4424 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,tempah);
4426 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4428 SiS_PanelDelay(SiS_Pr, 2);
4430 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1f,0x10);
4431 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4433 if(SiS_Pr->SiS_CustomT != CUT_CLEVO1400) {
4435 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4436 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
4437 SiS_GenericDelay(SiS_Pr, 2048);
4440 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
4442 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4444 cr36 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
4446 if(SiS_Pr->SiS_ROMNew) {
4447 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
4448 unsigned short romptr = GetLCDStructPtr661_2(SiS_Pr);
4450 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20); /* Reset */
4451 SiS_Pr->EMI_30 = 0;
4452 SiS_Pr->EMI_31 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 0];
4453 SiS_Pr->EMI_32 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 1];
4454 SiS_Pr->EMI_33 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 2];
4455 if(ROMAddr[romptr + 1] & 0x10) SiS_Pr->EMI_30 = 0x40;
4457 SiS_Pr->HaveEMI = SiS_Pr->HaveEMILCD = SiS_Pr->OverruleEMI = true;
4472 if(SiS_Pr->HaveEMI) {
4473 r30 = SiS_Pr->EMI_30; r31 = SiS_Pr->EMI_31;
4474 r32 = SiS_Pr->EMI_32; r33 = SiS_Pr->EMI_33;
4486 if((!SiS_Pr->HaveEMI) || (!SiS_Pr->HaveEMILCD)) {
4490 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) r30 &= ~0x40;
4491 if(!SiS_Pr->HaveEMI) {
4499 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) r30 |= 0x40;
4500 if(!SiS_Pr->HaveEMI) {
4502 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
4509 if(!SiS_Pr->HaveEMI) {
4511 if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
4518 if(!SiS_Pr->HaveEMI) {
4525 if(!SiS_Pr->OverruleEMI) {
4527 if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
4534 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
4541 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
4552 if(!(SiS_Pr->OverruleEMI && (!r30) && (!r31) && (!r32) && (!r33))) {
4553 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20); /* Reset */
4554 SiS_GenericDelay(SiS_Pr, 2048);
4556 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x31,r31);
4557 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x32,r32);
4558 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x33,r33);
4561 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
4564 if( (SiS_LCDAEnabled(SiS_Pr)) ||
4565 (SiS_CRT2IsLCD(SiS_Pr)) ) {
4567 /*SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x2a,0x80);*/
4568 SiS_PanelDelayLoop(SiS_Pr, 3, 5);
4570 SiS_PanelDelayLoop(SiS_Pr, 3, 5);
4573 SiS_WaitVBRetrace(SiS_Pr);
4574 SiS_WaitVBRetrace(SiS_Pr);
4575 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
4576 SiS_GenericDelay(SiS_Pr, 1280);
4578 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40); /* Enable */
4579 /*SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x2a,0x7f);*/
4586 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4587 if(SiS_IsVAorLCD(SiS_Pr)) {
4588 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4590 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4592 SiS_WaitVBRetrace(SiS_Pr);
4593 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4594 SiS_GenericDelay(SiS_Pr, 2048);
4595 SiS_WaitVBRetrace(SiS_Pr);
4598 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
4600 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x03);
4605 SiS_SetReg(SiS_Pr->SiS_P3c4,0x06,pushax);
4606 SiS_DisplayOn(SiS_Pr);
4607 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0xff);
4611 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4612 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4621 if(SiS_Pr->ChipType < SIS_315H) {
4622 if(SiS_CRT2IsLCD(SiS_Pr)) {
4623 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4624 SiS_PanelDelay(SiS_Pr, 0);
4628 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF; /* lock mode */
4629 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4630 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4633 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4635 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* enable CRT2 */
4637 if(SiS_Pr->ChipType >= SIS_315H) {
4638 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
4640 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80); /* BVBDOENABLE=1 */
4644 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20); /* enable VB processor */
4646 SiS_VBLongWait(SiS_Pr);
4647 SiS_DisplayOn(SiS_Pr);
4648 if(SiS_Pr->ChipType >= SIS_315H) {
4649 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4651 SiS_VBLongWait(SiS_Pr);
4653 if(SiS_Pr->ChipType < SIS_315H) {
4654 if(SiS_CRT2IsLCD(SiS_Pr)) {
4655 SiS_PanelDelay(SiS_Pr, 1);
4656 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4664 if(SiS_Pr->ChipType < SIS_315H) {
4668 if(SiS_CRT2IsLCD(SiS_Pr)) {
4669 if(SiS_Pr->ChipType == SIS_730) {
4670 SiS_PanelDelay(SiS_Pr, 1);
4671 SiS_PanelDelay(SiS_Pr, 1);
4672 SiS_PanelDelay(SiS_Pr, 1);
4674 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4675 if(!(SiS_CR36BIOSWord23d(SiS_Pr))) {
4676 SiS_PanelDelay(SiS_Pr, 0);
4680 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4681 SiS_DisplayOn(SiS_Pr);
4682 SiS_UnLockCRT2(SiS_Pr);
4683 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
4684 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4685 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
4687 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
4690 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
4691 if(!(SiS_CRT2IsLCD(SiS_Pr))) {
4692 SiS_WaitVBRetrace(SiS_Pr);
4693 SiS_SetCH700x(SiS_Pr,0x0E,0x0B);
4697 if(SiS_CRT2IsLCD(SiS_Pr)) {
4698 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4699 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4700 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4701 SiS_PanelDelay(SiS_Pr, 1);
4702 SiS_PanelDelay(SiS_Pr, 1);
4704 SiS_WaitVBRetrace(SiS_Pr);
4705 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4716 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4717 /*if(SiS_Pr->ChipType < SIS_340) {*/ /* XGI needs this */
4718 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,0x18);
4722 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4723 if(SiS_CRT2IsLCD(SiS_Pr)) {
4724 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4725 SiS_PanelDelay(SiS_Pr, 0);
4729 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4730 SiS_UnLockCRT2(SiS_Pr);
4732 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
4734 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4735 temp = SiS_GetCH701x(SiS_Pr,0x66);
4737 SiS_Chrontel701xBLOff(SiS_Pr);
4740 if(SiS_Pr->ChipType != SIS_550) {
4741 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4744 if(SiS_Pr->ChipType == SIS_740) {
4745 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4746 if(SiS_IsLCDOrLCDA(SiS_Pr)) {
4747 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
4752 temp1 = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
4754 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
4757 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4759 SiS_Chrontel701xBLOn(SiS_Pr);
4763 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4764 if(SiS_CRT2IsLCD(SiS_Pr)) {
4765 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
4766 if(SiS_Pr->ChipType == SIS_550) {
4767 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x40);
4768 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x10);
4771 } else if(SiS_IsVAMode(SiS_Pr)) {
4772 if(SiS_Pr->ChipType != SIS_740) {
4773 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
4777 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4778 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4781 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4782 if(SiS_IsTVOrYPbPrOrScart(SiS_Pr)) {
4783 SiS_Chrontel701xOn(SiS_Pr);
4785 if( (SiS_IsVAMode(SiS_Pr)) ||
4786 (SiS_IsLCDOrLCDA(SiS_Pr)) ) {
4787 SiS_ChrontelDoSomething1(SiS_Pr);
4791 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4792 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4793 if( (SiS_IsVAMode(SiS_Pr)) ||
4794 (SiS_IsLCDOrLCDA(SiS_Pr)) ) {
4795 SiS_Chrontel701xBLOn(SiS_Pr);
4796 SiS_ChrontelInitTVVSync(SiS_Pr);
4799 } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4800 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4801 if(SiS_CRT2IsLCD(SiS_Pr)) {
4802 SiS_PanelDelay(SiS_Pr, 1);
4803 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4822 SiS_SetCRT2Offset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
4828 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) return;
4830 offset = SiS_GetOffset(SiS_Pr,ModeNo,ModeIdIndex,RRTI);
4832 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x07,(offset & 0xFF));
4833 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x09,(offset >> 8));
4837 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x03,temp);
4842 SiS_SetCRT2Sync(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short RefreshRateTableIndex)
4848 if(SiS_Pr->UseCustomMode) {
4849 infoflag = SiS_Pr->CInfoFlag;
4851 infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
4854 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* LVDS */
4856 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
4858 } else if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_LCDInfo & LCDSync)) {
4859 tempah = SiS_Pr->SiS_LCDInfo;
4863 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4864 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
4865 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
4866 (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
4869 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
4870 (SiS_Pr->SiS_IF_DEF_DSTN) ||
4871 (SiS_Pr->SiS_IF_DEF_TRUMPION) ||
4872 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
4873 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
4876 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
4877 (SiS_Pr->SiS_IF_DEF_DSTN) ) {
4881 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
4882 if(SiS_Pr->ChipType >= SIS_315H) {
4885 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xE7,tempah);
4888 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,0xe0);
4891 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4894 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
4896 if(SiS_Pr->ChipType < SIS_315H) {
4900 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* 630 - 301B(-DH) */
4904 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
4905 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
4906 tempah = SiS_Pr->SiS_LCDInfo;
4912 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4914 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4915 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
4916 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
4922 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4923 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4933 if(SiS_Pr->SiS_VBType & VB_SISLVDS) { /* 315 - LVDS */
4936 if((SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) &&
4937 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
4939 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
4940 tempbl = ((SiS_Pr->SiS_LCDInfo & 0xc0) >> 6);
4942 } else if((SiS_Pr->SiS_CustomT == CUT_CLEVO1400) &&
4943 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050)) {
4947 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);
4950 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempbl |= 0x04;
4954 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4955 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) tempah |= 0xc0;
4956 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4957 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
4958 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
4959 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
4966 if(!SiS_Pr->UseCustomMode) {
4968 if((SiS_Pr->SiS_VBType & VB_SIS30xC) && (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
4970 tempah = SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02));
4973 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
4974 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
4975 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
4976 tempah = SiS_Pr->SiS_LCDInfo;
4984 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4985 if(SiS_Pr->SiS_VBType & VB_NoLCD) {
4987 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempah |= 0xc0;
4989 if((SiS_Pr->SiS_VBType & VB_SIS30xC) && (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
4992 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xe7,tempah);
4994 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4995 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
4996 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
4997 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
5011 SiS_SetCRT2FIFO_300(struct SiS_Private *SiS_Pr,unsigned short ModeNo)
5013 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
5022 SelectRate_backup = SiS_Pr->SiS_SelectCRT2Rate;
5024 if(!SiS_Pr->CRT1UsesCustomMode) {
5026 CRT1ModeNo = SiS_Pr->SiS_CRT1Mode; /* get CRT1 ModeNo */
5027 SiS_SearchModeID(SiS_Pr, &CRT1ModeNo, &modeidindex);
5028 SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
5029 SiS_Pr->SiS_SelectCRT2Rate = 0;
5030 refreshratetableindex = SiS_GetRatePtr(SiS_Pr, CRT1ModeNo, modeidindex);
5034 index = SiS_GetRefCRTVCLK(SiS_Pr, refreshratetableindex, SiS_Pr->SiS_UseWide);
5035 VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;
5038 colorth = SiS_GetColorDepth(SiS_Pr,CRT1ModeNo,modeidindex) >> 1;
5047 VCLK = SiS_Pr->CSRClock_CRT1;
5050 colorth = colortharray[((SiS_Pr->CModeFlag_CRT1 & ModeTypeMask) - 2)];
5056 if(SiS_Pr->ChipType == SIS_300) {
5057 index = SiS_GetReg(SiS_Pr->SiS_P3c4,0x3A);
5059 index = SiS_GetReg(SiS_Pr->SiS_P3c4,0x1A);
5062 MCLK = SiS_Pr->SiS_MCLKData_0[index].CLOCK;
5064 temp = ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) >> 6) & 0x03) << 1;
5074 if(SiS_Pr->ChipType == SIS_300) {
5076 SiS_GetFIFOThresholdIndex300(SiS_Pr, &tempbx, &tempcl);
5081 pci50 = sisfb_read_nbridge_pci_dword(SiS_Pr, 0x50);
5082 pciA0 = sisfb_read_nbridge_pci_dword(SiS_Pr, 0xa0);
5084 if(SiS_Pr->ChipType == SIS_730) {
5102 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) & 0x80) index += 12;
5106 data = SiS_GetLatencyFactor630(SiS_Pr, index) + 15;
5107 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) & 0x80)) data += 5;
5113 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
5114 SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
5116 if(!SiS_Pr->UseCustomMode) {
5119 SiS_SearchModeID(SiS_Pr, &CRT2ModeNo, &modeidindex);
5121 refreshratetableindex = SiS_GetRatePtr(SiS_Pr, CRT2ModeNo, modeidindex);
5124 index = SiS_GetVCLK2Ptr(SiS_Pr, CRT2ModeNo, modeidindex, refreshratetableindex);
5125 VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;
5127 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
5128 if(SiS_Pr->SiS_UseROM) {
5139 VCLK = SiS_Pr->CSRClock;
5144 colorth = SiS_GetColorDepth(SiS_Pr,CRT2ModeNo,modeidindex) >> 1;
5155 if(SiS_Pr->ChipType == SIS_300) {
5157 if((data <= 0x0f) || (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024))
5161 if(( (SiS_Pr->ChipType == SIS_630) ||
5162 (SiS_Pr->ChipType == SIS_730) ) &&
5163 (SiS_Pr->ChipRevision >= 0x30))
5166 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0xe0,temp);
5168 if((SiS_Pr->ChipType == SIS_630) &&
5169 (SiS_Pr->ChipRevision >= 0x30)) {
5172 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,0xe0,data);
5176 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
5177 SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
5186 SiS_SetCRT2FIFO_310(struct SiS_Private *SiS_Pr)
5188 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,0x3B);
5189 if( (SiS_Pr->ChipType == SIS_760) &&
5190 (SiS_Pr->SiS_SysFlags & SF_760LFB) &&
5191 (SiS_Pr->SiS_ModeType == Mode32Bpp) &&
5192 (SiS_Pr->SiS_VGAHDE >= 1280) &&
5193 (SiS_Pr->SiS_VGAVDE >= 1024) ) {
5194 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2f,0x03);
5195 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,0x3b);
5196 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4d,0xc0);
5197 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2f,0x01);
5198 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4d,0xc0);
5199 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x02,0x6e);
5201 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,~0x3f,0x04);
5208 SiS_GetVGAHT2(struct SiS_Private *SiS_Pr)
5212 tempbx = (SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) * SiS_Pr->SiS_RVBHCMAX;
5213 tempax = (SiS_Pr->SiS_VT - SiS_Pr->SiS_VDE) * SiS_Pr->SiS_RVBHCFACT;
5214 tempax = (tempax * SiS_Pr->SiS_HT) / tempbx;
5220 SiS_SetGroup1_301(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex,
5234 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
5235 } else if(SiS_Pr->UseCustomMode) {
5236 modeflag = SiS_Pr->CModeFlag;
5237 xres = SiS_Pr->CHDisplay;
5239 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
5240 xres = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].XRes;
5245 if(SiS_Pr->ChipType >= SIS_315H) {
5247 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x31,0x04);
5251 SiS_Pr->CHTotal = 8224; /* Max HT, 0x2020, results in 0x3ff in registers */
5253 SiS_Pr->CHDisplay = SiS_Pr->SiS_VGAHDE;
5254 if(modeflag & HalfDCLK) SiS_Pr->CHDisplay >>= 1;
5256 SiS_Pr->CHBlankStart = SiS_Pr->CHDisplay;
5257 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
5258 SiS_Pr->CHBlankStart += 16;
5261 SiS_Pr->CHBlankEnd = 32;
5262 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5263 if(xres == 1600) SiS_Pr->CHBlankEnd += 80;
5266 temp = SiS_Pr->SiS_VGAHT - 96;
5268 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
5269 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x04);
5270 temp |= ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x0b) & 0xc0) << 2);
5274 if(SiS_Pr->SiS_RVBHRS2) temp = SiS_Pr->SiS_RVBHRS2;
5276 SiS_Pr->CHSyncStart = temp;
5278 SiS_Pr->CHSyncEnd = 0xffe8; /* results in 0x2000 in registers */
5280 SiS_Pr->CVTotal = 2049; /* Max VT, 0x0801, results in 0x7ff in registers */
5282 VGAVDE = SiS_Pr->SiS_VGAVDE;
5290 SiS_Pr->CVDisplay = VGAVDE;
5292 SiS_Pr->CVBlankStart = SiS_Pr->CVDisplay;
5294 SiS_Pr->CVBlankEnd = 1;
5295 if(ModeNo == 0x3c) SiS_Pr->CVBlankEnd = 226;
5297 temp = (SiS_Pr->SiS_VGAVT - VGAVDE) >> 1;
5298 SiS_Pr->CVSyncStart = VGAVDE + temp;
5301 SiS_Pr->CVSyncEnd = SiS_Pr->CVSyncStart + temp;
5303 SiS_CalcCRRegisters(SiS_Pr, 0);
5304 SiS_Pr->CCRT1CRTC[16] &= ~0xE0;
5307 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[i]);
5310 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5313 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5316 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5319 temp = SiS_Pr->CCRT1CRTC[16] & 0xE0;
5320 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,CRTranslation[0x0E],0x1F,temp);
5322 temp = (SiS_Pr->CCRT1CRTC[16] & 0x01) << 5;
5324 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,CRTranslation[0x09],0x5F,temp);
5327 temp |= (SiS_GetReg(SiS_Pr->SiS_P3c4,0x01) & 0x01);
5329 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,temp); /* SR01: HalfDCLK[3], 8/9 div dotclock[0] */
5331 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0F,0x00); /* CR14: (text mode: underline location) */
5332 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x12,0x00); /* CR17: n/a */
5335 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
5336 temp = (SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) << 7;
5338 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1A,temp); /* SR0E, dither[7] */
5340 temp = SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02));
5341 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,temp); /* ? */
5349 SiS_SetGroup1_LVDS(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
5364 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
5365 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
5367 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
5369 } else if(SiS_Pr->UseCustomMode) {
5370 modeflag = SiS_Pr->CModeFlag;
5372 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
5373 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
5375 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
5380 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
5385 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
5389 if((SiS_Pr->ChipType >= SIS_315H) && (islvds) && (!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA))) {
5390 if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
5396 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
5398 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);
5401 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);
5402 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x03);
5403 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
5404 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);
5408 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);
5409 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x00);
5410 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
5411 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2D,0x0f);
5412 if(SiS_Pr->SiS_VBType & VB_SIS30xC) {
5413 if((SiS_Pr->SiS_LCDResInfo == Panel_1024x768) ||
5414 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
5415 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x20);
5425 tempax = SiS_Pr->SiS_LCDHDES;
5427 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5428 if(!SiS_Pr->SiS_IF_DEF_FSTN && !SiS_Pr->SiS_IF_DEF_DSTN) {
5429 if((SiS_Pr->SiS_LCDResInfo == Panel_640x480) &&
5430 (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode))) {
5438 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1A,temp); /* BPLHDESKEW[2:0] */
5440 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,temp); /* BPLHDESKEW[10:3] */
5442 tempbx = SiS_Pr->SiS_HDE;
5443 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5444 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5445 tempbx = SiS_Pr->PanelXRes;
5447 if((SiS_Pr->SiS_LCDResInfo == Panel_320x240_1) ||
5448 (SiS_Pr->SiS_LCDResInfo == Panel_320x240_2) ||
5449 (SiS_Pr->SiS_LCDResInfo == Panel_320x240_3)) {
5455 if(tempax >= SiS_Pr->SiS_HT) tempax -= SiS_Pr->SiS_HT;
5460 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,temp); /* BPLHDEE */
5462 tempcx = (SiS_Pr->SiS_HT - tempbx) >> 2;
5464 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5465 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5466 if(SiS_Pr->PanelHRS != 999) tempcx = SiS_Pr->PanelHRS;
5471 if(tempcx >= SiS_Pr->SiS_HT) tempcx -= SiS_Pr->SiS_HT;
5474 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5475 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5476 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5497 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,temp); /* BPLHRS */
5499 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5501 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5503 if(SiS_Pr->PanelHRE != 999) {
5504 temp = tempcx + SiS_Pr->PanelHRE;
5505 if(temp >= SiS_Pr->SiS_HT) temp -= SiS_Pr->SiS_HT;
5515 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,temp); /* BPLHRE */
5519 tempax = SiS_Pr->SiS_VGAVDE;
5520 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5521 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5522 tempax = SiS_Pr->PanelYRes;
5526 tempbx = SiS_Pr->SiS_LCDVDES + tempax;
5527 if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
5531 tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE;
5532 if(SiS_Pr->ChipType < SIS_315H) {
5533 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5534 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5535 tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->PanelYRes;
5542 if( (SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) &&
5543 (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
5544 (SiS_Pr->PanelVRS != 999) ) {
5545 tempcx = SiS_Pr->PanelVRS;
5550 if(SiS_Pr->ChipType < SIS_315H) tempbx++;
5554 if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
5557 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5558 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5562 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,temp); /* BPLVRS */
5567 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5568 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5569 if(SiS_Pr->PanelVRE != 999) tempcx = SiS_Pr->PanelVRE;
5575 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp); /* BPLVRE */
5578 if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
5579 if(SiS_Pr->SiS_HDE != 640) {
5580 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
5582 } else if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
5583 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) temp |= 0x40;
5585 if((SiS_Pr->ChipType >= SIS_315H) ||
5586 (SiS_Pr->ChipRevision >= 0x30)) {
5588 if((SiS_Pr->SiS_IF_DEF_CH70xx == 1) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
5589 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x03) temp |= 0x80;
5592 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
5593 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
5594 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x06) & 0x10) temp |= 0x80;
5596 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) temp |= 0x80;
5600 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,tempbx,temp);
5604 tempcx = SiS_Pr->SiS_LCDVDES; /* BPLVDES */
5606 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5607 switch(SiS_Pr->SiS_LCDResInfo) {
5609 tempbx = SiS_Pr->SiS_VGAVDE - 1;
5610 tempcx = SiS_Pr->SiS_VGAVDE;
5613 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5618 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5620 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
5626 if(SiS_Pr->ChipType < SIS_315H) {
5627 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5637 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1D,temp);
5638 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1C,tempbx);
5639 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1B,tempcx);
5643 if(SiS_Pr->ChipType < SIS_315H) {
5646 tempeax = SiS_Pr->SiS_VGAVDE << 6;
5647 temp = (tempeax % (unsigned int)SiS_Pr->SiS_VDE);
5648 tempeax = tempeax / (unsigned int)SiS_Pr->SiS_VDE;
5651 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) tempeax = 0x3F;
5654 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1E,temp); /* BPLVCFACT */
5661 tempeax = SiS_Pr->SiS_VGAVDE << 18;
5662 tempebx = SiS_Pr->SiS_VDE;
5669 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x37,temp);
5671 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x36,temp);
5673 if(SiS_Pr->SiS_VDE == SiS_Pr->SiS_VGAVDE) temp |= 0x04;
5674 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x35,temp);
5676 if(SiS_Pr->SiS_VBType & VB_SISPART4SCALER) {
5678 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x3c,temp);
5680 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x3b,temp);
5682 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0x3f,temp);
5684 if(SiS_Pr->SiS_VDE != SiS_Pr->SiS_VGAVDE) temp |= 0x08;
5685 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x30,0xf3,temp);
5693 tempeax = SiS_Pr->SiS_VGAHDE; /* 1f = ( (VGAHDE * 65536) / ( (VGAHDE * 65536) / HDE ) ) - 1*/
5698 if(SiS_Pr->SiS_HDE == tempeax) {
5701 tempecx = tempebx / SiS_Pr->SiS_HDE;
5702 if(SiS_Pr->ChipType >= SIS_315H) {
5703 if(tempebx % SiS_Pr->SiS_HDE) tempecx++;
5707 if(SiS_Pr->ChipType >= SIS_315H) {
5710 tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;
5714 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1F,temp);
5716 if(SiS_Pr->ChipType >= SIS_315H) {
5717 tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;
5720 tempeax = SiS_Pr->SiS_VGAVDE << 6;
5726 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tempbx--;
5727 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) {
5728 if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) tempbx = 1;
5729 else if(SiS_Pr->SiS_LCDResInfo != Panel_640x480) tempbx = 1;
5734 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x20,temp);
5735 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x21,tempbx);
5742 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x22,temp);
5744 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x23,temp);
5747 if(SiS_Pr->ChipType >= SIS_315H) {
5748 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
5749 if((islvds) || (SiS_Pr->SiS_VBInfo & VB_SISLVDS)) {
5750 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1e,0x20);
5754 if(SiS_Pr->ChipType == SIS_740) {
5755 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
5757 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1e,0x23);
5765 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5766 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
5773 if(SiS_Pr->SiS_UseROM) {
5776 if(SiS_Pr->SiS_LCDTypeInfo == 0x0e) j += 7;
5780 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xbf);
5782 SiS_SetTrumpionBlock(SiS_Pr, trumpdata);
5784 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5787 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode13[0]);
5791 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode10_1[0]);
5792 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode10_2[0]);
5796 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
5801 if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
5802 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x25,0x00);
5803 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x26,0x00);
5804 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x27,0x00);
5805 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x28,0x87);
5806 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x29,0x5A);
5807 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2A,0x4B);
5808 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x07,0x03);
5809 tempax = SiS_Pr->SiS_HDE; /* Blps = lcdhdee(lcdhdes+HDE) + 64 */
5810 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5811 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5812 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5814 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x38,tempax & 0xff);
5816 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);
5818 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x39,tempax & 0xff);
5819 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3A,0x00); /* Bflml = 0 */
5820 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x3C,~0x007);
5822 tempax = SiS_Pr->SiS_VDE;
5823 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5824 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5825 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5827 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3B,tempax & 0xff);
5829 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);
5831 tempeax = SiS_Pr->SiS_HDE;
5832 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5833 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5834 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempeax >>= 1;
5840 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x45,temp);
5841 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3F,0x00); /* BDxWadrst0 */
5842 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3E,0x00);
5843 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3D,0x10);
5844 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x3C,~0x040);
5846 tempax = SiS_Pr->SiS_HDE;
5847 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5848 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5849 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5853 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x43,temp);
5855 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port, 0x44, 0x07, temp);
5857 tempax = SiS_Pr->SiS_VDE; /* BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */
5858 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5859 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5860 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5863 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x42,temp);
5865 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x41,temp);
5867 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x40,temp);
5869 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port, 0x3C, 0x7F, temp);
5871 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2F,0x03);
5872 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x03,0x50);
5873 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x04,0x00);
5874 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2F,0x01);
5875 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0x38);
5877 if(SiS_Pr->SiS_IF_DEF_FSTN) {
5878 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2b,0x02);
5879 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2c,0x00);
5880 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x00);
5881 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x35,0x0c);
5882 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x36,0x00);
5883 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x37,0x00);
5884 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x38,0x80);
5885 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x39,0xA0);
5886 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3a,0x00);
5887 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3b,0xf0);
5888 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3c,0x00);
5889 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3d,0x10);
5890 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3e,0x00);
5891 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3f,0x00);
5892 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x40,0x10);
5893 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x41,0x25);
5894 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x42,0x80);
5895 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x43,0x14);
5896 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x44,0x03);
5897 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x45,0x0a);
5905 SiS_SetGroup1(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
5909 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
5917 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
5918 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
5923 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
5924 } else if(SiS_Pr->UseCustomMode) {
5925 modeflag = SiS_Pr->CModeFlag;
5927 CRT1Index = SiS_GetRefCRT1CRTC(SiS_Pr, RefreshRateTableIndex, SiS_Pr->SiS_UseWideCRT2);
5928 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
5929 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
5932 SiS_SetCRT2Offset(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
5934 if( ! ((SiS_Pr->ChipType >= SIS_315H) &&
5935 (SiS_Pr->SiS_IF_DEF_LVDS == 1) &&
5936 (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ) {
5938 if(SiS_Pr->ChipType < SIS_315H ) {
5940 SiS_SetCRT2FIFO_300(SiS_Pr, ModeNo);
5944 SiS_SetCRT2FIFO_310(SiS_Pr);
5950 if(SiS_Pr->ChipType < SIS_315H ) {
5954 temp = (SiS_Pr->SiS_VGAHT - 1) & 0x0FF; /* BTVGA2HT 0x08,0x09 */
5955 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x08,temp); /* CRT2 Horizontal Total */
5957 temp = (((SiS_Pr->SiS_VGAHT - 1) & 0xFF00) >> 8) << 4;
5958 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0f,temp); /* CRT2 Horizontal Total Overflow [7:4] */
5960 temp = (SiS_Pr->SiS_VGAHDE + 12) & 0x0FF; /* BTVGA2HDEE 0x0A,0x0C */
5961 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0A,temp); /* CRT2 Horizontal Display Enable End */
5963 pushbx = SiS_Pr->SiS_VGAHDE + 12; /* bx BTVGA2HRS 0x0B,0x0C */
5964 tempcx = (SiS_Pr->SiS_VGAHT - SiS_Pr->SiS_VGAHDE) >> 2;
5977 tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HT 0x08,0x09 */
5979 if(SiS_Pr->SiS_VBType & VB_SISVB) {
5982 tempax = SiS_Pr->SiS_VGAHDE >> 1;
5983 tempcx = SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE + tempax;
5984 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
5985 tempcx = SiS_Pr->SiS_HT - tempax;
5990 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x08,tempcx); /* CRT2 Horizontal Total */
5992 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0F,temp); /* CRT2 Horizontal Total Overflow [7:4] */
5994 tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HDEE 0x0A,0x0C */
5995 tempbx = SiS_Pr->SiS_VGAHDE;
6004 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0A,tempbx); /* CRT2 Horizontal Display Enable End */
6013 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6014 if(SiS_Pr->ChipType >= SIS_661) {
6015 if((SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||
6016 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
6030 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6032 if(SiS_Pr->UseCustomMode) {
6033 tempbx = SiS_Pr->CHSyncStart + bridgeadd;
6034 tempcx = SiS_Pr->CHSyncEnd + bridgeadd;
6035 tempax = SiS_Pr->SiS_VGAHT;
6041 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
6043 if(SiS_Pr->UseCustomMode) {
6044 cr4 = SiS_Pr->CCRT1CRTC[4];
6045 cr14 = SiS_Pr->CCRT1CRTC[14];
6046 cr5 = SiS_Pr->CCRT1CRTC[5];
6047 cr15 = SiS_Pr->CCRT1CRTC[15];
6049 cr4 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
6050 cr14 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
6051 cr5 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
6052 cr15 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
6060 tempax = SiS_Pr->SiS_VGAHT;
6066 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSet525p1024)) {
6073 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0B,tempbx); /* CRT2 Horizontal Retrace Start */
6075 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0D,tempcx); /* CRT2 Horizontal Retrace End */
6078 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0C,temp); /* Overflow */
6082 tempcx = SiS_Pr->SiS_VGAVT - 1;
6085 if(SiS_Pr->ChipType < SIS_661) {
6086 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
6087 if(SiS_Pr->ChipType < SIS_315H) {
6088 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6089 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
6096 } else if(SiS_Pr->ChipType >= SIS_315H) {
6100 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0E,temp); /* CRT2 Vertical Total */
6102 tempbx = SiS_Pr->SiS_VGAVDE - 1;
6103 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0F,tempbx); /* CRT2 Vertical Display Enable End */
6106 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x12,temp); /* Overflow */
6108 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->ChipType < SIS_661)) {
6120 tempbx = (SiS_Pr->SiS_VGAVT + SiS_Pr->SiS_VGAVDE) >> 1; /* BTVGA2VRS 0x10,0x11 */
6121 tempcx = ((SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) >> 4) + tempbx + 1; /* BTVGA2VRE 0x11 */
6124 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6125 if(SiS_Pr->UseCustomMode) {
6126 tempbx = SiS_Pr->CVSyncStart;
6127 tempcx = SiS_Pr->CVSyncEnd;
6129 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
6131 if(SiS_Pr->UseCustomMode) {
6132 cr8 = SiS_Pr->CCRT1CRTC[8];
6133 cr7 = SiS_Pr->CCRT1CRTC[7];
6134 cr13 = SiS_Pr->CCRT1CRTC[13];
6135 tempcx = SiS_Pr->CCRT1CRTC[9];
6137 cr8 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[8];
6138 cr7 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
6139 cr13 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
6140 tempcx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[9];
6148 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x10,tempbx); /* CRT2 Vertical Retrace Start */
6151 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x11,temp); /* CRT2 Vert. Retrace End; Overflow */
6155 if(SiS_Pr->ChipType < SIS_315H) {
6159 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6161 if(SiS_Pr->ChipType == SIS_300) {
6163 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) temp = 0x2c;
6164 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) temp = 0x20;
6166 if(SiS_Pr->SiS_VBType & VB_SIS301) {
6167 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) temp = 0x20;
6169 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x960) temp = 0x24;
6170 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) temp = 0x2c;
6171 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp = 0x08;
6172 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6173 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) temp = 0x2c;
6176 if(SiS_Pr->SiS_UseROM) {
6178 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoYPbPrHiVision)
6180 else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision)
6182 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)
6188 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6189 if(SiS_Pr->PDC != -1) temp = SiS_Pr->PDC;
6194 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
6195 if(SiS_Pr->SiS_LCDResInfo == Panel_640x480) temp = 0x04;
6197 if(SiS_Pr->SiS_UseROM) {
6202 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6203 if(SiS_Pr->PDC != -1) temp = SiS_Pr->PDC;
6209 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp); /* Panel Link Delay Compensation; (Software Command Reset; Power Saving) */
6217 if(SiS_Pr->ChipType < SIS_661) {
6219 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
6221 if(SiS_Pr->ChipType == SIS_740) temp = 0x03;
6224 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp = 0x0a;
6226 if(SiS_Pr->ChipType == SIS_650) {
6227 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6228 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempbl = 0x0F;
6232 if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) {
6235 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
6240 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,tempbl,temp); /* Panel Link Delay Compensation */
6248 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2C,0x3f,tempax);
6256 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6257 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
6259 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6260 } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6261 SiS_SetGroup1_301(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6264 if(SiS_Pr->ChipType < SIS_315H) {
6265 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6267 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6268 if((!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) || (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
6269 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo,ModeIdIndex,RefreshRateTableIndex);
6272 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo,ModeIdIndex,RefreshRateTableIndex);
6284 SiS_GetGroup2CLVXPtr(struct SiS_Private *SiS_Pr, int tabletype)
6289 a = SiS_Pr->SiS_VGAHDE;
6290 b = SiS_Pr->SiS_HDE;
6292 a = SiS_Pr->SiS_VGAVDE;
6293 b = SiS_Pr->SiS_VDE;
6301 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6306 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6307 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) tableptr = SiS_Part2CLVX_3;
6308 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tableptr = SiS_Part2CLVX_3;
6310 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6324 SiS_SetGroup2_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
6331 if(!(SiS_Pr->SiS_VBType & VB_SISTAP4SCALER)) return;
6333 tableptr = SiS_GetGroup2CLVXPtr(SiS_Pr, 0);
6335 SiS_SetReg(SiS_Pr->SiS_Part2Port, i, tableptr[j]);
6337 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
6338 tableptr = SiS_GetGroup2CLVXPtr(SiS_Pr, 1);
6340 SiS_SetReg(SiS_Pr->SiS_Part2Port, i, tableptr[j]);
6344 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp |= 0x04;
6345 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4e,0xeb,temp);
6349 SiS_GetCRT2Part2Ptr(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex,
6354 if(SiS_Pr->ChipType < SIS_315H) return false;
6357 (*ResIndex) = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6359 (*ResIndex) = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6364 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
6365 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
6370 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
6371 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
6372 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) (*CRT2Index) = 206;
6381 SiS_Group2LCDSpecial(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short crt2crtc)
6389 if(!SiS_Pr->UseCustomMode) {
6390 if( ( ( (SiS_Pr->ChipType == SIS_630) ||
6391 (SiS_Pr->ChipType == SIS_730) ) &&
6392 (SiS_Pr->ChipRevision > 2) ) &&
6393 (SiS_Pr->SiS_LCDResInfo == Panel_1024x768) &&
6394 (!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) &&
6395 (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
6397 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,0xB9);
6398 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,0xCC);
6399 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xA6);
6401 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x2B);
6402 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x13);
6403 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,0xE5);
6404 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,0x08);
6405 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xE2);
6409 if(SiS_Pr->ChipType < SIS_315H) {
6410 if(SiS_Pr->SiS_LCDTypeInfo == 0x0c) {
6413 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
6414 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6420 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xff);
6423 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
6424 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6426 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x28);
6430 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x18);
6431 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,atable[tempcx]);
6439 SiS_Set300Part2Regs(struct SiS_Private *SiS_Pr, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex,
6446 if(SiS_Pr->ChipType != SIS_300) return;
6447 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) return;
6448 if(SiS_Pr->UseCustomMode) return;
6451 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6453 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6457 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
6458 else CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_2;
6462 CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
6466 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,(CRT2Part2Ptr+resindex)->CR[0]);
6467 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x02,0x80,(CRT2Part2Ptr+resindex)->CR[1]);
6469 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6472 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6475 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6477 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,(CRT2Part2Ptr+resindex)->CR[10]);
6478 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
6483 SiS_SetTVSpecial(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
6485 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) return;
6486 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision)) return;
6487 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) return;
6489 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
6490 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
6498 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,specialtv[j]);
6500 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,0x72);
6501 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750)) {
6502 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6503 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x14);
6504 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1b);
6506 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x14); /* 15 */
6507 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1a); /* 1b */
6514 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1b); /* 21 */
6515 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x54); /* 5a */
6517 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1a); /* 21 */
6518 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x53); /* 5a */
6524 SiS_SetGroup2_Tail(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
6528 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
6529 if(SiS_Pr->SiS_VGAVDE == 525) {
6531 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6533 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) temp += 2;
6535 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2f,temp);
6536 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x30,0xb3);
6537 } else if(SiS_Pr->SiS_VGAVDE == 420) {
6539 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6541 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) temp++;
6543 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2f,temp);
6547 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6548 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) {
6549 if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
6550 SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x1a,0x03);
6555 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0b,temp);
6559 if((SiS_Pr->SiS_PanelXRes == 1280) && (SiS_Pr->SiS_PanelYRes == 768)) {
6560 if(SiS_Pr->SiS_VBInfo & SetSimuScanMode) {
6561 if(((SiS_Pr->SiS_HDE == 640) && (SiS_Pr->SiS_VDE == 480)) ||
6562 ((SiS_Pr->SiS_HDE == 320) && (SiS_Pr->SiS_VDE == 240))) {
6583 SiS_SetGroup2(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
6595 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
6599 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
6600 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6601 } else if(SiS_Pr->UseCustomMode) {
6602 modeflag = SiS_Pr->CModeFlag;
6605 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
6606 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6610 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToAVIDEO)) temp |= 0x08;
6611 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSVIDEO)) temp |= 0x04;
6612 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) temp |= 0x02;
6613 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) temp |= 0x01;
6615 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) temp |= 0x10;
6617 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x00,temp);
6620 TimingPoint = SiS_Pr->SiS_PALTiming;
6623 if( (SiS_Pr->SiS_VBType & VB_SIS30xBLV) &&
6624 ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
6625 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode) ) ) {
6629 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6631 TimingPoint = SiS_Pr->SiS_HiTVExtTiming;
6632 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6633 TimingPoint = SiS_Pr->SiS_HiTVSt2Timing;
6634 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
6635 TimingPoint = SiS_Pr->SiS_HiTVSt1Timing;
6639 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6642 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) i = 2;
6643 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) i = 1;
6649 } else if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6655 TimingPoint = SiS_Pr->SiS_NTSCTiming;
6656 PhaseIndex = (SiS_Pr->SiS_TVMode & TVSetNTSCJ) ? 0x01 : 0x00; /* SiS_PALPhase : SiS_NTSCPhase */
6661 if(SiS_Pr->SiS_TVMode & (TVSetPALM | TVSetPALN)) {
6662 PhaseIndex = (SiS_Pr->SiS_TVMode & TVSetPALM) ? 0x02 : 0x03; /* SiS_PALMPhase : SiS_PALNPhase */
6666 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
6667 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6669 } else if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) {
6677 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS_TVPhase[(PhaseIndex * 4) + j]);
6681 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,TimingPoint[j]);
6684 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,TimingPoint[j]);
6687 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
6688 if(SiS_Pr->SiS_ModeType != ModeText) {
6689 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
6693 SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x0A,SiS_Pr->SiS_NewFlickerMode);
6695 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x35,SiS_Pr->SiS_RY1COE);
6696 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x36,SiS_Pr->SiS_RY2COE);
6697 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x37,SiS_Pr->SiS_RY3COE);
6698 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x38,SiS_Pr->SiS_RY4COE);
6700 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempax = 950;
6701 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempax = 680;
6702 else if(SiS_Pr->SiS_TVMode & TVSetPAL) tempax = 520;
6705 if( ((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) && (SiS_Pr->SiS_VDE <= tempax)) ||
6706 ( (SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision) &&
6707 ((SiS_Pr->SiS_VGAHDE == 1024) || (SiS_Pr->SiS_VDE <= tempax)) ) ) {
6709 tempax -= SiS_Pr->SiS_VDE;
6711 if(!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p))) {
6717 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,temp);
6720 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,temp);
6722 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoYPbPrHiVision) && (SiS_Pr->SiS_VGAHDE >= 1024)) {
6723 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6724 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1b);
6725 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x54);
6727 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x17);
6728 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1d);
6734 tempcx = SiS_Pr->SiS_HT;
6735 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
6737 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) tempcx--;
6738 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1B,tempcx);
6739 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0xF0,((tempcx >> 8) & 0x0f));
6741 tempcx = SiS_Pr->SiS_HT >> 1;
6742 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
6744 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempcx -= 4;
6745 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x22,0x0F,((tempcx << 4) & 0xf0));
6749 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x24,tempbx);
6750 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0F,((tempbx >> 4) & 0xf0));
6753 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6757 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x29,0x0F,((tempbx << 4) & 0xf0));
6761 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x27,tempcx);
6762 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x28,0x0F,((tempcx >> 4) & 0xf0));
6765 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempcx -= 4;
6766 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2A,0x0F,((tempcx << 4) & 0xf0));
6768 tempcx = SiS_Pr->SiS_HT >> 1;
6769 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
6772 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2D,0x0F,((tempcx << 4) & 0xf0));
6775 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
6776 tempcx = SiS_GetVGAHT2(SiS_Pr) - 1;
6778 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2E,tempcx);
6780 tempbx = SiS_Pr->SiS_VDE;
6781 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6782 if(SiS_Pr->SiS_VGAVDE == 360) tempbx = 746;
6783 if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 746;
6784 if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 853;
6785 } else if( (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) &&
6786 (!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p|TVSetYPbPr750p))) ) {
6788 if(SiS_Pr->ChipType >= SIS_315H) {
6789 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
6791 } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6792 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6797 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6798 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6801 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
6807 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2F,tempbx);
6811 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
6813 if(SiS_Pr->SiS_VBInfo & SetCRT2ToAVIDEO) temp |= 0x20;
6815 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x30,temp);
6817 if(SiS_Pr->SiS_VBType & VB_SISPART4OVERFLOW) {
6818 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x10,0xdf,((tempbx & 0x0400) >> 5));
6821 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
6822 tempbx = SiS_Pr->SiS_VDE;
6823 if( (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) &&
6824 (!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p))) ) {
6829 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x46,temp);
6830 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x47,tempbx);
6832 if(SiS_Pr->SiS_VBType & VB_SISPART4OVERFLOW) {
6833 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x10,0xbf,((tempbx & 0x0400) >> 4));
6839 if(SiS_Pr->SiS_VGAHDE >= SiS_Pr->SiS_HDE) {
6846 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
6847 if(SiS_Pr->SiS_VGAHDE >= 960) {
6848 if((!(modeflag & HalfDCLK)) || (SiS_Pr->ChipType < SIS_315H)) {
6850 if(SiS_Pr->SiS_VGAHDE >= 1280) {
6853 } else if(SiS_Pr->SiS_VGAHDE >= 1024) {
6864 longtemp = ((SiS_Pr->SiS_VGAHDE * tempch) / tempcl) << 13;
6865 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) longtemp <<= 3;
6866 tempax = longtemp / SiS_Pr->SiS_HDE;
6867 if(longtemp % SiS_Pr->SiS_HDE) tempax++;
6872 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x44,tempax);
6873 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x45,0xC0,tempbx);
6875 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
6879 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x46,0xF8,tempcx);
6881 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6888 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4B,tempbx);
6889 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4C,tempcx);
6892 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6894 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) temp |= 0x20;
6895 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) temp |= 0x40;
6897 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4D,temp);
6899 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x43);
6900 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,(temp - 3));
6902 SiS_SetTVSpecial(SiS_Pr, ModeNo);
6904 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
6906 if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 8;
6907 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4e,0xf7,temp);
6912 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6913 if(!(SiS_Pr->SiS_TVMode & TVSetNTSC1024)) {
6914 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x01);
6915 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,(temp - 1));
6917 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xEF);
6920 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6921 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
6922 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0B,0x00);
6926 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) return;
6930 tempbx = SiS_Pr->SiS_HDE;
6931 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
6933 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2C,tempbx);
6934 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2B,0x0F,((tempbx >> 4) & 0xf0));
6937 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
6938 if(SiS_Pr->SiS_ModeType == ModeEGA) {
6939 if(SiS_Pr->SiS_VGAHDE >= 1024) {
6941 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
6947 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0B,temp);
6949 tempbx = SiS_Pr->SiS_VDE - 1;
6950 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x03,tempbx);
6951 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0C,0xF8,((tempbx >> 8) & 0x07));
6953 tempcx = SiS_Pr->SiS_VT - 1;
6954 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x19,tempcx);
6956 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
6958 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
6962 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1A,0x0f,temp);
6964 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x09,0xF0);
6965 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x0A,0xF0);
6967 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x17,0xFB);
6968 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x18,0xDF);
6971 if(SiS_GetCRT2Part2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
6976 case 200: CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1; break;
6979 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,(CRT2Part2Ptr+resindex)->CR[0]);
6980 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x02,0x80,(CRT2Part2Ptr+resindex)->CR[1]);
6982 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6985 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6988 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6990 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,(CRT2Part2Ptr+resindex)->CR[10]);
6991 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
6993 SiS_SetGroup2_Tail(SiS_Pr, ModeNo);
7003 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7004 if((SiS_Pr->SiS_LCDInfo & LCDPass11) || (SiS_Pr->PanelYRes == SiS_Pr->SiS_VDE)) {
7005 tempbx = SiS_Pr->SiS_VDE - 1;
7006 tempcx = SiS_Pr->SiS_VT - 1;
7008 tempbx = SiS_Pr->SiS_VDE + ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VDE) / 2);
7009 tempcx = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VDE) / 2);
7012 tempbx = SiS_Pr->PanelYRes;
7013 tempcx = SiS_Pr->SiS_VT;
7015 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7016 tempax = SiS_Pr->PanelYRes;
7017 /* if(SiS_Pr->SiS_VGAVDE == 525) tempax += 0x3c; */ /* 651+301C */
7018 if(SiS_Pr->PanelYRes < SiS_Pr->SiS_VDE) {
7021 tempax -= SiS_Pr->SiS_VDE;
7031 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,tempcx); /* lcdvdes */
7032 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,tempbx); /* lcdvdee */
7036 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,temp);
7038 tempax = SiS_Pr->SiS_VDE;
7039 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7040 tempax = SiS_Pr->PanelYRes;
7042 tempcx = (SiS_Pr->SiS_VT - tempax) >> 4;
7043 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7044 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7045 tempcx = (SiS_Pr->SiS_VT - tempax) / 10;
7049 tempbx = ((SiS_Pr->SiS_VT + SiS_Pr->SiS_VDE) >> 1) - 1;
7050 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7051 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7052 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) { /* ? */
7053 tempax = SiS_Pr->SiS_VT - SiS_Pr->PanelYRes;
7059 if(tempbx <= SiS_Pr->SiS_VDE) tempbx = SiS_Pr->SiS_VDE + 1;
7063 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
7065 if((!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) || (crt2crtc == 6)) {
7066 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
7075 if(SiS_Pr->UseCustomMode) {
7076 tempbx = SiS_Pr->CVSyncStart;
7079 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,tempbx); /* lcdvrs */
7085 if(SiS_Pr->UseCustomMode) {
7087 temp |= (SiS_Pr->CVSyncEnd & 0x0f);
7090 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,temp);
7093 SiS_Group2LCDSpecial(SiS_Pr, ModeNo, crt2crtc);
7097 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) bridgeoffset += 2;
7098 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) bridgeoffset += 2; /* OK for Averatec 1280x800 (301C) */
7099 if(SiS_IsDualLink(SiS_Pr)) bridgeoffset++;
7100 else if(SiS_Pr->SiS_VBType & VB_SIS302LV) bridgeoffset++; /* OK for Asus A4L 1280x800 */
7104 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7105 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) {
7106 temp = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_HDE) / 2);
7107 if(SiS_IsDualLink(SiS_Pr)) temp >>= 1;
7111 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1F,temp); /* lcdhdes */
7112 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x20,0x0F,((temp >> 4) & 0xf0));
7114 tempcx = SiS_Pr->SiS_HT;
7115 tempax = tempbx = SiS_Pr->SiS_HDE;
7116 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7117 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) {
7118 tempax = SiS_Pr->PanelXRes;
7119 tempbx = SiS_Pr->PanelXRes - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_HDE) / 2);
7122 if(SiS_IsDualLink(SiS_Pr)) {
7130 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,tempbx); /* lcdhdee */
7131 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0xF0,((tempbx >> 8) & 0x0f));
7138 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
7139 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7140 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
7141 if(SiS_Pr->SiS_HDE == 1280) tempbx = (tempbx & 0xff00) | 0x47;
7146 if(SiS_Pr->UseCustomMode) {
7147 tempbx = SiS_Pr->CHSyncStart;
7149 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7153 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1C,tempbx); /* lcdhrs */
7154 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0x0F,((tempbx >> 4) & 0xf0));
7159 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7160 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) tempcx >>= 2;
7164 if(SiS_Pr->UseCustomMode) {
7165 tempbx = SiS_Pr->CHSyncEnd;
7167 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7171 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x21,tempbx); /* lcdhre */
7173 SiS_SetGroup2_Tail(SiS_Pr, ModeNo);
7176 SiS_Set300Part2Regs(SiS_Pr, ModeIdIndex, RefreshRateTableIndex, ModeNo);
7188 SiS_SetGroup3(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7193 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
7196 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x00,0x00);
7201 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7202 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xFA);
7203 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xC8);
7205 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xF5);
7206 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xB7);
7209 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
7210 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xFA);
7211 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xC8);
7212 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x3D,0xA8);
7216 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7217 tempdi = SiS_Pr->SiS_HiTVGroup3Data;
7218 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
7219 tempdi = SiS_Pr->SiS_HiTVGroup3Simu;
7221 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
7222 if(!(SiS_Pr->SiS_TVMode & TVSetYPbPr525i)) {
7224 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempdi = SiS_HiTVGroup3_2;
7229 SiS_SetReg(SiS_Pr->SiS_Part3Port,i,tempdi[i]);
7231 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
7232 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
7233 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x28,0x3f);
7250 SiS_ShiftXPos(struct SiS_Private *SiS_Pr, int shift)
7254 temp1 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x1f);
7255 temp2 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x20);
7257 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1f,temp);
7258 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x20,0x0f,((temp >> 4) & 0xf0));
7259 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x2b) & 0x0f;
7261 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2b,0xf0,(temp & 0x0f));
7262 temp1 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x43);
7263 temp2 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x42);
7265 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,temp);
7266 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x42,0x0f,((temp >> 4) & 0xf0));
7271 SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7274 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
7276 if(!(SiS_Pr->SiS_VBType & VB_SIS30xCLV)) return;
7277 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToHiVision | SetCRT2ToYPbPr525750))) return;
7279 if(SiS_Pr->ChipType >= XGI_20) return;
7281 if((SiS_Pr->ChipType >= SIS_661) && (SiS_Pr->SiS_ROMNew)) {
7286 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
7289 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3a,0x08);
7290 temp = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x3a);
7292 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x3a,0xdf);
7293 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x25,0xfc);
7294 if((SiS_Pr->ChipType < SIS_661) && (!(SiS_Pr->SiS_ROMNew))) {
7295 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x25,0xf8);
7297 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x0f,0xfb);
7298 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) temp = 0x0000;
7299 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) temp = 0x0002;
7300 else if(SiS_Pr->SiS_TVMode & TVSetHiVision) temp = 0x0400;
7302 if((SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
7304 if(SiS_Pr->SiS_TVMode & TVAspect43) temp1 = 4;
7305 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0f,0xfb,temp1);
7306 if(SiS_Pr->SiS_TVMode & TVAspect43LB) temp |= 0x01;
7307 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0x7c,(temp & 0xff));
7308 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0xfb,(temp >> 8));
7310 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x39,0xfd);
7313 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x3b) & 0x03;
7316 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xf8,(temp & 0xff));
7317 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0xfb,(temp >> 8));
7319 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x3b,0xfd);
7324 if(SiS_Pr->ChipType >= SIS_661) { /* ? */
7325 if(SiS_Pr->SiS_TVMode & TVAspect43) {
7326 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
7328 SiS_ShiftXPos(SiS_Pr, 97);
7330 SiS_ShiftXPos(SiS_Pr, 111);
7332 } else if(SiS_Pr->SiS_TVMode & TVSetHiVision) {
7333 SiS_ShiftXPos(SiS_Pr, 136);
7345 SiS_SetCRT2VCLK(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7350 if(SiS_Pr->UseCustomMode) {
7351 reg1 = SiS_Pr->CSR2B;
7352 reg2 = SiS_Pr->CSR2C;
7354 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
7355 reg1 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
7356 reg2 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
7359 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7360 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSet525p1024)) {
7361 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,0x57);
7362 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,0x46);
7363 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1f,0xf6);
7365 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,reg1);
7366 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,reg2);
7369 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,0x01);
7370 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,reg2);
7371 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,reg1);
7373 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x12,0x00);
7375 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) temp |= 0x20;
7376 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x12,temp);
7380 SiS_SetDualLinkEtc(struct SiS_Private *SiS_Pr)
7382 if(SiS_Pr->ChipType >= SIS_315H) {
7383 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
7384 if((SiS_CRT2IsLCD(SiS_Pr)) ||
7385 (SiS_IsVAMode(SiS_Pr))) {
7386 if(SiS_Pr->SiS_LCDInfo & LCDDualLink) {
7387 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
7389 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x27,~0x20);
7394 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
7395 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2a,0x00);
7397 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
7399 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
7404 SiS_SetGroup4(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7411 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7412 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
7413 } else if(SiS_Pr->UseCustomMode) {
7414 modeflag = SiS_Pr->CModeFlag;
7417 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7418 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
7421 if(SiS_Pr->ChipType >= SIS_315H) {
7422 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
7423 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
7424 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x24,0x0e);
7429 if(SiS_Pr->SiS_VBType & (VB_SIS30xCLV | VB_SIS302LV)) {
7430 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7431 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x10,0x9f);
7435 if(SiS_Pr->ChipType >= SIS_315H) {
7436 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
7437 SiS_SetDualLinkEtc(SiS_Pr);
7442 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x13,SiS_Pr->SiS_RVBHCFACT);
7444 tempbx = SiS_Pr->SiS_RVBHCMAX;
7445 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x14,tempbx);
7449 tempcx = SiS_Pr->SiS_VGAHT - 1;
7450 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x16,tempcx);
7454 tempcx = SiS_Pr->SiS_VGAVT - 1;
7455 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempcx -= 5;
7456 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x17,tempcx);
7459 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x15,temp);
7461 tempbx = SiS_Pr->SiS_VGAHDE;
7463 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7465 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7468 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7472 } else if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) {
7481 temp |= SiS_Pr->Init_P4_0E;
7483 if(SiS_Pr->SiS_VBType & VB_SIS301) {
7484 if(SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) {
7490 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0E,0x10,temp);
7492 tempeax = SiS_Pr->SiS_VGAVDE;
7493 tempebx = SiS_Pr->SiS_VDE;
7494 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7498 tempcx = SiS_Pr->SiS_RVBHRS;
7499 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x18,tempcx);
7515 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1B,temp);
7517 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1A,temp);
7520 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x19,temp);
7522 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7524 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1C,0x28);
7528 if(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr750p)) tempbx = 0x08;
7529 tempax = SiS_Pr->SiS_VGAHDE;
7531 if(SiS_IsDualLink(SiS_Pr)) tempax >>= 1;
7533 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7544 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7557 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1D,tempax);
7558 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1E,temp);
7561 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
7564 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7565 if(!(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSetHiVision | TVSetYPbPr750p | TVSetYPbPr525p))) {
7567 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
7568 if(!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
7574 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x1F,tempbx,temp);
7576 tempbx = SiS_Pr->SiS_HT >> 1;
7577 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7579 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x22,tempbx);
7581 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0xC0,temp);
7583 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
7584 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7585 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x24,0x0e);
7590 SiS_SetDualLinkEtc(SiS_Pr);
7594 SiS_SetCRT2VCLK(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
7602 SiS_SetGroup5(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7605 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
7607 if(SiS_Pr->SiS_ModeType == ModeVGA) {
7608 if(!(SiS_Pr->SiS_VBInfo & (SetInSlaveMode | LoadDACFlag))) {
7609 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
7610 SiS_LoadDAC(SiS_Pr, ModeNo, ModeIdIndex);
7620 SiS_GetLVDSCRT1Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7630 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7631 (*ResIndex) = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
7633 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7634 (*ResIndex) = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
7639 if((SiS_Pr->SiS_IF_DEF_CH70xx) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
7642 if((SiS_Pr->SiS_TVMode & TVSetPAL) && (!(SiS_Pr->SiS_TVMode & TVSetPALM))) {
7644 if(SiS_Pr->SiS_ModeType > ModeVGA) {
7645 if(SiS_Pr->SiS_CHSOverScan) (*DisplayType) = 84;
7649 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) (*DisplayType)++;
7655 switch(SiS_Pr->SiS_LCDResInfo) {
7674 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x600) {
7675 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) (*DisplayType) += 2;
7684 SiS_ModCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7694 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
7695 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
7696 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
7697 (SiS_Pr->SiS_CustomT == CUT_PANEL856) )
7700 if(SiS_Pr->SiS_IF_DEF_LVDS) {
7701 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
7702 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) return;
7704 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
7705 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) return;
7708 if(SiS_Pr->SiS_LCDInfo & LCDPass11) return;
7710 if(SiS_Pr->ChipType < SIS_315H) {
7711 if(SiS_Pr->SiS_SetFlag & SetDOSMode) return;
7714 if(!(SiS_GetLVDSCRT1Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
7720 case 50: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_1; break; /* xSTN */
7721 case 14: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_2; break; /* xSTN */
7722 case 15: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_2_H; break; /* xSTN */
7723 case 18: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_3; break; /* xSTN */
7724 case 19: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_3_H; break; /* xSTN */
7725 case 10: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1; break;
7726 case 11: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1_H; break;
7728 case 26: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_1; break;
7729 case 27: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_1_H; break;
7730 case 28: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_2; break;
7731 case 29: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_2_H; break;
7733 case 80: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1UNTSC; break;
7734 case 81: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1ONTSC; break;
7735 case 82: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1UPAL; break;
7736 case 83: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1OPAL; break;
7737 case 84: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1SOPAL; break;
7742 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x11,0x7f);
7746 SiS_SetReg(SiS_Pr->SiS_P3d4,CRIdx[i],tempah);
7751 SiS_SetReg(SiS_Pr->SiS_P3c4,i,tempah);
7755 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x0E,0x1f,tempah);
7757 if(ModeNo <= 0x13) modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7758 else modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7762 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x09,~0x020,tempah);
7766 SiS_CalcLCDACRT1Timing(SiS_Pr, ModeNo, ModeIdIndex);
7776 SiS_SetCRT2ECLK(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7779 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
7783 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
7784 SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
7785 if(SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK == 2) {
7788 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex,
7790 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
7792 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex,
7796 sr2b = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
7797 sr2c = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
7799 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
7800 if(SiS_Pr->SiS_UseROM) {
7809 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
7810 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
7815 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x20);
7816 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
7817 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
7818 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x10);
7819 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
7820 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
7821 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x00);
7822 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
7823 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
7831 SiS_SetCHTVReg(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7838 resindex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
7840 resindex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
7845 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
7846 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7848 if(SiS_Pr->SiS_ModeType > ModeVGA) {
7849 if(SiS_Pr->SiS_CHSOverScan) TVType = 8;
7851 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
7853 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
7854 } else if(SiS_Pr->SiS_TVMode & TVSetPALN) {
7856 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
7861 case 0: CHTVRegData = SiS_Pr->SiS_CHTVReg_UNTSC; break;
7862 case 1: CHTVRegData = SiS_Pr->SiS_CHTVReg_ONTSC; break;
7863 case 2: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPAL; break;
7864 case 3: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPAL; break;
7865 case 4: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPALM; break;
7866 case 5: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPALM; break;
7867 case 6: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPALN; break;
7868 case 7: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPALN; break;
7869 case 8: CHTVRegData = SiS_Pr->SiS_CHTVReg_SOPAL; break;
7870 default: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPAL; break;
7874 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
7883 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7884 SiS_SetCH700x(SiS_Pr,0x04,0x43); /* 0x40=76uA (PAL); 0x03=15bit non-multi RGB*/
7885 SiS_SetCH700x(SiS_Pr,0x09,0x69); /* Black level for PAL (105)*/
7887 SiS_SetCH700x(SiS_Pr,0x04,0x03); /* upper nibble=71uA (NTSC), 0x03=15bit non-multi RGB*/
7888 SiS_SetCH700x(SiS_Pr,0x09,0x71); /* Black level for NTSC (113)*/
7891 SiS_SetCH700x(SiS_Pr,0x00,CHTVRegData[resindex].Reg[0]); /* Mode register */
7892 SiS_SetCH700x(SiS_Pr,0x07,CHTVRegData[resindex].Reg[1]); /* Start active video register */
7893 SiS_SetCH700x(SiS_Pr,0x08,CHTVRegData[resindex].Reg[2]); /* Position overflow register */
7894 SiS_SetCH700x(SiS_Pr,0x0a,CHTVRegData[resindex].Reg[3]); /* Horiz Position register */
7895 SiS_SetCH700x(SiS_Pr,0x0b,CHTVRegData[resindex].Reg[4]); /* Vertical Position register */
7902 SiS_SetCH700x(SiS_Pr,0x01,0x28);
7911 SiS_SetCH700x(SiS_Pr,0x03,0xb1); /* old: 3103 */
7917 SiS_SetCH70xx(SiS_Pr,0x3d,0x00);
7923 SiS_SetCH70xxANDOR(SiS_Pr,0x10,0x00,0x1F);
7928 SiS_SetCH70xxANDOR(SiS_Pr,0x11,0x02,0xF8);
7932 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x00,0xEF);
7934 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) { /* ---- NTSC ---- */
7935 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) {
7937 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
7938 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on, no need to set FSCI */
7940 SiS_SetCH70xxANDOR(SiS_Pr,0x18,0x01,0xF0); /* 0x18-0x1f: FSCI 469,762,048 */
7941 SiS_SetCH70xxANDOR(SiS_Pr,0x19,0x0C,0xF0);
7942 SiS_SetCH70xxANDOR(SiS_Pr,0x1a,0x00,0xF0);
7943 SiS_SetCH70xxANDOR(SiS_Pr,0x1b,0x00,0xF0);
7944 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x00,0xF0);
7945 SiS_SetCH70xxANDOR(SiS_Pr,0x1d,0x00,0xF0);
7946 SiS_SetCH70xxANDOR(SiS_Pr,0x1e,0x00,0xF0);
7947 SiS_SetCH70xxANDOR(SiS_Pr,0x1f,0x00,0xF0);
7948 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x01,0xEF); /* Loop filter on for mode 23 */
7949 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x00,0xFE); /* ACIV off, need to set FSCI */
7953 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
7954 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE);
7957 SiS_SetCH70xxANDOR(SiS_Pr,0x18,0x01,0xF0); /* (FSCI was 0x1f1c71c7 - this is for mode 22) */
7958 SiS_SetCH70xxANDOR(SiS_Pr,0x19,0x09,0xF0); /* FSCI for mode 24 is 428,554,851 */
7959 SiS_SetCH70xxANDOR(SiS_Pr,0x1a,0x08,0xF0); /* 198b3a63 */
7960 SiS_SetCH70xxANDOR(SiS_Pr,0x1b,0x0b,0xF0);
7961 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x04,0xF0);
7962 SiS_SetCH70xxANDOR(SiS_Pr,0x1d,0x01,0xF0);
7963 SiS_SetCH70xxANDOR(SiS_Pr,0x1e,0x06,0xF0);
7964 SiS_SetCH70xxANDOR(SiS_Pr,0x1f,0x05,0xF0);
7965 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off for mode 24 */
7966 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x00,0xFE); * ACIV off, need to set FSCI */
7968 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
7969 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE);
7975 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
7976 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on */
7978 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
7979 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on */
7997 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp |= 0x10;
7998 SiS_SetCH701x(SiS_Pr,0x00,temp);
8000 SiS_SetCH701x(SiS_Pr,0x01,CHTVRegData[resindex].Reg[1]);
8001 SiS_SetCH701x(SiS_Pr,0x02,CHTVRegData[resindex].Reg[2]);
8002 SiS_SetCH701x(SiS_Pr,0x04,CHTVRegData[resindex].Reg[3]);
8003 SiS_SetCH701x(SiS_Pr,0x03,CHTVRegData[resindex].Reg[4]);
8004 SiS_SetCH701x(SiS_Pr,0x05,CHTVRegData[resindex].Reg[5]);
8005 SiS_SetCH701x(SiS_Pr,0x06,CHTVRegData[resindex].Reg[6]);
8008 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp = 0x66;
8009 SiS_SetCH701x(SiS_Pr,0x07,temp);
8011 SiS_SetCH701x(SiS_Pr,0x08,CHTVRegData[resindex].Reg[8]);
8012 SiS_SetCH701x(SiS_Pr,0x15,CHTVRegData[resindex].Reg[9]);
8013 SiS_SetCH701x(SiS_Pr,0x1f,CHTVRegData[resindex].Reg[10]);
8014 SiS_SetCH701x(SiS_Pr,0x0c,CHTVRegData[resindex].Reg[11]);
8015 SiS_SetCH701x(SiS_Pr,0x0d,CHTVRegData[resindex].Reg[12]);
8016 SiS_SetCH701x(SiS_Pr,0x0e,CHTVRegData[resindex].Reg[13]);
8017 SiS_SetCH701x(SiS_Pr,0x0f,CHTVRegData[resindex].Reg[14]);
8018 SiS_SetCH701x(SiS_Pr,0x10,CHTVRegData[resindex].Reg[15]);
8020 temp = SiS_GetCH701x(SiS_Pr,0x21) & ~0x02;
8027 if(SiS_Pr->SiS_TVMode & (TVSetPALN | TVSetNTSCJ)) temp |= 0x02;
8028 SiS_SetCH701x(SiS_Pr,0x21,temp);
8043 SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr)
8048 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8049 if(SiS_Pr->ChipType == SIS_740) {
8050 SiS_SetCH701x(SiS_Pr,0x66,0x65);
8052 temp = SiS_GetCH701x(SiS_Pr,0x66);
8054 SiS_SetCH701x(SiS_Pr,0x66,temp);
8060 SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr)
8065 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8066 temp = SiS_GetCH701x(SiS_Pr,0x66);
8068 SiS_SetCH701x(SiS_Pr,0x66,temp);
8073 SiS_ChrontelPowerSequencing(struct SiS_Private *SiS_Pr)
8087 if(SiS_Pr->ChipType == SIS_740) {
8088 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
8089 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) tableptr = asus1024_740;
8091 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
8092 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
8093 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200)) {
8094 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) tableptr = asus1400_740;
8098 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
8100 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
8101 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
8102 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200)) {
8108 SiS_SetCH701x(SiS_Pr, regtable[i], tableptr[i]);
8113 SiS_SetCH701xForLCD(struct SiS_Private *SiS_Pr)
8155 if(SiS_Pr->ChipType == SIS_740) {
8156 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tableptr = table1024_740;
8157 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) tableptr = table1280_740;
8158 else if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) tableptr = table1400_740;
8159 else if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) tableptr = table1600_740;
8162 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tableptr = table1024_650;
8163 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) tableptr = table1280_650;
8164 else if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) tableptr = table1400_650;
8165 else if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) tableptr = table1600_650;
8169 tempbh = SiS_GetCH701x(SiS_Pr,0x74);
8171 tempbh = SiS_GetCH701x(SiS_Pr,0x73);
8173 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) return;
8175 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) return;
8176 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) return;
8178 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) return;
8182 if(SiS_Pr->ChipType == SIS_740) tempbh = 0x0d;
8186 SiS_SetCH701x(SiS_Pr, regtable[i], tableptr[i]);
8188 SiS_ChrontelPowerSequencing(SiS_Pr);
8189 tempbh = SiS_GetCH701x(SiS_Pr,0x1e);
8191 SiS_SetCH701x(SiS_Pr,0x1e,tempbh);
8193 if(SiS_Pr->ChipType == SIS_740) {
8194 tempbh = SiS_GetCH701x(SiS_Pr,0x1c);
8196 SiS_SetCH701x(SiS_Pr,0x1c,tempbh);
8197 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x03);
8198 tempbh = SiS_GetCH701x(SiS_Pr,0x64);
8200 SiS_SetCH701x(SiS_Pr,0x64,tempbh);
8201 tempbh = SiS_GetCH701x(SiS_Pr,0x03);
8203 SiS_SetCH701x(SiS_Pr,0x03,tempbh);
8208 SiS_ChrontelResetVSync(struct SiS_Private *SiS_Pr)
8212 temp1 = SiS_GetCH701x(SiS_Pr,0x49);
8213 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
8214 temp = SiS_GetCH701x(SiS_Pr,0x47);
8216 SiS_SetCH701x(SiS_Pr,0x47,temp);
8217 SiS_LongDelay(SiS_Pr, 3);
8218 temp = SiS_GetCH701x(SiS_Pr,0x47);
8220 SiS_SetCH701x(SiS_Pr,0x47,temp);
8221 SiS_SetCH701x(SiS_Pr,0x49,temp1);
8225 SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr)
8229 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8230 if(SiS_Pr->ChipType == SIS_740) {
8231 temp = SiS_GetCH701x(SiS_Pr,0x1c);
8233 SiS_SetCH701x(SiS_Pr,0x1c,temp);
8235 if(SiS_IsYPbPr(SiS_Pr)) {
8236 temp = SiS_GetCH701x(SiS_Pr,0x01);
8239 SiS_SetCH701x(SiS_Pr,0x01,temp);
8241 if(SiS_IsChScart(SiS_Pr)) {
8242 temp = SiS_GetCH701x(SiS_Pr,0x01);
8245 SiS_SetCH701x(SiS_Pr,0x01,temp);
8247 if(SiS_Pr->ChipType == SIS_740) {
8248 SiS_ChrontelResetVSync(SiS_Pr);
8249 SiS_SetCH701x(SiS_Pr,0x49,0x20); /* Enable TV path */
8251 SiS_SetCH701x(SiS_Pr,0x49,0x20); /* Enable TV path */
8252 temp = SiS_GetCH701x(SiS_Pr,0x49);
8253 if(SiS_IsYPbPr(SiS_Pr)) {
8254 temp = SiS_GetCH701x(SiS_Pr,0x73);
8256 SiS_SetCH701x(SiS_Pr,0x73,temp);
8258 temp = SiS_GetCH701x(SiS_Pr,0x47);
8260 SiS_SetCH701x(SiS_Pr,0x47,temp);
8261 SiS_LongDelay(SiS_Pr, 2);
8262 temp = SiS_GetCH701x(SiS_Pr,0x47);
8264 SiS_SetCH701x(SiS_Pr,0x47,temp);
8270 SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr)
8275 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8276 if(SiS_Pr->ChipType == SIS_740) {
8277 SiS_LongDelay(SiS_Pr, 1);
8278 SiS_GenericDelay(SiS_Pr, 5887);
8279 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8280 SiS_SetCH701x(SiS_Pr,0x66,0x00);
8282 SiS_LongDelay(SiS_Pr, 2);
8283 temp = SiS_GetCH701x(SiS_Pr,0x76);
8285 SiS_SetCH701x(SiS_Pr,0x76,temp);
8286 SiS_SetCH701x(SiS_Pr,0x66,0x00);
8292 SiS_ChrontelResetDB(struct SiS_Private *SiS_Pr)
8296 if(SiS_Pr->ChipType == SIS_740) {
8298 temp = SiS_GetCH701x(SiS_Pr,0x4a); /* Version ID */
8302 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8303 temp = SiS_GetCH701x(SiS_Pr,0x49);
8304 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
8308 SiS_SetCH701x(SiS_Pr,0x48,0x10);
8309 SiS_LongDelay(SiS_Pr, 1);
8310 SiS_SetCH701x(SiS_Pr,0x48,0x18);
8312 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8313 SiS_ChrontelResetVSync(SiS_Pr);
8314 SiS_SetCH701x(SiS_Pr,0x49,temp);
8320 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8322 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8323 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8325 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8326 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8328 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8329 temp = SiS_GetCH701x(SiS_Pr,0x61);
8331 SiS_SetCH701xForLCD(SiS_Pr);
8337 SiS_SetCH701x(SiS_Pr,0x48,0x10);
8338 SiS_LongDelay(SiS_Pr, 1);
8339 SiS_SetCH701x(SiS_Pr,0x48,0x18);
8344 SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr)
8348 if(SiS_Pr->ChipType == SIS_740) {
8350 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8351 SiS_ChrontelResetVSync(SiS_Pr);
8356 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* Power up LVDS block */
8357 temp = SiS_GetCH701x(SiS_Pr,0x49);
8360 temp = SiS_GetCH701x(SiS_Pr,0x47);
8362 SiS_SetCH701x(SiS_Pr,0x47,temp); /* enable VSYNC */
8363 SiS_LongDelay(SiS_Pr, 3);
8364 temp = SiS_GetCH701x(SiS_Pr,0x47);
8366 SiS_SetCH701x(SiS_Pr,0x47,temp); /* disable VSYNC */
8373 SiS_ChrontelDoSomething3(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
8377 if(SiS_Pr->ChipType == SIS_740) {
8379 temp = SiS_GetCH701x(SiS_Pr,0x61);
8382 SiS_SetCH701x(SiS_Pr,0x61,temp);
8384 SiS_SetCH701x(SiS_Pr,0x66,0x45); /* Panel power on */
8385 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* All power on */
8386 SiS_LongDelay(SiS_Pr, 1);
8387 SiS_GenericDelay(SiS_Pr, 5887);
8392 temp = SiS_GetCH701x(SiS_Pr,0x61);
8395 SiS_SetCH701x(SiS_Pr,0x61,temp);
8398 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8399 temp = SiS_GetCH701x(SiS_Pr,0x66);
8401 SiS_SetCH701x(SiS_Pr,0x66,temp);
8403 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8404 SiS_GenericDelay(SiS_Pr, 1023);
8406 SiS_GenericDelay(SiS_Pr, 767);
8410 SiS_GenericDelay(SiS_Pr, 767);
8412 temp = SiS_GetCH701x(SiS_Pr,0x76);
8414 SiS_SetCH701x(SiS_Pr,0x76,temp);
8415 temp = SiS_GetCH701x(SiS_Pr,0x66);
8417 SiS_SetCH701x(SiS_Pr,0x66,temp);
8418 SiS_LongDelay(SiS_Pr, 1);
8424 SiS_ChrontelDoSomething2(struct SiS_Private *SiS_Pr)
8428 SiS_LongDelay(SiS_Pr, 1);
8431 temp = SiS_GetCH701x(SiS_Pr,0x66);
8435 if(SiS_Pr->ChipType == SIS_740) {
8437 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8440 SiS_SetCH701xForLCD(SiS_Pr);
8442 temp = SiS_GetCH701x(SiS_Pr,0x76);
8444 SiS_SetCH701x(SiS_Pr,0x76,temp);
8445 SiS_LongDelay(SiS_Pr, 2);
8446 temp = SiS_GetCH701x(SiS_Pr,0x76);
8448 SiS_SetCH701x(SiS_Pr,0x76,temp);
8449 if(SiS_Pr->ChipType == SIS_740) {
8450 SiS_SetCH701x(SiS_Pr,0x78,0xe0); /* PLL loop filter */
8452 SiS_SetCH701x(SiS_Pr,0x78,0x60);
8454 SiS_LongDelay(SiS_Pr, 2);
8457 SiS_SetCH701x(SiS_Pr,0x77,0x00); /* MV? */
8461 SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr)
8465 temp = SiS_GetCH701x(SiS_Pr,0x03);
8468 SiS_SetCH701x(SiS_Pr,0x03,temp);
8470 if(SiS_Pr->ChipType == SIS_740) {
8472 temp = SiS_GetCH701x(SiS_Pr,0x1c);
8474 SiS_SetCH701x(SiS_Pr,0x1c,temp);
8476 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x03);
8478 temp = SiS_GetCH701x(SiS_Pr,0x64);
8480 SiS_SetCH701x(SiS_Pr,0x64,temp);
8482 temp = SiS_GetCH701x(SiS_Pr,0x03);
8484 SiS_SetCH701x(SiS_Pr,0x03,temp);
8486 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) {
8487 SiS_SetCH701x(SiS_Pr,0x63,0x40); /* LVDS off */
8488 SiS_LongDelay(SiS_Pr, 1);
8489 SiS_SetCH701x(SiS_Pr,0x63,0x00); /* LVDS on */
8490 SiS_ChrontelResetDB(SiS_Pr);
8491 SiS_ChrontelDoSomething2(SiS_Pr);
8492 SiS_ChrontelDoSomething3(SiS_Pr, 0);
8494 temp = SiS_GetCH701x(SiS_Pr,0x66);
8496 SiS_ChrontelResetDB(SiS_Pr);
8497 SiS_ChrontelDoSomething2(SiS_Pr);
8498 SiS_ChrontelDoSomething3(SiS_Pr, 0);
8504 SiS_ChrontelResetDB(SiS_Pr);
8505 SiS_ChrontelDoSomething2(SiS_Pr);
8506 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x34);
8507 SiS_ChrontelDoSomething3(SiS_Pr,temp);
8508 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* All power on, LVDS normal operation */
8520 SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
8523 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
8527 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
8529 if(!SiS_Pr->UseCustomMode) {
8530 SiS_SearchModeID(SiS_Pr, &ModeNo, &ModeIdIndex);
8536 SiS_Pr->SiS_SelectCRT2Rate = 4;
8538 SiS_UnLockCRT2(SiS_Pr);
8540 RefreshRateTableIndex = SiS_GetRatePtr(SiS_Pr, ModeNo, ModeIdIndex);
8542 SiS_SaveCRT2Info(SiS_Pr,ModeNo);
8544 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8545 SiS_DisableBridge(SiS_Pr);
8546 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->ChipType == SIS_730)) {
8547 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,0x80);
8549 SiS_SetCRT2ModeRegs(SiS_Pr, ModeNo, ModeIdIndex);
8552 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
8553 SiS_LockCRT2(SiS_Pr);
8554 SiS_DisplayOn(SiS_Pr);
8558 SiS_GetCRT2Data(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8561 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_LCDVDES = 0;
8562 if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
8563 ((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) ||
8564 ((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SIS30xBLV)) ) {
8565 SiS_GetLVDSDesData(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8568 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8569 SiS_SetGroup1(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8572 if(SiS_Pr->SiS_VBType & VB_SISVB) {
8574 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8576 SiS_SetGroup2(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8578 SiS_SetGroup2_C_ELV(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8580 SiS_SetGroup3(SiS_Pr, ModeNo, ModeIdIndex);
8581 SiS_SetGroup4(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8583 SiS_SetGroup4_C_ELV(SiS_Pr, ModeNo, ModeIdIndex);
8585 SiS_SetGroup5(SiS_Pr, ModeNo, ModeIdIndex);
8587 SiS_SetCRT2Sync(SiS_Pr, ModeNo, RefreshRateTableIndex);
8590 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
8592 if(!((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10)))) {
8593 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
8594 SiS_ModCRT1CRTC(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8597 SiS_SetCRT2ECLK(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8603 SiS_SetCRT2Sync(SiS_Pr, ModeNo, RefreshRateTableIndex);
8605 SiS_ModCRT1CRTC(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8607 SiS_SetCRT2ECLK(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8609 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8610 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
8611 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
8612 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8614 SiS_SetCH701xForLCD(SiS_Pr);
8618 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
8619 SiS_SetCHTVReg(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8627 if(SiS_Pr->ChipType < SIS_315H) {
8628 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8629 if(SiS_Pr->SiS_UseOEM) {
8630 if((SiS_Pr->SiS_UseROM) && (SiS_Pr->SiS_UseOEM == -1)) {
8632 SiS_OEM300Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8635 SiS_OEM300Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8638 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
8639 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
8640 (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
8641 SetOEMLCDData2(SiS_Pr, ModeNo, ModeIdIndex,RefreshRateTableIndex);
8643 SiS_DisplayOn(SiS_Pr);
8650 if(SiS_Pr->ChipType >= SIS_315H) {
8651 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8652 if(SiS_Pr->ChipType < SIS_661) {
8653 SiS_FinalizeLCD(SiS_Pr, ModeNo, ModeIdIndex);
8654 SiS_OEM310Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8656 SiS_OEM661Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8658 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x40);
8663 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8664 SiS_EnableBridge(SiS_Pr);
8667 SiS_DisplayOn(SiS_Pr);
8669 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
8670 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
8672 SiS_SetRegSR11ANDOR(SiS_Pr,0xFF,0x0C);
8675 SiS_SetCH70xxANDOR(SiS_Pr,0x0e,0x01,0xf8);
8679 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8680 SiS_LockCRT2(SiS_Pr);
8692 SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr)
8695 SiS_DDC2Delay(SiS_Pr,0xff00);
8696 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
8697 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
8698 SiS_WaitVBRetrace(SiS_Pr);
8700 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x01)) {
8701 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
8706 SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr)
8709 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFE);
8710 SiS_DDC2Delay(SiS_Pr,0xff00);
8718 SiS_SetupDDCN(struct SiS_Private *SiS_Pr)
8720 SiS_Pr->SiS_DDC_NData = ~SiS_Pr->SiS_DDC_Data;
8721 SiS_Pr->SiS_DDC_NClk = ~SiS_Pr->SiS_DDC_Clk;
8722 if((SiS_Pr->SiS_DDC_Index == 0x11) && (SiS_Pr->SiS_SensibleSR11)) {
8723 SiS_Pr->SiS_DDC_NData &= 0x0f;
8724 SiS_Pr->SiS_DDC_NClk &= 0x0f;
8730 SiS_SetTrumpBlockLoop(struct SiS_Private *SiS_Pr, unsigned char *dataptr)
8741 SiS_SetStop(SiS_Pr);
8742 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 2);
8744 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
8745 tempah = SiS_Pr->SiS_DDC_DeviceAddr;
8746 temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
8749 temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write register number */
8753 temp = SiS_WriteDDC2Data(SiS_Pr,tempah);/* Write DAB (S0=0=write) */
8757 if(SiS_SetStop(SiS_Pr)) continue;
8764 SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr)
8766 SiS_Pr->SiS_DDC_DeviceAddr = 0xF0; /* DAB (Device Address Byte) */
8767 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8768 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
8769 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
8770 SiS_SetupDDCN(SiS_Pr);
8772 SiS_SetSwitchDDC2(SiS_Pr);
8775 dataptr = SiS_SetTrumpBlockLoop(SiS_Pr, dataptr);
8790 SiS_SetChReg(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val, unsigned short myor)
8796 SiS_SetStop(SiS_Pr);
8797 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 4);
8799 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
8800 temp = SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr); /* Write DAB (S0=0=write) */
8802 temp = SiS_WriteDDC2Data(SiS_Pr, (reg | myor)); /* Write RAB (700x: set bit 7, see datasheet) */
8804 temp = SiS_WriteDDC2Data(SiS_Pr, val); /* Write data */
8806 if(SiS_SetStop(SiS_Pr)) continue; /* Set stop condition */
8807 SiS_Pr->SiS_ChrontelInit = 1;
8815 SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
8817 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
8819 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
8821 if(!(SiS_Pr->SiS_ChrontelInit)) {
8822 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8823 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
8824 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
8825 SiS_SetupDDCN(SiS_Pr);
8828 if( (!(SiS_SetChReg(SiS_Pr, reg, val, 0x80))) &&
8829 (!(SiS_Pr->SiS_ChrontelInit)) ) {
8830 SiS_Pr->SiS_DDC_Index = 0x0a;
8831 SiS_Pr->SiS_DDC_Data = 0x80;
8832 SiS_Pr->SiS_DDC_Clk = 0x40;
8833 SiS_SetupDDCN(SiS_Pr);
8835 SiS_SetChReg(SiS_Pr, reg, val, 0x80);
8842 SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
8844 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8845 SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
8846 SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
8847 SiS_SetupDDCN(SiS_Pr);
8848 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
8849 SiS_SetChReg(SiS_Pr, reg, val, 0);
8854 SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
8856 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
8857 SiS_SetCH700x(SiS_Pr, reg, val);
8859 SiS_SetCH701x(SiS_Pr, reg, val);
8863 SiS_GetChReg(struct SiS_Private *SiS_Pr, unsigned short myor)
8869 SiS_SetStop(SiS_Pr);
8870 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 4);
8872 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
8873 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_DeviceAddr); /* Write DAB (S0=0=write) */
8875 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_ReadAddr | myor); /* Write RAB (700x: | 0x80) */
8877 if (SiS_SetStart(SiS_Pr)) continue; /* Re-start */
8878 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_DeviceAddr | 0x01);/* DAB (S0=1=read) */
8880 tempah = SiS_ReadDDC2Data(SiS_Pr); /* Read byte */
8881 if(SiS_SetStop(SiS_Pr)) continue; /* Stop condition */
8882 SiS_Pr->SiS_ChrontelInit = 1;
8891 SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempbx)
8895 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
8897 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
8899 if(!(SiS_Pr->SiS_ChrontelInit)) {
8900 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8901 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
8902 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
8903 SiS_SetupDDCN(SiS_Pr);
8906 SiS_Pr->SiS_DDC_ReadAddr = tempbx;
8908 if( ((result = SiS_GetChReg(SiS_Pr,0x80)) == 0xFFFF) &&
8909 (!SiS_Pr->SiS_ChrontelInit) ) {
8911 SiS_Pr->SiS_DDC_Index = 0x0a;
8912 SiS_Pr->SiS_DDC_Data = 0x80;
8913 SiS_Pr->SiS_DDC_Clk = 0x40;
8914 SiS_SetupDDCN(SiS_Pr);
8916 result = SiS_GetChReg(SiS_Pr,0x80);
8924 SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempbx)
8926 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8927 SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
8928 SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
8929 SiS_SetupDDCN(SiS_Pr);
8930 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
8932 SiS_Pr->SiS_DDC_ReadAddr = tempbx;
8934 return SiS_GetChReg(SiS_Pr,0);
8941 SiS_GetCH70xx(struct SiS_Private *SiS_Pr, unsigned short tempbx)
8943 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
8944 return SiS_GetCH700x(SiS_Pr, tempbx);
8946 return SiS_GetCH701x(SiS_Pr, tempbx);
8950 SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
8955 tempbl = (SiS_GetCH70xx(SiS_Pr, (reg & 0xFF)) & myand) | myor;
8956 SiS_SetCH70xx(SiS_Pr, reg, tempbl);
8962 SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
8977 SiS_Pr->SiS_ChrontelInit = 0; /* force re-detection! */
8979 SiS_Pr->SiS_DDC_SecAddr = 0;
8980 SiS_Pr->SiS_DDC_DeviceAddr = ddcdtype[DDCdatatype];
8981 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_P3c4;
8982 SiS_Pr->SiS_DDC_Index = 0x11;
8985 cr32 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x32);
9008 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
9009 SiS_Pr->SiS_DDC_Index = 0x0f;
9040 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
9041 SiS_Pr->SiS_DDC_Index = 0x0f;
9063 SiS_Pr->SiS_DDC_Data = 0x02 << temp;
9064 SiS_Pr->SiS_DDC_Clk = 0x01 << temp;
9066 SiS_SetupDDCN(SiS_Pr);
9072 SiS_WriteDABDDC(struct SiS_Private *SiS_Pr)
9074 if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
9075 if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr)) {
9078 if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_SecAddr)) {
9085 SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr)
9087 if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
9088 if(SiS_WriteDDC2Data(SiS_Pr, (SiS_Pr->SiS_DDC_DeviceAddr | 0x01))) {
9095 SiS_PrepareDDC(struct SiS_Private *SiS_Pr)
9097 if(SiS_WriteDABDDC(SiS_Pr)) SiS_WriteDABDDC(SiS_Pr);
9098 if(SiS_PrepareReadDDC(SiS_Pr)) return (SiS_PrepareReadDDC(SiS_Pr));
9103 SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno)
9105 SiS_SetSCLKLow(SiS_Pr);
9107 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9108 SiS_Pr->SiS_DDC_Index,
9109 SiS_Pr->SiS_DDC_NData,
9110 SiS_Pr->SiS_DDC_Data);
9112 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9113 SiS_Pr->SiS_DDC_Index,
9114 SiS_Pr->SiS_DDC_NData,
9117 SiS_SetSCLKHigh(SiS_Pr);
9121 SiS_DoProbeDDC(struct SiS_Private *SiS_Pr)
9127 SiS_SetSwitchDDC2(SiS_Pr);
9128 if(SiS_PrepareDDC(SiS_Pr)) {
9129 SiS_SetStop(SiS_Pr);
9134 if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
9135 temp = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9136 SiS_SendACK(SiS_Pr, 0);
9146 temp = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9147 SiS_SendACK(SiS_Pr, 1);
9152 if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
9157 SiS_SetStop(SiS_Pr);
9163 SiS_ProbeDDC(struct SiS_Private *SiS_Pr)
9168 SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
9169 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x02;
9170 SiS_Pr->SiS_DDC_DeviceAddr = 0xa2;
9171 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x08;
9172 SiS_Pr->SiS_DDC_DeviceAddr = 0xa6;
9173 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x10;
9180 SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype, unsigned char *buffer)
9188 SiS_SetSwitchDDC2(SiS_Pr);
9189 if(!(SiS_PrepareDDC(SiS_Pr))) {
9195 buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9198 SiS_SendACK(SiS_Pr, 0);
9200 buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9202 SiS_SendACK(SiS_Pr, 1);
9208 SiS_SetStop(SiS_Pr);
9218 we use our pre-detected pSiS-values instead of SiS_Pr as
9234 SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
9250 if(SiS_InitDDCRegs(SiS_Pr, VBFlags, VGAEngine, adaptnum, DDCdatatype, false, VBFlags2) == 0xFFFF)
9253 sr1f = SiS_GetReg(SiS_Pr->SiS_P3c4,0x1f);
9254 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x1f,0x3f,0x04);
9256 cr17 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x17) & 0x80;
9258 SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x17,0x80);
9259 SiS_SetReg(SiS_Pr->SiS_P3c4,0x00,0x01);
9260 SiS_SetReg(SiS_Pr->SiS_P3c4,0x00,0x03);
9264 SiS_WaitRetrace1(SiS_Pr);
9265 SiS_WaitRetrace1(SiS_Pr);
9266 SiS_WaitRetrace1(SiS_Pr);
9267 SiS_WaitRetrace1(SiS_Pr);
9271 result = SiS_ProbeDDC(SiS_Pr);
9273 result = SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer);
9280 if(!SiS_Pr->DDCPortMixup) {
9290 SiS_SetReg(SiS_Pr->SiS_P3c4,0x1f,sr1f);
9292 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x17,0x7f,cr17);
9300 SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr)
9302 SiS_SetSCLKHigh(SiS_Pr);
9303 SiS_WaitRetrace1(SiS_Pr);
9305 SiS_SetSCLKLow(SiS_Pr);
9306 SiS_WaitRetrace1(SiS_Pr);
9310 SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr)
9312 SiS_WaitRetrace1(SiS_Pr);
9313 return ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x02) >> 1);
9319 SiS_SetStart(struct SiS_Private *SiS_Pr)
9321 if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9322 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9323 SiS_Pr->SiS_DDC_Index,
9324 SiS_Pr->SiS_DDC_NData,
9325 SiS_Pr->SiS_DDC_Data); /* SD->high */
9326 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
9327 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9328 SiS_Pr->SiS_DDC_Index,
9329 SiS_Pr->SiS_DDC_NData,
9331 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9338 SiS_SetStop(struct SiS_Private *SiS_Pr)
9340 if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9341 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9342 SiS_Pr->SiS_DDC_Index,
9343 SiS_Pr->SiS_DDC_NData,
9345 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
9346 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9347 SiS_Pr->SiS_DDC_Index,
9348 SiS_Pr->SiS_DDC_NData,
9349 SiS_Pr->SiS_DDC_Data); /* SD->high = stop condition */
9350 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->high) */
9356 SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax)
9362 SiS_SetSCLKLow(SiS_Pr); /* SC->low */
9364 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9365 SiS_Pr->SiS_DDC_Index,
9366 SiS_Pr->SiS_DDC_NData,
9367 SiS_Pr->SiS_DDC_Data); /* Write bit (1) to SD */
9369 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9370 SiS_Pr->SiS_DDC_Index,
9371 SiS_Pr->SiS_DDC_NData,
9374 SiS_SetSCLKHigh(SiS_Pr); /* SC->high */
9377 temp = SiS_CheckACK(SiS_Pr); /* Check acknowledge */
9382 SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr)
9389 SiS_SetSCLKLow(SiS_Pr);
9390 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9391 SiS_Pr->SiS_DDC_Index,
9392 SiS_Pr->SiS_DDC_NData,
9393 SiS_Pr->SiS_DDC_Data);
9394 SiS_SetSCLKHigh(SiS_Pr);
9395 temp = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);
9396 if(temp & SiS_Pr->SiS_DDC_Data) getdata |= 0x01;
9402 SiS_SetSCLKLow(struct SiS_Private *SiS_Pr)
9404 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9405 SiS_Pr->SiS_DDC_Index,
9406 SiS_Pr->SiS_DDC_NClk,
9408 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9413 SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr)
9417 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9418 SiS_Pr->SiS_DDC_Index,
9419 SiS_Pr->SiS_DDC_NClk,
9420 SiS_Pr->SiS_DDC_Clk); /* SetSCLKHigh() */
9422 temp = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);
9423 } while((!(temp & SiS_Pr->SiS_DDC_Clk)) && --watchdog);
9427 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9434 SiS_CheckACK(struct SiS_Private *SiS_Pr)
9438 SiS_SetSCLKLow(SiS_Pr); /* (SC->low) */
9439 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9440 SiS_Pr->SiS_DDC_Index,
9441 SiS_Pr->SiS_DDC_NData,
9442 SiS_Pr->SiS_DDC_Data); /* (SD->high) */
9443 SiS_SetSCLKHigh(SiS_Pr); /* SC->high = clock impulse for ack */
9444 tempah = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index); /* Read SD */
9445 SiS_SetSCLKLow(SiS_Pr); /* SC->low = end of clock impulse */
9446 if(tempah & SiS_Pr->SiS_DDC_Data) return 1; /* Ack OK if bit = 0 */
9458 GetRAMDACromptr(struct SiS_Private *SiS_Pr)
9460 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9463 if(SiS_Pr->ChipType < SIS_330) {
9465 if(SiS_Pr->SiS_VBType & VB_SIS30xB)
9469 if(SiS_Pr->SiS_VBType & VB_SIS30xB)
9476 GetLCDromptr(struct SiS_Private *SiS_Pr)
9478 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9481 if(SiS_Pr->ChipType < SIS_330) {
9483 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9487 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9494 GetTVromptr(struct SiS_Private *SiS_Pr)
9496 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9499 if(SiS_Pr->ChipType < SIS_330) {
9501 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9505 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9512 GetLCDPtrIndexBIOS(struct SiS_Private *SiS_Pr)
9516 if((IS_SIS650) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
9517 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
9518 if((index = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0xf0)) {
9521 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9522 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9528 index = SiS_GetBIOSLCDResInfo(SiS_Pr) & 0x0F;
9529 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) index -= 5;
9530 if(SiS_Pr->SiS_VBType & VB_SIS301C) { /* 1.15.20 and later (not VB specific) */
9531 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) index -= 5;
9532 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x768) index -= 5;
9534 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) index -= 6;
9538 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9539 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9544 GetLCDPtrIndex(struct SiS_Private *SiS_Pr)
9548 index = ((SiS_GetBIOSLCDResInfo(SiS_Pr) & 0x0F) - 1) * 3;
9549 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9550 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9555 GetTVPtrIndex(struct SiS_Private *SiS_Pr)
9560 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 1;
9561 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) index = 2;
9563 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) index = 0;
9567 if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) &&
9568 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
9576 GetOEMTVPtr661_2_GEN(struct SiS_Private *SiS_Pr, int addme)
9580 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 1;
9581 if(SiS_Pr->SiS_TVMode & TVSetPALM) index = 2;
9582 if(SiS_Pr->SiS_TVMode & TVSetPALN) index = 3;
9583 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) index = 6;
9584 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
9586 if(SiS_Pr->SiS_TVMode & TVSetPALM) index++;
9587 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) index = 7;
9590 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
9591 if((!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
9592 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
9602 GetOEMTVPtr661_2_OLD(struct SiS_Private *SiS_Pr)
9604 return (GetOEMTVPtr661_2_GEN(SiS_Pr, 8));
9609 GetOEMTVPtr661_2_NEW(struct SiS_Private *SiS_Pr)
9611 return (GetOEMTVPtr661_2_GEN(SiS_Pr, 6));
9616 GetOEMTVPtr661(struct SiS_Private *SiS_Pr)
9620 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 2;
9621 if(SiS_Pr->SiS_ROMNew) {
9622 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) index = 4;
9623 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) index = 6;
9624 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) index = 8;
9625 if(SiS_Pr->SiS_TVMode & TVSetHiVision) index = 10;
9627 if(SiS_Pr->SiS_TVMode & TVSetHiVision) index = 4;
9628 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) index = 6;
9629 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) index = 8;
9630 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) index = 10;
9633 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) index++;
9639 SetDelayComp(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
9641 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9645 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
9646 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x20,0xbf);
9648 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x35,0x7f);
9653 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) { /* ------------ VGA */
9655 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9656 romptr = GetRAMDACromptr(SiS_Pr);
9661 if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
9666 } else if(SiS_Pr->ChipType < SIS_330) {
9671 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
9676 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD|SetCRT2ToLCDA)) { /* ---------- LCD/LCDA */
9682 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
9683 if(SiS_Pr->PDC != -1) {
9684 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((SiS_Pr->PDC >> 1) & 0x0f));
9685 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((SiS_Pr->PDC & 0x01) << 7));
9689 if(SiS_Pr->PDCA != -1) {
9690 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((SiS_Pr->PDCA << 3) & 0xf0));
9691 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((SiS_Pr->PDCA & 0x01) << 6));
9698 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) {
9699 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
9701 if((SiS_Pr->PanelXRes <= 1280) && (SiS_Pr->PanelYRes <= 1024)) {
9704 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,delay);
9707 if(SiS_Pr->SiS_VBType & VB_SIS301C) {
9709 if((SiS_Pr->PanelXRes > 1280) && (SiS_Pr->PanelYRes > 1024)) {
9712 } else if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
9716 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,delay);
9726 switch(SiS_Pr->SiS_CustomT) {
9729 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
9743 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
9747 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2D,delay);
9757 index = GetLCDPtrIndexBIOS(SiS_Pr);
9758 myindex = GetLCDPtrIndex(SiS_Pr);
9760 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
9762 if(SiS_IsNotM650orLater(SiS_Pr)) {
9764 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9768 /* if(SiS_Pr->SiS_VBType & VB_SIS302LV) */
9779 if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV))
9784 } else if(SiS_Pr->SiS_UseROM &&
9785 (!(SiS_Pr->SiS_ROMNew)) &&
9786 (SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) &&
9787 (SiS_Pr->SiS_LCDResInfo != Panel_1280x768) &&
9788 (SiS_Pr->SiS_LCDResInfo != Panel_1280x960) &&
9789 (SiS_Pr->SiS_LCDResInfo != Panel_1600x1200) &&
9790 ((romptr = GetLCDromptr(SiS_Pr)))) {
9796 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
9804 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
9806 else if(SiS_Pr->ChipType <= SIS_315PRO) delay = SiS310_LCDDelayCompensation_3xx301LV[myindex];
9808 } else if(SiS_Pr->SiS_VBType & VB_SIS301C) {
9811 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) delay = 0x00; /* experience */
9812 } else if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
9821 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
9822 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0x0F,((delay << 4) & 0xf0));
9826 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* ------------ TV */
9828 index = GetTVPtrIndex(SiS_Pr);
9830 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
9832 if(SiS_IsNotM650orLater(SiS_Pr)) {
9834 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9838 /* if(SiS_Pr->SiS_VBType & VB_SIS302LV) */
9851 switch(SiS_Pr->SiS_CustomT) {
9866 if(SiS_Pr->SiS_VBType & VB_SIS302LV) {
9872 } else if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9874 romptr = GetTVromptr(SiS_Pr);
9878 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
9885 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
9891 if(SiS_Pr->SiS_VBType & VB_SIS301C) delay = 0x02;
9897 if(SiS_LCDAEnabled(SiS_Pr)) {
9906 if(SiS_Pr->SiS_VBType & VB_SISVB) {
9908 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS) && dochiptest) {
9910 temp = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0xf0) >> 4;
9920 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2D,delay);
9924 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
9930 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
9931 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
9933 if(IS_SIS650 && (SiS_Pr->SiS_IF_DEF_CH70xx != 0)) {
9935 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0x0F,delay);
9937 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
9946 SetAntiFlicker(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
9948 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9951 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p|TVSetYPbPr525p)) return;
9954 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVFlickerIndex;
9956 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVFlickerIndex;
9958 temp = GetTVPtrIndex(SiS_Pr);
9962 if(SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
9963 if(SiS_Pr->ChipType >= SIS_661) {
9964 temp1 = GetOEMTVPtr661(SiS_Pr);
9967 if(SiS_Pr->ChipType >= SIS_760) {
9970 } else if(SiS_Pr->ChipType >= SIS_330) {
9985 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0A,0x8f,temp); /* index 0A D[6:4] */
9989 SetEdgeEnhance(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
9991 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9994 temp = temp1 = GetTVPtrIndex(SiS_Pr) >> 1; /* 0: NTSC/YPbPr, 1: PAL, 2: HiTV */
9997 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVEdgeIndex;
9999 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVEdgeIndex;
10001 if(SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
10002 if(SiS_Pr->ChipType >= SIS_661) {
10004 if(SiS_Pr->ChipType >= SIS_760) {
10007 temp1 = GetOEMTVPtr661(SiS_Pr);
10009 } else if(SiS_Pr->ChipType >= SIS_330) {
10023 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x3A,0x1F,temp); /* index 0A D[7:5] */
10027 SetYFilter(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10032 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVYFilterIndex;
10034 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVYFilterIndex;
10037 temp = GetTVPtrIndex(SiS_Pr) >> 1; /* 0: NTSC/YPbPr, 1: PAL, 2: HiTV */
10039 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp = 1; /* NTSC-J uses PAL */
10040 else if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 3; /* PAL-M */
10041 else if(SiS_Pr->SiS_TVMode & TVSetPALN) temp = 4; /* PAL-N */
10042 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) temp = 1; /* HiVision uses PAL */
10044 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10046 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter2[temp][index][j]);
10049 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter2[temp][index][j]);
10053 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter1[temp][index][j]);
10059 SetPhaseIncr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10061 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10065 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) return;
10068 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) return;
10070 if((SiS_Pr->ChipType >= SIS_661) || SiS_Pr->SiS_ROMNew) {
10071 lindex = GetOEMTVPtr661_2_OLD(SiS_Pr) & 0xffff;
10074 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS_TVPhase[lindex + j]);
10080 if(SiS_Pr->SiS_TVMode & (TVSetPALM | TVSetPALN)) return;
10083 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
10085 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
10088 temp = GetTVPtrIndex(SiS_Pr);
10092 if(SiS_Pr->SiS_UseROM) {
10094 if(SiS_Pr->ChipType >= SIS_330) {
10097 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10099 if(SiS_Pr->ChipType >= SIS_330) {
10102 if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) && (!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode))) {
10104 if(SiS_Pr->ChipType >= SIS_330) {
10113 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
10119 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV))
10120 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr1[temp][index][j]);
10121 else if((!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) || (SiS_Pr->SiS_TVMode & TVSetTVSimuMode))
10122 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr2[temp][index][j]);
10124 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr1[temp][index][j]);
10128 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision))) {
10129 if((!(SiS_Pr->SiS_TVMode & (TVSetPAL | TVSetYPbPr525p | TVSetYPbPr750p))) && (ModeNo > 0x13)) {
10132 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x31,0x21);
10133 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x32,0xf0);
10134 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x33,0xf5);
10135 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x34,0x7f);
10137 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x31,0x1e);
10138 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x32,0x8b);
10139 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x33,0xfb);
10140 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x34,0x7b);
10147 SetDelayComp661(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10151 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10153 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV | SetCRT2ToLCD | SetCRT2ToLCDA | SetCRT2ToRAMDAC)))
10159 if(SiS_Pr->SiS_ROMNew) {
10160 if((SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) ||
10161 ((SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) &&
10162 (SiS_Pr->SiS_LCDInfo & LCDPass11))) {
10164 if(SiS_Pr->UseCustomMode) {
10165 index = SiS_Pr->CSRClock;
10167 index = SiS_GetVCLK2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RTI);
10168 index = SiS_Pr->SiS_VCLKData[index].CLOCK;
10172 if((ROMAddr[0x5b] & 0x80) || (SiS_Pr->SiS_VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToLCD))) {
10177 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToLCD)) {
10178 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((delay >> 1) & 0x0f));
10179 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((delay & 0x01) << 7));
10181 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((delay << 3) & 0xf0));
10182 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((delay & 0x01) << 6));
10190 if(SiS_Pr->UseCustomMode) delay = 0x04;
10192 else delay = (SiS_Pr->SiS_RefIndex[RTI].Ext_PDC >> 4);
10195 if(SiS_Pr->ChipType >= XGI_20) {
10198 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10201 if(SiS_Pr->SiS_XGIROM) {
10202 index = GetTVPtrIndex(SiS_Pr);
10209 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
10210 if(SiS_Pr->ChipType == XGI_40 && SiS_Pr->ChipRevision == 0x02) {
10216 } else if(SiS_Pr->ChipType >= SIS_340) {
10219 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10224 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10228 index = GetOEMTVPtr661(SiS_Pr);
10229 if(SiS_Pr->SiS_ROMNew) {
10231 if(SiS_Pr->SiS_VBType & VB_UMC) romptr += 12;
10238 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10242 if( (SiS_Pr->SiS_LCDResInfo != Panel_Custom) &&
10243 ((romptr = GetLCDStructPtr661_2(SiS_Pr))) ) {
10245 lcdpdcindex = (SiS_Pr->SiS_VBType & VB_UMC) ? 14 : 12;
10255 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
10256 switch(SiS_Pr->SiS_LCDResInfo) {
10269 if((SiS_Pr->PanelXRes <= 1024) && (SiS_Pr->PanelYRes <= 768)) {
10271 } else if((SiS_Pr->PanelXRes == 1280) && (SiS_Pr->PanelYRes == 1024)) {
10273 } else if((SiS_Pr->PanelXRes <= 1400) && (SiS_Pr->PanelYRes <= 1050)) {
10275 } else if((SiS_Pr->PanelXRes <= 1600) && (SiS_Pr->PanelYRes <= 1200)) {
10285 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->PDC != -1)) {
10286 delay = SiS_Pr->PDC & 0x1f;
10288 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) && (SiS_Pr->PDCA != -1)) {
10289 delay = (SiS_Pr->PDCA & 0x1f) << 8;
10296 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10298 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((delay << 3) & 0xf0));
10299 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((delay & 0x01) << 6));
10301 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((delay >> 1) & 0x0f));
10302 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((delay & 0x01) << 7));
10307 SetCRT2SyncDither661(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short RTI)
10312 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10315 infoflag = SiS_GetRegByte(SiS_Pr->SiS_P3ca+2);
10316 } else if(SiS_Pr->UseCustomMode) {
10317 infoflag = SiS_Pr->CInfoFlag;
10319 infoflag = SiS_Pr->SiS_RefIndex[RTI].Ext_InfoFlag;
10322 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
10323 infoflag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37); /* No longer check D5 */
10328 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
10330 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
10332 if(SiS_Pr->SiS_ModeType >= Mode24Bpp) temp |= 0x10;
10334 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xe0,temp);
10337 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) temp = 0x20;
10339 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0f,temp);
10341 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
10342 if(SiS_Pr->SiS_ModeType >= Mode24Bpp) temp |= 0x80;
10344 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1a,0x7f,temp);
10351 SetPanelParms661(struct SiS_Private *SiS_Pr)
10353 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10356 if(SiS_Pr->SiS_VBType & (VB_SISLVDS | VB_SIS30xC)) {
10357 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x24,0x0f);
10360 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10361 if(SiS_Pr->LVDSHL != -1) {
10362 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,SiS_Pr->LVDSHL);
10366 if(SiS_Pr->SiS_ROMNew) {
10368 if((romptr = GetLCDStructPtr661_2(SiS_Pr))) {
10369 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10372 if(SiS_Pr->LVDSHL != -1) {
10376 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,temp2,temp1);
10378 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
10380 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0d,0xbf,temp1);
10388 SiS_OEM310Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RRTI)
10390 if((SiS_Pr->SiS_ROMNew) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
10391 SetDelayComp661(SiS_Pr, ModeNo, ModeIdIndex, RRTI);
10392 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10393 SetCRT2SyncDither661(SiS_Pr, ModeNo, RRTI);
10394 SetPanelParms661(SiS_Pr);
10397 SetDelayComp(SiS_Pr,ModeNo);
10400 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
10401 SetAntiFlicker(SiS_Pr,ModeNo,ModeIdIndex);
10402 SetPhaseIncr(SiS_Pr,ModeNo,ModeIdIndex);
10403 SetYFilter(SiS_Pr,ModeNo,ModeIdIndex);
10404 if(SiS_Pr->SiS_VBType & VB_SIS301) {
10405 SetEdgeEnhance(SiS_Pr,ModeNo,ModeIdIndex);
10411 SiS_OEM661Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10414 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10416 SetDelayComp661(SiS_Pr, ModeNo, ModeIdIndex, RRTI);
10418 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10419 SetCRT2SyncDither661(SiS_Pr, ModeNo, RRTI);
10420 SetPanelParms661(SiS_Pr);
10423 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10424 SetPhaseIncr(SiS_Pr, ModeNo, ModeIdIndex);
10425 SetYFilter(SiS_Pr, ModeNo, ModeIdIndex);
10426 SetAntiFlicker(SiS_Pr, ModeNo, ModeIdIndex);
10427 if(SiS_Pr->SiS_VBType & VB_SIS301) {
10428 SetEdgeEnhance(SiS_Pr, ModeNo, ModeIdIndex);
10442 SiS_FinalizeLCD(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10447 if(!(SiS_Pr->SiS_VBType & VB_SISLVDS)) return;
10448 if(SiS_Pr->SiS_ROMNew) return;
10450 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10451 if(SiS_Pr->LVDSHL != -1) {
10452 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,SiS_Pr->LVDSHL);
10456 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) return;
10457 if(SiS_Pr->UseCustomMode) return;
10459 switch(SiS_Pr->SiS_CustomT) {
10468 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
10469 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
10471 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
10472 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
10476 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4, 0x5f) & 0xf0)) {
10477 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) {
10478 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x02);
10480 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
10485 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) {
10486 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10488 if(SiS_Pr->LVDSHL == -1) {
10489 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10495 if(SiS_Pr->SiS_CustomT == CUT_CLEVO10242) {
10496 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10497 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10498 if(SiS_Pr->LVDSHL == -1) {
10500 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10502 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10503 tempch = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
10505 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10506 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x25);
10507 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x00);
10508 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
10516 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10517 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10518 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
10519 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2a,0x00);
10521 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
10523 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
10525 } else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
10526 if(SiS_Pr->LVDSHL == -1) {
10528 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10531 tempch = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
10532 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10533 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) {
10534 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1f,0x76);
10535 } else if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10537 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10538 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x25);
10539 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x00);
10540 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
10542 if(SiS_Pr->Backup && (SiS_Pr->Backup_Mode == ModeNo)) {
10543 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,SiS_Pr->Backup_14);
10544 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,SiS_Pr->Backup_15);
10545 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,SiS_Pr->Backup_16);
10546 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,SiS_Pr->Backup_17);
10547 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,SiS_Pr->Backup_18);
10548 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,SiS_Pr->Backup_19);
10549 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1a,SiS_Pr->Backup_1a);
10550 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,SiS_Pr->Backup_1b);
10551 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,SiS_Pr->Backup_1c);
10552 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,SiS_Pr->Backup_1d);
10553 } else if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) { /* 1.10.8w */
10554 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,0x90);
10556 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x11);
10558 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x18);
10561 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10563 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02); /* 1.10.7u */
10568 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,temp);
10570 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1d,0xf8,temp);
10575 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x70);
10576 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xff);
10577 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x48);
10578 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x12);
10581 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,0x20);
10582 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,0x1a);
10583 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,0x28);
10584 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,0x00);
10585 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x4c);
10586 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xdc);
10590 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x95);
10591 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xdc);
10592 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1a,0x10);
10593 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x95);
10594 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x48);
10595 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x12);
10598 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x95);
10599 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x48);
10602 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x95);
10610 tempcl = tempbh = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x01);
10614 tempbl = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x04);
10616 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10617 if((resinfo == SIS_RI_1024x768) || (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD))) {
10618 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
10622 if(SiS_Pr->SiS_VGAVDE < 600) {
10623 tempax = 768 - SiS_Pr->SiS_VGAVDE;
10625 if(SiS_Pr->SiS_VGAVDE <= 480) tempax >>= 4; /* 1.10.7w; 1.10.6s: < 480; >>=1; */
10632 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,temp);
10634 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,temp);
10646 SetOEMLCDData2(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex,
10654 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
10655 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
10657 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
10658 crt2crtc = SiS_Pr->SiS_RefIndex[RefTabIndex].Ext_CRT2CRTC;
10663 if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
10664 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xdf);
10667 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
10670 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
10673 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,
10680 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
10682 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x18);
10684 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,temp);
10690 GetOEMLCDPtr(struct SiS_Private *SiS_Pr, int Flag)
10692 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10703 if(SiS_Pr->ChipType == SIS_300) {
10705 tempbx = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0x0f;
10706 if(SiS_Pr->SiS_VBType & VB_SIS301) tempbx &= 0x07;
10708 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 4;
10709 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10710 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 3;
10712 if(SiS_Pr->SiS_UseROM) {
10714 tempbx = SiS_Pr->SiS_LCDTypeInfo;
10717 if(romptr) tempbx = ROMAddr[romptr + SiS_Pr->SiS_LCDTypeInfo];
10718 else tempbx = customtable300[SiS_Pr->SiS_LCDTypeInfo];
10722 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx++;
10729 if(SiS_Pr->SiS_UseROM) {
10731 if(romptr) tempbx = ROMAddr[romptr + SiS_Pr->SiS_LCDTypeInfo];
10734 tempbx = customtable630[SiS_Pr->SiS_LCDTypeInfo];
10738 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempbx += 2;
10739 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
10742 tempbx = SiS_Pr->SiS_LCDTypeInfo << 2;
10743 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempbx += 2;
10744 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
10752 SetOEMLCDDelay(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10754 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10757 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) return;
10759 if(SiS_Pr->SiS_UseROM) {
10772 if(SiS_Pr->PDC != -1) return;
10774 temp = GetOEMLCDPtr(SiS_Pr, 0);
10776 if(SiS_Pr->UseCustomMode)
10779 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_LCDDelayIndex;
10781 if(SiS_Pr->ChipType != SIS_300) {
10788 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10795 if(SiS_Pr->SiS_UseROM && (ROMAddr[0x235] & 0x80)) {
10805 if(SiS_Pr->SiS_UseROM) {
10821 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp); /* index 0A D[6:4] */
10825 SetOEMLCDData(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10828 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10831 if((SiS_Pr->SiS_UseROM) {
10837 temp = GetOEMLCDPtr(SiS_Pr, 1);
10840 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex]._VB_LCDHIndex;
10842 SiS_SetReg(SiS_Pr->SiS_Part1Port,i,SiS300_LCDHData[temp][index][j]);
10846 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex]._VB_LCDVIndex;
10851 SiS_SetReg(SiS_Pr->SiS_Part1Port,i,SiS300_LCDVData[temp][index][j]);
10857 GetOEMTVPtr(struct SiS_Private *SiS_Pr)
10862 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) index += 4;
10863 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10864 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) index += 2;
10865 else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) index += 3;
10866 else if(SiS_Pr->SiS_TVMode & TVSetPAL) index += 1;
10868 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) index += 2;
10869 if(SiS_Pr->SiS_TVMode & TVSetPAL) index += 1;
10875 SetOEMTVDelay(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10877 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10880 if(SiS_Pr->SiS_UseROM) {
10886 temp = GetOEMTVPtr(SiS_Pr);
10888 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVDelayIndex;
10896 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10903 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp);
10907 SetOEMAntiFlicker(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10909 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10912 if(SiS_Pr->SiS_UseROM) {
10918 temp = GetOEMTVPtr(SiS_Pr);
10920 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVFlickerIndex;
10931 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0A,0x8F,temp);
10935 SetOEMPhaseIncr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10937 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10940 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) return;
10942 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSetNTSCJ | TVSetPALM | TVSetPALN)) return;
10944 if(SiS_Pr->SiS_UseROM) {
10950 temp = GetOEMTVPtr(SiS_Pr);
10952 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVPhaseIndex;
10954 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10956 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Phase2[temp][index][j]);
10964 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
10968 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Phase1[temp][index][j]);
10975 SetOEMYFilter(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10977 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10980 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSCART | SetCRT2ToHiVision | SetCRT2ToYPbPr525750)) return;
10982 if(SiS_Pr->SiS_UseROM) {
10988 temp = GetOEMTVPtr(SiS_Pr);
10990 if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 8;
10991 else if(SiS_Pr->SiS_TVMode & TVSetPALN) temp = 9;
10994 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVYFilterIndex;
10996 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10998 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter2[temp][index][j]);
11001 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter2[temp][index][j]);
11004 if((romptr) && (!(SiS_Pr->SiS_TVMode & (TVSetPALM|TVSetPALN)))) {
11009 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
11013 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter1[temp][index][j]);
11020 SiS_SearchVBModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo)
11023 unsigned char VGAINFO = SiS_Pr->SiS_VGAINFO;
11028 if(SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].ModeID == *ModeNo) break;
11029 if(SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].ModeID == 0xFF) return 0;
11044 SiS_OEM300Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
11049 if(!SiS_Pr->UseCustomMode) {
11050 OEMModeIdIndex = SiS_SearchVBModeID(SiS_Pr,&ModeNo);
11054 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
11055 SetOEMLCDDelay(SiS_Pr, ModeNo, OEMModeIdIndex);
11056 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
11057 SetOEMLCDData(SiS_Pr, ModeNo, OEMModeIdIndex);
11060 if(SiS_Pr->UseCustomMode) return;
11061 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
11062 SetOEMTVDelay(SiS_Pr, ModeNo,OEMModeIdIndex);
11063 if(SiS_Pr->SiS_VBType & VB_SISVB) {
11064 SetOEMAntiFlicker(SiS_Pr, ModeNo, OEMModeIdIndex);
11065 SetOEMPhaseIncr(SiS_Pr, ModeNo, OEMModeIdIndex);
11066 SetOEMYFilter(SiS_Pr, ModeNo, OEMModeIdIndex);