Lines Matching refs:SiS_Pr
367 static void SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr);
368 static void SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr);
369 static void SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr);
370 static void SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr);
374 static bool SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr);
377 static unsigned short SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags,
380 static unsigned short SiS_ProbeDDC(struct SiS_Private *SiS_Pr);
381 static unsigned short SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype,
383 static void SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr);
384 static unsigned short SiS_SetStart(struct SiS_Private *SiS_Pr);
385 static unsigned short SiS_SetStop(struct SiS_Private *SiS_Pr);
386 static unsigned short SiS_SetSCLKLow(struct SiS_Private *SiS_Pr);
387 static unsigned short SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr);
388 static unsigned short SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr);
389 static unsigned short SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax);
390 static unsigned short SiS_CheckACK(struct SiS_Private *SiS_Pr);
391 static unsigned short SiS_WriteDABDDC(struct SiS_Private *SiS_Pr);
392 static unsigned short SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr);
393 static unsigned short SiS_PrepareDDC(struct SiS_Private *SiS_Pr);
394 static void SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno);
395 static unsigned short SiS_DoProbeDDC(struct SiS_Private *SiS_Pr);
398 static void SiS_OEM300Setting(struct SiS_Private *SiS_Pr,
400 static void SetOEMLCDData2(struct SiS_Private *SiS_Pr,
404 static void SiS_OEM310Setting(struct SiS_Private *SiS_Pr,
406 static void SiS_OEM661Setting(struct SiS_Private *SiS_Pr,
411 static unsigned short SiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr);
412 static void SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
419 SiS_UnLockCRT2(struct SiS_Private *SiS_Pr)
421 if(SiS_Pr->ChipType == XGI_20)
423 else if(SiS_Pr->ChipType >= SIS_315H)
424 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2f,0x01);
426 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x24,0x01);
431 SiS_LockCRT2(struct SiS_Private *SiS_Pr)
433 if(SiS_Pr->ChipType == XGI_20)
435 else if(SiS_Pr->ChipType >= SIS_315H)
436 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2F,0xFE);
438 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x24,0xFE);
446 SiS_SetRegSR11ANDOR(struct SiS_Private *SiS_Pr, unsigned short DataAND, unsigned short DataOR)
448 if(SiS_Pr->ChipType >= SIS_661) {
452 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,DataAND,DataOR);
461 GetLCDStructPtr661(struct SiS_Private *SiS_Pr)
463 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
474 if((SiS_Pr->SiS_ROMNew) &&
475 ((SiS_Pr->SiS_VBType & VB_SISLVDS) || (!SiS_Pr->PanelSelfDetected))) {
477 if(SiS_Pr->ChipType < SIS_661) reg = 0x3c;
480 idx = (SiS_GetReg(SiS_Pr->SiS_P3d4,reg) & 0x1f) * 26;
495 GetLCDStructPtr661_2(struct SiS_Private *SiS_Pr)
497 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
507 if((SiS_Pr->SiS_ROMNew) &&
508 ((SiS_Pr->SiS_VBType & VB_SISLVDS) || (!SiS_Pr->PanelSelfDetected))) {
510 romptr += ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) * SiS_Pr->SiS661LCD2TableSize);
522 SiS_AdjustCRT2Rate(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
527 modeid = SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID;
529 if(SiS_Pr->SiS_VBType & VB_SISVB) {
531 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
534 if(SiS_Pr->ChipType >= SIS_315H) {
536 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
538 if(SiS_Pr->SiS_VBType & VB_SISRAMDAC202) {
544 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
547 if(SiS_Pr->ChipType >= SIS_315H) {
548 if(SiS_Pr->SiS_VBType & VB_SISVB) {
549 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
555 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
559 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToYPbPr525750|SetCRT2ToAVIDEO|SetCRT2ToSVIDEO|SetCRT2ToSCART)) {
562 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
564 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
565 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
575 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
576 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
581 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
588 for(; SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID == modeid; (*i)--) {
589 infoflag = SiS_Pr->SiS_RefIndex[RRTI + (*i)].Ext_InfoFlag;
598 if(SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID != modeid) break;
599 infoflag = SiS_Pr->SiS_RefIndex[RRTI + (*i)].Ext_InfoFlag;
610 SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
626 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
628 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
631 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
632 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
639 index = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x33) >> SiS_Pr->SiS_SelectCRT2Rate) & 0x0F;
644 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
645 if(SiS_Pr->SiS_VBType & VB_SISVB) {
646 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
647 if(SiS_Pr->SiS_VBType & VB_NoLCD) index = 0;
648 else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index = backupindex = 0;
650 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
651 if(!(SiS_Pr->SiS_VBType & VB_NoLCD)) {
652 temp = LCDRefreshIndex[SiS_GetBIOSLCDResInfo(SiS_Pr)];
657 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) index = 0;
658 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
659 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) index = 0;
664 RRTI = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
665 ModeNo = SiS_Pr->SiS_RefIndex[RRTI].ModeID;
667 if(SiS_Pr->ChipType >= SIS_315H) {
668 if(!(SiS_Pr->SiS_VBInfo & DriverMode)) {
669 if( (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x105) ||
670 (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x107) ) {
678 if(SiS_Pr->SiS_RefIndex[RRTI + i].ModeID != ModeNo) break;
679 temp = SiS_Pr->SiS_RefIndex[RRTI + i].Ext_InfoFlag;
681 if(temp < SiS_Pr->SiS_ModeType) break;
686 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
687 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
688 temp = SiS_Pr->SiS_RefIndex[RRTI + i - 1].Ext_InfoFlag;
695 if((SiS_Pr->SiS_SetFlag & ProgrammingCRT2) && (!(SiS_Pr->SiS_VBInfo & DisableCRT2Display))) {
697 if(!(SiS_AdjustCRT2Rate(SiS_Pr, ModeNo, ModeIdIndex, RRTI, &i))) {
710 SiS_SaveCRT2Info(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
715 SiS_SetReg(SiS_Pr->SiS_P3d4,0x34,ModeNo);
716 temp1 = (SiS_Pr->SiS_VBInfo & SetInSlaveMode) >> 8;
718 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x31,temp2,temp1);
727 SiS_CR36BIOSWord23b(struct SiS_Private *SiS_Pr)
729 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
732 if(SiS_Pr->SiS_UseROM) {
734 temp = 1 << ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) & 0x0f);
743 SiS_CR36BIOSWord23d(struct SiS_Private *SiS_Pr)
745 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
748 if(SiS_Pr->SiS_UseROM) {
750 temp = 1 << ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) & 0x0f);
764 SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime)
767 SiS_GetReg(SiS_Pr->SiS_P3c4, 0x05);
772 SiS_GenericDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
774 SiS_DDC2Delay(SiS_Pr, delay * 36);
780 SiS_LongDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
783 SiS_GenericDelay(SiS_Pr, 6623);
790 SiS_ShortDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
793 SiS_GenericDelay(SiS_Pr, 66);
799 SiS_PanelDelay(struct SiS_Private *SiS_Pr, unsigned short DelayTime)
802 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
806 if(SiS_Pr->ChipType < SIS_315H) {
810 PanelID = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
811 if(SiS_Pr->SiS_VBType & VB_SISVB) {
812 if(SiS_Pr->SiS_VBType & VB_SIS301) PanelID &= 0xf7;
813 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x18) & 0x10)) PanelID = 0x12;
821 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[0];
823 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[1];
825 if(SiS_Pr->SiS_UseROM) {
832 SiS_ShortDelay(SiS_Pr, Delay);
840 if((SiS_Pr->ChipType >= SIS_661) ||
841 (SiS_Pr->ChipType <= SIS_315PRO) ||
842 (SiS_Pr->ChipType == SIS_330) ||
843 (SiS_Pr->SiS_ROMNew)) {
846 SiS_DDC2Delay(SiS_Pr, 0x1000);
848 SiS_DDC2Delay(SiS_Pr, 0x4000);
851 } else if (SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* 315 series, LVDS; Special */
853 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
854 PanelID = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
855 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1400) {
856 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x1b) & 0x10)) PanelID = 0x12;
858 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
868 Delay = SiS_Pr->SiS_PanelDelayTblLVDS[DelayIndex].timer[0];
870 Delay = SiS_Pr->SiS_PanelDelayTblLVDS[DelayIndex].timer[1];
872 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
882 SiS_ShortDelay(SiS_Pr, Delay);
885 } else if(SiS_Pr->SiS_VBType & VB_SISVB) { /* 315 series, all bridges */
887 DelayIndex = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
889 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[0];
891 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[1];
894 SiS_DDC2Delay(SiS_Pr, Delay);
905 SiS_PanelDelayLoop(struct SiS_Private *SiS_Pr, unsigned short DelayTime, unsigned short DelayLoop)
909 SiS_PanelDelay(SiS_Pr, DelayTime);
919 SiS_WaitRetrace1(struct SiS_Private *SiS_Pr)
923 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x1f) & 0xc0) return;
924 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x17) & 0x80)) return;
927 while((SiS_GetRegByte(SiS_Pr->SiS_P3da) & 0x08) && --watchdog);
929 while((!(SiS_GetRegByte(SiS_Pr->SiS_P3da) & 0x08)) && --watchdog);
934 SiS_WaitRetrace2(struct SiS_Private *SiS_Pr, unsigned short reg)
939 while((SiS_GetReg(SiS_Pr->SiS_Part1Port,reg) & 0x02) && --watchdog);
941 while((!(SiS_GetReg(SiS_Pr->SiS_Part1Port,reg) & 0x02)) && --watchdog);
946 SiS_WaitVBRetrace(struct SiS_Private *SiS_Pr)
948 if(SiS_Pr->ChipType < SIS_315H) {
950 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
951 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x20)) return;
953 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x80)) {
954 SiS_WaitRetrace1(SiS_Pr);
956 SiS_WaitRetrace2(SiS_Pr, 0x25);
961 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x40)) {
962 SiS_WaitRetrace1(SiS_Pr);
964 SiS_WaitRetrace2(SiS_Pr, 0x30);
971 SiS_VBWait(struct SiS_Private *SiS_Pr)
978 tempal = SiS_GetRegByte(SiS_Pr->SiS_P3da);
992 SiS_VBLongWait(struct SiS_Private *SiS_Pr)
994 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
995 SiS_VBWait(SiS_Pr);
997 SiS_WaitRetrace1(SiS_Pr);
1007 SiS_Is301B(struct SiS_Private *SiS_Pr)
1009 if(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x01) >= 0xb0) return true;
1015 SiS_CRT2IsLCD(struct SiS_Private *SiS_Pr)
1017 if(SiS_Pr->ChipType == SIS_730) {
1018 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x20) return true;
1020 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x30) & 0x20) return true;
1025 SiS_IsDualEdge(struct SiS_Private *SiS_Pr)
1028 if(SiS_Pr->ChipType >= SIS_315H) {
1029 if((SiS_Pr->ChipType != SIS_650) || (SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xf0)) {
1030 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableDualEdge) return true;
1038 SiS_IsVAMode(struct SiS_Private *SiS_Pr)
1043 if(SiS_Pr->ChipType >= SIS_315H) {
1044 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1053 SiS_IsVAorLCD(struct SiS_Private *SiS_Pr)
1055 if(SiS_IsVAMode(SiS_Pr)) return true;
1056 if(SiS_CRT2IsLCD(SiS_Pr)) return true;
1062 SiS_IsDualLink(struct SiS_Private *SiS_Pr)
1065 if(SiS_Pr->ChipType >= SIS_315H) {
1066 if((SiS_CRT2IsLCD(SiS_Pr)) ||
1067 (SiS_IsVAMode(SiS_Pr))) {
1068 if(SiS_Pr->SiS_LCDInfo & LCDDualLink) return true;
1077 SiS_TVEnabled(struct SiS_Private *SiS_Pr)
1079 if((SiS_GetReg(SiS_Pr->SiS_Part2Port,0x00) & 0x0f) != 0x0c) return true;
1080 if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
1081 if(SiS_GetReg(SiS_Pr->SiS_Part2Port,0x4d) & 0x10) return true;
1089 SiS_LCDAEnabled(struct SiS_Private *SiS_Pr)
1091 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x13) & 0x04) return true;
1098 SiS_WeHaveBacklightCtrl(struct SiS_Private *SiS_Pr)
1100 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->ChipType < SIS_661)) {
1101 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x79) & 0x10) return true;
1109 SiS_IsNotM650orLater(struct SiS_Private *SiS_Pr)
1113 if(SiS_Pr->ChipType == SIS_650) {
1114 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xf0;
1118 } else if(SiS_Pr->ChipType >= SIS_661) return false;
1125 SiS_IsYPbPr(struct SiS_Private *SiS_Pr)
1127 if(SiS_Pr->ChipType >= SIS_315H) {
1129 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableCHYPbPr) return true;
1137 SiS_IsChScart(struct SiS_Private *SiS_Pr)
1139 if(SiS_Pr->ChipType >= SIS_315H) {
1141 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableCHScart) return true;
1149 SiS_IsTVOrYPbPrOrScart(struct SiS_Private *SiS_Pr)
1153 if(SiS_Pr->ChipType >= SIS_315H) {
1154 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
1156 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1160 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
1169 SiS_IsLCDOrLCDA(struct SiS_Private *SiS_Pr)
1173 if(SiS_Pr->ChipType >= SIS_315H) {
1174 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
1176 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1179 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
1187 SiS_HaveBridge(struct SiS_Private *SiS_Pr)
1191 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1193 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
1194 flag = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x00);
1201 SiS_BridgeIsEnabled(struct SiS_Private *SiS_Pr)
1205 if(SiS_HaveBridge(SiS_Pr)) {
1206 flag = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
1207 if(SiS_Pr->ChipType < SIS_315H) {
1219 SiS_BridgeInSlavemode(struct SiS_Private *SiS_Pr)
1223 flag1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31);
1235 SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo)
1240 if(!(SiS_Pr->SiS_ChSW)) return;
1242 acpibase = sisfb_read_lpc_pci_dword(SiS_Pr, 0x74);
1258 SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
1264 SiS_Pr->SiS_SetFlag = 0;
1266 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
1268 SiS_Pr->SiS_ModeType = modeflag & ModeTypeMask;
1270 if((ModeNo > 0x13) && (!SiS_Pr->UseCustomMode)) {
1271 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
1276 if(SiS_HaveBridge(SiS_Pr)) {
1278 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
1280 tempax = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) << 8;
1285 if(SiS_Pr->ChipType >= SIS_315H) {
1286 if(SiS_Pr->SiS_VBType & VB_SISLCDA) {
1289 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x31,0xbf);
1291 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & (DriverMode >> 8))) {
1293 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x38,0xfc);
1296 if(SiS_Pr->SiS_UseLCDA) {
1297 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xF0) {
1298 if((ModeNo <= 0x13) || (!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & (DriverMode >> 8)))) {
1299 SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x38,(EnableDualEdge | SetToLCDA));
1304 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1310 if(SiS_Pr->ChipType >= SIS_661) { /* New CR layout */
1312 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & 0x04) {
1313 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35) & 0xe0;
1315 else if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
1321 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1322 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1326 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1336 if(!(SiS_Pr->SiS_VBType & VB_SISVGA2)) {
1340 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1350 if(SiS_Pr->ChipType >= SIS_315H) {
1351 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1363 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1376 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1396 if(SiS_Pr->ChipType >= SIS_315H) {
1401 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1409 if(SiS_Pr->ChipType >= SIS_315H) {
1426 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
1427 if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
1428 ((SiS_Pr->SiS_VBType & VB_NoLCD) && (tempbx & SetCRT2ToLCD)) ) {
1441 if(SiS_BridgeIsEnabled(SiS_Pr)) {
1443 if(SiS_BridgeInSlavemode(SiS_Pr)) {
1467 SiS_Pr->SiS_VBInfo = tempbx;
1470 if(SiS_Pr->ChipType == SIS_630) {
1471 SiS_SetChrontelGPIO(SiS_Pr, SiS_Pr->SiS_VBInfo);
1477 SiS_Pr->SiS_VBInfo, SiS_Pr->SiS_SetFlag);
1486 SiS_SetYPbPr(struct SiS_Private *SiS_Pr)
1499 SiS_Pr->SiS_YPbPr = 0;
1500 if(SiS_Pr->ChipType >= SIS_661) return;
1502 if(SiS_Pr->SiS_VBType) {
1503 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1504 SiS_Pr->SiS_YPbPr = YPbPrHiVision;
1508 if(SiS_Pr->ChipType >= SIS_315H) {
1509 if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
1510 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1513 case 0x00: SiS_Pr->SiS_YPbPr = YPbPr525i; break;
1514 case 0x01: SiS_Pr->SiS_YPbPr = YPbPr525p; break;
1515 case 0x02: SiS_Pr->SiS_YPbPr = YPbPr750p; break;
1516 case 0x03: SiS_Pr->SiS_YPbPr = YPbPrHiVision; break;
1529 SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
1531 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
1533 unsigned char OutputSelect = *SiS_Pr->pSiS_OutputSelect;
1535 SiS_Pr->SiS_TVMode = 0;
1537 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) return;
1538 if(SiS_Pr->UseCustomMode) return;
1541 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
1544 if(SiS_Pr->ChipType < SIS_661) {
1546 if(SiS_Pr->SiS_VBInfo & SetPALTV) SiS_Pr->SiS_TVMode |= TVSetPAL;
1548 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1550 if((SiS_Pr->ChipType == SIS_630) ||
1551 (SiS_Pr->ChipType == SIS_730)) {
1554 } else if(SiS_Pr->ChipType >= SIS_315H) {
1556 if(SiS_Pr->ChipType < XGI_20) {
1558 if(SiS_Pr->ChipType >= SIS_330) romindex = 0x11b;
1562 if(romindex && SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
1565 SiS_SetRegAND(SiS_Pr->SiS_P3d4,temp,0x3F);
1568 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,temp);
1569 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
1571 SiS_Pr->SiS_TVMode |= TVSetPALM;
1572 SiS_Pr->SiS_TVMode &= ~TVSetPAL;
1574 SiS_Pr->SiS_TVMode |= TVSetPALN;
1578 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1583 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1584 if(SiS_Pr->SiS_YPbPr == YPbPr750p) SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;
1585 else if(SiS_Pr->SiS_YPbPr == YPbPr525p) SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;
1586 else if(SiS_Pr->SiS_YPbPr == YPbPrHiVision) SiS_Pr->SiS_TVMode |= TVSetHiVision;
1587 else SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;
1588 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetYPbPr525p | TVSetYPbPr525i)) {
1589 SiS_Pr->SiS_VBInfo &= ~SetCRT2ToHiVision;
1590 SiS_Pr->SiS_VBInfo |= SetCRT2ToYPbPr525750;
1591 } else if(SiS_Pr->SiS_TVMode & TVSetHiVision) {
1592 SiS_Pr->SiS_TVMode |= TVSetPAL;
1595 } else if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1596 if(SiS_Pr->SiS_CHOverScan) {
1597 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
1598 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1599 if((temp & TVOverScan) || (SiS_Pr->SiS_CHOverScan == 1)) {
1600 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1602 } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1603 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x79);
1604 if((temp & 0x80) || (SiS_Pr->SiS_CHOverScan == 1)) {
1605 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1608 if(SiS_Pr->SiS_CHSOverScan) {
1609 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1612 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1613 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1614 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
1615 if(temp & EnablePALM) SiS_Pr->SiS_TVMode |= TVSetPALM;
1616 else if(temp & EnablePALN) SiS_Pr->SiS_TVMode |= TVSetPALN;
1619 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1627 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1629 SiS_Pr->SiS_TVMode |= TVSetPAL;
1631 SiS_Pr->SiS_TVMode |= TVSetPALN;
1633 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1634 SiS_Pr->SiS_TVMode &= ~TVSetPAL;
1636 SiS_Pr->SiS_TVMode |= TVSetPALM;
1640 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1643 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1644 if(SiS_Pr->SiS_CHOverScan) {
1645 if((temp1 & 0x10) || (SiS_Pr->SiS_CHOverScan == 1)) {
1646 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1650 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1651 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
1653 if(temp1 == 0x00) SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;
1654 else if(temp1 == 0x20) SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;
1655 else if(temp1 == 0x40) SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;
1656 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1657 SiS_Pr->SiS_TVMode |= (TVSetHiVision | TVSetPAL);
1659 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToYPbPr525750 | SetCRT2ToHiVision)) {
1661 SiS_Pr->SiS_TVMode |= TVAspect169;
1663 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x39);
1665 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetHiVision)) {
1666 SiS_Pr->SiS_TVMode |= TVAspect169;
1668 SiS_Pr->SiS_TVMode |= TVAspect43LB;
1671 SiS_Pr->SiS_TVMode |= TVAspect43;
1678 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) SiS_Pr->SiS_TVMode |= TVSetPAL;
1680 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1682 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1683 SiS_Pr->SiS_TVMode |= TVSetPAL;
1684 SiS_Pr->SiS_TVMode &= ~(TVSetPALM | TVSetPALN | TVSetNTSCJ);
1685 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
1686 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525i | TVSetYPbPr525p | TVSetYPbPr750p)) {
1687 SiS_Pr->SiS_TVMode &= ~(TVSetPAL | TVSetNTSCJ | TVSetPALM | TVSetPALN);
1691 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
1692 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
1693 SiS_Pr->SiS_TVMode |= TVSetTVSimuMode;
1697 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
1699 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
1700 SiS_Pr->SiS_TVMode |= TVSet525p1024;
1701 } else if(!(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr750p))) {
1702 SiS_Pr->SiS_TVMode |= TVSetNTSC1024;
1707 SiS_Pr->SiS_TVMode |= TVRPLLDIV2XO;
1708 if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) &&
1709 (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
1710 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1711 } else if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) {
1712 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1713 } else if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) {
1714 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
1715 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1721 SiS_Pr->SiS_VBInfo &= ~SetPALTV;
1729 SiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr)
1731 unsigned short temp = SiS_Pr->SiS_LCDResInfo;
1742 SiS_GetLCDInfoBIOS(struct SiS_Private *SiS_Pr)
1748 if((ROMAddr = GetLCDStructPtr661(SiS_Pr))) {
1749 if((temp = SISGETROMW(6)) != SiS_Pr->PanelHT) {
1750 SiS_Pr->SiS_NeedRomModeData = true;
1751 SiS_Pr->PanelHT = temp;
1753 if((temp = SISGETROMW(8)) != SiS_Pr->PanelVT) {
1754 SiS_Pr->SiS_NeedRomModeData = true;
1755 SiS_Pr->PanelVT = temp;
1757 SiS_Pr->PanelHRS = SISGETROMW(10);
1758 SiS_Pr->PanelHRE = SISGETROMW(12);
1759 SiS_Pr->PanelVRS = SISGETROMW(14);
1760 SiS_Pr->PanelVRE = SISGETROMW(16);
1761 SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;
1762 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].CLOCK =
1763 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].CLOCK = (unsigned short)((unsigned char)ROMAddr[18]);
1764 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2B =
1765 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_A = ROMAddr[19];
1766 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2C =
1767 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_B = ROMAddr[20];
1774 SiS_CheckScaling(struct SiS_Private *SiS_Pr, unsigned short resinfo,
1780 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ||
1781 (SiS_Pr->UsePanelScaler == -1)) {
1782 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1790 SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
1795 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
1804 SiS_Pr->SiS_LCDResInfo = 0;
1805 SiS_Pr->SiS_LCDTypeInfo = 0;
1806 SiS_Pr->SiS_LCDInfo = 0;
1807 SiS_Pr->PanelHRS = 999; /* HSync start */
1808 SiS_Pr->PanelHRE = 999; /* HSync end */
1809 SiS_Pr->PanelVRS = 999; /* VSync start */
1810 SiS_Pr->PanelVRE = 999; /* VSync end */
1811 SiS_Pr->SiS_NeedRomModeData = false;
1814 SiS_Pr->Alternate1600x1200 = false;
1816 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))) return;
1818 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
1820 if((ModeNo > 0x13) && (!SiS_Pr->UseCustomMode)) {
1821 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
1822 modexres = SiS_Pr->SiS_ModeResInfo[resinfo].HTotal;
1823 modeyres = SiS_Pr->SiS_ModeResInfo[resinfo].VTotal;
1826 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
1831 if((SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
1832 SiS_Pr->SiS_LCDTypeInfo = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x7c) >> 2;
1833 } else if((SiS_Pr->ChipType < SIS_315H) || (SiS_Pr->ChipType >= SIS_661)) {
1834 SiS_Pr->SiS_LCDTypeInfo = temp >> 4;
1836 SiS_Pr->SiS_LCDTypeInfo = (temp & 0x0F) - 1;
1840 if(SiS_Pr->ChipType < SIS_315H) {
1842 if(SiS_Pr->SiS_VBType & VB_SIS301) {
1852 if(SiS_Pr->ChipType == SIS_550) {
1856 } else if(SiS_Pr->ChipType >= SIS_661) {
1861 if(SiS_Pr->SiS_VBType & VB_SISLVDS) { /* SiS LVDS */
1865 if(SiS_Pr->SiS_ROMNew) {
1872 SiS_Pr->SiS_LCDResInfo = temp;
1875 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1876 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
1877 SiS_Pr->SiS_LCDResInfo = Panel_Barco1366;
1878 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848) {
1879 SiS_Pr->SiS_LCDResInfo = Panel_848x480;
1880 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL856) {
1881 SiS_Pr->SiS_LCDResInfo = Panel_856x480;
1886 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1887 if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMin301)
1888 SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMin301;
1890 if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMinLVDS)
1891 SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMinLVDS;
1894 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);
1895 SiS_Pr->SiS_LCDInfo = temp & ~0x000e;
1899 switch(SiS_Pr->SiS_LCDResInfo) {
1904 SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
1907 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1910 panelcanscale = (bool)(SiS_Pr->SiS_LCDInfo & DontExpandLCD);
1912 if(!SiS_Pr->UsePanelScaler) SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
1913 else if(SiS_Pr->UsePanelScaler == 1) SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1917 if(SiS_Pr->ChipType >= SIS_661) {
1918 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
1919 if(temp & 0x08) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1921 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1922 if(SiS_Pr->SiS_ROMNew) {
1923 if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1924 } else if((myptr = GetLCDStructPtr661(SiS_Pr))) {
1925 if(myptr[2] & 0x01) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1928 } else if(SiS_Pr->ChipType >= SIS_315H) {
1929 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
1930 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x01) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1932 if((SiS_Pr->SiS_ROMNew) && (!(SiS_Pr->PanelSelfDetected))) {
1933 SiS_Pr->SiS_LCDInfo &= ~(LCDRGB18Bit);
1934 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1935 if(temp & 0x01) SiS_Pr->SiS_LCDInfo |= LCDRGB18Bit;
1936 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1937 if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1939 } else if(!(SiS_Pr->SiS_ROMNew)) {
1940 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1941 if((SiS_Pr->SiS_CustomT == CUT_CLEVO1024) &&
1942 (SiS_Pr->SiS_LCDResInfo == Panel_1024x768)) {
1943 SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1945 if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
1946 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
1947 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||
1948 (SiS_Pr->SiS_LCDResInfo == Panel_1680x1050)) {
1949 SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1957 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
1959 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1960 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
1961 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
1963 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1966 if(panelcanscale) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1967 if(SiS_Pr->CenterScreen == 1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1971 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1972 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
1974 switch(SiS_Pr->SiS_LCDResInfo) {
1977 case Panel_320x240_3: SiS_Pr->PanelXRes = 640; SiS_Pr->PanelYRes = 480;
1978 SiS_Pr->PanelVRS = 24; SiS_Pr->PanelVRE = 3;
1979 SiS_Pr->PanelVCLKIdx300 = VCLK28;
1980 SiS_Pr->PanelVCLKIdx315 = VCLK28;
1982 case Panel_640x480: SiS_Pr->PanelXRes = 640; SiS_Pr->PanelYRes = 480;
1983 SiS_Pr->PanelVRE = 3;
1984 SiS_Pr->PanelVCLKIdx300 = VCLK28;
1985 SiS_Pr->PanelVCLKIdx315 = VCLK28;
1987 case Panel_800x600: SiS_Pr->PanelXRes = 800; SiS_Pr->PanelYRes = 600;
1988 SiS_Pr->PanelHT = 1056; SiS_Pr->PanelVT = 628;
1989 SiS_Pr->PanelHRS = 40; SiS_Pr->PanelHRE = 128;
1990 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 4;
1991 SiS_Pr->PanelVCLKIdx300 = VCLK40;
1992 SiS_Pr->PanelVCLKIdx315 = VCLK40;
1994 case Panel_1024x600: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 600;
1995 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 800;
1996 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
1997 SiS_Pr->PanelVRS = 2 /* 88 */ ; SiS_Pr->PanelVRE = 6;
1998 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1999 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
2001 case Panel_1024x768: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768;
2002 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
2003 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
2004 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
2005 if(SiS_Pr->ChipType < SIS_315H) {
2006 SiS_Pr->PanelHRS = 23;
2007 SiS_Pr->PanelVRE = 5;
2009 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
2010 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
2011 SiS_GetLCDInfoBIOS(SiS_Pr);
2013 case Panel_1152x768: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 768;
2014 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
2015 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
2016 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
2017 if(SiS_Pr->ChipType < SIS_315H) {
2018 SiS_Pr->PanelHRS = 23;
2019 SiS_Pr->PanelVRE = 5;
2021 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
2022 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
2024 case Panel_1152x864: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 864;
2026 case Panel_1280x720: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 720;
2027 SiS_Pr->PanelHT = 1650; SiS_Pr->PanelVT = 750;
2028 SiS_Pr->PanelHRS = 110; SiS_Pr->PanelHRE = 40;
2029 SiS_Pr->PanelVRS = 5; SiS_Pr->PanelVRE = 5;
2030 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x720;
2032 SiS_GetLCDInfoBIOS(SiS_Pr);
2034 case Panel_1280x768: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 768;
2035 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2036 SiS_Pr->PanelHT = 1408; SiS_Pr->PanelVT = 806;
2037 SiS_Pr->PanelVCLKIdx300 = VCLK81_300; /* ? */
2038 SiS_Pr->PanelVCLKIdx315 = VCLK81_315; /* ? */
2040 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 802;
2041 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
2042 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
2043 SiS_Pr->PanelVCLKIdx300 = VCLK81_300;
2044 SiS_Pr->PanelVCLKIdx315 = VCLK81_315;
2047 case Panel_1280x768_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 768;
2048 SiS_Pr->PanelHT = 1660; SiS_Pr->PanelVT = 806;
2049 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
2050 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
2051 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x768_2;
2052 SiS_GetLCDInfoBIOS(SiS_Pr);
2054 case Panel_1280x800: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 800;
2055 SiS_Pr->PanelHT = 1408; SiS_Pr->PanelVT = 816;
2056 SiS_Pr->PanelHRS = 21; SiS_Pr->PanelHRE = 24;
2057 SiS_Pr->PanelVRS = 4; SiS_Pr->PanelVRE = 3;
2058 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315;
2059 SiS_GetLCDInfoBIOS(SiS_Pr);
2061 case Panel_1280x800_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 800;
2062 SiS_Pr->PanelHT = 1552; SiS_Pr->PanelVT = 812;
2063 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
2064 SiS_Pr->PanelVRS = 4; SiS_Pr->PanelVRE = 3;
2065 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315_2;
2066 SiS_GetLCDInfoBIOS(SiS_Pr);
2068 case Panel_1280x854: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 854;
2069 SiS_Pr->PanelHT = 1664; SiS_Pr->PanelVT = 861;
2070 SiS_Pr->PanelHRS = 16; SiS_Pr->PanelHRE = 112;
2071 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
2072 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x854;
2073 SiS_GetLCDInfoBIOS(SiS_Pr);
2075 case Panel_1280x960: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 960;
2076 SiS_Pr->PanelHT = 1800; SiS_Pr->PanelVT = 1000;
2077 SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;
2078 SiS_Pr->PanelVCLKIdx315 = VCLK108_3_315;
2080 SiS_Pr->PanelVCLKIdx300 = VCLK100_300;
2081 SiS_Pr->PanelVCLKIdx315 = VCLK100_315;
2084 case Panel_1280x1024: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 1024;
2085 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
2086 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
2087 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
2088 SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;
2089 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
2090 SiS_GetLCDInfoBIOS(SiS_Pr);
2092 case Panel_1400x1050: SiS_Pr->PanelXRes = 1400; SiS_Pr->PanelYRes = 1050;
2093 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
2094 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
2095 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
2096 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
2097 SiS_GetLCDInfoBIOS(SiS_Pr);
2099 case Panel_1600x1200: SiS_Pr->PanelXRes = 1600; SiS_Pr->PanelYRes = 1200;
2100 SiS_Pr->PanelHT = 2160; SiS_Pr->PanelVT = 1250;
2101 SiS_Pr->PanelHRS = 64; SiS_Pr->PanelHRE = 192;
2102 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
2103 SiS_Pr->PanelVCLKIdx315 = VCLK162_315;
2104 if(SiS_Pr->SiS_VBType & VB_SISTMDSLCDA) {
2105 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
2106 SiS_Pr->PanelHT = 1760; SiS_Pr->PanelVT = 1235;
2107 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 32;
2108 SiS_Pr->PanelVRS = 2; SiS_Pr->PanelVRE = 4;
2109 SiS_Pr->PanelVCLKIdx315 = VCLK130_315;
2110 SiS_Pr->Alternate1600x1200 = true;
2112 } else if(SiS_Pr->SiS_IF_DEF_LVDS) {
2113 SiS_Pr->PanelHT = 2048; SiS_Pr->PanelVT = 1320;
2114 SiS_Pr->PanelHRS = SiS_Pr->PanelHRE = 999;
2115 SiS_Pr->PanelVRS = SiS_Pr->PanelVRE = 999;
2117 SiS_GetLCDInfoBIOS(SiS_Pr);
2119 case Panel_1680x1050: SiS_Pr->PanelXRes = 1680; SiS_Pr->PanelYRes = 1050;
2120 SiS_Pr->PanelHT = 1900; SiS_Pr->PanelVT = 1066;
2121 SiS_Pr->PanelHRS = 26; SiS_Pr->PanelHRE = 76;
2122 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
2123 SiS_Pr->PanelVCLKIdx315 = VCLK121_315;
2124 SiS_GetLCDInfoBIOS(SiS_Pr);
2126 case Panel_Barco1366: SiS_Pr->PanelXRes = 1360; SiS_Pr->PanelYRes = 1024;
2127 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
2129 case Panel_848x480: SiS_Pr->PanelXRes = 848; SiS_Pr->PanelYRes = 480;
2130 SiS_Pr->PanelHT = 1088; SiS_Pr->PanelVT = 525;
2132 case Panel_856x480: SiS_Pr->PanelXRes = 856; SiS_Pr->PanelYRes = 480;
2133 SiS_Pr->PanelHT = 1088; SiS_Pr->PanelVT = 525;
2135 case Panel_Custom: SiS_Pr->PanelXRes = SiS_Pr->CP_MaxX;
2136 SiS_Pr->PanelYRes = SiS_Pr->CP_MaxY;
2137 SiS_Pr->PanelHT = SiS_Pr->CHTotal;
2138 SiS_Pr->PanelVT = SiS_Pr->CVTotal;
2139 if(SiS_Pr->CP_PreferredIndex != -1) {
2140 SiS_Pr->PanelXRes = SiS_Pr->CP_HDisplay[SiS_Pr->CP_PreferredIndex];
2141 SiS_Pr->PanelYRes = SiS_Pr->CP_VDisplay[SiS_Pr->CP_PreferredIndex];
2142 SiS_Pr->PanelHT = SiS_Pr->CP_HTotal[SiS_Pr->CP_PreferredIndex];
2143 SiS_Pr->PanelVT = SiS_Pr->CP_VTotal[SiS_Pr->CP_PreferredIndex];
2144 SiS_Pr->PanelHRS = SiS_Pr->CP_HSyncStart[SiS_Pr->CP_PreferredIndex];
2145 SiS_Pr->PanelHRE = SiS_Pr->CP_HSyncEnd[SiS_Pr->CP_PreferredIndex];
2146 SiS_Pr->PanelVRS = SiS_Pr->CP_VSyncStart[SiS_Pr->CP_PreferredIndex];
2147 SiS_Pr->PanelVRE = SiS_Pr->CP_VSyncEnd[SiS_Pr->CP_PreferredIndex];
2148 SiS_Pr->PanelHRS -= SiS_Pr->PanelXRes;
2149 SiS_Pr->PanelHRE -= SiS_Pr->PanelHRS;
2150 SiS_Pr->PanelVRS -= SiS_Pr->PanelYRes;
2151 SiS_Pr->PanelVRE -= SiS_Pr->PanelVRS;
2152 if(SiS_Pr->CP_PrefClock) {
2154 SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;
2155 SiS_Pr->PanelVCLKIdx300 = VCLK_CUSTOM_300;
2156 if(SiS_Pr->ChipType < SIS_315H) idx = VCLK_CUSTOM_300;
2158 SiS_Pr->SiS_VCLKData[idx].CLOCK =
2159 SiS_Pr->SiS_VBVCLKData[idx].CLOCK = SiS_Pr->CP_PrefClock;
2160 SiS_Pr->SiS_VCLKData[idx].SR2B =
2161 SiS_Pr->SiS_VBVCLKData[idx].Part4_A = SiS_Pr->CP_PrefSR2B;
2162 SiS_Pr->SiS_VCLKData[idx].SR2C =
2163 SiS_Pr->SiS_VBVCLKData[idx].Part4_B = SiS_Pr->CP_PrefSR2C;
2167 default: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768;
2168 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
2173 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
2174 (SiS_Pr->SiS_IF_DEF_DSTN) ||
2175 (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
2176 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
2177 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
2178 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
2179 SiS_Pr->PanelHRS = 999;
2180 SiS_Pr->PanelHRE = 999;
2183 if( (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
2184 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
2185 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
2186 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
2187 SiS_Pr->PanelVRS = 999;
2188 SiS_Pr->PanelVRE = 999;
2192 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
2194 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (modeflag & NoSupportLCDScale)) {
2196 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2199 switch(SiS_Pr->SiS_LCDResInfo) {
2204 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2211 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2220 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2229 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2230 if(SiS_Pr->PanelHT == 1650) {
2231 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2241 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2243 case SIS_RI_1280x720: if(SiS_Pr->UsePanelScaler == -1) {
2244 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2256 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2265 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2268 case SIS_RI_1280x768: if(SiS_Pr->UsePanelScaler == -1) {
2269 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2281 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2285 case SIS_RI_1280x800: if(SiS_Pr->UsePanelScaler == -1) {
2286 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2299 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2309 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2319 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2321 case SIS_RI_1280x720: if(SiS_Pr->UsePanelScaler == -1) {
2322 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2325 case SIS_RI_1280x1024: SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2337 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2347 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2354 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2355 if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
2356 SiS_Pr->SiS_LCDInfo = 0x80 | 0x40 | 0x20; /* neg h/v sync, RGB24(D0 = 0) */
2360 if(SiS_Pr->ChipType < SIS_315H) {
2361 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2362 if(SiS_Pr->SiS_UseROM) {
2365 SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
2369 } else if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2370 if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {
2371 SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
2379 if(modexres == SiS_Pr->PanelXRes && modeyres == SiS_Pr->PanelYRes) {
2380 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2383 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
2384 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2387 switch(SiS_Pr->SiS_LCDResInfo) {
2389 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2393 if(SiS_Pr->CenterScreen == -1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2396 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2399 if((!SiS_Pr->CP_PrefClock) ||
2400 (modexres > SiS_Pr->PanelXRes) || (modeyres > SiS_Pr->PanelYRes)) {
2401 SiS_Pr->SiS_LCDInfo |= LCDPass11;
2406 if((SiS_Pr->UseCustomMode) || (SiS_Pr->SiS_CustomT == CUT_UNKNOWNLCD)) {
2407 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2411 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2412 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2416 if(!((SiS_Pr->ChipType < SIS_315H) && (SiS_Pr->SiS_SetFlag & SetDOSMode))) {
2418 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
2419 if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
2421 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
2422 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2425 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x600) {
2426 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2428 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2437 if(SiS_Pr->SiS_IF_DEF_TRUMPION == 1) {
2438 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2439 } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
2440 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2441 } else if(SiS_Pr->SiS_LCDResInfo == Panel_640x480) {
2442 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2444 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
2445 if(resinfo == SIS_RI_512x384) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2446 } else if(SiS_Pr->SiS_LCDResInfo == Panel_800x600) {
2447 if(resinfo == SIS_RI_400x300) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2455 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2456 if(SiS_Pr->SiS_VBInfo & SetNotSimuMode) {
2457 SiS_Pr->SiS_SetFlag |= LCDVESATiming;
2460 SiS_Pr->SiS_SetFlag |= LCDVESATiming;
2465 SiS_Pr->SiS_LCDInfo, SiS_Pr->SiS_LCDResInfo, SiS_Pr->SiS_LCDTypeInfo);
2474 SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
2482 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
2483 CRT2Index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
2484 VCLKIndexGEN = (SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02)) >> 2) & 0x03;
2487 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
2488 CRT2Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
2489 VCLKIndexGEN = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
2490 VCLKIndexGENCRT = SiS_GetRefCRTVCLK(SiS_Pr, RefreshRateTableIndex,
2491 (SiS_Pr->SiS_SetFlag & ProgrammingCRT2) ? SiS_Pr->SiS_UseWideCRT2 : SiS_Pr->SiS_UseWide);
2494 if(SiS_Pr->SiS_VBType & VB_SISVB) { /* 30x/B/LV */
2496 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
2499 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { /* LCD */
2501 if(SiS_Pr->ChipType < SIS_315H) {
2502 VCLKIndex = SiS_Pr->PanelVCLKIdx300;
2503 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
2507 VCLKIndex = SiS_Pr->PanelVCLKIdx315;
2508 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
2525 if(SiS_Pr->ChipType <= SIS_315PRO) {
2526 if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x42;
2528 if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x00;
2531 if(SiS_Pr->ChipType <= SIS_315PRO) {
2539 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* TV */
2541 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
2542 if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) VCLKIndex = HiTVVCLKDIV2;
2544 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) VCLKIndex = HiTVSimuVCLK;
2545 } else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) VCLKIndex = YPbPr750pVCLK;
2546 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) VCLKIndex = TVVCLKDIV2;
2547 else if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) VCLKIndex = TVVCLKDIV2;
2550 if(SiS_Pr->ChipType < SIS_315H) VCLKIndex += TVCLKBASE_300;
2556 if(SiS_Pr->ChipType < SIS_315H) {
2558 if( (SiS_Pr->ChipType == SIS_630) &&
2559 (SiS_Pr->ChipRevision >= 0x30)) {
2571 if(SiS_Pr->ChipType < SIS_315H) {
2573 if( (SiS_Pr->ChipType != SIS_630) &&
2574 (SiS_Pr->ChipType != SIS_300) ) {
2585 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
2587 if( (SiS_Pr->SiS_IF_DEF_CH70xx != 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) ) {
2591 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2592 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
2594 if(SiS_Pr->SiS_ModeType > ModeVGA) {
2595 if(SiS_Pr->SiS_CHSOverScan) tempbx = 8;
2597 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
2599 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2600 } else if(SiS_Pr->SiS_TVMode & TVSetPALN) {
2602 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2606 case 0: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUNTSC; break;
2607 case 1: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKONTSC; break;
2608 case 2: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPAL; break;
2609 case 3: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPAL; break;
2610 case 4: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPALM; break;
2611 case 5: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPALM; break;
2612 case 6: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPALN; break;
2613 case 7: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPALN; break;
2614 case 8: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKSOPAL; break;
2615 default: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPAL; break;
2619 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
2621 if(SiS_Pr->ChipType < SIS_315H) {
2622 VCLKIndex = SiS_Pr->PanelVCLKIdx300;
2624 VCLKIndex = SiS_Pr->PanelVCLKIdx315;
2629 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) VCLKIndex = 0x44;
2632 if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
2633 if(SiS_Pr->ChipType < SIS_315H) {
2646 if(SiS_Pr->ChipType < SIS_315H) {
2648 if( (SiS_Pr->ChipType == SIS_630) &&
2649 (SiS_Pr->ChipRevision >= 0x30) ) {
2659 if(SiS_Pr->ChipType < SIS_315H) {
2661 if( (SiS_Pr->ChipType != SIS_630) &&
2662 (SiS_Pr->ChipType != SIS_300) ) {
2666 if(SiS_Pr->ChipType == SIS_730) {
2686 SiS_SetCRT2ModeRegs(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
2694 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
2698 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
2700 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
2702 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xAF,0x40);
2703 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2E,0xF7);
2707 for(i=0,j=4; i<3; i++,j++) SiS_SetReg(SiS_Pr->SiS_Part1Port,j,0);
2708 if(SiS_Pr->ChipType >= SIS_315H) {
2709 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0x7F);
2712 tempcl = SiS_Pr->SiS_ModeType;
2714 if(SiS_Pr->ChipType < SIS_315H) {
2719 if(SiS_Pr->SiS_VBType & VB_NoLCD) {
2720 tempbl = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32);
2723 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) || (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
2727 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,tempbl);
2737 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0xA0;
2754 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0x50;
2760 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2762 if(SiS_Pr->ChipType < SIS_315H) {
2763 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,tempah);
2766 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2767 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xa0,tempah);
2768 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
2770 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,tempah);
2772 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xa0,tempah);
2778 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2781 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
2784 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
2786 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
2791 if(SiS_Pr->ChipType < SIS_315H) {
2793 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2796 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,tempah);
2801 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0x08;
2802 else if(!(SiS_IsDualEdge(SiS_Pr))) tempah |= 0x08;
2803 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2E,0xF0,tempah);
2808 if((SiS_Pr->SiS_ModeType == ModeVGA) && (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode))) {
2813 if(SiS_Pr->SiS_VBType & VB_SIS301) {
2814 if(SiS_Pr->PanelXRes < 1280 && SiS_Pr->PanelYRes < 960) tempah &= ~0x80;
2817 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
2818 if(!(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetYPbPr525p))) {
2819 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2825 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0D,0x40,tempah);
2828 if(SiS_Pr->SiS_VBType & VB_SIS301) {
2829 if(SiS_Pr->PanelXRes < 1280 && SiS_Pr->PanelYRes < 960) tempah = 0;
2832 if(SiS_IsDualLink(SiS_Pr)) tempah |= 0x40;
2834 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
2835 if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) {
2840 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0C,tempah);
2844 if(SiS_Pr->ChipType >= SIS_315H) {
2849 if((modeflag & CRT2Mode) && (SiS_Pr->SiS_ModeType > ModeVGA)) {
2850 if(SiS_Pr->SiS_VBInfo & DriverMode) {
2855 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) tempah |= 0x02;
2857 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempah ^= 0x01;
2859 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 1;
2861 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2e,0xF0,tempah);
2868 if( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) && (SiS_Pr->SiS_ModeType > ModeVGA) ) {
2873 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2875 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,tempah);
2884 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2886 if(SiS_Pr->ChipType >= SIS_315H) {
2889 /* unsigned char bridgerev = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x01); */
2905 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2907 if(SiS_IsDualEdge(SiS_Pr)) {
2911 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
2923 if((IS_SIS740) || (SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
2926 if((SiS_Pr->SiS_VBInfo & DisableCRT2Display) ||
2927 ((SiS_Pr->SiS_ROMNew) && (!(ROMAddr[0x5b] & 0x04)))) {
2931 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xcf,tempah);
2932 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,tempbl);
2933 } else if(SiS_Pr->SiS_VBType & VB_SIS301) {
2935 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2c,0xcf); /* For 301 */
2936 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x21,0x3f);
2937 } else if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
2938 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30); /* For 30xLV */
2939 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x21,0xc0);
2940 } else if(SiS_Pr->SiS_VBType & VB_NoLCD) { /* For 301B-DH */
2943 if(SiS_Pr->SiS_TVBlue == 0) {
2945 } else if(SiS_Pr->SiS_TVBlue == -1) {
2951 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
2952 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl2,tempah2);
2956 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2958 if(SiS_IsDualEdge(SiS_Pr)) {
2962 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
2963 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl2,tempah2);
2968 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0x00;
2969 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,0x7f,tempah);
2973 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2975 if(!(SiS_IsDualEdge(SiS_Pr))) tempah = 0x80;
2977 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,tempbl,tempah);
2982 } else if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2985 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x21,0x3f);
2987 if((SiS_Pr->SiS_VBInfo & DisableCRT2Display) ||
2988 ((SiS_Pr->SiS_VBType & VB_NoLCD) &&
2989 (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD))) {
2990 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x23,0x7F);
2992 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x23,0x80);
2998 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2999 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x0D,0x80);
3000 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
3001 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3A,0xC0);
3008 if(SiS_Pr->ChipType >= SIS_315H) {
3010 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
3014 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3016 if(SiS_IsDualEdge(SiS_Pr)) tempbl = 0xff;
3018 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
3020 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
3021 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
3024 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30);
3026 } else if(SiS_Pr->ChipType == SIS_550) {
3028 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
3029 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30);
3045 SiS_GetResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
3048 return ((unsigned short)SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo);
3050 return ((unsigned short)SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO);
3054 SiS_GetCRT2ResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
3058 if(SiS_Pr->UseCustomMode) {
3059 xres = SiS_Pr->CHDisplay;
3060 if(SiS_Pr->CModeFlag & HalfDCLK) xres <<= 1;
3061 SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
3063 SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = SiS_Pr->CVDisplay;
3067 resindex = SiS_GetResInfo(SiS_Pr,ModeNo,ModeIdIndex);
3070 xres = SiS_Pr->SiS_StResInfo[resindex].HTotal;
3071 yres = SiS_Pr->SiS_StResInfo[resindex].VTotal;
3073 xres = SiS_Pr->SiS_ModeResInfo[resindex].HTotal;
3074 yres = SiS_Pr->SiS_ModeResInfo[resindex].VTotal;
3075 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
3078 if(!SiS_Pr->SiS_IF_DEF_DSTN && !SiS_Pr->SiS_IF_DEF_FSTN) {
3080 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_IF_DEF_LVDS == 1)) {
3081 if((ModeNo != 0x03) && (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
3084 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x3a) & 0x01) {
3094 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
3096 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3097 switch(SiS_Pr->SiS_LCDResInfo) {
3099 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
3100 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
3108 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
3113 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
3118 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
3127 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3128 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToHiVision)) {
3133 if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
3135 if(SiS_Pr->ChipType >= SIS_315H) {
3136 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x17) & 0x80) yres = 480;
3138 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x80) yres = 480;
3140 if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) yres = 480;
3144 SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
3145 SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = yres;
3153 SiS_GetCRT2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3160 tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
3162 tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
3163 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
3166 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_IF_DEF_LVDS == 0)) {
3168 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) { /* LCD */
3170 tempbx = SiS_Pr->SiS_LCDResInfo;
3171 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 32;
3174 if(SiS_Pr->SiS_LCDResInfo == Panel_1680x1050) {
3177 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x800) ||
3178 (SiS_Pr->SiS_LCDResInfo == Panel_1280x800_2) ||
3179 (SiS_Pr->SiS_LCDResInfo == Panel_1280x854)) {
3183 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3189 tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC_NS;
3194 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
3195 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
3196 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
3198 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx++;
3206 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
3207 /* if(SiS_Pr->SiS_VGAVDE > 480) SiS_Pr->SiS_TVMode &= (~TVSetTVSimuMode); */
3209 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
3211 if(!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) tempbx = 14;
3213 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
3214 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempbx = 7;
3215 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tempbx = 6;
3217 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) tempbx += 5;
3219 if(SiS_Pr->SiS_TVMode & TVSetPAL) tempbx = 3;
3221 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) tempbx += 5;
3229 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision) {
3233 if(SiS_Pr->SiS_TVMode & (TVSetPAL | TVSetPALN)) tempal = 9;
3239 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
3240 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempal = 8;
3249 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
3250 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tempal = 8;
3254 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
3255 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempal = 9;
3268 if((SiS_Pr->SiS_IF_DEF_CH70xx) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
3271 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
3273 if(SiS_Pr->SiS_ModeType > ModeVGA) {
3274 if(SiS_Pr->SiS_CHSOverScan) tempbx = 99;
3276 if(SiS_Pr->SiS_TVMode & TVSetPALM) tempbx = 94;
3277 else if(SiS_Pr->SiS_TVMode & TVSetPALN) tempbx = 96;
3280 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx++;
3285 switch(SiS_Pr->SiS_LCDResInfo) {
3303 switch(SiS_Pr->SiS_LCDResInfo) {
3310 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
3313 if(SiS_Pr->SiS_LCDInfo & LCDPass11) tempbx = 30;
3316 if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
3318 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
3319 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
3321 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
3333 SiS_GetRAMDAC2DATA(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3339 SiS_Pr->SiS_RVBHCMAX = 1;
3340 SiS_Pr->SiS_RVBHCFACT = 1;
3344 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3345 index = SiS_GetModePtr(SiS_Pr,ModeNo,ModeIdIndex);
3347 tempax = SiS_Pr->SiS_StandTable[index].CRTC[0];
3348 tempbx = SiS_Pr->SiS_StandTable[index].CRTC[6];
3349 temp1 = SiS_Pr->SiS_StandTable[index].CRTC[7];
3355 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
3356 index = SiS_GetRefCRT1CRTC(SiS_Pr, RefreshRateTableIndex, SiS_Pr->SiS_UseWideCRT2);
3358 tempax = SiS_Pr->SiS_CRT1Table[index].CR[0];
3359 tempax |= (SiS_Pr->SiS_CRT1Table[index].CR[14] << 8);
3361 tempbx = SiS_Pr->SiS_CRT1Table[index].CR[6];
3362 tempcx = SiS_Pr->SiS_CRT1Table[index].CR[13] << 8;
3366 temp1 = SiS_Pr->SiS_CRT1Table[index].CR[7];
3381 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3382 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = tempbx;
3386 SiS_CalcPanelLinkTiming(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
3391 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3392 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
3393 if(SiS_Pr->UseCustomMode) {
3394 ResIndex = SiS_Pr->CHTotal;
3395 if(SiS_Pr->CModeFlag & HalfDCLK) ResIndex <<= 1;
3396 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = ResIndex;
3397 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3400 ResIndex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
3402 ResIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC_NS;
3405 if(SiS_Pr->Alternate1600x1200) ResIndex = 0x20; /* 1600x1200 LCDA */
3406 else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) ResIndex = 0x21; /* 1600x1200 LVDS */
3408 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_NoScaleData[ResIndex].VGAHT;
3409 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_NoScaleData[ResIndex].VGAVT;
3410 SiS_Pr->SiS_HT = SiS_Pr->SiS_NoScaleData[ResIndex].LCDHT;
3411 SiS_Pr->SiS_VT = SiS_Pr->SiS_NoScaleData[ResIndex].LCDVT;
3414 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3415 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3419 SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
3420 SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
3421 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3422 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3423 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT - (SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE);
3424 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT - (SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE);
3429 SiS_GetCRT2DataLVDS(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3435 SiS_GetCRT2ResInfo(SiS_Pr, ModeNo, ModeIdIndex);
3437 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3438 SiS_Pr->SiS_RVBHCMAX = 1;
3439 SiS_Pr->SiS_RVBHCFACT = 1;
3440 SiS_Pr->SiS_NewFlickerMode = 0;
3441 SiS_Pr->SiS_RVBHRS = 50;
3442 SiS_Pr->SiS_RY1COE = 0;
3443 SiS_Pr->SiS_RY2COE = 0;
3444 SiS_Pr->SiS_RY3COE = 0;
3445 SiS_Pr->SiS_RY4COE = 0;
3446 SiS_Pr->SiS_RVBHRS2 = 0;
3449 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3452 SiS_CalcPanelLinkTiming(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3453 SiS_CalcLCDACRT1Timing(SiS_Pr, ModeNo, ModeIdIndex);
3459 backup = SiS_Pr->SiS_IF_DEF_LVDS;
3460 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
3461 SiS_Pr->SiS_IF_DEF_LVDS = 1;
3464 SiS_GetCRT2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
3467 SiS_Pr->SiS_IF_DEF_LVDS = backup;
3470 case 10: LVDSData = SiS_Pr->SiS_LVDS320x240Data_1; break;
3471 case 14: LVDSData = SiS_Pr->SiS_LVDS320x240Data_2; break;
3472 case 12: LVDSData = SiS_Pr->SiS_LVDS640x480Data_1; break;
3473 case 16: LVDSData = SiS_Pr->SiS_LVDS800x600Data_1; break;
3474 case 18: LVDSData = SiS_Pr->SiS_LVDS1024x600Data_1; break;
3475 case 20: LVDSData = SiS_Pr->SiS_LVDS1024x768Data_1; break;
3477 case 80: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_1; break;
3478 case 81: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_2; break;
3479 case 82: LVDSData = SiS_Pr->SiS_LVDSBARCO1024Data_1; break;
3480 case 84: LVDSData = SiS_Pr->SiS_LVDS848x480Data_1; break;
3481 case 85: LVDSData = SiS_Pr->SiS_LVDS848x480Data_2; break;
3483 case 90: LVDSData = SiS_Pr->SiS_CHTVUNTSCData; break;
3484 case 91: LVDSData = SiS_Pr->SiS_CHTVONTSCData; break;
3485 case 92: LVDSData = SiS_Pr->SiS_CHTVUPALData; break;
3486 case 93: LVDSData = SiS_Pr->SiS_CHTVOPALData; break;
3487 case 94: LVDSData = SiS_Pr->SiS_CHTVUPALMData; break;
3488 case 95: LVDSData = SiS_Pr->SiS_CHTVOPALMData; break;
3489 case 96: LVDSData = SiS_Pr->SiS_CHTVUPALNData; break;
3490 case 97: LVDSData = SiS_Pr->SiS_CHTVOPALNData; break;
3491 case 99: LVDSData = SiS_Pr->SiS_CHTVSOPALData; break;
3495 SiS_Pr->SiS_VGAHT = (LVDSData+ResIndex)->VGAHT;
3496 SiS_Pr->SiS_VGAVT = (LVDSData+ResIndex)->VGAVT;
3497 SiS_Pr->SiS_HT = (LVDSData+ResIndex)->LCDHT;
3498 SiS_Pr->SiS_VT = (LVDSData+ResIndex)->LCDVT;
3500 SiS_CalcPanelLinkTiming(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3503 if( (!(SiS_Pr->SiS_VBType & VB_SISVB)) &&
3504 (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
3505 (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) ) {
3506 if( (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ||
3507 (SiS_Pr->SiS_SetFlag & SetDOSMode) ) {
3508 SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
3509 SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
3511 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
3513 SiS_Pr->SiS_HDE = 1280;
3514 SiS_Pr->SiS_VDE = 1024;
3524 SiS_GetCRT2Data301(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3537 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3538 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
3539 } else if(SiS_Pr->UseCustomMode) {
3540 modeflag = SiS_Pr->CModeFlag;
3543 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
3544 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
3546 resinfo661 = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].ROMMODEIDX661;
3547 if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
3548 (SiS_Pr->SiS_SetFlag & LCDVESATiming) &&
3550 (SiS_Pr->SiS_NeedRomModeData) ) {
3551 if((ROMAddr = GetLCDStructPtr661(SiS_Pr))) {
3554 ROMAddr = SiS_Pr->VirtualRomBase;
3561 SiS_Pr->SiS_NewFlickerMode = 0;
3562 SiS_Pr->SiS_RVBHRS = 50;
3563 SiS_Pr->SiS_RY1COE = 0;
3564 SiS_Pr->SiS_RY2COE = 0;
3565 SiS_Pr->SiS_RY3COE = 0;
3566 SiS_Pr->SiS_RY4COE = 0;
3567 SiS_Pr->SiS_RVBHRS2 = 0;
3569 SiS_GetCRT2ResInfo(SiS_Pr,ModeNo,ModeIdIndex);
3571 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
3573 if(SiS_Pr->UseCustomMode) {
3575 SiS_Pr->SiS_RVBHCMAX = 1;
3576 SiS_Pr->SiS_RVBHCFACT = 1;
3577 SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
3578 SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
3580 tempax = SiS_Pr->CHTotal;
3582 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3583 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3587 SiS_GetRAMDAC2DATA(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3591 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
3593 SiS_GetCRT2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
3597 case 2: TVPtr = SiS_Pr->SiS_ExtHiTVData; break;
3598 case 3: TVPtr = SiS_Pr->SiS_ExtPALData; break;
3599 case 4: TVPtr = SiS_Pr->SiS_ExtNTSCData; break;
3600 case 5: TVPtr = SiS_Pr->SiS_Ext525iData; break;
3601 case 6: TVPtr = SiS_Pr->SiS_Ext525pData; break;
3602 case 7: TVPtr = SiS_Pr->SiS_Ext750pData; break;
3603 case 8: TVPtr = SiS_Pr->SiS_StPALData; break;
3604 case 9: TVPtr = SiS_Pr->SiS_StNTSCData; break;
3605 case 10: TVPtr = SiS_Pr->SiS_St525iData; break;
3606 case 11: TVPtr = SiS_Pr->SiS_St525pData; break;
3607 case 12: TVPtr = SiS_Pr->SiS_St750pData; break;
3608 case 13: TVPtr = SiS_Pr->SiS_St1HiTVData; break;
3609 case 14: TVPtr = SiS_Pr->SiS_St2HiTVData; break;
3610 default: TVPtr = SiS_Pr->SiS_StPALData; break;
3613 SiS_Pr->SiS_RVBHCMAX = (TVPtr+ResIndex)->RVBHCMAX;
3614 SiS_Pr->SiS_RVBHCFACT = (TVPtr+ResIndex)->RVBHCFACT;
3615 SiS_Pr->SiS_VGAHT = (TVPtr+ResIndex)->VGAHT;
3616 SiS_Pr->SiS_VGAVT = (TVPtr+ResIndex)->VGAVT;
3617 SiS_Pr->SiS_HDE = (TVPtr+ResIndex)->TVHDE;
3618 SiS_Pr->SiS_VDE = (TVPtr+ResIndex)->TVVDE;
3619 SiS_Pr->SiS_RVBHRS2 = (TVPtr+ResIndex)->RVBHRS2 & 0x0fff;
3621 SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->HALFRVBHRS;
3622 if(SiS_Pr->SiS_RVBHRS2) {
3623 SiS_Pr->SiS_RVBHRS2 = ((SiS_Pr->SiS_RVBHRS2 + 3) >> 1) - 3;
3625 if((TVPtr+ResIndex)->RVBHRS2 & 0x8000) SiS_Pr->SiS_RVBHRS2 -= tempax;
3626 else SiS_Pr->SiS_RVBHRS2 += tempax;
3629 SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->RVBHRS;
3631 SiS_Pr->SiS_NewFlickerMode = ((TVPtr+ResIndex)->FlickerMode) << 7;
3633 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
3639 SiS_Pr->SiS_NewFlickerMode = 0x40;
3642 if(SiS_Pr->SiS_VGAVDE == 350) SiS_Pr->SiS_TVMode |= TVSetTVSimuMode;
3644 SiS_Pr->SiS_HT = ExtHiTVHT;
3645 SiS_Pr->SiS_VT = ExtHiTVVT;
3646 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
3647 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
3648 SiS_Pr->SiS_HT = StHiTVHT;
3649 SiS_Pr->SiS_VT = StHiTVVT;
3653 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
3655 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
3656 SiS_Pr->SiS_HT = 1650;
3657 SiS_Pr->SiS_VT = 750;
3658 } else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
3659 SiS_Pr->SiS_HT = NTSCHT;
3660 if(SiS_Pr->SiS_TVMode & TVSet525p1024) SiS_Pr->SiS_HT = NTSC2HT;
3661 SiS_Pr->SiS_VT = NTSCVT;
3663 SiS_Pr->SiS_HT = NTSCHT;
3664 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) SiS_Pr->SiS_HT = NTSC2HT;
3665 SiS_Pr->SiS_VT = NTSCVT;
3670 SiS_Pr->SiS_RY1COE = (TVPtr+ResIndex)->RY1COE;
3671 SiS_Pr->SiS_RY2COE = (TVPtr+ResIndex)->RY2COE;
3672 SiS_Pr->SiS_RY3COE = (TVPtr+ResIndex)->RY3COE;
3673 SiS_Pr->SiS_RY4COE = (TVPtr+ResIndex)->RY4COE;
3676 SiS_Pr->SiS_RY1COE = 0x00;
3677 SiS_Pr->SiS_RY2COE = 0xf4;
3678 SiS_Pr->SiS_RY3COE = 0x10;
3679 SiS_Pr->SiS_RY4COE = 0x38;
3682 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
3683 SiS_Pr->SiS_HT = NTSCHT;
3684 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) SiS_Pr->SiS_HT = NTSC2HT;
3685 SiS_Pr->SiS_VT = NTSCVT;
3687 SiS_Pr->SiS_HT = PALHT;
3688 SiS_Pr->SiS_VT = PALVT;
3693 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3695 SiS_Pr->SiS_RVBHCMAX = 1;
3696 SiS_Pr->SiS_RVBHCFACT = 1;
3698 if(SiS_Pr->UseCustomMode) {
3700 SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
3701 SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
3703 tempax = SiS_Pr->CHTotal;
3705 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3706 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3712 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
3714 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT;
3715 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT;
3716 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3717 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3720 } else if( (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) && (romptr) && (ROMAddr) ) {
3723 SiS_Pr->SiS_RVBHCMAX = ROMAddr[romptr];
3724 SiS_Pr->SiS_RVBHCFACT = ROMAddr[romptr+1];
3725 SiS_Pr->SiS_VGAHT = ROMAddr[romptr+2] | ((ROMAddr[romptr+3] & 0x0f) << 8);
3726 SiS_Pr->SiS_VGAVT = (ROMAddr[romptr+4] << 4) | ((ROMAddr[romptr+3] & 0xf0) >> 4);
3727 SiS_Pr->SiS_HT = ROMAddr[romptr+5] | ((ROMAddr[romptr+6] & 0x0f) << 8);
3728 SiS_Pr->SiS_VT = (ROMAddr[romptr+7] << 4) | ((ROMAddr[romptr+6] & 0xf0) >> 4);
3729 SiS_Pr->SiS_RVBHRS2 = ROMAddr[romptr+8] | ((ROMAddr[romptr+9] & 0x0f) << 8);
3730 if((SiS_Pr->SiS_RVBHRS2) && (modeflag & HalfDCLK)) {
3731 SiS_Pr->SiS_RVBHRS2 = ((SiS_Pr->SiS_RVBHRS2 + 3) >> 1) - 3;
3733 if(ROMAddr[romptr+9] & 0x80) SiS_Pr->SiS_RVBHRS2 -= tempax;
3734 else SiS_Pr->SiS_RVBHRS2 += tempax;
3736 if(SiS_Pr->SiS_VGAHT) gotit = true;
3738 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
3739 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
3740 SiS_Pr->SiS_RVBHCMAX = 1;
3741 SiS_Pr->SiS_RVBHCFACT = 1;
3742 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT;
3743 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT;
3744 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3745 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3746 SiS_Pr->SiS_RVBHRS2 = 0;
3755 SiS_GetCRT2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
3759 case Panel_1024x768 : LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break;
3760 case Panel_1024x768 + 32: LCDPtr = SiS_Pr->SiS_St2LCD1024x768Data; break;
3762 case Panel_1280x720 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x720Data; break;
3763 case Panel_1280x768_2 : LCDPtr = SiS_Pr->SiS_ExtLCD1280x768_2Data; break;
3764 case Panel_1280x768_2+ 32: LCDPtr = SiS_Pr->SiS_StLCD1280x768_2Data; break;
3766 case Panel_1280x800 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x800Data; break;
3768 case Panel_1280x800_2+ 32: LCDPtr = SiS_Pr->SiS_LCD1280x800_2Data; break;
3770 case Panel_1280x854 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x854Data; break;
3772 case Panel_1280x960 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x960Data; break;
3773 case Panel_1280x1024 : LCDPtr = SiS_Pr->SiS_ExtLCD1280x1024Data; break;
3774 case Panel_1280x1024 + 32: LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break;
3775 case Panel_1400x1050 : LCDPtr = SiS_Pr->SiS_ExtLCD1400x1050Data; break;
3776 case Panel_1400x1050 + 32: LCDPtr = SiS_Pr->SiS_StLCD1400x1050Data; break;
3777 case Panel_1600x1200 : LCDPtr = SiS_Pr->SiS_ExtLCD1600x1200Data; break;
3778 case Panel_1600x1200 + 32: LCDPtr = SiS_Pr->SiS_StLCD1600x1200Data; break;
3780 case Panel_1680x1050 + 32: LCDPtr = SiS_Pr->SiS_LCD1680x1050Data; break;
3781 case 100 : LCDPtr = SiS_Pr->SiS_NoScaleData; break;
3784 case 201 : LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break;
3786 default : LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break;
3789 SiS_Pr->SiS_RVBHCMAX = (LCDPtr+ResIndex)->RVBHCMAX;
3790 SiS_Pr->SiS_RVBHCFACT = (LCDPtr+ResIndex)->RVBHCFACT;
3791 SiS_Pr->SiS_VGAHT = (LCDPtr+ResIndex)->VGAHT;
3792 SiS_Pr->SiS_VGAVT = (LCDPtr+ResIndex)->VGAVT;
3793 SiS_Pr->SiS_HT = (LCDPtr+ResIndex)->LCDHT;
3794 SiS_Pr->SiS_VT = (LCDPtr+ResIndex)->LCDVT;
3798 tempax = SiS_Pr->PanelXRes;
3799 tempbx = SiS_Pr->PanelYRes;
3801 switch(SiS_Pr->SiS_LCDResInfo) {
3803 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
3804 if(SiS_Pr->ChipType < SIS_315H) {
3805 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
3806 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
3809 if (SiS_Pr->SiS_VGAVDE == 357) tempbx = 527;
3810 else if(SiS_Pr->SiS_VGAVDE == 420) tempbx = 620;
3811 else if(SiS_Pr->SiS_VGAVDE == 525) tempbx = 775;
3812 else if(SiS_Pr->SiS_VGAVDE == 600) tempbx = 775;
3813 else if(SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
3814 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
3818 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 700;
3819 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 800;
3820 else if(SiS_Pr->SiS_VGAVDE == 1024) tempbx = 960;
3823 if (SiS_Pr->SiS_VGAVDE == 360) tempbx = 768;
3824 else if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 800;
3825 else if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 864;
3828 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
3829 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 875;
3830 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 1000;
3835 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3836 tempax = SiS_Pr->SiS_VGAHDE;
3837 tempbx = SiS_Pr->SiS_VGAVDE;
3840 SiS_Pr->SiS_HDE = tempax;
3841 SiS_Pr->SiS_VDE = tempbx;
3847 SiS_GetCRT2Data(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3851 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3853 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
3854 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3856 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
3858 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3860 SiS_GetCRT2Data301(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3866 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3876 SiS_GetLVDSDesPtr(struct SiS_Private *SiS_Pr)
3881 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3883 if(SiS_Pr->ChipType < SIS_315H) {
3884 if(SiS_Pr->SiS_LCDTypeInfo == 4) {
3885 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
3886 PanelDesPtr = SiS_Pr->SiS_PanelType04_1a;
3887 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3888 PanelDesPtr = SiS_Pr->SiS_PanelType04_2a;
3890 } else if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
3891 PanelDesPtr = SiS_Pr->SiS_PanelType04_1b;
3892 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3893 PanelDesPtr = SiS_Pr->SiS_PanelType04_2b;
3904 SiS_GetLVDSDesData(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3910 SiS_Pr->SiS_LCDHDES = 0;
3911 SiS_Pr->SiS_LCDVDES = 0;
3914 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3917 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
3918 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
3919 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3920 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3927 if(SiS_Pr->ChipType < SIS_315H) {
3928 if(SiS_Pr->SiS_LCDResInfo == Panel_640x480 && SiS_Pr->SiS_LCDTypeInfo == 3) {
3929 SiS_Pr->SiS_LCDHDES = 8;
3930 if (SiS_Pr->SiS_VGAVDE >= 480) SiS_Pr->SiS_LCDVDES = 512;
3931 else if(SiS_Pr->SiS_VGAVDE >= 400) SiS_Pr->SiS_LCDVDES = 436;
3932 else if(SiS_Pr->SiS_VGAVDE >= 350) SiS_Pr->SiS_LCDVDES = 440;
3939 if( (SiS_Pr->UseCustomMode) ||
3940 (SiS_Pr->SiS_LCDResInfo == Panel_Custom) ||
3941 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
3942 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ||
3943 (SiS_Pr->SiS_LCDInfo & LCDPass11) ) {
3947 if(ModeNo <= 0x13) ResIndex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
3948 else ResIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
3950 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3953 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3955 if(SiS_Pr->SiS_VGAHDE != SiS_Pr->PanelXRes) {
3956 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE) / 2);
3958 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->PanelYRes) {
3959 SiS_Pr->SiS_LCDVDES = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE) / 2);
3962 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3963 switch(SiS_Pr->SiS_CustomT) {
3967 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
3968 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3972 switch(SiS_Pr->SiS_LCDResInfo) {
3974 if(SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) {
3975 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3981 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3989 if((SiS_Pr->SiS_IF_DEF_CH70xx != 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
3991 if((SiS_Pr->SiS_TVMode & TVSetPAL) && (!(SiS_Pr->SiS_TVMode & TVSetPALM))) {
3992 if(ResIndex <= 3) SiS_Pr->SiS_LCDHDES = 256;
3995 } else if((PanelDesPtr = SiS_GetLVDSDesPtr(SiS_Pr))) {
3997 SiS_Pr->SiS_LCDHDES = (PanelDesPtr+ResIndex)->LCDHDES;
3998 SiS_Pr->SiS_LCDVDES = (PanelDesPtr+ResIndex)->LCDVDES;
4000 } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
4002 if(SiS_Pr->SiS_VGAHDE != SiS_Pr->PanelXRes) {
4003 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE) / 2);
4005 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->PanelYRes) {
4006 SiS_Pr->SiS_LCDVDES = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE) / 2);
4008 if(SiS_Pr->ChipType < SIS_315H) {
4009 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
4011 switch(SiS_Pr->SiS_LCDResInfo) {
4015 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT;
4018 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
4026 if(SiS_Pr->ChipType < SIS_315H) {
4028 switch(SiS_Pr->SiS_LCDResInfo) {
4030 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
4031 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
4033 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT + 3;
4034 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT;
4035 if(SiS_Pr->SiS_VGAVDE == 400) SiS_Pr->SiS_LCDVDES -= 2;
4036 else SiS_Pr->SiS_LCDVDES -= 4;
4040 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
4041 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
4043 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT - 1;
4044 if(SiS_Pr->SiS_VGAVDE <= 400) SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 8;
4045 if(SiS_Pr->SiS_VGAVDE <= 350) SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 12;
4050 if( (SiS_Pr->SiS_VGAHDE == SiS_Pr->PanelXRes) &&
4051 (SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) ) {
4052 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
4054 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT - 1;
4059 switch(SiS_Pr->SiS_LCDTypeInfo) {
4061 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_LCDVDES = 0;
4064 SiS_Pr->SiS_LCDHDES = 8;
4065 if (SiS_Pr->SiS_VGAVDE >= 480) SiS_Pr->SiS_LCDVDES = 512;
4066 else if(SiS_Pr->SiS_VGAVDE >= 400) SiS_Pr->SiS_LCDVDES = 436;
4067 else if(SiS_Pr->SiS_VGAVDE >= 350) SiS_Pr->SiS_LCDVDES = 440;
4073 switch(SiS_Pr->SiS_LCDResInfo) {
4076 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
4077 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
4083 SiS_Pr->SiS_LCDVDES = 524;
4090 if((ModeNo <= 0x13) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
4091 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
4092 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
4093 if(!(modeflag & HalfDCLK)) SiS_Pr->SiS_LCDHDES = 632;
4094 } else if(!(SiS_Pr->SiS_SetFlag & SetDOSMode)) {
4095 if(SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) {
4096 if(SiS_Pr->SiS_LCDResInfo >= Panel_1024x768) {
4097 if(SiS_Pr->ChipType < SIS_315H) {
4098 if(!(modeflag & HalfDCLK)) SiS_Pr->SiS_LCDHDES = 320;
4101 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) SiS_Pr->SiS_LCDHDES = 480;
4102 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) SiS_Pr->SiS_LCDHDES = 804;
4103 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) SiS_Pr->SiS_LCDHDES = 704;
4105 SiS_Pr->SiS_LCDHDES = 320;
4106 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) SiS_Pr->SiS_LCDHDES = 632;
4107 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) SiS_Pr->SiS_LCDHDES = 542;
4124 SiS_HandlePWD(struct SiS_Private *SiS_Pr)
4128 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
4129 unsigned short romptr = GetLCDStructPtr661_2(SiS_Pr);
4130 unsigned char drivermode = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & 0x40;
4133 if( (SiS_Pr->SiS_VBType & VB_SISPWD) &&
4135 (SiS_Pr->SiS_PWDOffset) ) {
4136 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2b,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 0]);
4137 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2c,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 1]);
4138 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2d,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 2]);
4139 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2e,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 3]);
4140 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2f,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 4]);
4146 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x27,0x7f,temp);
4158 SiS_DisableBridge(struct SiS_Private *SiS_Pr)
4165 if(SiS_Pr->SiS_VBType & VB_SISVB) {
4167 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* ===== For 30xB/C/LV ===== */
4169 if(SiS_Pr->ChipType < SIS_315H) {
4173 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4174 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4175 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFE);
4177 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4179 SiS_PanelDelay(SiS_Pr, 3);
4181 if(SiS_Is301B(SiS_Pr)) {
4182 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,0x3f);
4183 SiS_ShortDelay(SiS_Pr,1);
4185 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF);
4186 SiS_DisplayOff(SiS_Pr);
4187 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4188 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4189 SiS_UnLockCRT2(SiS_Pr);
4190 if(!(SiS_Pr->SiS_VBType & VB_SISLVDS)) {
4191 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
4192 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
4194 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
4195 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
4196 SiS_PanelDelay(SiS_Pr, 2);
4197 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4198 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFD);
4200 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4211 bool custom1 = (SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
4212 (SiS_Pr->SiS_CustomT == CUT_CLEVO1400);
4214 modenum = SiS_GetReg(SiS_Pr->SiS_P3d4,0x34) & 0x7f;
4216 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4219 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4220 if(SiS_Pr->SiS_CustomT != CUT_CLEVO1400) {
4221 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
4226 didpwd = SiS_HandlePWD(SiS_Pr);
4229 (SiS_IsVAMode(SiS_Pr)) ||
4230 (!(SiS_IsDualEdge(SiS_Pr))) ) {
4232 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xfe);
4233 if(custom1) SiS_PanelDelay(SiS_Pr, 3);
4235 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xfc);
4240 SiS_DDC2Delay(SiS_Pr,0xff00);
4241 SiS_DDC2Delay(SiS_Pr,0xe000);
4242 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0x00);
4243 pushax = SiS_GetReg(SiS_Pr->SiS_P3c4,0x06);
4245 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
4247 SiS_PanelDelay(SiS_Pr, 3);
4252 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4253 /* if(SiS_Pr->ChipType < SIS_340) {*/
4255 if(SiS_IsVAMode(SiS_Pr)) tempah = 0xf7;
4256 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
4260 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4261 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,~0x10);
4265 if(SiS_IsDualEdge(SiS_Pr)) {
4267 if(!(SiS_IsVAMode(SiS_Pr))) tempah = 0xbf;
4269 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,tempah);
4271 if((SiS_IsVAMode(SiS_Pr)) ||
4272 ((SiS_Pr->SiS_VBType & VB_SISLVDS) && (modenum <= 0x13))) {
4274 SiS_DisplayOff(SiS_Pr);
4275 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4276 SiS_PanelDelay(SiS_Pr, 2);
4278 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4279 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1E,0xDF);
4283 if((!(SiS_IsVAMode(SiS_Pr))) ||
4284 ((SiS_Pr->SiS_VBType & VB_SISLVDS) && (modenum <= 0x13))) {
4286 if(!(SiS_IsDualEdge(SiS_Pr))) {
4287 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xdf);
4288 SiS_DisplayOff(SiS_Pr);
4290 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4292 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4293 SiS_PanelDelay(SiS_Pr, 2);
4296 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4297 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
4298 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
4299 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4300 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,temp);
4304 if(SiS_IsNotM650orLater(SiS_Pr)) {
4305 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4308 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4310 if( (!(SiS_IsVAMode(SiS_Pr))) &&
4311 (!(SiS_CRT2IsLCD(SiS_Pr))) &&
4312 (!(SiS_IsDualEdge(SiS_Pr))) ) {
4314 if(custom1) SiS_PanelDelay(SiS_Pr, 2);
4316 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFD);
4318 if(custom1) SiS_PanelDelay(SiS_Pr, 4);
4322 SiS_SetReg(SiS_Pr->SiS_P3c4,0x06,pushax);
4323 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4324 if(SiS_IsVAorLCD(SiS_Pr)) {
4325 SiS_PanelDelayLoop(SiS_Pr, 3, 20);
4338 if(SiS_Pr->ChipType < SIS_315H) {
4340 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4341 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4342 SiS_PanelDelay(SiS_Pr, 3);
4347 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF); /* disable VB */
4348 SiS_DisplayOff(SiS_Pr);
4350 if(SiS_Pr->ChipType >= SIS_315H) {
4351 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4354 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF); /* disable lock mode */
4356 if(SiS_Pr->ChipType >= SIS_315H) {
4357 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
4358 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
4359 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4360 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,temp);
4363 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF); /* disable CRT2 */
4364 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
4365 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
4366 SiS_PanelDelay(SiS_Pr, 2);
4367 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4376 if(SiS_Pr->ChipType < SIS_315H) {
4380 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
4381 SiS_SetCH700x(SiS_Pr,0x0E,0x09);
4384 if(SiS_Pr->ChipType == SIS_730) {
4385 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x08)) {
4386 SiS_WaitVBRetrace(SiS_Pr);
4388 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4389 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4390 SiS_PanelDelay(SiS_Pr, 3);
4393 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x08)) {
4394 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4395 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4396 SiS_WaitVBRetrace(SiS_Pr);
4397 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x06) & 0x1c)) {
4398 SiS_DisplayOff(SiS_Pr);
4400 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4401 SiS_PanelDelay(SiS_Pr, 3);
4407 SiS_DisplayOff(SiS_Pr);
4409 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4411 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4412 SiS_UnLockCRT2(SiS_Pr);
4413 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
4414 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
4416 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
4417 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
4418 SiS_PanelDelay(SiS_Pr, 2);
4419 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4428 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4429 /*if(SiS_Pr->ChipType < SIS_340) { */ /* XGI needs this */
4430 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,~0x18);
4434 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
4436 if(SiS_Pr->ChipType == SIS_740) {
4437 temp = SiS_GetCH701x(SiS_Pr,0x61);
4439 SiS_SetCH701x(SiS_Pr,0x76,0xac);
4440 SiS_SetCH701x(SiS_Pr,0x66,0x00);
4443 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4444 (SiS_IsTVOrYPbPrOrScart(SiS_Pr)) ) {
4445 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
4449 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4450 (SiS_IsVAMode(SiS_Pr)) ) {
4451 SiS_Chrontel701xBLOff(SiS_Pr);
4452 SiS_Chrontel701xOff(SiS_Pr);
4455 if(SiS_Pr->ChipType != SIS_740) {
4456 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4457 (SiS_IsTVOrYPbPrOrScart(SiS_Pr)) ) {
4458 SiS_SetCH701x(SiS_Pr,0x49,0x01);
4464 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4465 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4466 SiS_PanelDelay(SiS_Pr, 3);
4469 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4470 (!(SiS_IsDualEdge(SiS_Pr))) ||
4471 (!(SiS_IsTVOrYPbPrOrScart(SiS_Pr))) ) {
4472 SiS_DisplayOff(SiS_Pr);
4475 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4476 (!(SiS_IsDualEdge(SiS_Pr))) ||
4477 (!(SiS_IsVAMode(SiS_Pr))) ) {
4478 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4481 if(SiS_Pr->ChipType == SIS_740) {
4482 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4485 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4487 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4488 (!(SiS_IsDualEdge(SiS_Pr))) ||
4489 (!(SiS_IsVAMode(SiS_Pr))) ) {
4490 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4493 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4494 if(SiS_CRT2IsLCD(SiS_Pr)) {
4495 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4496 if(SiS_Pr->ChipType == SIS_550) {
4497 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xbf);
4498 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xef);
4502 if(SiS_Pr->ChipType == SIS_740) {
4503 if(SiS_IsLCDOrLCDA(SiS_Pr)) {
4504 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4506 } else if(SiS_IsVAMode(SiS_Pr)) {
4507 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4511 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
4512 if(SiS_IsDualEdge(SiS_Pr)) {
4513 /* SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xff); */
4515 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
4519 SiS_UnLockCRT2(SiS_Pr);
4521 if(SiS_Pr->ChipType == SIS_550) {
4522 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80); /* DirectDVD PAL?*/
4523 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40); /* VB clock / 4 ? */
4524 } else if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4525 (!(SiS_IsDualEdge(SiS_Pr))) ||
4526 (!(SiS_IsVAMode(SiS_Pr))) ) {
4527 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
4530 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4531 if(SiS_CRT2IsLCD(SiS_Pr)) {
4532 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4533 SiS_PanelDelay(SiS_Pr, 2);
4534 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4557 SiS_EnableBridge(struct SiS_Private *SiS_Pr)
4565 if(SiS_Pr->SiS_VBType & VB_SISVB) {
4567 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* ====== For 301B et al ====== */
4569 if(SiS_Pr->ChipType < SIS_315H) {
4573 if(SiS_CRT2IsLCD(SiS_Pr)) {
4574 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4575 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
4576 } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
4577 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4579 if(SiS_Pr->SiS_VBType & (VB_SISLVDS | VB_NoLCD)) {
4580 if(!(SiS_CR36BIOSWord23d(SiS_Pr))) {
4581 SiS_PanelDelay(SiS_Pr, 0);
4586 if((SiS_Pr->SiS_VBType & VB_NoLCD) &&
4587 (SiS_CRT2IsLCD(SiS_Pr))) {
4589 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* Enable CRT2 */
4590 SiS_DisplayOn(SiS_Pr);
4591 SiS_UnLockCRT2(SiS_Pr);
4592 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
4593 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4594 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
4596 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
4598 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4599 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4600 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4601 SiS_PanelDelay(SiS_Pr, 1);
4603 SiS_WaitVBRetrace(SiS_Pr);
4604 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4610 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF; /* lock mode */
4611 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4612 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4615 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4616 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4617 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20); /* enable VB processor */
4618 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
4619 SiS_DisplayOn(SiS_Pr);
4620 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4621 if(SiS_CRT2IsLCD(SiS_Pr)) {
4622 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4623 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4624 SiS_PanelDelay(SiS_Pr, 1);
4626 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
4646 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4647 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,0xef);
4649 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4650 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
4655 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4656 /*if(SiS_Pr->ChipType < SIS_340) { */
4658 if(SiS_LCDAEnabled(SiS_Pr)) {
4659 if(SiS_TVEnabled(SiS_Pr)) tempah = 0x18;
4662 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4c,tempah);
4666 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4668 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0x00);
4669 SiS_DisplayOff(SiS_Pr);
4670 pushax = SiS_GetReg(SiS_Pr->SiS_P3c4,0x06);
4672 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
4675 didpwd = SiS_HandlePWD(SiS_Pr);
4677 if(SiS_IsVAorLCD(SiS_Pr)) {
4679 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
4680 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4681 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
4682 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4683 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4684 SiS_GenericDelay(SiS_Pr, 17664);
4688 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4689 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4690 SiS_GenericDelay(SiS_Pr, 17664);
4695 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & 0x40)) {
4696 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4702 if(!(SiS_IsVAMode(SiS_Pr))) {
4704 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
4705 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4706 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4708 if(!(SiS_LCDAEnabled(SiS_Pr))) temp |= 0x20;
4711 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4713 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* enable CRT2 */
4715 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4716 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4718 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4719 SiS_PanelDelay(SiS_Pr, 2);
4724 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x20);
4728 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);
4729 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4731 if(SiS_Pr->SiS_VBType & VB_SISPOWER) {
4732 if( (SiS_LCDAEnabled(SiS_Pr)) ||
4733 (SiS_CRT2IsLCD(SiS_Pr)) ) {
4735 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x2a,0x7f);
4737 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x7f);
4742 if(SiS_IsDualEdge(SiS_Pr)) {
4744 if(!(SiS_IsVAMode(SiS_Pr))) tempah = 0x40;
4746 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,tempah);
4748 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4750 SiS_PanelDelay(SiS_Pr, 2);
4752 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1f,0x10);
4753 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4755 if(SiS_Pr->SiS_CustomT != CUT_CLEVO1400) {
4757 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4758 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
4759 SiS_GenericDelay(SiS_Pr, 2048);
4762 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
4764 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4766 cr36 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
4768 if(SiS_Pr->SiS_ROMNew) {
4769 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
4770 unsigned short romptr = GetLCDStructPtr661_2(SiS_Pr);
4772 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20); /* Reset */
4773 SiS_Pr->EMI_30 = 0;
4774 SiS_Pr->EMI_31 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 0];
4775 SiS_Pr->EMI_32 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 1];
4776 SiS_Pr->EMI_33 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 2];
4777 if(ROMAddr[romptr + 1] & 0x10) SiS_Pr->EMI_30 = 0x40;
4779 SiS_Pr->HaveEMI = SiS_Pr->HaveEMILCD = SiS_Pr->OverruleEMI = true;
4794 if(SiS_Pr->HaveEMI) {
4795 r30 = SiS_Pr->EMI_30; r31 = SiS_Pr->EMI_31;
4796 r32 = SiS_Pr->EMI_32; r33 = SiS_Pr->EMI_33;
4808 if((!SiS_Pr->HaveEMI) || (!SiS_Pr->HaveEMILCD)) {
4812 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) r30 &= ~0x40;
4813 if(!SiS_Pr->HaveEMI) {
4821 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) r30 |= 0x40;
4822 if(!SiS_Pr->HaveEMI) {
4824 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
4831 if(!SiS_Pr->HaveEMI) {
4833 if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
4840 if(!SiS_Pr->HaveEMI) {
4847 if(!SiS_Pr->OverruleEMI) {
4849 if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
4856 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
4863 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
4874 if(!(SiS_Pr->OverruleEMI && (!r30) && (!r31) && (!r32) && (!r33))) {
4875 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20); /* Reset */
4876 SiS_GenericDelay(SiS_Pr, 2048);
4878 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x31,r31);
4879 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x32,r32);
4880 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x33,r33);
4883 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
4886 if( (SiS_LCDAEnabled(SiS_Pr)) ||
4887 (SiS_CRT2IsLCD(SiS_Pr)) ) {
4889 /*SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x2a,0x80);*/
4890 SiS_PanelDelayLoop(SiS_Pr, 3, 5);
4892 SiS_PanelDelayLoop(SiS_Pr, 3, 5);
4895 SiS_WaitVBRetrace(SiS_Pr);
4896 SiS_WaitVBRetrace(SiS_Pr);
4897 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
4898 SiS_GenericDelay(SiS_Pr, 1280);
4900 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40); /* Enable */
4901 /*SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x2a,0x7f);*/
4908 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4909 if(SiS_IsVAorLCD(SiS_Pr)) {
4910 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4912 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4914 SiS_WaitVBRetrace(SiS_Pr);
4915 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4916 SiS_GenericDelay(SiS_Pr, 2048);
4917 SiS_WaitVBRetrace(SiS_Pr);
4920 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
4922 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x03);
4927 SiS_SetReg(SiS_Pr->SiS_P3c4,0x06,pushax);
4928 SiS_DisplayOn(SiS_Pr);
4929 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0xff);
4933 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4934 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4943 if(SiS_Pr->ChipType < SIS_315H) {
4944 if(SiS_CRT2IsLCD(SiS_Pr)) {
4945 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4946 SiS_PanelDelay(SiS_Pr, 0);
4950 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF; /* lock mode */
4951 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4952 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4955 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4957 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* enable CRT2 */
4959 if(SiS_Pr->ChipType >= SIS_315H) {
4960 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
4962 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80); /* BVBDOENABLE=1 */
4966 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20); /* enable VB processor */
4968 SiS_VBLongWait(SiS_Pr);
4969 SiS_DisplayOn(SiS_Pr);
4970 if(SiS_Pr->ChipType >= SIS_315H) {
4971 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4973 SiS_VBLongWait(SiS_Pr);
4975 if(SiS_Pr->ChipType < SIS_315H) {
4976 if(SiS_CRT2IsLCD(SiS_Pr)) {
4977 SiS_PanelDelay(SiS_Pr, 1);
4978 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4986 if(SiS_Pr->ChipType < SIS_315H) {
4990 if(SiS_CRT2IsLCD(SiS_Pr)) {
4991 if(SiS_Pr->ChipType == SIS_730) {
4992 SiS_PanelDelay(SiS_Pr, 1);
4993 SiS_PanelDelay(SiS_Pr, 1);
4994 SiS_PanelDelay(SiS_Pr, 1);
4996 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4997 if(!(SiS_CR36BIOSWord23d(SiS_Pr))) {
4998 SiS_PanelDelay(SiS_Pr, 0);
5002 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
5003 SiS_DisplayOn(SiS_Pr);
5004 SiS_UnLockCRT2(SiS_Pr);
5005 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
5006 if(SiS_BridgeInSlavemode(SiS_Pr)) {
5007 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
5009 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
5012 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
5013 if(!(SiS_CRT2IsLCD(SiS_Pr))) {
5014 SiS_WaitVBRetrace(SiS_Pr);
5015 SiS_SetCH700x(SiS_Pr,0x0E,0x0B);
5019 if(SiS_CRT2IsLCD(SiS_Pr)) {
5020 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
5021 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
5022 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
5023 SiS_PanelDelay(SiS_Pr, 1);
5024 SiS_PanelDelay(SiS_Pr, 1);
5026 SiS_WaitVBRetrace(SiS_Pr);
5027 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
5038 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
5039 /*if(SiS_Pr->ChipType < SIS_340) {*/ /* XGI needs this */
5040 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,0x18);
5044 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
5045 if(SiS_CRT2IsLCD(SiS_Pr)) {
5046 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
5047 SiS_PanelDelay(SiS_Pr, 0);
5051 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
5052 SiS_UnLockCRT2(SiS_Pr);
5054 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
5056 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
5057 temp = SiS_GetCH701x(SiS_Pr,0x66);
5059 SiS_Chrontel701xBLOff(SiS_Pr);
5062 if(SiS_Pr->ChipType != SIS_550) {
5063 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
5066 if(SiS_Pr->ChipType == SIS_740) {
5067 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
5068 if(SiS_IsLCDOrLCDA(SiS_Pr)) {
5069 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
5074 temp1 = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
5076 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
5079 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
5081 SiS_Chrontel701xBLOn(SiS_Pr);
5085 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
5086 if(SiS_CRT2IsLCD(SiS_Pr)) {
5087 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
5088 if(SiS_Pr->ChipType == SIS_550) {
5089 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x40);
5090 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x10);
5093 } else if(SiS_IsVAMode(SiS_Pr)) {
5094 if(SiS_Pr->ChipType != SIS_740) {
5095 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
5099 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
5100 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
5103 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
5104 if(SiS_IsTVOrYPbPrOrScart(SiS_Pr)) {
5105 SiS_Chrontel701xOn(SiS_Pr);
5107 if( (SiS_IsVAMode(SiS_Pr)) ||
5108 (SiS_IsLCDOrLCDA(SiS_Pr)) ) {
5109 SiS_ChrontelDoSomething1(SiS_Pr);
5113 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
5114 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
5115 if( (SiS_IsVAMode(SiS_Pr)) ||
5116 (SiS_IsLCDOrLCDA(SiS_Pr)) ) {
5117 SiS_Chrontel701xBLOn(SiS_Pr);
5118 SiS_ChrontelInitTVVSync(SiS_Pr);
5121 } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
5122 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
5123 if(SiS_CRT2IsLCD(SiS_Pr)) {
5124 SiS_PanelDelay(SiS_Pr, 1);
5125 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
5144 SiS_SetCRT2Offset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
5150 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) return;
5152 offset = SiS_GetOffset(SiS_Pr,ModeNo,ModeIdIndex,RRTI);
5154 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x07,(offset & 0xFF));
5155 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x09,(offset >> 8));
5159 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x03,temp);
5164 SiS_SetCRT2Sync(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short RefreshRateTableIndex)
5170 if(SiS_Pr->UseCustomMode) {
5171 infoflag = SiS_Pr->CInfoFlag;
5173 infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
5176 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* LVDS */
5178 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
5180 } else if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_LCDInfo & LCDSync)) {
5181 tempah = SiS_Pr->SiS_LCDInfo;
5185 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
5186 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5187 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
5188 (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
5191 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
5192 (SiS_Pr->SiS_IF_DEF_DSTN) ||
5193 (SiS_Pr->SiS_IF_DEF_TRUMPION) ||
5194 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
5195 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
5198 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
5199 (SiS_Pr->SiS_IF_DEF_DSTN) ) {
5203 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
5204 if(SiS_Pr->ChipType >= SIS_315H) {
5207 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xE7,tempah);
5210 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,0xe0);
5213 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
5216 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
5218 if(SiS_Pr->ChipType < SIS_315H) {
5222 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* 630 - 301B(-DH) */
5226 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5227 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
5228 tempah = SiS_Pr->SiS_LCDInfo;
5234 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
5236 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
5237 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
5238 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
5244 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
5245 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
5255 if(SiS_Pr->SiS_VBType & VB_SISLVDS) { /* 315 - LVDS */
5258 if((SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) &&
5259 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
5261 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
5262 tempbl = ((SiS_Pr->SiS_LCDInfo & 0xc0) >> 6);
5264 } else if((SiS_Pr->SiS_CustomT == CUT_CLEVO1400) &&
5265 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050)) {
5269 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);
5272 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempbl |= 0x04;
5276 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
5277 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) tempah |= 0xc0;
5278 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
5279 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
5280 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5281 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
5288 if(!SiS_Pr->UseCustomMode) {
5290 if((SiS_Pr->SiS_VBType & VB_SIS30xC) && (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
5292 tempah = SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02));
5295 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5296 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5297 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
5298 tempah = SiS_Pr->SiS_LCDInfo;
5306 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
5307 if(SiS_Pr->SiS_VBType & VB_NoLCD) {
5309 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempah |= 0xc0;
5311 if((SiS_Pr->SiS_VBType & VB_SIS30xC) && (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
5314 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xe7,tempah);
5316 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
5317 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
5318 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5319 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
5333 SiS_SetCRT2FIFO_300(struct SiS_Private *SiS_Pr,unsigned short ModeNo)
5335 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
5344 SelectRate_backup = SiS_Pr->SiS_SelectCRT2Rate;
5346 if(!SiS_Pr->CRT1UsesCustomMode) {
5348 CRT1ModeNo = SiS_Pr->SiS_CRT1Mode; /* get CRT1 ModeNo */
5349 SiS_SearchModeID(SiS_Pr, &CRT1ModeNo, &modeidindex);
5350 SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
5351 SiS_Pr->SiS_SelectCRT2Rate = 0;
5352 refreshratetableindex = SiS_GetRatePtr(SiS_Pr, CRT1ModeNo, modeidindex);
5356 index = SiS_GetRefCRTVCLK(SiS_Pr, refreshratetableindex, SiS_Pr->SiS_UseWide);
5357 VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;
5360 colorth = SiS_GetColorDepth(SiS_Pr,CRT1ModeNo,modeidindex) >> 1;
5369 VCLK = SiS_Pr->CSRClock_CRT1;
5372 colorth = colortharray[((SiS_Pr->CModeFlag_CRT1 & ModeTypeMask) - 2)];
5378 if(SiS_Pr->ChipType == SIS_300) {
5379 index = SiS_GetReg(SiS_Pr->SiS_P3c4,0x3A);
5381 index = SiS_GetReg(SiS_Pr->SiS_P3c4,0x1A);
5384 MCLK = SiS_Pr->SiS_MCLKData_0[index].CLOCK;
5386 temp = ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) >> 6) & 0x03) << 1;
5396 if(SiS_Pr->ChipType == SIS_300) {
5398 SiS_GetFIFOThresholdIndex300(SiS_Pr, &tempbx, &tempcl);
5403 pci50 = sisfb_read_nbridge_pci_dword(SiS_Pr, 0x50);
5404 pciA0 = sisfb_read_nbridge_pci_dword(SiS_Pr, 0xa0);
5406 if(SiS_Pr->ChipType == SIS_730) {
5424 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) & 0x80) index += 12;
5428 data = SiS_GetLatencyFactor630(SiS_Pr, index) + 15;
5429 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) & 0x80)) data += 5;
5435 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
5436 SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
5438 if(!SiS_Pr->UseCustomMode) {
5441 SiS_SearchModeID(SiS_Pr, &CRT2ModeNo, &modeidindex);
5443 refreshratetableindex = SiS_GetRatePtr(SiS_Pr, CRT2ModeNo, modeidindex);
5446 index = SiS_GetVCLK2Ptr(SiS_Pr, CRT2ModeNo, modeidindex, refreshratetableindex);
5447 VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;
5449 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
5450 if(SiS_Pr->SiS_UseROM) {
5461 VCLK = SiS_Pr->CSRClock;
5466 colorth = SiS_GetColorDepth(SiS_Pr,CRT2ModeNo,modeidindex) >> 1;
5477 if(SiS_Pr->ChipType == SIS_300) {
5479 if((data <= 0x0f) || (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024))
5483 if(( (SiS_Pr->ChipType == SIS_630) ||
5484 (SiS_Pr->ChipType == SIS_730) ) &&
5485 (SiS_Pr->ChipRevision >= 0x30))
5488 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0xe0,temp);
5490 if((SiS_Pr->ChipType == SIS_630) &&
5491 (SiS_Pr->ChipRevision >= 0x30)) {
5494 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,0xe0,data);
5498 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
5499 SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
5508 SiS_SetCRT2FIFO_310(struct SiS_Private *SiS_Pr)
5510 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,0x3B);
5511 if( (SiS_Pr->ChipType == SIS_760) &&
5512 (SiS_Pr->SiS_SysFlags & SF_760LFB) &&
5513 (SiS_Pr->SiS_ModeType == Mode32Bpp) &&
5514 (SiS_Pr->SiS_VGAHDE >= 1280) &&
5515 (SiS_Pr->SiS_VGAVDE >= 1024) ) {
5516 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2f,0x03);
5517 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,0x3b);
5518 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4d,0xc0);
5519 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2f,0x01);
5520 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4d,0xc0);
5521 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x02,0x6e);
5523 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,~0x3f,0x04);
5530 SiS_GetVGAHT2(struct SiS_Private *SiS_Pr)
5534 tempbx = (SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) * SiS_Pr->SiS_RVBHCMAX;
5535 tempax = (SiS_Pr->SiS_VT - SiS_Pr->SiS_VDE) * SiS_Pr->SiS_RVBHCFACT;
5536 tempax = (tempax * SiS_Pr->SiS_HT) / tempbx;
5542 SiS_SetGroup1_301(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex,
5556 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
5557 } else if(SiS_Pr->UseCustomMode) {
5558 modeflag = SiS_Pr->CModeFlag;
5559 xres = SiS_Pr->CHDisplay;
5561 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
5562 xres = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].XRes;
5567 if(SiS_Pr->ChipType >= SIS_315H) {
5569 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x31,0x04);
5573 SiS_Pr->CHTotal = 8224; /* Max HT, 0x2020, results in 0x3ff in registers */
5575 SiS_Pr->CHDisplay = SiS_Pr->SiS_VGAHDE;
5576 if(modeflag & HalfDCLK) SiS_Pr->CHDisplay >>= 1;
5578 SiS_Pr->CHBlankStart = SiS_Pr->CHDisplay;
5579 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
5580 SiS_Pr->CHBlankStart += 16;
5583 SiS_Pr->CHBlankEnd = 32;
5584 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5585 if(xres == 1600) SiS_Pr->CHBlankEnd += 80;
5588 temp = SiS_Pr->SiS_VGAHT - 96;
5590 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
5591 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x04);
5592 temp |= ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x0b) & 0xc0) << 2);
5596 if(SiS_Pr->SiS_RVBHRS2) temp = SiS_Pr->SiS_RVBHRS2;
5598 SiS_Pr->CHSyncStart = temp;
5600 SiS_Pr->CHSyncEnd = 0xffe8; /* results in 0x2000 in registers */
5602 SiS_Pr->CVTotal = 2049; /* Max VT, 0x0801, results in 0x7ff in registers */
5604 VGAVDE = SiS_Pr->SiS_VGAVDE;
5612 SiS_Pr->CVDisplay = VGAVDE;
5614 SiS_Pr->CVBlankStart = SiS_Pr->CVDisplay;
5616 SiS_Pr->CVBlankEnd = 1;
5617 if(ModeNo == 0x3c) SiS_Pr->CVBlankEnd = 226;
5619 temp = (SiS_Pr->SiS_VGAVT - VGAVDE) >> 1;
5620 SiS_Pr->CVSyncStart = VGAVDE + temp;
5623 SiS_Pr->CVSyncEnd = SiS_Pr->CVSyncStart + temp;
5625 SiS_CalcCRRegisters(SiS_Pr, 0);
5626 SiS_Pr->CCRT1CRTC[16] &= ~0xE0;
5629 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[i]);
5632 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5635 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5638 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5641 temp = SiS_Pr->CCRT1CRTC[16] & 0xE0;
5642 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,CRTranslation[0x0E],0x1F,temp);
5644 temp = (SiS_Pr->CCRT1CRTC[16] & 0x01) << 5;
5646 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,CRTranslation[0x09],0x5F,temp);
5649 temp |= (SiS_GetReg(SiS_Pr->SiS_P3c4,0x01) & 0x01);
5651 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,temp); /* SR01: HalfDCLK[3], 8/9 div dotclock[0] */
5653 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0F,0x00); /* CR14: (text mode: underline location) */
5654 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x12,0x00); /* CR17: n/a */
5657 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
5658 temp = (SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) << 7;
5660 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1A,temp); /* SR0E, dither[7] */
5662 temp = SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02));
5663 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,temp); /* ? */
5671 SiS_SetGroup1_LVDS(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
5686 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
5687 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
5689 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
5691 } else if(SiS_Pr->UseCustomMode) {
5692 modeflag = SiS_Pr->CModeFlag;
5694 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
5695 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
5697 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
5702 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
5707 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
5711 if((SiS_Pr->ChipType >= SIS_315H) && (islvds) && (!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA))) {
5712 if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
5718 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
5720 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);
5723 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);
5724 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x03);
5725 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
5726 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);
5730 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);
5731 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x00);
5732 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
5733 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2D,0x0f);
5734 if(SiS_Pr->SiS_VBType & VB_SIS30xC) {
5735 if((SiS_Pr->SiS_LCDResInfo == Panel_1024x768) ||
5736 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
5737 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x20);
5747 tempax = SiS_Pr->SiS_LCDHDES;
5749 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5750 if(!SiS_Pr->SiS_IF_DEF_FSTN && !SiS_Pr->SiS_IF_DEF_DSTN) {
5751 if((SiS_Pr->SiS_LCDResInfo == Panel_640x480) &&
5752 (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode))) {
5760 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1A,temp); /* BPLHDESKEW[2:0] */
5762 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,temp); /* BPLHDESKEW[10:3] */
5764 tempbx = SiS_Pr->SiS_HDE;
5765 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5766 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5767 tempbx = SiS_Pr->PanelXRes;
5769 if((SiS_Pr->SiS_LCDResInfo == Panel_320x240_1) ||
5770 (SiS_Pr->SiS_LCDResInfo == Panel_320x240_2) ||
5771 (SiS_Pr->SiS_LCDResInfo == Panel_320x240_3)) {
5777 if(tempax >= SiS_Pr->SiS_HT) tempax -= SiS_Pr->SiS_HT;
5782 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,temp); /* BPLHDEE */
5784 tempcx = (SiS_Pr->SiS_HT - tempbx) >> 2;
5786 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5787 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5788 if(SiS_Pr->PanelHRS != 999) tempcx = SiS_Pr->PanelHRS;
5793 if(tempcx >= SiS_Pr->SiS_HT) tempcx -= SiS_Pr->SiS_HT;
5796 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5797 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5798 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5819 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,temp); /* BPLHRS */
5821 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5823 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5825 if(SiS_Pr->PanelHRE != 999) {
5826 temp = tempcx + SiS_Pr->PanelHRE;
5827 if(temp >= SiS_Pr->SiS_HT) temp -= SiS_Pr->SiS_HT;
5837 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,temp); /* BPLHRE */
5841 tempax = SiS_Pr->SiS_VGAVDE;
5842 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5843 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5844 tempax = SiS_Pr->PanelYRes;
5848 tempbx = SiS_Pr->SiS_LCDVDES + tempax;
5849 if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
5853 tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE;
5854 if(SiS_Pr->ChipType < SIS_315H) {
5855 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5856 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5857 tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->PanelYRes;
5864 if( (SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) &&
5865 (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
5866 (SiS_Pr->PanelVRS != 999) ) {
5867 tempcx = SiS_Pr->PanelVRS;
5872 if(SiS_Pr->ChipType < SIS_315H) tempbx++;
5876 if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
5879 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5880 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5884 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,temp); /* BPLVRS */
5889 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5890 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5891 if(SiS_Pr->PanelVRE != 999) tempcx = SiS_Pr->PanelVRE;
5897 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp); /* BPLVRE */
5900 if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
5901 if(SiS_Pr->SiS_HDE != 640) {
5902 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
5904 } else if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
5905 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) temp |= 0x40;
5907 if((SiS_Pr->ChipType >= SIS_315H) ||
5908 (SiS_Pr->ChipRevision >= 0x30)) {
5910 if((SiS_Pr->SiS_IF_DEF_CH70xx == 1) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
5911 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x03) temp |= 0x80;
5914 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
5915 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
5916 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x06) & 0x10) temp |= 0x80;
5918 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) temp |= 0x80;
5922 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,tempbx,temp);
5926 tempcx = SiS_Pr->SiS_LCDVDES; /* BPLVDES */
5928 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5929 switch(SiS_Pr->SiS_LCDResInfo) {
5931 tempbx = SiS_Pr->SiS_VGAVDE - 1;
5932 tempcx = SiS_Pr->SiS_VGAVDE;
5935 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5940 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5942 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
5948 if(SiS_Pr->ChipType < SIS_315H) {
5949 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5959 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1D,temp);
5960 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1C,tempbx);
5961 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1B,tempcx);
5965 if(SiS_Pr->ChipType < SIS_315H) {
5968 tempeax = SiS_Pr->SiS_VGAVDE << 6;
5969 temp = (tempeax % (unsigned int)SiS_Pr->SiS_VDE);
5970 tempeax = tempeax / (unsigned int)SiS_Pr->SiS_VDE;
5973 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) tempeax = 0x3F;
5976 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1E,temp); /* BPLVCFACT */
5983 tempeax = SiS_Pr->SiS_VGAVDE << 18;
5984 tempebx = SiS_Pr->SiS_VDE;
5991 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x37,temp);
5993 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x36,temp);
5995 if(SiS_Pr->SiS_VDE == SiS_Pr->SiS_VGAVDE) temp |= 0x04;
5996 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x35,temp);
5998 if(SiS_Pr->SiS_VBType & VB_SISPART4SCALER) {
6000 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x3c,temp);
6002 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x3b,temp);
6004 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0x3f,temp);
6006 if(SiS_Pr->SiS_VDE != SiS_Pr->SiS_VGAVDE) temp |= 0x08;
6007 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x30,0xf3,temp);
6015 tempeax = SiS_Pr->SiS_VGAHDE; /* 1f = ( (VGAHDE * 65536) / ( (VGAHDE * 65536) / HDE ) ) - 1*/
6020 if(SiS_Pr->SiS_HDE == tempeax) {
6023 tempecx = tempebx / SiS_Pr->SiS_HDE;
6024 if(SiS_Pr->ChipType >= SIS_315H) {
6025 if(tempebx % SiS_Pr->SiS_HDE) tempecx++;
6029 if(SiS_Pr->ChipType >= SIS_315H) {
6032 tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;
6036 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1F,temp);
6038 if(SiS_Pr->ChipType >= SIS_315H) {
6039 tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;
6042 tempeax = SiS_Pr->SiS_VGAVDE << 6;
6048 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tempbx--;
6049 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) {
6050 if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) tempbx = 1;
6051 else if(SiS_Pr->SiS_LCDResInfo != Panel_640x480) tempbx = 1;
6056 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x20,temp);
6057 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x21,tempbx);
6064 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x22,temp);
6066 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x23,temp);
6069 if(SiS_Pr->ChipType >= SIS_315H) {
6070 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
6071 if((islvds) || (SiS_Pr->SiS_VBInfo & VB_SISLVDS)) {
6072 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1e,0x20);
6076 if(SiS_Pr->ChipType == SIS_740) {
6077 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
6079 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1e,0x23);
6087 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
6088 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
6095 if(SiS_Pr->SiS_UseROM) {
6098 if(SiS_Pr->SiS_LCDTypeInfo == 0x0e) j += 7;
6102 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xbf);
6104 SiS_SetTrumpionBlock(SiS_Pr, trumpdata);
6106 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
6109 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode13[0]);
6113 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode10_1[0]);
6114 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode10_2[0]);
6118 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
6123 if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
6124 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x25,0x00);
6125 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x26,0x00);
6126 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x27,0x00);
6127 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x28,0x87);
6128 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x29,0x5A);
6129 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2A,0x4B);
6130 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x07,0x03);
6131 tempax = SiS_Pr->SiS_HDE; /* Blps = lcdhdee(lcdhdes+HDE) + 64 */
6132 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
6133 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
6134 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
6136 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x38,tempax & 0xff);
6138 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);
6140 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x39,tempax & 0xff);
6141 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3A,0x00); /* Bflml = 0 */
6142 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x3C,~0x007);
6144 tempax = SiS_Pr->SiS_VDE;
6145 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
6146 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
6147 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
6149 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3B,tempax & 0xff);
6151 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);
6153 tempeax = SiS_Pr->SiS_HDE;
6154 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
6155 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
6156 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempeax >>= 1;
6162 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x45,temp);
6163 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3F,0x00); /* BDxWadrst0 */
6164 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3E,0x00);
6165 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3D,0x10);
6166 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x3C,~0x040);
6168 tempax = SiS_Pr->SiS_HDE;
6169 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
6170 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
6171 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
6175 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x43,temp);
6177 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port, 0x44, 0x07, temp);
6179 tempax = SiS_Pr->SiS_VDE; /* BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */
6180 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
6181 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
6182 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
6185 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x42,temp);
6187 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x41,temp);
6189 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x40,temp);
6191 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port, 0x3C, 0x7F, temp);
6193 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2F,0x03);
6194 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x03,0x50);
6195 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x04,0x00);
6196 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2F,0x01);
6197 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0x38);
6199 if(SiS_Pr->SiS_IF_DEF_FSTN) {
6200 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2b,0x02);
6201 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2c,0x00);
6202 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x00);
6203 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x35,0x0c);
6204 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x36,0x00);
6205 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x37,0x00);
6206 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x38,0x80);
6207 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x39,0xA0);
6208 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3a,0x00);
6209 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3b,0xf0);
6210 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3c,0x00);
6211 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3d,0x10);
6212 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3e,0x00);
6213 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3f,0x00);
6214 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x40,0x10);
6215 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x41,0x25);
6216 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x42,0x80);
6217 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x43,0x14);
6218 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x44,0x03);
6219 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x45,0x0a);
6227 SiS_SetGroup1(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
6231 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
6239 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
6240 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6245 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
6246 } else if(SiS_Pr->UseCustomMode) {
6247 modeflag = SiS_Pr->CModeFlag;
6249 CRT1Index = SiS_GetRefCRT1CRTC(SiS_Pr, RefreshRateTableIndex, SiS_Pr->SiS_UseWideCRT2);
6250 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
6251 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
6254 SiS_SetCRT2Offset(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6256 if( ! ((SiS_Pr->ChipType >= SIS_315H) &&
6257 (SiS_Pr->SiS_IF_DEF_LVDS == 1) &&
6258 (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ) {
6260 if(SiS_Pr->ChipType < SIS_315H ) {
6262 SiS_SetCRT2FIFO_300(SiS_Pr, ModeNo);
6266 SiS_SetCRT2FIFO_310(SiS_Pr);
6272 if(SiS_Pr->ChipType < SIS_315H ) {
6276 temp = (SiS_Pr->SiS_VGAHT - 1) & 0x0FF; /* BTVGA2HT 0x08,0x09 */
6277 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x08,temp); /* CRT2 Horizontal Total */
6279 temp = (((SiS_Pr->SiS_VGAHT - 1) & 0xFF00) >> 8) << 4;
6280 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0f,temp); /* CRT2 Horizontal Total Overflow [7:4] */
6282 temp = (SiS_Pr->SiS_VGAHDE + 12) & 0x0FF; /* BTVGA2HDEE 0x0A,0x0C */
6283 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0A,temp); /* CRT2 Horizontal Display Enable End */
6285 pushbx = SiS_Pr->SiS_VGAHDE + 12; /* bx BTVGA2HRS 0x0B,0x0C */
6286 tempcx = (SiS_Pr->SiS_VGAHT - SiS_Pr->SiS_VGAHDE) >> 2;
6299 tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HT 0x08,0x09 */
6301 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6304 tempax = SiS_Pr->SiS_VGAHDE >> 1;
6305 tempcx = SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE + tempax;
6306 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
6307 tempcx = SiS_Pr->SiS_HT - tempax;
6312 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x08,tempcx); /* CRT2 Horizontal Total */
6314 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0F,temp); /* CRT2 Horizontal Total Overflow [7:4] */
6316 tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HDEE 0x0A,0x0C */
6317 tempbx = SiS_Pr->SiS_VGAHDE;
6326 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0A,tempbx); /* CRT2 Horizontal Display Enable End */
6335 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6336 if(SiS_Pr->ChipType >= SIS_661) {
6337 if((SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||
6338 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
6352 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6354 if(SiS_Pr->UseCustomMode) {
6355 tempbx = SiS_Pr->CHSyncStart + bridgeadd;
6356 tempcx = SiS_Pr->CHSyncEnd + bridgeadd;
6357 tempax = SiS_Pr->SiS_VGAHT;
6363 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
6365 if(SiS_Pr->UseCustomMode) {
6366 cr4 = SiS_Pr->CCRT1CRTC[4];
6367 cr14 = SiS_Pr->CCRT1CRTC[14];
6368 cr5 = SiS_Pr->CCRT1CRTC[5];
6369 cr15 = SiS_Pr->CCRT1CRTC[15];
6371 cr4 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
6372 cr14 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
6373 cr5 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
6374 cr15 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
6382 tempax = SiS_Pr->SiS_VGAHT;
6388 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSet525p1024)) {
6395 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0B,tempbx); /* CRT2 Horizontal Retrace Start */
6397 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0D,tempcx); /* CRT2 Horizontal Retrace End */
6400 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0C,temp); /* Overflow */
6404 tempcx = SiS_Pr->SiS_VGAVT - 1;
6407 if(SiS_Pr->ChipType < SIS_661) {
6408 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
6409 if(SiS_Pr->ChipType < SIS_315H) {
6410 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6411 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
6418 } else if(SiS_Pr->ChipType >= SIS_315H) {
6422 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0E,temp); /* CRT2 Vertical Total */
6424 tempbx = SiS_Pr->SiS_VGAVDE - 1;
6425 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0F,tempbx); /* CRT2 Vertical Display Enable End */
6428 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x12,temp); /* Overflow */
6430 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->ChipType < SIS_661)) {
6442 tempbx = (SiS_Pr->SiS_VGAVT + SiS_Pr->SiS_VGAVDE) >> 1; /* BTVGA2VRS 0x10,0x11 */
6443 tempcx = ((SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) >> 4) + tempbx + 1; /* BTVGA2VRE 0x11 */
6446 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6447 if(SiS_Pr->UseCustomMode) {
6448 tempbx = SiS_Pr->CVSyncStart;
6449 tempcx = SiS_Pr->CVSyncEnd;
6451 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
6453 if(SiS_Pr->UseCustomMode) {
6454 cr8 = SiS_Pr->CCRT1CRTC[8];
6455 cr7 = SiS_Pr->CCRT1CRTC[7];
6456 cr13 = SiS_Pr->CCRT1CRTC[13];
6457 tempcx = SiS_Pr->CCRT1CRTC[9];
6459 cr8 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[8];
6460 cr7 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
6461 cr13 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
6462 tempcx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[9];
6470 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x10,tempbx); /* CRT2 Vertical Retrace Start */
6473 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x11,temp); /* CRT2 Vert. Retrace End; Overflow */
6477 if(SiS_Pr->ChipType < SIS_315H) {
6481 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6483 if(SiS_Pr->ChipType == SIS_300) {
6485 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) temp = 0x2c;
6486 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) temp = 0x20;
6488 if(SiS_Pr->SiS_VBType & VB_SIS301) {
6489 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) temp = 0x20;
6491 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x960) temp = 0x24;
6492 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) temp = 0x2c;
6493 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp = 0x08;
6494 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6495 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) temp = 0x2c;
6498 if(SiS_Pr->SiS_UseROM) {
6500 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoYPbPrHiVision)
6502 else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision)
6504 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)
6510 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6511 if(SiS_Pr->PDC != -1) temp = SiS_Pr->PDC;
6516 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
6517 if(SiS_Pr->SiS_LCDResInfo == Panel_640x480) temp = 0x04;
6519 if(SiS_Pr->SiS_UseROM) {
6524 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6525 if(SiS_Pr->PDC != -1) temp = SiS_Pr->PDC;
6531 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp); /* Panel Link Delay Compensation; (Software Command Reset; Power Saving) */
6539 if(SiS_Pr->ChipType < SIS_661) {
6541 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
6543 if(SiS_Pr->ChipType == SIS_740) temp = 0x03;
6546 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp = 0x0a;
6548 if(SiS_Pr->ChipType == SIS_650) {
6549 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6550 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempbl = 0x0F;
6554 if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) {
6557 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
6562 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,tempbl,temp); /* Panel Link Delay Compensation */
6570 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2C,0x3f,tempax);
6578 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6579 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
6581 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6582 } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6583 SiS_SetGroup1_301(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6586 if(SiS_Pr->ChipType < SIS_315H) {
6587 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6589 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6590 if((!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) || (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
6591 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo,ModeIdIndex,RefreshRateTableIndex);
6594 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo,ModeIdIndex,RefreshRateTableIndex);
6606 SiS_GetGroup2CLVXPtr(struct SiS_Private *SiS_Pr, int tabletype)
6611 a = SiS_Pr->SiS_VGAHDE;
6612 b = SiS_Pr->SiS_HDE;
6614 a = SiS_Pr->SiS_VGAVDE;
6615 b = SiS_Pr->SiS_VDE;
6623 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6628 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6629 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) tableptr = SiS_Part2CLVX_3;
6630 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tableptr = SiS_Part2CLVX_3;
6632 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6646 SiS_SetGroup2_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
6653 if(!(SiS_Pr->SiS_VBType & VB_SISTAP4SCALER)) return;
6655 tableptr = SiS_GetGroup2CLVXPtr(SiS_Pr, 0);
6657 SiS_SetReg(SiS_Pr->SiS_Part2Port, i, tableptr[j]);
6659 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
6660 tableptr = SiS_GetGroup2CLVXPtr(SiS_Pr, 1);
6662 SiS_SetReg(SiS_Pr->SiS_Part2Port, i, tableptr[j]);
6666 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp |= 0x04;
6667 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4e,0xeb,temp);
6671 SiS_GetCRT2Part2Ptr(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex,
6676 if(SiS_Pr->ChipType < SIS_315H) return false;
6679 (*ResIndex) = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6681 (*ResIndex) = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6686 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
6687 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
6692 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
6693 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
6694 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) (*CRT2Index) = 206;
6703 SiS_Group2LCDSpecial(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short crt2crtc)
6711 if(!SiS_Pr->UseCustomMode) {
6712 if( ( ( (SiS_Pr->ChipType == SIS_630) ||
6713 (SiS_Pr->ChipType == SIS_730) ) &&
6714 (SiS_Pr->ChipRevision > 2) ) &&
6715 (SiS_Pr->SiS_LCDResInfo == Panel_1024x768) &&
6716 (!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) &&
6717 (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
6719 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,0xB9);
6720 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,0xCC);
6721 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xA6);
6723 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x2B);
6724 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x13);
6725 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,0xE5);
6726 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,0x08);
6727 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xE2);
6731 if(SiS_Pr->ChipType < SIS_315H) {
6732 if(SiS_Pr->SiS_LCDTypeInfo == 0x0c) {
6735 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
6736 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6742 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xff);
6745 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
6746 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6748 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x28);
6752 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x18);
6753 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,atable[tempcx]);
6761 SiS_Set300Part2Regs(struct SiS_Private *SiS_Pr, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex,
6768 if(SiS_Pr->ChipType != SIS_300) return;
6769 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) return;
6770 if(SiS_Pr->UseCustomMode) return;
6773 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6775 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6779 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
6780 else CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_2;
6784 CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
6788 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,(CRT2Part2Ptr+resindex)->CR[0]);
6789 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x02,0x80,(CRT2Part2Ptr+resindex)->CR[1]);
6791 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6794 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6797 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6799 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,(CRT2Part2Ptr+resindex)->CR[10]);
6800 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
6805 SiS_SetTVSpecial(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
6807 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) return;
6808 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision)) return;
6809 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) return;
6811 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
6812 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
6820 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,specialtv[j]);
6822 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,0x72);
6823 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750)) {
6824 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6825 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x14);
6826 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1b);
6828 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x14); /* 15 */
6829 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1a); /* 1b */
6836 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1b); /* 21 */
6837 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x54); /* 5a */
6839 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1a); /* 21 */
6840 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x53); /* 5a */
6846 SiS_SetGroup2_Tail(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
6850 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
6851 if(SiS_Pr->SiS_VGAVDE == 525) {
6853 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6855 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) temp += 2;
6857 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2f,temp);
6858 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x30,0xb3);
6859 } else if(SiS_Pr->SiS_VGAVDE == 420) {
6861 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6863 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) temp++;
6865 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2f,temp);
6869 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6870 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) {
6871 if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
6872 SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x1a,0x03);
6877 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0b,temp);
6881 if((SiS_Pr->SiS_PanelXRes == 1280) && (SiS_Pr->SiS_PanelYRes == 768)) {
6882 if(SiS_Pr->SiS_VBInfo & SetSimuScanMode) {
6883 if(((SiS_Pr->SiS_HDE == 640) && (SiS_Pr->SiS_VDE == 480)) ||
6884 ((SiS_Pr->SiS_HDE == 320) && (SiS_Pr->SiS_VDE == 240))) {
6905 SiS_SetGroup2(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
6917 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
6921 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
6922 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6923 } else if(SiS_Pr->UseCustomMode) {
6924 modeflag = SiS_Pr->CModeFlag;
6927 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
6928 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6932 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToAVIDEO)) temp |= 0x08;
6933 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSVIDEO)) temp |= 0x04;
6934 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) temp |= 0x02;
6935 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) temp |= 0x01;
6937 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) temp |= 0x10;
6939 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x00,temp);
6942 TimingPoint = SiS_Pr->SiS_PALTiming;
6945 if( (SiS_Pr->SiS_VBType & VB_SIS30xBLV) &&
6946 ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
6947 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode) ) ) {
6951 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6953 TimingPoint = SiS_Pr->SiS_HiTVExtTiming;
6954 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6955 TimingPoint = SiS_Pr->SiS_HiTVSt2Timing;
6956 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
6957 TimingPoint = SiS_Pr->SiS_HiTVSt1Timing;
6961 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6964 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) i = 2;
6965 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) i = 1;
6971 } else if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6977 TimingPoint = SiS_Pr->SiS_NTSCTiming;
6978 PhaseIndex = (SiS_Pr->SiS_TVMode & TVSetNTSCJ) ? 0x01 : 0x00; /* SiS_PALPhase : SiS_NTSCPhase */
6983 if(SiS_Pr->SiS_TVMode & (TVSetPALM | TVSetPALN)) {
6984 PhaseIndex = (SiS_Pr->SiS_TVMode & TVSetPALM) ? 0x02 : 0x03; /* SiS_PALMPhase : SiS_PALNPhase */
6988 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
6989 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6991 } else if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) {
6999 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS_TVPhase[(PhaseIndex * 4) + j]);
7003 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,TimingPoint[j]);
7006 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,TimingPoint[j]);
7009 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7010 if(SiS_Pr->SiS_ModeType != ModeText) {
7011 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
7015 SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x0A,SiS_Pr->SiS_NewFlickerMode);
7017 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x35,SiS_Pr->SiS_RY1COE);
7018 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x36,SiS_Pr->SiS_RY2COE);
7019 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x37,SiS_Pr->SiS_RY3COE);
7020 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x38,SiS_Pr->SiS_RY4COE);
7022 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempax = 950;
7023 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempax = 680;
7024 else if(SiS_Pr->SiS_TVMode & TVSetPAL) tempax = 520;
7027 if( ((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) && (SiS_Pr->SiS_VDE <= tempax)) ||
7028 ( (SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision) &&
7029 ((SiS_Pr->SiS_VGAHDE == 1024) || (SiS_Pr->SiS_VDE <= tempax)) ) ) {
7031 tempax -= SiS_Pr->SiS_VDE;
7033 if(!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p))) {
7039 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,temp);
7042 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,temp);
7044 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoYPbPrHiVision) && (SiS_Pr->SiS_VGAHDE >= 1024)) {
7045 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7046 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1b);
7047 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x54);
7049 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x17);
7050 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1d);
7056 tempcx = SiS_Pr->SiS_HT;
7057 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
7059 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) tempcx--;
7060 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1B,tempcx);
7061 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0xF0,((tempcx >> 8) & 0x0f));
7063 tempcx = SiS_Pr->SiS_HT >> 1;
7064 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
7066 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempcx -= 4;
7067 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x22,0x0F,((tempcx << 4) & 0xf0));
7071 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x24,tempbx);
7072 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0F,((tempbx >> 4) & 0xf0));
7075 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7079 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x29,0x0F,((tempbx << 4) & 0xf0));
7083 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x27,tempcx);
7084 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x28,0x0F,((tempcx >> 4) & 0xf0));
7087 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempcx -= 4;
7088 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2A,0x0F,((tempcx << 4) & 0xf0));
7090 tempcx = SiS_Pr->SiS_HT >> 1;
7091 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
7094 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2D,0x0F,((tempcx << 4) & 0xf0));
7097 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
7098 tempcx = SiS_GetVGAHT2(SiS_Pr) - 1;
7100 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2E,tempcx);
7102 tempbx = SiS_Pr->SiS_VDE;
7103 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7104 if(SiS_Pr->SiS_VGAVDE == 360) tempbx = 746;
7105 if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 746;
7106 if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 853;
7107 } else if( (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) &&
7108 (!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p|TVSetYPbPr750p))) ) {
7110 if(SiS_Pr->ChipType >= SIS_315H) {
7111 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
7113 } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
7114 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
7119 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
7120 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7123 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
7129 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2F,tempbx);
7133 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
7135 if(SiS_Pr->SiS_VBInfo & SetCRT2ToAVIDEO) temp |= 0x20;
7137 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x30,temp);
7139 if(SiS_Pr->SiS_VBType & VB_SISPART4OVERFLOW) {
7140 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x10,0xdf,((tempbx & 0x0400) >> 5));
7143 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7144 tempbx = SiS_Pr->SiS_VDE;
7145 if( (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) &&
7146 (!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p))) ) {
7151 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x46,temp);
7152 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x47,tempbx);
7154 if(SiS_Pr->SiS_VBType & VB_SISPART4OVERFLOW) {
7155 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x10,0xbf,((tempbx & 0x0400) >> 4));
7161 if(SiS_Pr->SiS_VGAHDE >= SiS_Pr->SiS_HDE) {
7168 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7169 if(SiS_Pr->SiS_VGAHDE >= 960) {
7170 if((!(modeflag & HalfDCLK)) || (SiS_Pr->ChipType < SIS_315H)) {
7172 if(SiS_Pr->SiS_VGAHDE >= 1280) {
7184 longtemp = ((SiS_Pr->SiS_VGAHDE * tempch) / tempcl) << 13;
7185 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) longtemp <<= 3;
7186 tempax = longtemp / SiS_Pr->SiS_HDE;
7187 if(longtemp % SiS_Pr->SiS_HDE) tempax++;
7192 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x44,tempax);
7193 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x45,0xC0,tempbx);
7195 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7199 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x46,0xF8,tempcx);
7201 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7208 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4B,tempbx);
7209 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4C,tempcx);
7212 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
7214 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) temp |= 0x20;
7215 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) temp |= 0x40;
7217 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4D,temp);
7219 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x43);
7220 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,(temp - 3));
7222 SiS_SetTVSpecial(SiS_Pr, ModeNo);
7224 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
7226 if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 8;
7227 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4e,0xf7,temp);
7232 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
7233 if(!(SiS_Pr->SiS_TVMode & TVSetNTSC1024)) {
7234 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x01);
7235 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,(temp - 1));
7237 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xEF);
7240 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7241 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
7242 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0B,0x00);
7246 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) return;
7250 tempbx = SiS_Pr->SiS_HDE;
7251 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7253 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2C,tempbx);
7254 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2B,0x0F,((tempbx >> 4) & 0xf0));
7257 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
7258 if(SiS_Pr->SiS_ModeType == ModeEGA) {
7259 if(SiS_Pr->SiS_VGAHDE >= 1024) {
7261 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
7267 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0B,temp);
7269 tempbx = SiS_Pr->SiS_VDE - 1;
7270 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x03,tempbx);
7271 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0C,0xF8,((tempbx >> 8) & 0x07));
7273 tempcx = SiS_Pr->SiS_VT - 1;
7274 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x19,tempcx);
7276 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
7278 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
7282 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1A,0x0f,temp);
7284 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x09,0xF0);
7285 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x0A,0xF0);
7287 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x17,0xFB);
7288 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x18,0xDF);
7291 if(SiS_GetCRT2Part2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
7296 case 200: CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1; break;
7299 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,(CRT2Part2Ptr+resindex)->CR[0]);
7300 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x02,0x80,(CRT2Part2Ptr+resindex)->CR[1]);
7302 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
7305 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
7308 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
7310 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,(CRT2Part2Ptr+resindex)->CR[10]);
7311 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
7313 SiS_SetGroup2_Tail(SiS_Pr, ModeNo);
7323 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7324 if((SiS_Pr->SiS_LCDInfo & LCDPass11) || (SiS_Pr->PanelYRes == SiS_Pr->SiS_VDE)) {
7325 tempbx = SiS_Pr->SiS_VDE - 1;
7326 tempcx = SiS_Pr->SiS_VT - 1;
7328 tempbx = SiS_Pr->SiS_VDE + ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VDE) / 2);
7329 tempcx = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VDE) / 2);
7332 tempbx = SiS_Pr->PanelYRes;
7333 tempcx = SiS_Pr->SiS_VT;
7335 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7336 tempax = SiS_Pr->PanelYRes;
7337 /* if(SiS_Pr->SiS_VGAVDE == 525) tempax += 0x3c; */ /* 651+301C */
7338 if(SiS_Pr->PanelYRes < SiS_Pr->SiS_VDE) {
7341 tempax -= SiS_Pr->SiS_VDE;
7351 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,tempcx); /* lcdvdes */
7352 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,tempbx); /* lcdvdee */
7356 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,temp);
7358 tempax = SiS_Pr->SiS_VDE;
7359 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7360 tempax = SiS_Pr->PanelYRes;
7362 tempcx = (SiS_Pr->SiS_VT - tempax) >> 4;
7363 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7364 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7365 tempcx = (SiS_Pr->SiS_VT - tempax) / 10;
7369 tempbx = ((SiS_Pr->SiS_VT + SiS_Pr->SiS_VDE) >> 1) - 1;
7370 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7371 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7372 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) { /* ? */
7373 tempax = SiS_Pr->SiS_VT - SiS_Pr->PanelYRes;
7379 if(tempbx <= SiS_Pr->SiS_VDE) tempbx = SiS_Pr->SiS_VDE + 1;
7383 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
7385 if((!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) || (crt2crtc == 6)) {
7386 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
7395 if(SiS_Pr->UseCustomMode) {
7396 tempbx = SiS_Pr->CVSyncStart;
7399 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,tempbx); /* lcdvrs */
7405 if(SiS_Pr->UseCustomMode) {
7407 temp |= (SiS_Pr->CVSyncEnd & 0x0f);
7410 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,temp);
7413 SiS_Group2LCDSpecial(SiS_Pr, ModeNo, crt2crtc);
7417 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) bridgeoffset += 2;
7418 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) bridgeoffset += 2; /* OK for Averatec 1280x800 (301C) */
7419 if(SiS_IsDualLink(SiS_Pr)) bridgeoffset++;
7420 else if(SiS_Pr->SiS_VBType & VB_SIS302LV) bridgeoffset++; /* OK for Asus A4L 1280x800 */
7424 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7425 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) {
7426 temp = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_HDE) / 2);
7427 if(SiS_IsDualLink(SiS_Pr)) temp >>= 1;
7431 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1F,temp); /* lcdhdes */
7432 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x20,0x0F,((temp >> 4) & 0xf0));
7434 tempcx = SiS_Pr->SiS_HT;
7435 tempax = tempbx = SiS_Pr->SiS_HDE;
7436 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7437 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) {
7438 tempax = SiS_Pr->PanelXRes;
7439 tempbx = SiS_Pr->PanelXRes - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_HDE) / 2);
7442 if(SiS_IsDualLink(SiS_Pr)) {
7450 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,tempbx); /* lcdhdee */
7451 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0xF0,((tempbx >> 8) & 0x0f));
7458 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
7459 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7460 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
7461 if(SiS_Pr->SiS_HDE == 1280) tempbx = (tempbx & 0xff00) | 0x47;
7466 if(SiS_Pr->UseCustomMode) {
7467 tempbx = SiS_Pr->CHSyncStart;
7469 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7473 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1C,tempbx); /* lcdhrs */
7474 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0x0F,((tempbx >> 4) & 0xf0));
7479 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7480 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) tempcx >>= 2;
7484 if(SiS_Pr->UseCustomMode) {
7485 tempbx = SiS_Pr->CHSyncEnd;
7487 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7491 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x21,tempbx); /* lcdhre */
7493 SiS_SetGroup2_Tail(SiS_Pr, ModeNo);
7496 SiS_Set300Part2Regs(SiS_Pr, ModeIdIndex, RefreshRateTableIndex, ModeNo);
7508 SiS_SetGroup3(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7513 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
7516 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x00,0x00);
7521 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7522 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xFA);
7523 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xC8);
7525 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xF5);
7526 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xB7);
7529 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
7530 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xFA);
7531 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xC8);
7532 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x3D,0xA8);
7536 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7537 tempdi = SiS_Pr->SiS_HiTVGroup3Data;
7538 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
7539 tempdi = SiS_Pr->SiS_HiTVGroup3Simu;
7541 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
7542 if(!(SiS_Pr->SiS_TVMode & TVSetYPbPr525i)) {
7544 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempdi = SiS_HiTVGroup3_2;
7549 SiS_SetReg(SiS_Pr->SiS_Part3Port,i,tempdi[i]);
7551 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
7552 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
7553 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x28,0x3f);
7570 SiS_ShiftXPos(struct SiS_Private *SiS_Pr, int shift)
7574 temp1 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x1f);
7575 temp2 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x20);
7577 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1f,temp);
7578 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x20,0x0f,((temp >> 4) & 0xf0));
7579 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x2b) & 0x0f;
7581 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2b,0xf0,(temp & 0x0f));
7582 temp1 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x43);
7583 temp2 = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x42);
7585 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,temp);
7586 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x42,0x0f,((temp >> 4) & 0xf0));
7591 SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7594 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
7596 if(!(SiS_Pr->SiS_VBType & VB_SIS30xCLV)) return;
7597 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToHiVision | SetCRT2ToYPbPr525750))) return;
7599 if(SiS_Pr->ChipType >= XGI_20) return;
7601 if((SiS_Pr->ChipType >= SIS_661) && (SiS_Pr->SiS_ROMNew)) {
7605 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3a,0x08);
7606 temp = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x3a);
7608 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x3a,0xdf);
7609 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x25,0xfc);
7610 if((SiS_Pr->ChipType < SIS_661) && (!(SiS_Pr->SiS_ROMNew))) {
7611 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x25,0xf8);
7613 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x0f,0xfb);
7614 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) temp = 0x0000;
7615 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) temp = 0x0002;
7616 else if(SiS_Pr->SiS_TVMode & TVSetHiVision) temp = 0x0400;
7618 if((SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
7620 if(SiS_Pr->SiS_TVMode & TVAspect43) temp1 = 4;
7621 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0f,0xfb,temp1);
7622 if(SiS_Pr->SiS_TVMode & TVAspect43LB) temp |= 0x01;
7623 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0x7c,(temp & 0xff));
7624 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0xfb,(temp >> 8));
7626 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x39,0xfd);
7629 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x3b) & 0x03;
7632 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xf8,(temp & 0xff));
7633 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0xfb,(temp >> 8));
7635 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x3b,0xfd);
7640 if(SiS_Pr->ChipType >= SIS_661) { /* ? */
7641 if(SiS_Pr->SiS_TVMode & TVAspect43) {
7642 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
7644 SiS_ShiftXPos(SiS_Pr, 97);
7646 SiS_ShiftXPos(SiS_Pr, 111);
7648 } else if(SiS_Pr->SiS_TVMode & TVSetHiVision) {
7649 SiS_ShiftXPos(SiS_Pr, 136);
7661 SiS_SetCRT2VCLK(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7666 if(SiS_Pr->UseCustomMode) {
7667 reg1 = SiS_Pr->CSR2B;
7668 reg2 = SiS_Pr->CSR2C;
7670 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
7671 reg1 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
7672 reg2 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
7675 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7676 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSet525p1024)) {
7677 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,0x57);
7678 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,0x46);
7679 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1f,0xf6);
7681 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,reg1);
7682 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,reg2);
7685 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,0x01);
7686 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,reg2);
7687 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,reg1);
7689 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x12,0x00);
7691 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) temp |= 0x20;
7692 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x12,temp);
7696 SiS_SetDualLinkEtc(struct SiS_Private *SiS_Pr)
7698 if(SiS_Pr->ChipType >= SIS_315H) {
7699 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
7700 if((SiS_CRT2IsLCD(SiS_Pr)) ||
7701 (SiS_IsVAMode(SiS_Pr))) {
7702 if(SiS_Pr->SiS_LCDInfo & LCDDualLink) {
7703 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
7705 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x27,~0x20);
7710 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
7711 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2a,0x00);
7713 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
7715 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
7720 SiS_SetGroup4(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7727 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7728 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
7729 } else if(SiS_Pr->UseCustomMode) {
7730 modeflag = SiS_Pr->CModeFlag;
7733 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7734 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
7737 if(SiS_Pr->ChipType >= SIS_315H) {
7738 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
7739 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
7740 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x24,0x0e);
7745 if(SiS_Pr->SiS_VBType & (VB_SIS30xCLV | VB_SIS302LV)) {
7746 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7747 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x10,0x9f);
7751 if(SiS_Pr->ChipType >= SIS_315H) {
7752 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
7753 SiS_SetDualLinkEtc(SiS_Pr);
7758 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x13,SiS_Pr->SiS_RVBHCFACT);
7760 tempbx = SiS_Pr->SiS_RVBHCMAX;
7761 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x14,tempbx);
7765 tempcx = SiS_Pr->SiS_VGAHT - 1;
7766 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x16,tempcx);
7770 tempcx = SiS_Pr->SiS_VGAVT - 1;
7771 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempcx -= 5;
7772 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x17,tempcx);
7775 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x15,temp);
7777 tempbx = SiS_Pr->SiS_VGAHDE;
7779 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7781 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7784 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7788 } else if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) {
7797 temp |= SiS_Pr->Init_P4_0E;
7799 if(SiS_Pr->SiS_VBType & VB_SIS301) {
7800 if(SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) {
7806 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0E,0x10,temp);
7808 tempeax = SiS_Pr->SiS_VGAVDE;
7809 tempebx = SiS_Pr->SiS_VDE;
7810 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7814 tempcx = SiS_Pr->SiS_RVBHRS;
7815 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x18,tempcx);
7831 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1B,temp);
7833 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1A,temp);
7836 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x19,temp);
7838 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7840 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1C,0x28);
7844 if(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr750p)) tempbx = 0x08;
7845 tempax = SiS_Pr->SiS_VGAHDE;
7847 if(SiS_IsDualLink(SiS_Pr)) tempax >>= 1;
7849 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7860 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7873 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1D,tempax);
7874 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1E,temp);
7877 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
7880 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7881 if(!(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSetHiVision | TVSetYPbPr750p | TVSetYPbPr525p))) {
7883 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
7884 if(!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
7890 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x1F,tempbx,temp);
7892 tempbx = SiS_Pr->SiS_HT >> 1;
7893 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7895 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x22,tempbx);
7897 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0xC0,temp);
7899 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
7900 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7901 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x24,0x0e);
7906 SiS_SetDualLinkEtc(SiS_Pr);
7910 SiS_SetCRT2VCLK(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
7918 SiS_SetGroup5(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7921 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
7923 if(SiS_Pr->SiS_ModeType == ModeVGA) {
7924 if(!(SiS_Pr->SiS_VBInfo & (SetInSlaveMode | LoadDACFlag))) {
7925 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
7926 SiS_LoadDAC(SiS_Pr, ModeNo, ModeIdIndex);
7936 SiS_GetLVDSCRT1Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7946 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7947 (*ResIndex) = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
7949 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7950 (*ResIndex) = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
7955 if((SiS_Pr->SiS_IF_DEF_CH70xx) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
7958 if((SiS_Pr->SiS_TVMode & TVSetPAL) && (!(SiS_Pr->SiS_TVMode & TVSetPALM))) {
7960 if(SiS_Pr->SiS_ModeType > ModeVGA) {
7961 if(SiS_Pr->SiS_CHSOverScan) (*DisplayType) = 84;
7965 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) (*DisplayType)++;
7971 switch(SiS_Pr->SiS_LCDResInfo) {
7990 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x600) {
7991 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) (*DisplayType) += 2;
8000 SiS_ModCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
8010 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
8011 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
8012 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
8013 (SiS_Pr->SiS_CustomT == CUT_PANEL856) )
8016 if(SiS_Pr->SiS_IF_DEF_LVDS) {
8017 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
8018 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) return;
8020 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
8021 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) return;
8024 if(SiS_Pr->SiS_LCDInfo & LCDPass11) return;
8026 if(SiS_Pr->ChipType < SIS_315H) {
8027 if(SiS_Pr->SiS_SetFlag & SetDOSMode) return;
8030 if(!(SiS_GetLVDSCRT1Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
8036 case 50: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_1; break; /* xSTN */
8037 case 14: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_2; break; /* xSTN */
8038 case 15: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_2_H; break; /* xSTN */
8039 case 18: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_3; break; /* xSTN */
8040 case 19: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_3_H; break; /* xSTN */
8041 case 10: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1; break;
8042 case 11: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1_H; break;
8044 case 26: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_1; break;
8045 case 27: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_1_H; break;
8046 case 28: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_2; break;
8047 case 29: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT11024x600_2_H; break;
8049 case 80: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1UNTSC; break;
8050 case 81: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1ONTSC; break;
8051 case 82: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1UPAL; break;
8052 case 83: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1OPAL; break;
8053 case 84: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1SOPAL; break;
8058 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x11,0x7f);
8062 SiS_SetReg(SiS_Pr->SiS_P3d4,CRIdx[i],tempah);
8067 SiS_SetReg(SiS_Pr->SiS_P3c4,i,tempah);
8071 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x0E,0x1f,tempah);
8073 if(ModeNo <= 0x13) modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
8074 else modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
8078 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x09,~0x020,tempah);
8082 SiS_CalcLCDACRT1Timing(SiS_Pr, ModeNo, ModeIdIndex);
8092 SiS_SetCRT2ECLK(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
8095 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
8099 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
8100 SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
8101 if(SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK == 2) {
8104 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex,
8106 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
8108 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex,
8112 sr2b = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
8113 sr2c = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
8115 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
8116 if(SiS_Pr->SiS_UseROM) {
8125 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
8126 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
8131 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x20);
8132 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
8133 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
8134 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x10);
8135 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
8136 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
8137 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x00);
8138 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
8139 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
8147 SiS_SetCHTVReg(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
8154 resindex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
8156 resindex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
8161 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
8162 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
8164 if(SiS_Pr->SiS_ModeType > ModeVGA) {
8165 if(SiS_Pr->SiS_CHSOverScan) TVType = 8;
8167 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
8169 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
8170 } else if(SiS_Pr->SiS_TVMode & TVSetPALN) {
8172 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
8177 case 0: CHTVRegData = SiS_Pr->SiS_CHTVReg_UNTSC; break;
8178 case 1: CHTVRegData = SiS_Pr->SiS_CHTVReg_ONTSC; break;
8179 case 2: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPAL; break;
8180 case 3: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPAL; break;
8181 case 4: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPALM; break;
8182 case 5: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPALM; break;
8183 case 6: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPALN; break;
8184 case 7: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPALN; break;
8185 case 8: CHTVRegData = SiS_Pr->SiS_CHTVReg_SOPAL; break;
8186 default: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPAL; break;
8190 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
8199 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
8200 SiS_SetCH700x(SiS_Pr,0x04,0x43); /* 0x40=76uA (PAL); 0x03=15bit non-multi RGB*/
8201 SiS_SetCH700x(SiS_Pr,0x09,0x69); /* Black level for PAL (105)*/
8203 SiS_SetCH700x(SiS_Pr,0x04,0x03); /* upper nibble=71uA (NTSC), 0x03=15bit non-multi RGB*/
8204 SiS_SetCH700x(SiS_Pr,0x09,0x71); /* Black level for NTSC (113)*/
8207 SiS_SetCH700x(SiS_Pr,0x00,CHTVRegData[resindex].Reg[0]); /* Mode register */
8208 SiS_SetCH700x(SiS_Pr,0x07,CHTVRegData[resindex].Reg[1]); /* Start active video register */
8209 SiS_SetCH700x(SiS_Pr,0x08,CHTVRegData[resindex].Reg[2]); /* Position overflow register */
8210 SiS_SetCH700x(SiS_Pr,0x0a,CHTVRegData[resindex].Reg[3]); /* Horiz Position register */
8211 SiS_SetCH700x(SiS_Pr,0x0b,CHTVRegData[resindex].Reg[4]); /* Vertical Position register */
8218 SiS_SetCH700x(SiS_Pr,0x01,0x28);
8227 SiS_SetCH700x(SiS_Pr,0x03,0xb1); /* old: 3103 */
8233 SiS_SetCH70xx(SiS_Pr,0x3d,0x00);
8239 SiS_SetCH70xxANDOR(SiS_Pr,0x10,0x00,0x1F);
8244 SiS_SetCH70xxANDOR(SiS_Pr,0x11,0x02,0xF8);
8248 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x00,0xEF);
8250 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) { /* ---- NTSC ---- */
8251 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) {
8253 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
8254 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on, no need to set FSCI */
8256 SiS_SetCH70xxANDOR(SiS_Pr,0x18,0x01,0xF0); /* 0x18-0x1f: FSCI 469,762,048 */
8257 SiS_SetCH70xxANDOR(SiS_Pr,0x19,0x0C,0xF0);
8258 SiS_SetCH70xxANDOR(SiS_Pr,0x1a,0x00,0xF0);
8259 SiS_SetCH70xxANDOR(SiS_Pr,0x1b,0x00,0xF0);
8260 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x00,0xF0);
8261 SiS_SetCH70xxANDOR(SiS_Pr,0x1d,0x00,0xF0);
8262 SiS_SetCH70xxANDOR(SiS_Pr,0x1e,0x00,0xF0);
8263 SiS_SetCH70xxANDOR(SiS_Pr,0x1f,0x00,0xF0);
8264 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x01,0xEF); /* Loop filter on for mode 23 */
8265 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x00,0xFE); /* ACIV off, need to set FSCI */
8269 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
8270 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE);
8273 SiS_SetCH70xxANDOR(SiS_Pr,0x18,0x01,0xF0); /* (FSCI was 0x1f1c71c7 - this is for mode 22) */
8274 SiS_SetCH70xxANDOR(SiS_Pr,0x19,0x09,0xF0); /* FSCI for mode 24 is 428,554,851 */
8275 SiS_SetCH70xxANDOR(SiS_Pr,0x1a,0x08,0xF0); /* 198b3a63 */
8276 SiS_SetCH70xxANDOR(SiS_Pr,0x1b,0x0b,0xF0);
8277 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x04,0xF0);
8278 SiS_SetCH70xxANDOR(SiS_Pr,0x1d,0x01,0xF0);
8279 SiS_SetCH70xxANDOR(SiS_Pr,0x1e,0x06,0xF0);
8280 SiS_SetCH70xxANDOR(SiS_Pr,0x1f,0x05,0xF0);
8281 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off for mode 24 */
8282 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x00,0xFE); * ACIV off, need to set FSCI */
8284 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
8285 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE);
8290 SiS_SetCH70xxANDOR(SiS_Pr, 0x20, 0x00, 0xEF); /* loop filter off */
8291 SiS_SetCH70xxANDOR(SiS_Pr, 0x21, 0x01, 0xFE); /* ACIV on */
8308 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp |= 0x10;
8309 SiS_SetCH701x(SiS_Pr,0x00,temp);
8311 SiS_SetCH701x(SiS_Pr,0x01,CHTVRegData[resindex].Reg[1]);
8312 SiS_SetCH701x(SiS_Pr,0x02,CHTVRegData[resindex].Reg[2]);
8313 SiS_SetCH701x(SiS_Pr,0x04,CHTVRegData[resindex].Reg[3]);
8314 SiS_SetCH701x(SiS_Pr,0x03,CHTVRegData[resindex].Reg[4]);
8315 SiS_SetCH701x(SiS_Pr,0x05,CHTVRegData[resindex].Reg[5]);
8316 SiS_SetCH701x(SiS_Pr,0x06,CHTVRegData[resindex].Reg[6]);
8319 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp = 0x66;
8320 SiS_SetCH701x(SiS_Pr,0x07,temp);
8322 SiS_SetCH701x(SiS_Pr,0x08,CHTVRegData[resindex].Reg[8]);
8323 SiS_SetCH701x(SiS_Pr,0x15,CHTVRegData[resindex].Reg[9]);
8324 SiS_SetCH701x(SiS_Pr,0x1f,CHTVRegData[resindex].Reg[10]);
8325 SiS_SetCH701x(SiS_Pr,0x0c,CHTVRegData[resindex].Reg[11]);
8326 SiS_SetCH701x(SiS_Pr,0x0d,CHTVRegData[resindex].Reg[12]);
8327 SiS_SetCH701x(SiS_Pr,0x0e,CHTVRegData[resindex].Reg[13]);
8328 SiS_SetCH701x(SiS_Pr,0x0f,CHTVRegData[resindex].Reg[14]);
8329 SiS_SetCH701x(SiS_Pr,0x10,CHTVRegData[resindex].Reg[15]);
8331 temp = SiS_GetCH701x(SiS_Pr,0x21) & ~0x02;
8338 if(SiS_Pr->SiS_TVMode & (TVSetPALN | TVSetNTSCJ)) temp |= 0x02;
8339 SiS_SetCH701x(SiS_Pr,0x21,temp);
8354 SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr)
8359 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8360 if(SiS_Pr->ChipType == SIS_740) {
8361 SiS_SetCH701x(SiS_Pr,0x66,0x65);
8363 temp = SiS_GetCH701x(SiS_Pr,0x66);
8365 SiS_SetCH701x(SiS_Pr,0x66,temp);
8371 SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr)
8376 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8377 temp = SiS_GetCH701x(SiS_Pr,0x66);
8379 SiS_SetCH701x(SiS_Pr,0x66,temp);
8384 SiS_ChrontelPowerSequencing(struct SiS_Private *SiS_Pr)
8398 if(SiS_Pr->ChipType == SIS_740) {
8399 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
8400 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) tableptr = asus1024_740;
8402 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
8403 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
8404 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200)) {
8405 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) tableptr = asus1400_740;
8409 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
8411 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
8412 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
8413 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200)) {
8419 SiS_SetCH701x(SiS_Pr, regtable[i], tableptr[i]);
8424 SiS_SetCH701xForLCD(struct SiS_Private *SiS_Pr)
8466 if(SiS_Pr->ChipType == SIS_740) {
8467 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tableptr = table1024_740;
8468 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) tableptr = table1280_740;
8469 else if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) tableptr = table1400_740;
8470 else if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) tableptr = table1600_740;
8473 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tableptr = table1024_650;
8474 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) tableptr = table1280_650;
8475 else if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) tableptr = table1400_650;
8476 else if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) tableptr = table1600_650;
8480 tempbh = SiS_GetCH701x(SiS_Pr,0x74);
8482 tempbh = SiS_GetCH701x(SiS_Pr,0x73);
8484 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) return;
8486 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) return;
8487 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) return;
8489 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) return;
8493 if(SiS_Pr->ChipType == SIS_740) tempbh = 0x0d;
8497 SiS_SetCH701x(SiS_Pr, regtable[i], tableptr[i]);
8499 SiS_ChrontelPowerSequencing(SiS_Pr);
8500 tempbh = SiS_GetCH701x(SiS_Pr,0x1e);
8502 SiS_SetCH701x(SiS_Pr,0x1e,tempbh);
8504 if(SiS_Pr->ChipType == SIS_740) {
8505 tempbh = SiS_GetCH701x(SiS_Pr,0x1c);
8507 SiS_SetCH701x(SiS_Pr,0x1c,tempbh);
8508 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x03);
8509 tempbh = SiS_GetCH701x(SiS_Pr,0x64);
8511 SiS_SetCH701x(SiS_Pr,0x64,tempbh);
8512 tempbh = SiS_GetCH701x(SiS_Pr,0x03);
8514 SiS_SetCH701x(SiS_Pr,0x03,tempbh);
8519 SiS_ChrontelResetVSync(struct SiS_Private *SiS_Pr)
8523 temp1 = SiS_GetCH701x(SiS_Pr,0x49);
8524 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
8525 temp = SiS_GetCH701x(SiS_Pr,0x47);
8527 SiS_SetCH701x(SiS_Pr,0x47,temp);
8528 SiS_LongDelay(SiS_Pr, 3);
8529 temp = SiS_GetCH701x(SiS_Pr,0x47);
8531 SiS_SetCH701x(SiS_Pr,0x47,temp);
8532 SiS_SetCH701x(SiS_Pr,0x49,temp1);
8536 SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr)
8540 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8541 if(SiS_Pr->ChipType == SIS_740) {
8542 temp = SiS_GetCH701x(SiS_Pr,0x1c);
8544 SiS_SetCH701x(SiS_Pr,0x1c,temp);
8546 if(SiS_IsYPbPr(SiS_Pr)) {
8547 temp = SiS_GetCH701x(SiS_Pr,0x01);
8550 SiS_SetCH701x(SiS_Pr,0x01,temp);
8552 if(SiS_IsChScart(SiS_Pr)) {
8553 temp = SiS_GetCH701x(SiS_Pr,0x01);
8556 SiS_SetCH701x(SiS_Pr,0x01,temp);
8558 if(SiS_Pr->ChipType == SIS_740) {
8559 SiS_ChrontelResetVSync(SiS_Pr);
8560 SiS_SetCH701x(SiS_Pr,0x49,0x20); /* Enable TV path */
8562 SiS_SetCH701x(SiS_Pr,0x49,0x20); /* Enable TV path */
8563 temp = SiS_GetCH701x(SiS_Pr,0x49);
8564 if(SiS_IsYPbPr(SiS_Pr)) {
8565 temp = SiS_GetCH701x(SiS_Pr,0x73);
8567 SiS_SetCH701x(SiS_Pr,0x73,temp);
8569 temp = SiS_GetCH701x(SiS_Pr,0x47);
8571 SiS_SetCH701x(SiS_Pr,0x47,temp);
8572 SiS_LongDelay(SiS_Pr, 2);
8573 temp = SiS_GetCH701x(SiS_Pr,0x47);
8575 SiS_SetCH701x(SiS_Pr,0x47,temp);
8581 SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr)
8586 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8587 if(SiS_Pr->ChipType == SIS_740) {
8588 SiS_LongDelay(SiS_Pr, 1);
8589 SiS_GenericDelay(SiS_Pr, 5887);
8590 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8591 SiS_SetCH701x(SiS_Pr,0x66,0x00);
8593 SiS_LongDelay(SiS_Pr, 2);
8594 temp = SiS_GetCH701x(SiS_Pr,0x76);
8596 SiS_SetCH701x(SiS_Pr,0x76,temp);
8597 SiS_SetCH701x(SiS_Pr,0x66,0x00);
8603 SiS_ChrontelResetDB(struct SiS_Private *SiS_Pr)
8607 if(SiS_Pr->ChipType == SIS_740) {
8609 temp = SiS_GetCH701x(SiS_Pr,0x4a); /* Version ID */
8613 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8614 temp = SiS_GetCH701x(SiS_Pr,0x49);
8615 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
8619 SiS_SetCH701x(SiS_Pr,0x48,0x10);
8620 SiS_LongDelay(SiS_Pr, 1);
8621 SiS_SetCH701x(SiS_Pr,0x48,0x18);
8623 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8624 SiS_ChrontelResetVSync(SiS_Pr);
8625 SiS_SetCH701x(SiS_Pr,0x49,temp);
8631 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8633 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8634 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8636 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8637 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8639 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8640 temp = SiS_GetCH701x(SiS_Pr,0x61);
8642 SiS_SetCH701xForLCD(SiS_Pr);
8648 SiS_SetCH701x(SiS_Pr,0x48,0x10);
8649 SiS_LongDelay(SiS_Pr, 1);
8650 SiS_SetCH701x(SiS_Pr,0x48,0x18);
8655 SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr)
8659 if(SiS_Pr->ChipType == SIS_740) {
8661 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8662 SiS_ChrontelResetVSync(SiS_Pr);
8667 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* Power up LVDS block */
8668 temp = SiS_GetCH701x(SiS_Pr,0x49);
8671 temp = SiS_GetCH701x(SiS_Pr,0x47);
8673 SiS_SetCH701x(SiS_Pr,0x47,temp); /* enable VSYNC */
8674 SiS_LongDelay(SiS_Pr, 3);
8675 temp = SiS_GetCH701x(SiS_Pr,0x47);
8677 SiS_SetCH701x(SiS_Pr,0x47,temp); /* disable VSYNC */
8684 SiS_ChrontelDoSomething3(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
8688 if(SiS_Pr->ChipType == SIS_740) {
8690 temp = SiS_GetCH701x(SiS_Pr,0x61);
8693 SiS_SetCH701x(SiS_Pr,0x61,temp);
8695 SiS_SetCH701x(SiS_Pr,0x66,0x45); /* Panel power on */
8696 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* All power on */
8697 SiS_LongDelay(SiS_Pr, 1);
8698 SiS_GenericDelay(SiS_Pr, 5887);
8703 temp = SiS_GetCH701x(SiS_Pr,0x61);
8706 SiS_SetCH701x(SiS_Pr,0x61,temp);
8709 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8710 temp = SiS_GetCH701x(SiS_Pr,0x66);
8712 SiS_SetCH701x(SiS_Pr,0x66,temp);
8714 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8715 SiS_GenericDelay(SiS_Pr, 1023);
8717 SiS_GenericDelay(SiS_Pr, 767);
8721 SiS_GenericDelay(SiS_Pr, 767);
8723 temp = SiS_GetCH701x(SiS_Pr,0x76);
8725 SiS_SetCH701x(SiS_Pr,0x76,temp);
8726 temp = SiS_GetCH701x(SiS_Pr,0x66);
8728 SiS_SetCH701x(SiS_Pr,0x66,temp);
8729 SiS_LongDelay(SiS_Pr, 1);
8735 SiS_ChrontelDoSomething2(struct SiS_Private *SiS_Pr)
8739 SiS_LongDelay(SiS_Pr, 1);
8742 temp = SiS_GetCH701x(SiS_Pr,0x66);
8746 if(SiS_Pr->ChipType == SIS_740) {
8748 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8751 SiS_SetCH701xForLCD(SiS_Pr);
8753 temp = SiS_GetCH701x(SiS_Pr,0x76);
8755 SiS_SetCH701x(SiS_Pr,0x76,temp);
8756 SiS_LongDelay(SiS_Pr, 2);
8757 temp = SiS_GetCH701x(SiS_Pr,0x76);
8759 SiS_SetCH701x(SiS_Pr,0x76,temp);
8760 if(SiS_Pr->ChipType == SIS_740) {
8761 SiS_SetCH701x(SiS_Pr,0x78,0xe0); /* PLL loop filter */
8763 SiS_SetCH701x(SiS_Pr,0x78,0x60);
8765 SiS_LongDelay(SiS_Pr, 2);
8768 SiS_SetCH701x(SiS_Pr,0x77,0x00); /* MV? */
8772 SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr)
8776 temp = SiS_GetCH701x(SiS_Pr,0x03);
8779 SiS_SetCH701x(SiS_Pr,0x03,temp);
8781 if(SiS_Pr->ChipType == SIS_740) {
8783 temp = SiS_GetCH701x(SiS_Pr,0x1c);
8785 SiS_SetCH701x(SiS_Pr,0x1c,temp);
8787 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x03);
8789 temp = SiS_GetCH701x(SiS_Pr,0x64);
8791 SiS_SetCH701x(SiS_Pr,0x64,temp);
8793 temp = SiS_GetCH701x(SiS_Pr,0x03);
8795 SiS_SetCH701x(SiS_Pr,0x03,temp);
8797 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) {
8798 SiS_SetCH701x(SiS_Pr,0x63,0x40); /* LVDS off */
8799 SiS_LongDelay(SiS_Pr, 1);
8800 SiS_SetCH701x(SiS_Pr,0x63,0x00); /* LVDS on */
8801 SiS_ChrontelResetDB(SiS_Pr);
8802 SiS_ChrontelDoSomething2(SiS_Pr);
8803 SiS_ChrontelDoSomething3(SiS_Pr, 0);
8805 temp = SiS_GetCH701x(SiS_Pr,0x66);
8807 SiS_ChrontelResetDB(SiS_Pr);
8808 SiS_ChrontelDoSomething2(SiS_Pr);
8809 SiS_ChrontelDoSomething3(SiS_Pr, 0);
8815 SiS_ChrontelResetDB(SiS_Pr);
8816 SiS_ChrontelDoSomething2(SiS_Pr);
8817 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x34);
8818 SiS_ChrontelDoSomething3(SiS_Pr,temp);
8819 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* All power on, LVDS normal operation */
8831 SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
8834 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
8838 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
8840 if(!SiS_Pr->UseCustomMode) {
8841 SiS_SearchModeID(SiS_Pr, &ModeNo, &ModeIdIndex);
8847 SiS_Pr->SiS_SelectCRT2Rate = 4;
8849 SiS_UnLockCRT2(SiS_Pr);
8851 RefreshRateTableIndex = SiS_GetRatePtr(SiS_Pr, ModeNo, ModeIdIndex);
8853 SiS_SaveCRT2Info(SiS_Pr,ModeNo);
8855 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8856 SiS_DisableBridge(SiS_Pr);
8857 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->ChipType == SIS_730)) {
8858 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,0x80);
8860 SiS_SetCRT2ModeRegs(SiS_Pr, ModeNo, ModeIdIndex);
8863 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
8864 SiS_LockCRT2(SiS_Pr);
8865 SiS_DisplayOn(SiS_Pr);
8869 SiS_GetCRT2Data(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8872 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_LCDVDES = 0;
8873 if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
8874 ((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) ||
8875 ((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SIS30xBLV)) ) {
8876 SiS_GetLVDSDesData(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8879 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8880 SiS_SetGroup1(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8883 if(SiS_Pr->SiS_VBType & VB_SISVB) {
8885 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8887 SiS_SetGroup2(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8889 SiS_SetGroup2_C_ELV(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8891 SiS_SetGroup3(SiS_Pr, ModeNo, ModeIdIndex);
8892 SiS_SetGroup4(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8894 SiS_SetGroup4_C_ELV(SiS_Pr, ModeNo, ModeIdIndex);
8896 SiS_SetGroup5(SiS_Pr, ModeNo, ModeIdIndex);
8898 SiS_SetCRT2Sync(SiS_Pr, ModeNo, RefreshRateTableIndex);
8901 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
8903 if(!((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10)))) {
8904 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
8905 SiS_ModCRT1CRTC(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8908 SiS_SetCRT2ECLK(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8914 SiS_SetCRT2Sync(SiS_Pr, ModeNo, RefreshRateTableIndex);
8916 SiS_ModCRT1CRTC(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8918 SiS_SetCRT2ECLK(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8920 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8921 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
8922 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
8923 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8925 SiS_SetCH701xForLCD(SiS_Pr);
8929 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
8930 SiS_SetCHTVReg(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8938 if(SiS_Pr->ChipType < SIS_315H) {
8939 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8940 if(SiS_Pr->SiS_UseOEM) {
8941 if((SiS_Pr->SiS_UseROM) && (SiS_Pr->SiS_UseOEM == -1)) {
8943 SiS_OEM300Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8946 SiS_OEM300Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8949 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
8950 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
8951 (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
8952 SetOEMLCDData2(SiS_Pr, ModeNo, ModeIdIndex,RefreshRateTableIndex);
8954 SiS_DisplayOn(SiS_Pr);
8961 if(SiS_Pr->ChipType >= SIS_315H) {
8962 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8963 if(SiS_Pr->ChipType < SIS_661) {
8964 SiS_FinalizeLCD(SiS_Pr, ModeNo, ModeIdIndex);
8965 SiS_OEM310Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8967 SiS_OEM661Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8969 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x40);
8974 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8975 SiS_EnableBridge(SiS_Pr);
8978 SiS_DisplayOn(SiS_Pr);
8980 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
8981 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
8983 SiS_SetRegSR11ANDOR(SiS_Pr,0xFF,0x0C);
8986 SiS_SetCH70xxANDOR(SiS_Pr,0x0e,0x01,0xf8);
8990 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8991 SiS_LockCRT2(SiS_Pr);
9003 SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr)
9006 SiS_DDC2Delay(SiS_Pr,0xff00);
9007 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
9008 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
9009 SiS_WaitVBRetrace(SiS_Pr);
9011 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x01)) {
9012 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
9017 SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr)
9020 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFE);
9021 SiS_DDC2Delay(SiS_Pr,0xff00);
9029 SiS_SetupDDCN(struct SiS_Private *SiS_Pr)
9031 SiS_Pr->SiS_DDC_NData = ~SiS_Pr->SiS_DDC_Data;
9032 SiS_Pr->SiS_DDC_NClk = ~SiS_Pr->SiS_DDC_Clk;
9033 if((SiS_Pr->SiS_DDC_Index == 0x11) && (SiS_Pr->SiS_SensibleSR11)) {
9034 SiS_Pr->SiS_DDC_NData &= 0x0f;
9035 SiS_Pr->SiS_DDC_NClk &= 0x0f;
9041 SiS_SetTrumpBlockLoop(struct SiS_Private *SiS_Pr, unsigned char *dataptr)
9052 SiS_SetStop(SiS_Pr);
9053 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 2);
9055 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
9056 tempah = SiS_Pr->SiS_DDC_DeviceAddr;
9057 temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
9060 temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write register number */
9064 temp = SiS_WriteDDC2Data(SiS_Pr,tempah);/* Write DAB (S0=0=write) */
9068 if(SiS_SetStop(SiS_Pr)) continue;
9075 SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr)
9077 SiS_Pr->SiS_DDC_DeviceAddr = 0xF0; /* DAB (Device Address Byte) */
9078 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
9079 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
9080 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
9081 SiS_SetupDDCN(SiS_Pr);
9083 SiS_SetSwitchDDC2(SiS_Pr);
9086 dataptr = SiS_SetTrumpBlockLoop(SiS_Pr, dataptr);
9101 SiS_SetChReg(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val, unsigned short myor)
9107 SiS_SetStop(SiS_Pr);
9108 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 4);
9110 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
9111 temp = SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr); /* Write DAB (S0=0=write) */
9113 temp = SiS_WriteDDC2Data(SiS_Pr, (reg | myor)); /* Write RAB (700x: set bit 7, see datasheet) */
9115 temp = SiS_WriteDDC2Data(SiS_Pr, val); /* Write data */
9117 if(SiS_SetStop(SiS_Pr)) continue; /* Set stop condition */
9118 SiS_Pr->SiS_ChrontelInit = 1;
9126 SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
9128 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
9130 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9132 if(!(SiS_Pr->SiS_ChrontelInit)) {
9133 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
9134 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
9135 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
9136 SiS_SetupDDCN(SiS_Pr);
9139 if( (!(SiS_SetChReg(SiS_Pr, reg, val, 0x80))) &&
9140 (!(SiS_Pr->SiS_ChrontelInit)) ) {
9141 SiS_Pr->SiS_DDC_Index = 0x0a;
9142 SiS_Pr->SiS_DDC_Data = 0x80;
9143 SiS_Pr->SiS_DDC_Clk = 0x40;
9144 SiS_SetupDDCN(SiS_Pr);
9146 SiS_SetChReg(SiS_Pr, reg, val, 0x80);
9153 SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
9155 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
9156 SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
9157 SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
9158 SiS_SetupDDCN(SiS_Pr);
9159 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
9160 SiS_SetChReg(SiS_Pr, reg, val, 0);
9165 SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
9167 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
9168 SiS_SetCH700x(SiS_Pr, reg, val);
9170 SiS_SetCH701x(SiS_Pr, reg, val);
9174 SiS_GetChReg(struct SiS_Private *SiS_Pr, unsigned short myor)
9180 SiS_SetStop(SiS_Pr);
9181 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 4);
9183 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
9184 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_DeviceAddr); /* Write DAB (S0=0=write) */
9186 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_ReadAddr | myor); /* Write RAB (700x: | 0x80) */
9188 if (SiS_SetStart(SiS_Pr)) continue; /* Re-start */
9189 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_DeviceAddr | 0x01);/* DAB (S0=1=read) */
9191 tempah = SiS_ReadDDC2Data(SiS_Pr); /* Read byte */
9192 if(SiS_SetStop(SiS_Pr)) continue; /* Stop condition */
9193 SiS_Pr->SiS_ChrontelInit = 1;
9202 SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempbx)
9206 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
9208 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9210 if(!(SiS_Pr->SiS_ChrontelInit)) {
9211 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
9212 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
9213 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
9214 SiS_SetupDDCN(SiS_Pr);
9217 SiS_Pr->SiS_DDC_ReadAddr = tempbx;
9219 if( ((result = SiS_GetChReg(SiS_Pr,0x80)) == 0xFFFF) &&
9220 (!SiS_Pr->SiS_ChrontelInit) ) {
9222 SiS_Pr->SiS_DDC_Index = 0x0a;
9223 SiS_Pr->SiS_DDC_Data = 0x80;
9224 SiS_Pr->SiS_DDC_Clk = 0x40;
9225 SiS_SetupDDCN(SiS_Pr);
9227 result = SiS_GetChReg(SiS_Pr,0x80);
9235 SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempbx)
9237 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
9238 SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
9239 SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
9240 SiS_SetupDDCN(SiS_Pr);
9241 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
9243 SiS_Pr->SiS_DDC_ReadAddr = tempbx;
9245 return SiS_GetChReg(SiS_Pr,0);
9252 SiS_GetCH70xx(struct SiS_Private *SiS_Pr, unsigned short tempbx)
9254 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
9255 return SiS_GetCH700x(SiS_Pr, tempbx);
9257 return SiS_GetCH701x(SiS_Pr, tempbx);
9261 SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
9266 tempbl = (SiS_GetCH70xx(SiS_Pr, (reg & 0xFF)) & myand) | myor;
9267 SiS_SetCH70xx(SiS_Pr, reg, tempbl);
9273 SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
9288 SiS_Pr->SiS_ChrontelInit = 0; /* force re-detection! */
9290 SiS_Pr->SiS_DDC_SecAddr = 0;
9291 SiS_Pr->SiS_DDC_DeviceAddr = ddcdtype[DDCdatatype];
9292 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_P3c4;
9293 SiS_Pr->SiS_DDC_Index = 0x11;
9296 cr32 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x32);
9319 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
9320 SiS_Pr->SiS_DDC_Index = 0x0f;
9351 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
9352 SiS_Pr->SiS_DDC_Index = 0x0f;
9374 SiS_Pr->SiS_DDC_Data = 0x02 << temp;
9375 SiS_Pr->SiS_DDC_Clk = 0x01 << temp;
9377 SiS_SetupDDCN(SiS_Pr);
9383 SiS_WriteDABDDC(struct SiS_Private *SiS_Pr)
9385 if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
9386 if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr)) {
9389 if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_SecAddr)) {
9396 SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr)
9398 if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
9399 if(SiS_WriteDDC2Data(SiS_Pr, (SiS_Pr->SiS_DDC_DeviceAddr | 0x01))) {
9406 SiS_PrepareDDC(struct SiS_Private *SiS_Pr)
9408 if(SiS_WriteDABDDC(SiS_Pr)) SiS_WriteDABDDC(SiS_Pr);
9409 if(SiS_PrepareReadDDC(SiS_Pr)) return (SiS_PrepareReadDDC(SiS_Pr));
9414 SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno)
9416 SiS_SetSCLKLow(SiS_Pr);
9418 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9419 SiS_Pr->SiS_DDC_Index,
9420 SiS_Pr->SiS_DDC_NData,
9421 SiS_Pr->SiS_DDC_Data);
9423 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9424 SiS_Pr->SiS_DDC_Index,
9425 SiS_Pr->SiS_DDC_NData,
9428 SiS_SetSCLKHigh(SiS_Pr);
9432 SiS_DoProbeDDC(struct SiS_Private *SiS_Pr)
9438 SiS_SetSwitchDDC2(SiS_Pr);
9439 if(SiS_PrepareDDC(SiS_Pr)) {
9440 SiS_SetStop(SiS_Pr);
9445 if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
9446 temp = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9447 SiS_SendACK(SiS_Pr, 0);
9457 temp = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9458 SiS_SendACK(SiS_Pr, 1);
9463 if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
9468 SiS_SetStop(SiS_Pr);
9474 SiS_ProbeDDC(struct SiS_Private *SiS_Pr)
9479 SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
9480 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x02;
9481 SiS_Pr->SiS_DDC_DeviceAddr = 0xa2;
9482 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x08;
9483 SiS_Pr->SiS_DDC_DeviceAddr = 0xa6;
9484 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x10;
9491 SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype, unsigned char *buffer)
9499 SiS_SetSwitchDDC2(SiS_Pr);
9500 if(!(SiS_PrepareDDC(SiS_Pr))) {
9506 buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9509 SiS_SendACK(SiS_Pr, 0);
9511 buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9513 SiS_SendACK(SiS_Pr, 1);
9519 SiS_SetStop(SiS_Pr);
9529 we use our pre-detected pSiS-values instead of SiS_Pr as
9545 SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
9561 if(SiS_InitDDCRegs(SiS_Pr, VBFlags, VGAEngine, adaptnum, DDCdatatype, false, VBFlags2) == 0xFFFF)
9564 sr1f = SiS_GetReg(SiS_Pr->SiS_P3c4,0x1f);
9565 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x1f,0x3f,0x04);
9567 cr17 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x17) & 0x80;
9569 SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x17,0x80);
9570 SiS_SetReg(SiS_Pr->SiS_P3c4,0x00,0x01);
9571 SiS_SetReg(SiS_Pr->SiS_P3c4,0x00,0x03);
9575 SiS_WaitRetrace1(SiS_Pr);
9576 SiS_WaitRetrace1(SiS_Pr);
9577 SiS_WaitRetrace1(SiS_Pr);
9578 SiS_WaitRetrace1(SiS_Pr);
9582 result = SiS_ProbeDDC(SiS_Pr);
9584 result = SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer);
9591 if(!SiS_Pr->DDCPortMixup) {
9601 SiS_SetReg(SiS_Pr->SiS_P3c4,0x1f,sr1f);
9603 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x17,0x7f,cr17);
9611 SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr)
9613 SiS_SetSCLKHigh(SiS_Pr);
9614 SiS_WaitRetrace1(SiS_Pr);
9616 SiS_SetSCLKLow(SiS_Pr);
9617 SiS_WaitRetrace1(SiS_Pr);
9621 SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr)
9623 SiS_WaitRetrace1(SiS_Pr);
9624 return ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x02) >> 1);
9630 SiS_SetStart(struct SiS_Private *SiS_Pr)
9632 if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9633 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9634 SiS_Pr->SiS_DDC_Index,
9635 SiS_Pr->SiS_DDC_NData,
9636 SiS_Pr->SiS_DDC_Data); /* SD->high */
9637 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
9638 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9639 SiS_Pr->SiS_DDC_Index,
9640 SiS_Pr->SiS_DDC_NData,
9642 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9649 SiS_SetStop(struct SiS_Private *SiS_Pr)
9651 if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9652 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9653 SiS_Pr->SiS_DDC_Index,
9654 SiS_Pr->SiS_DDC_NData,
9656 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
9657 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9658 SiS_Pr->SiS_DDC_Index,
9659 SiS_Pr->SiS_DDC_NData,
9660 SiS_Pr->SiS_DDC_Data); /* SD->high = stop condition */
9661 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->high) */
9667 SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax)
9673 SiS_SetSCLKLow(SiS_Pr); /* SC->low */
9675 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9676 SiS_Pr->SiS_DDC_Index,
9677 SiS_Pr->SiS_DDC_NData,
9678 SiS_Pr->SiS_DDC_Data); /* Write bit (1) to SD */
9680 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9681 SiS_Pr->SiS_DDC_Index,
9682 SiS_Pr->SiS_DDC_NData,
9685 SiS_SetSCLKHigh(SiS_Pr); /* SC->high */
9688 temp = SiS_CheckACK(SiS_Pr); /* Check acknowledge */
9693 SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr)
9700 SiS_SetSCLKLow(SiS_Pr);
9701 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9702 SiS_Pr->SiS_DDC_Index,
9703 SiS_Pr->SiS_DDC_NData,
9704 SiS_Pr->SiS_DDC_Data);
9705 SiS_SetSCLKHigh(SiS_Pr);
9706 temp = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);
9707 if(temp & SiS_Pr->SiS_DDC_Data) getdata |= 0x01;
9713 SiS_SetSCLKLow(struct SiS_Private *SiS_Pr)
9715 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9716 SiS_Pr->SiS_DDC_Index,
9717 SiS_Pr->SiS_DDC_NClk,
9719 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9724 SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr)
9728 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9729 SiS_Pr->SiS_DDC_Index,
9730 SiS_Pr->SiS_DDC_NClk,
9731 SiS_Pr->SiS_DDC_Clk); /* SetSCLKHigh() */
9733 temp = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);
9734 } while((!(temp & SiS_Pr->SiS_DDC_Clk)) && --watchdog);
9738 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9745 SiS_CheckACK(struct SiS_Private *SiS_Pr)
9749 SiS_SetSCLKLow(SiS_Pr); /* (SC->low) */
9750 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9751 SiS_Pr->SiS_DDC_Index,
9752 SiS_Pr->SiS_DDC_NData,
9753 SiS_Pr->SiS_DDC_Data); /* (SD->high) */
9754 SiS_SetSCLKHigh(SiS_Pr); /* SC->high = clock impulse for ack */
9755 tempah = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index); /* Read SD */
9756 SiS_SetSCLKLow(SiS_Pr); /* SC->low = end of clock impulse */
9757 if(tempah & SiS_Pr->SiS_DDC_Data) return 1; /* Ack OK if bit = 0 */
9769 GetRAMDACromptr(struct SiS_Private *SiS_Pr)
9771 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9774 if(SiS_Pr->ChipType < SIS_330) {
9776 if(SiS_Pr->SiS_VBType & VB_SIS30xB)
9780 if(SiS_Pr->SiS_VBType & VB_SIS30xB)
9787 GetLCDromptr(struct SiS_Private *SiS_Pr)
9789 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9792 if(SiS_Pr->ChipType < SIS_330) {
9794 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9798 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9805 GetTVromptr(struct SiS_Private *SiS_Pr)
9807 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9810 if(SiS_Pr->ChipType < SIS_330) {
9812 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9816 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9823 GetLCDPtrIndexBIOS(struct SiS_Private *SiS_Pr)
9827 if((IS_SIS650) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
9828 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
9829 if((index = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0xf0)) {
9832 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9833 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9839 index = SiS_GetBIOSLCDResInfo(SiS_Pr) & 0x0F;
9840 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) index -= 5;
9841 if(SiS_Pr->SiS_VBType & VB_SIS301C) { /* 1.15.20 and later (not VB specific) */
9842 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) index -= 5;
9843 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x768) index -= 5;
9845 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) index -= 6;
9849 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9850 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9855 GetLCDPtrIndex(struct SiS_Private *SiS_Pr)
9859 index = ((SiS_GetBIOSLCDResInfo(SiS_Pr) & 0x0F) - 1) * 3;
9860 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9861 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9866 GetTVPtrIndex(struct SiS_Private *SiS_Pr)
9871 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 1;
9872 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) index = 2;
9874 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) index = 0;
9878 if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) &&
9879 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
9887 GetOEMTVPtr661_2_GEN(struct SiS_Private *SiS_Pr, int addme)
9891 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 1;
9892 if(SiS_Pr->SiS_TVMode & TVSetPALM) index = 2;
9893 if(SiS_Pr->SiS_TVMode & TVSetPALN) index = 3;
9894 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) index = 6;
9895 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
9897 if(SiS_Pr->SiS_TVMode & TVSetPALM) index++;
9898 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) index = 7;
9901 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
9902 if((!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
9903 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
9913 GetOEMTVPtr661_2_OLD(struct SiS_Private *SiS_Pr)
9915 return (GetOEMTVPtr661_2_GEN(SiS_Pr, 8));
9920 GetOEMTVPtr661_2_NEW(struct SiS_Private *SiS_Pr)
9922 return (GetOEMTVPtr661_2_GEN(SiS_Pr, 6));
9927 GetOEMTVPtr661(struct SiS_Private *SiS_Pr)
9931 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 2;
9932 if(SiS_Pr->SiS_ROMNew) {
9933 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) index = 4;
9934 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) index = 6;
9935 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) index = 8;
9936 if(SiS_Pr->SiS_TVMode & TVSetHiVision) index = 10;
9938 if(SiS_Pr->SiS_TVMode & TVSetHiVision) index = 4;
9939 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) index = 6;
9940 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) index = 8;
9941 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) index = 10;
9944 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) index++;
9950 SetDelayComp(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
9952 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9956 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
9957 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x20,0xbf);
9959 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x35,0x7f);
9964 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) { /* ------------ VGA */
9966 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9967 romptr = GetRAMDACromptr(SiS_Pr);
9972 if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
9980 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
9985 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD|SetCRT2ToLCDA)) { /* ---------- LCD/LCDA */
9991 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
9992 if(SiS_Pr->PDC != -1) {
9993 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((SiS_Pr->PDC >> 1) & 0x0f));
9994 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((SiS_Pr->PDC & 0x01) << 7));
9998 if(SiS_Pr->PDCA != -1) {
9999 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((SiS_Pr->PDCA << 3) & 0xf0));
10000 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((SiS_Pr->PDCA & 0x01) << 6));
10007 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) {
10008 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10010 if((SiS_Pr->PanelXRes <= 1280) && (SiS_Pr->PanelYRes <= 1024)) {
10013 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,delay);
10016 if(SiS_Pr->SiS_VBType & VB_SIS301C) {
10018 if((SiS_Pr->PanelXRes > 1280) && (SiS_Pr->PanelYRes > 1024)) {
10021 } else if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10025 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,delay);
10035 switch(SiS_Pr->SiS_CustomT) {
10038 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
10052 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10056 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2D,delay);
10066 index = GetLCDPtrIndexBIOS(SiS_Pr);
10067 myindex = GetLCDPtrIndex(SiS_Pr);
10069 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
10071 if(SiS_IsNotM650orLater(SiS_Pr)) {
10073 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
10077 /* if(SiS_Pr->SiS_VBType & VB_SIS302LV) */
10088 if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV))
10093 } else if(SiS_Pr->SiS_UseROM &&
10094 (!(SiS_Pr->SiS_ROMNew)) &&
10095 (SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) &&
10096 (SiS_Pr->SiS_LCDResInfo != Panel_1280x768) &&
10097 (SiS_Pr->SiS_LCDResInfo != Panel_1280x960) &&
10098 (SiS_Pr->SiS_LCDResInfo != Panel_1600x1200) &&
10099 ((romptr = GetLCDromptr(SiS_Pr)))) {
10105 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
10113 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10115 else if(SiS_Pr->ChipType <= SIS_315PRO) delay = SiS310_LCDDelayCompensation_3xx301LV[myindex];
10117 } else if(SiS_Pr->SiS_VBType & VB_SIS301C) {
10120 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) delay = 0x00; /* experience */
10121 } else if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
10130 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10131 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0x0F,((delay << 4) & 0xf0));
10135 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* ------------ TV */
10137 index = GetTVPtrIndex(SiS_Pr);
10139 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
10141 if(SiS_IsNotM650orLater(SiS_Pr)) {
10143 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
10147 /* if(SiS_Pr->SiS_VBType & VB_SIS302LV) */
10160 switch(SiS_Pr->SiS_CustomT) {
10175 if(SiS_Pr->SiS_VBType & VB_SIS302LV) {
10181 } else if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
10183 romptr = GetTVromptr(SiS_Pr);
10187 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
10194 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10200 if(SiS_Pr->SiS_VBType & VB_SIS301C) delay = 0x02;
10206 if(SiS_LCDAEnabled(SiS_Pr)) {
10215 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10217 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS) && dochiptest) {
10219 temp = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0xf0) >> 4;
10229 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2D,delay);
10233 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
10239 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10240 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
10242 if(IS_SIS650 && (SiS_Pr->SiS_IF_DEF_CH70xx != 0)) {
10244 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0x0F,delay);
10246 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
10255 SetAntiFlicker(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10257 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10260 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p|TVSetYPbPr525p)) return;
10263 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVFlickerIndex;
10265 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVFlickerIndex;
10267 temp = GetTVPtrIndex(SiS_Pr);
10271 if(SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
10272 if(SiS_Pr->ChipType >= SIS_661) {
10273 temp1 = GetOEMTVPtr661(SiS_Pr);
10276 if(SiS_Pr->ChipType >= SIS_760) {
10279 } else if(SiS_Pr->ChipType >= SIS_330) {
10294 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0A,0x8f,temp); /* index 0A D[6:4] */
10298 SetEdgeEnhance(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10300 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10303 temp = temp1 = GetTVPtrIndex(SiS_Pr) >> 1; /* 0: NTSC/YPbPr, 1: PAL, 2: HiTV */
10306 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVEdgeIndex;
10308 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVEdgeIndex;
10310 if(SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
10311 if(SiS_Pr->ChipType >= SIS_661) {
10313 if(SiS_Pr->ChipType >= SIS_760) {
10316 temp1 = GetOEMTVPtr661(SiS_Pr);
10318 } else if(SiS_Pr->ChipType >= SIS_330) {
10332 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x3A,0x1F,temp); /* index 0A D[7:5] */
10336 SetYFilter(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10341 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVYFilterIndex;
10343 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVYFilterIndex;
10346 temp = GetTVPtrIndex(SiS_Pr) >> 1; /* 0: NTSC/YPbPr, 1: PAL, 2: HiTV */
10348 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp = 1; /* NTSC-J uses PAL */
10349 else if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 3; /* PAL-M */
10350 else if(SiS_Pr->SiS_TVMode & TVSetPALN) temp = 4; /* PAL-N */
10351 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) temp = 1; /* HiVision uses PAL */
10353 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10355 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter2[temp][index][j]);
10358 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter2[temp][index][j]);
10362 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter1[temp][index][j]);
10368 SetPhaseIncr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10370 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10374 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) return;
10377 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) return;
10379 if((SiS_Pr->ChipType >= SIS_661) || SiS_Pr->SiS_ROMNew) {
10380 lindex = GetOEMTVPtr661_2_OLD(SiS_Pr) & 0xffff;
10383 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS_TVPhase[lindex + j]);
10389 if(SiS_Pr->SiS_TVMode & (TVSetPALM | TVSetPALN)) return;
10392 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
10394 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
10397 temp = GetTVPtrIndex(SiS_Pr);
10401 if(SiS_Pr->SiS_UseROM) {
10403 if(SiS_Pr->ChipType >= SIS_330) {
10406 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10408 if(SiS_Pr->ChipType >= SIS_330) {
10411 if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) && (!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode))) {
10413 if(SiS_Pr->ChipType >= SIS_330) {
10422 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
10428 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV))
10429 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr1[temp][index][j]);
10430 else if((!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) || (SiS_Pr->SiS_TVMode & TVSetTVSimuMode))
10431 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr2[temp][index][j]);
10433 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr1[temp][index][j]);
10437 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision))) {
10438 if((!(SiS_Pr->SiS_TVMode & (TVSetPAL | TVSetYPbPr525p | TVSetYPbPr750p))) && (ModeNo > 0x13)) {
10441 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x31,0x21);
10442 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x32,0xf0);
10443 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x33,0xf5);
10444 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x34,0x7f);
10446 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x31,0x1e);
10447 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x32,0x8b);
10448 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x33,0xfb);
10449 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x34,0x7b);
10456 SetDelayComp661(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10460 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10462 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV | SetCRT2ToLCD | SetCRT2ToLCDA | SetCRT2ToRAMDAC)))
10468 if(SiS_Pr->SiS_ROMNew) {
10469 if((SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) ||
10470 ((SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) &&
10471 (SiS_Pr->SiS_LCDInfo & LCDPass11))) {
10473 if(SiS_Pr->UseCustomMode) {
10474 index = SiS_Pr->CSRClock;
10476 index = SiS_GetVCLK2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RTI);
10477 index = SiS_Pr->SiS_VCLKData[index].CLOCK;
10481 if((ROMAddr[0x5b] & 0x80) || (SiS_Pr->SiS_VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToLCD))) {
10486 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToLCD)) {
10487 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((delay >> 1) & 0x0f));
10488 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((delay & 0x01) << 7));
10490 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((delay << 3) & 0xf0));
10491 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((delay & 0x01) << 6));
10499 if(SiS_Pr->UseCustomMode) delay = 0x04;
10501 else delay = (SiS_Pr->SiS_RefIndex[RTI].Ext_PDC >> 4);
10504 if(SiS_Pr->ChipType >= XGI_20) {
10507 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10510 if(SiS_Pr->SiS_XGIROM) {
10511 index = GetTVPtrIndex(SiS_Pr);
10518 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
10519 if(SiS_Pr->ChipType == XGI_40 && SiS_Pr->ChipRevision == 0x02) {
10525 } else if(SiS_Pr->ChipType >= SIS_340) {
10528 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10533 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10537 index = GetOEMTVPtr661(SiS_Pr);
10538 if(SiS_Pr->SiS_ROMNew) {
10540 if(SiS_Pr->SiS_VBType & VB_UMC) romptr += 12;
10547 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10551 if( (SiS_Pr->SiS_LCDResInfo != Panel_Custom) &&
10552 ((romptr = GetLCDStructPtr661_2(SiS_Pr))) ) {
10554 lcdpdcindex = (SiS_Pr->SiS_VBType & VB_UMC) ? 14 : 12;
10564 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
10565 switch(SiS_Pr->SiS_LCDResInfo) {
10578 if((SiS_Pr->PanelXRes <= 1024) && (SiS_Pr->PanelYRes <= 768)) {
10580 } else if((SiS_Pr->PanelXRes == 1280) && (SiS_Pr->PanelYRes == 1024)) {
10582 } else if((SiS_Pr->PanelXRes <= 1400) && (SiS_Pr->PanelYRes <= 1050)) {
10584 } else if((SiS_Pr->PanelXRes <= 1600) && (SiS_Pr->PanelYRes <= 1200)) {
10594 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->PDC != -1)) {
10595 delay = SiS_Pr->PDC & 0x1f;
10597 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) && (SiS_Pr->PDCA != -1)) {
10598 delay = (SiS_Pr->PDCA & 0x1f) << 8;
10605 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10607 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((delay << 3) & 0xf0));
10608 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((delay & 0x01) << 6));
10610 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((delay >> 1) & 0x0f));
10611 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((delay & 0x01) << 7));
10616 SetCRT2SyncDither661(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short RTI)
10621 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10624 infoflag = SiS_GetRegByte(SiS_Pr->SiS_P3ca+2);
10625 } else if(SiS_Pr->UseCustomMode) {
10626 infoflag = SiS_Pr->CInfoFlag;
10628 infoflag = SiS_Pr->SiS_RefIndex[RTI].Ext_InfoFlag;
10631 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
10632 infoflag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37); /* No longer check D5 */
10637 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
10639 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
10641 if(SiS_Pr->SiS_ModeType >= Mode24Bpp) temp |= 0x10;
10643 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xe0,temp);
10646 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) temp = 0x20;
10648 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0f,temp);
10650 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
10651 if(SiS_Pr->SiS_ModeType >= Mode24Bpp) temp |= 0x80;
10653 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1a,0x7f,temp);
10660 SetPanelParms661(struct SiS_Private *SiS_Pr)
10662 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10665 if(SiS_Pr->SiS_VBType & (VB_SISLVDS | VB_SIS30xC)) {
10666 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x24,0x0f);
10669 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10670 if(SiS_Pr->LVDSHL != -1) {
10671 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,SiS_Pr->LVDSHL);
10675 if(SiS_Pr->SiS_ROMNew) {
10677 if((romptr = GetLCDStructPtr661_2(SiS_Pr))) {
10678 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10681 if(SiS_Pr->LVDSHL != -1) {
10685 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,temp2,temp1);
10687 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
10689 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0d,0xbf,temp1);
10697 SiS_OEM310Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RRTI)
10699 if((SiS_Pr->SiS_ROMNew) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
10700 SetDelayComp661(SiS_Pr, ModeNo, ModeIdIndex, RRTI);
10701 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10702 SetCRT2SyncDither661(SiS_Pr, ModeNo, RRTI);
10703 SetPanelParms661(SiS_Pr);
10706 SetDelayComp(SiS_Pr,ModeNo);
10709 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
10710 SetAntiFlicker(SiS_Pr,ModeNo,ModeIdIndex);
10711 SetPhaseIncr(SiS_Pr,ModeNo,ModeIdIndex);
10712 SetYFilter(SiS_Pr,ModeNo,ModeIdIndex);
10713 if(SiS_Pr->SiS_VBType & VB_SIS301) {
10714 SetEdgeEnhance(SiS_Pr,ModeNo,ModeIdIndex);
10720 SiS_OEM661Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10723 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10725 SetDelayComp661(SiS_Pr, ModeNo, ModeIdIndex, RRTI);
10727 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10728 SetCRT2SyncDither661(SiS_Pr, ModeNo, RRTI);
10729 SetPanelParms661(SiS_Pr);
10732 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10733 SetPhaseIncr(SiS_Pr, ModeNo, ModeIdIndex);
10734 SetYFilter(SiS_Pr, ModeNo, ModeIdIndex);
10735 SetAntiFlicker(SiS_Pr, ModeNo, ModeIdIndex);
10736 if(SiS_Pr->SiS_VBType & VB_SIS301) {
10737 SetEdgeEnhance(SiS_Pr, ModeNo, ModeIdIndex);
10751 SiS_FinalizeLCD(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10756 if(!(SiS_Pr->SiS_VBType & VB_SISLVDS)) return;
10757 if(SiS_Pr->SiS_ROMNew) return;
10759 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10760 if(SiS_Pr->LVDSHL != -1) {
10761 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,SiS_Pr->LVDSHL);
10765 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) return;
10766 if(SiS_Pr->UseCustomMode) return;
10768 switch(SiS_Pr->SiS_CustomT) {
10777 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
10778 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
10780 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
10781 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
10785 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4, 0x5f) & 0xf0)) {
10786 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) {
10787 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x02);
10789 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
10794 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) {
10795 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10797 if(SiS_Pr->LVDSHL == -1) {
10798 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10804 if(SiS_Pr->SiS_CustomT == CUT_CLEVO10242) {
10805 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10806 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10807 if(SiS_Pr->LVDSHL == -1) {
10809 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10811 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10812 tempch = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
10814 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10815 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x25);
10816 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x00);
10817 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
10825 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10826 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10827 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
10828 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2a,0x00);
10830 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
10832 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
10834 } else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
10835 if(SiS_Pr->LVDSHL == -1) {
10837 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10840 tempch = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
10841 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10842 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) {
10843 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1f,0x76);
10844 } else if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10846 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10847 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x25);
10848 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x00);
10849 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
10851 if(SiS_Pr->Backup && (SiS_Pr->Backup_Mode == ModeNo)) {
10852 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,SiS_Pr->Backup_14);
10853 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,SiS_Pr->Backup_15);
10854 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,SiS_Pr->Backup_16);
10855 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,SiS_Pr->Backup_17);
10856 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,SiS_Pr->Backup_18);
10857 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,SiS_Pr->Backup_19);
10858 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1a,SiS_Pr->Backup_1a);
10859 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,SiS_Pr->Backup_1b);
10860 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,SiS_Pr->Backup_1c);
10861 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,SiS_Pr->Backup_1d);
10862 } else if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) { /* 1.10.8w */
10863 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,0x90);
10865 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x11);
10867 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x18);
10870 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10872 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02); /* 1.10.7u */
10877 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,temp);
10879 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1d,0xf8,temp);
10884 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x70);
10885 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xff);
10886 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x48);
10887 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x12);
10890 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,0x20);
10891 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,0x1a);
10892 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,0x28);
10893 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,0x00);
10894 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x4c);
10895 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xdc);
10899 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x95);
10900 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xdc);
10901 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1a,0x10);
10902 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x95);
10903 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x48);
10904 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x12);
10907 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x95);
10908 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x48);
10911 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x95);
10919 tempcl = tempbh = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x01);
10923 tempbl = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x04);
10925 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10926 if((resinfo == SIS_RI_1024x768) || (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD))) {
10927 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
10931 if(SiS_Pr->SiS_VGAVDE < 600) {
10932 tempax = 768 - SiS_Pr->SiS_VGAVDE;
10934 if(SiS_Pr->SiS_VGAVDE <= 480) tempax >>= 4; /* 1.10.7w; 1.10.6s: < 480; >>=1; */
10941 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,temp);
10943 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,temp);
10955 SetOEMLCDData2(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex,
10963 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
10964 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
10966 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
10967 crt2crtc = SiS_Pr->SiS_RefIndex[RefTabIndex].Ext_CRT2CRTC;
10972 if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
10973 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xdf);
10976 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
10979 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
10982 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,
10989 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
10991 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x18);
10993 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,temp);
10999 GetOEMLCDPtr(struct SiS_Private *SiS_Pr, int Flag)
11001 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11012 if(SiS_Pr->ChipType == SIS_300) {
11014 tempbx = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0x0f;
11015 if(SiS_Pr->SiS_VBType & VB_SIS301) tempbx &= 0x07;
11017 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 4;
11018 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
11019 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 3;
11021 if(SiS_Pr->SiS_UseROM) {
11023 tempbx = SiS_Pr->SiS_LCDTypeInfo;
11026 if(romptr) tempbx = ROMAddr[romptr + SiS_Pr->SiS_LCDTypeInfo];
11027 else tempbx = customtable300[SiS_Pr->SiS_LCDTypeInfo];
11031 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx++;
11038 if(SiS_Pr->SiS_UseROM) {
11040 if(romptr) tempbx = ROMAddr[romptr + SiS_Pr->SiS_LCDTypeInfo];
11043 tempbx = customtable630[SiS_Pr->SiS_LCDTypeInfo];
11047 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempbx += 2;
11048 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
11051 tempbx = SiS_Pr->SiS_LCDTypeInfo << 2;
11052 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempbx += 2;
11053 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
11061 SetOEMLCDDelay(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
11063 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11066 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) return;
11068 if(SiS_Pr->SiS_UseROM) {
11081 if(SiS_Pr->PDC != -1) return;
11083 temp = GetOEMLCDPtr(SiS_Pr, 0);
11085 if(SiS_Pr->UseCustomMode)
11088 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_LCDDelayIndex;
11090 if(SiS_Pr->ChipType != SIS_300) {
11097 if(SiS_Pr->SiS_VBType & VB_SISVB) {
11104 if(SiS_Pr->SiS_UseROM && (ROMAddr[0x235] & 0x80)) {
11114 if(SiS_Pr->SiS_UseROM) {
11130 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp); /* index 0A D[6:4] */
11134 SetOEMLCDData(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
11137 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11140 if((SiS_Pr->SiS_UseROM) {
11146 temp = GetOEMLCDPtr(SiS_Pr, 1);
11149 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex]._VB_LCDHIndex;
11151 SiS_SetReg(SiS_Pr->SiS_Part1Port,i,SiS300_LCDHData[temp][index][j]);
11155 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex]._VB_LCDVIndex;
11160 SiS_SetReg(SiS_Pr->SiS_Part1Port,i,SiS300_LCDVData[temp][index][j]);
11166 GetOEMTVPtr(struct SiS_Private *SiS_Pr)
11171 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) index += 4;
11172 if(SiS_Pr->SiS_VBType & VB_SISVB) {
11173 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) index += 2;
11174 else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) index += 3;
11175 else if(SiS_Pr->SiS_TVMode & TVSetPAL) index += 1;
11177 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) index += 2;
11178 if(SiS_Pr->SiS_TVMode & TVSetPAL) index += 1;
11184 SetOEMTVDelay(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
11186 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11189 if(SiS_Pr->SiS_UseROM) {
11195 temp = GetOEMTVPtr(SiS_Pr);
11197 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVDelayIndex;
11205 if(SiS_Pr->SiS_VBType & VB_SISVB) {
11212 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp);
11216 SetOEMAntiFlicker(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
11218 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11221 if(SiS_Pr->SiS_UseROM) {
11227 temp = GetOEMTVPtr(SiS_Pr);
11229 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVFlickerIndex;
11240 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0A,0x8F,temp);
11244 SetOEMPhaseIncr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
11246 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11249 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) return;
11251 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSetNTSCJ | TVSetPALM | TVSetPALN)) return;
11253 if(SiS_Pr->SiS_UseROM) {
11259 temp = GetOEMTVPtr(SiS_Pr);
11261 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVPhaseIndex;
11263 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
11265 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Phase2[temp][index][j]);
11273 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
11277 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Phase1[temp][index][j]);
11284 SetOEMYFilter(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
11286 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11289 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSCART | SetCRT2ToHiVision | SetCRT2ToYPbPr525750)) return;
11291 if(SiS_Pr->SiS_UseROM) {
11297 temp = GetOEMTVPtr(SiS_Pr);
11299 if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 8;
11300 else if(SiS_Pr->SiS_TVMode & TVSetPALN) temp = 9;
11303 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVYFilterIndex;
11305 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
11307 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter2[temp][index][j]);
11310 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter2[temp][index][j]);
11313 if((romptr) && (!(SiS_Pr->SiS_TVMode & (TVSetPALM|TVSetPALN)))) {
11318 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
11322 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter1[temp][index][j]);
11329 SiS_SearchVBModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo)
11332 unsigned char VGAINFO = SiS_Pr->SiS_VGAINFO;
11337 if(SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].ModeID == *ModeNo) break;
11338 if(SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].ModeID == 0xFF) return 0;
11353 SiS_OEM300Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
11358 if(!SiS_Pr->UseCustomMode) {
11359 OEMModeIdIndex = SiS_SearchVBModeID(SiS_Pr,&ModeNo);
11363 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
11364 SetOEMLCDDelay(SiS_Pr, ModeNo, OEMModeIdIndex);
11365 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
11366 SetOEMLCDData(SiS_Pr, ModeNo, OEMModeIdIndex);
11369 if(SiS_Pr->UseCustomMode) return;
11370 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
11371 SetOEMTVDelay(SiS_Pr, ModeNo,OEMModeIdIndex);
11372 if(SiS_Pr->SiS_VBType & VB_SISVB) {
11373 SetOEMAntiFlicker(SiS_Pr, ModeNo, OEMModeIdIndex);
11374 SetOEMPhaseIncr(SiS_Pr, ModeNo, OEMModeIdIndex);
11375 SetOEMYFilter(SiS_Pr, ModeNo, OEMModeIdIndex);