• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/video/sis/

Lines Matching defs:SiS_Pr

85 static unsigned short	SiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr);
87 static void SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val);
95 SiS_UnLockCRT2(struct SiS_Private *SiS_Pr)
97 if(SiS_Pr->ChipType == XGI_20)
99 else if(SiS_Pr->ChipType >= SIS_315H)
100 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2f,0x01);
102 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x24,0x01);
109 SiS_LockCRT2(struct SiS_Private *SiS_Pr)
111 if(SiS_Pr->ChipType == XGI_20)
113 else if(SiS_Pr->ChipType >= SIS_315H)
114 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2F,0xFE);
116 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x24,0xFE);
124 SiS_SetRegSR11ANDOR(struct SiS_Private *SiS_Pr, unsigned short DataAND, unsigned short DataOR)
126 if(SiS_Pr->ChipType >= SIS_661) {
130 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x11,DataAND,DataOR);
139 GetLCDStructPtr661(struct SiS_Private *SiS_Pr)
141 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
152 if((SiS_Pr->SiS_ROMNew) &&
153 ((SiS_Pr->SiS_VBType & VB_SISLVDS) || (!SiS_Pr->PanelSelfDetected))) {
155 if(SiS_Pr->ChipType < SIS_661) reg = 0x3c;
158 idx = (SiS_GetReg(SiS_Pr->SiS_P3d4,reg) & 0x1f) * 26;
173 GetLCDStructPtr661_2(struct SiS_Private *SiS_Pr)
175 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
185 if((SiS_Pr->SiS_ROMNew) &&
186 ((SiS_Pr->SiS_VBType & VB_SISLVDS) || (!SiS_Pr->PanelSelfDetected))) {
188 romptr += ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) * SiS_Pr->SiS661LCD2TableSize);
200 SiS_AdjustCRT2Rate(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
205 modeid = SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID;
207 if(SiS_Pr->SiS_VBType & VB_SISVB) {
209 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
212 if(SiS_Pr->ChipType >= SIS_315H) {
214 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
216 if(SiS_Pr->SiS_VBType & VB_SISRAMDAC202) {
222 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
225 if(SiS_Pr->ChipType >= SIS_315H) {
226 if(SiS_Pr->SiS_VBType & VB_SISVB) {
227 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
233 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
237 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToYPbPr525750|SetCRT2ToAVIDEO|SetCRT2ToSVIDEO|SetCRT2ToSCART)) {
240 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
242 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
243 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
253 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
254 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
259 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
266 for(; SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID == modeid; (*i)--) {
267 infoflag = SiS_Pr->SiS_RefIndex[RRTI + (*i)].Ext_InfoFlag;
276 if(SiS_Pr->SiS_RefIndex[RRTI + (*i)].ModeID != modeid) break;
277 infoflag = SiS_Pr->SiS_RefIndex[RRTI + (*i)].Ext_InfoFlag;
288 SiS_GetRatePtr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
304 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
306 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
309 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
310 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
317 index = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x33) >> SiS_Pr->SiS_SelectCRT2Rate) & 0x0F;
322 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
323 if(SiS_Pr->SiS_VBType & VB_SISVB) {
324 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
325 if(SiS_Pr->SiS_VBType & VB_NoLCD) index = 0;
326 else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index = backupindex = 0;
328 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
329 if(!(SiS_Pr->SiS_VBType & VB_NoLCD)) {
330 temp = LCDRefreshIndex[SiS_GetBIOSLCDResInfo(SiS_Pr)];
335 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) index = 0;
336 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
337 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) index = 0;
342 RRTI = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].REFindex;
343 ModeNo = SiS_Pr->SiS_RefIndex[RRTI].ModeID;
345 if(SiS_Pr->ChipType >= SIS_315H) {
346 if(!(SiS_Pr->SiS_VBInfo & DriverMode)) {
347 if( (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x105) ||
348 (SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_VESAID == 0x107) ) {
356 if(SiS_Pr->SiS_RefIndex[RRTI + i].ModeID != ModeNo) break;
357 temp = SiS_Pr->SiS_RefIndex[RRTI + i].Ext_InfoFlag;
359 if(temp < SiS_Pr->SiS_ModeType) break;
364 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
365 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
366 temp = SiS_Pr->SiS_RefIndex[RRTI + i - 1].Ext_InfoFlag;
373 if((SiS_Pr->SiS_SetFlag & ProgrammingCRT2) && (!(SiS_Pr->SiS_VBInfo & DisableCRT2Display))) {
375 if(!(SiS_AdjustCRT2Rate(SiS_Pr, ModeNo, ModeIdIndex, RRTI, &i))) {
388 SiS_SaveCRT2Info(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
393 SiS_SetReg(SiS_Pr->SiS_P3d4,0x34,ModeNo);
394 temp1 = (SiS_Pr->SiS_VBInfo & SetInSlaveMode) >> 8;
396 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x31,temp2,temp1);
405 SiS_CR36BIOSWord23b(struct SiS_Private *SiS_Pr)
407 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
410 if(SiS_Pr->SiS_UseROM) {
412 temp = 1 << ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) & 0x0f);
421 SiS_CR36BIOSWord23d(struct SiS_Private *SiS_Pr)
423 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
426 if(SiS_Pr->SiS_UseROM) {
428 temp = 1 << ((SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4) & 0x0f);
442 SiS_DDC2Delay(struct SiS_Private *SiS_Pr, unsigned int delaytime)
445 SiS_GetReg(SiS_Pr->SiS_P3c4, 0x05);
450 SiS_GenericDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
452 SiS_DDC2Delay(SiS_Pr, delay * 36);
458 SiS_LongDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
461 SiS_GenericDelay(SiS_Pr, 6623);
468 SiS_ShortDelay(struct SiS_Private *SiS_Pr, unsigned short delay)
471 SiS_GenericDelay(SiS_Pr, 66);
477 SiS_PanelDelay(struct SiS_Private *SiS_Pr, unsigned short DelayTime)
480 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
484 if(SiS_Pr->ChipType < SIS_315H) {
488 PanelID = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
489 if(SiS_Pr->SiS_VBType & VB_SISVB) {
490 if(SiS_Pr->SiS_VBType & VB_SIS301) PanelID &= 0xf7;
491 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x18) & 0x10)) PanelID = 0x12;
499 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[0];
501 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[1];
503 if(SiS_Pr->SiS_UseROM) {
510 SiS_ShortDelay(SiS_Pr, Delay);
518 if((SiS_Pr->ChipType >= SIS_661) ||
519 (SiS_Pr->ChipType <= SIS_315PRO) ||
520 (SiS_Pr->ChipType == SIS_330) ||
521 (SiS_Pr->SiS_ROMNew)) {
524 SiS_DDC2Delay(SiS_Pr, 0x1000);
526 SiS_DDC2Delay(SiS_Pr, 0x4000);
529 } else if((SiS_Pr->SiS_IF_DEF_LVDS == 1) /* ||
530 (SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
531 (SiS_Pr->SiS_CustomT == CUT_CLEVO1400) */ ) { /* 315 series, LVDS; Special */
533 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
534 PanelID = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
535 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1400) {
536 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x1b) & 0x10)) PanelID = 0x12;
538 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
548 Delay = SiS_Pr->SiS_PanelDelayTblLVDS[DelayIndex].timer[0];
550 Delay = SiS_Pr->SiS_PanelDelayTblLVDS[DelayIndex].timer[1];
552 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
562 SiS_ShortDelay(SiS_Pr, Delay);
565 } else if(SiS_Pr->SiS_VBType & VB_SISVB) { /* 315 series, all bridges */
567 DelayIndex = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
569 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[0];
571 Delay = SiS_Pr->SiS_PanelDelayTbl[DelayIndex].timer[1];
574 SiS_DDC2Delay(SiS_Pr, Delay);
585 SiS_PanelDelayLoop(struct SiS_Private *SiS_Pr, unsigned short DelayTime, unsigned short DelayLoop)
589 SiS_PanelDelay(SiS_Pr, DelayTime);
599 SiS_WaitRetrace1(struct SiS_Private *SiS_Pr)
603 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x1f) & 0xc0) return;
604 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x17) & 0x80)) return;
607 while((SiS_GetRegByte(SiS_Pr->SiS_P3da) & 0x08) && --watchdog);
609 while((!(SiS_GetRegByte(SiS_Pr->SiS_P3da) & 0x08)) && --watchdog);
614 SiS_WaitRetrace2(struct SiS_Private *SiS_Pr, unsigned short reg)
619 while((SiS_GetReg(SiS_Pr->SiS_Part1Port,reg) & 0x02) && --watchdog);
621 while((!(SiS_GetReg(SiS_Pr->SiS_Part1Port,reg) & 0x02)) && --watchdog);
626 SiS_WaitVBRetrace(struct SiS_Private *SiS_Pr)
628 if(SiS_Pr->ChipType < SIS_315H) {
630 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
631 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x20)) return;
633 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x80)) {
634 SiS_WaitRetrace1(SiS_Pr);
636 SiS_WaitRetrace2(SiS_Pr, 0x25);
641 if(!(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x40)) {
642 SiS_WaitRetrace1(SiS_Pr);
644 SiS_WaitRetrace2(SiS_Pr, 0x30);
651 SiS_VBWait(struct SiS_Private *SiS_Pr)
658 tempal = SiS_GetRegByte(SiS_Pr->SiS_P3da);
672 SiS_VBLongWait(struct SiS_Private *SiS_Pr)
674 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
675 SiS_VBWait(SiS_Pr);
677 SiS_WaitRetrace1(SiS_Pr);
687 SiS_Is301B(struct SiS_Private *SiS_Pr)
689 if(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x01) >= 0xb0) return true;
695 SiS_CRT2IsLCD(struct SiS_Private *SiS_Pr)
697 if(SiS_Pr->ChipType == SIS_730) {
698 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x20) return true;
700 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x30) & 0x20) return true;
705 SiS_IsDualEdge(struct SiS_Private *SiS_Pr)
708 if(SiS_Pr->ChipType >= SIS_315H) {
709 if((SiS_Pr->ChipType != SIS_650) || (SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xf0)) {
710 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableDualEdge) return true;
718 SiS_IsVAMode(struct SiS_Private *SiS_Pr)
723 if(SiS_Pr->ChipType >= SIS_315H) {
724 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
733 SiS_IsVAorLCD(struct SiS_Private *SiS_Pr)
735 if(SiS_IsVAMode(SiS_Pr)) return true;
736 if(SiS_CRT2IsLCD(SiS_Pr)) return true;
742 SiS_IsDualLink(struct SiS_Private *SiS_Pr)
745 if(SiS_Pr->ChipType >= SIS_315H) {
746 if((SiS_CRT2IsLCD(SiS_Pr)) ||
747 (SiS_IsVAMode(SiS_Pr))) {
748 if(SiS_Pr->SiS_LCDInfo & LCDDualLink) return true;
757 SiS_TVEnabled(struct SiS_Private *SiS_Pr)
759 if((SiS_GetReg(SiS_Pr->SiS_Part2Port,0x00) & 0x0f) != 0x0c) return true;
760 if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
761 if(SiS_GetReg(SiS_Pr->SiS_Part2Port,0x4d) & 0x10) return true;
769 SiS_LCDAEnabled(struct SiS_Private *SiS_Pr)
771 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x13) & 0x04) return true;
778 SiS_WeHaveBacklightCtrl(struct SiS_Private *SiS_Pr)
780 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->ChipType < SIS_661)) {
781 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x79) & 0x10) return true;
789 SiS_IsNotM650orLater(struct SiS_Private *SiS_Pr)
793 if(SiS_Pr->ChipType == SIS_650) {
794 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xf0;
798 } else if(SiS_Pr->ChipType >= SIS_661) return false;
805 SiS_IsYPbPr(struct SiS_Private *SiS_Pr)
807 if(SiS_Pr->ChipType >= SIS_315H) {
809 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableCHYPbPr) return true;
817 SiS_IsChScart(struct SiS_Private *SiS_Pr)
819 if(SiS_Pr->ChipType >= SIS_315H) {
821 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & EnableCHScart) return true;
829 SiS_IsTVOrYPbPrOrScart(struct SiS_Private *SiS_Pr)
833 if(SiS_Pr->ChipType >= SIS_315H) {
834 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
836 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
840 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
849 SiS_IsLCDOrLCDA(struct SiS_Private *SiS_Pr)
853 if(SiS_Pr->ChipType >= SIS_315H) {
854 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
856 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
859 flag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
867 SiS_HaveBridge(struct SiS_Private *SiS_Pr)
871 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
873 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
874 flag = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x00);
881 SiS_BridgeIsEnabled(struct SiS_Private *SiS_Pr)
885 if(SiS_HaveBridge(SiS_Pr)) {
886 flag = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
887 if(SiS_Pr->ChipType < SIS_315H) {
899 SiS_BridgeInSlavemode(struct SiS_Private *SiS_Pr)
903 flag1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31);
915 SiS_SetChrontelGPIO(struct SiS_Private *SiS_Pr, unsigned short myvbinfo)
920 if(!(SiS_Pr->SiS_ChSW)) return;
923 acpibase = sisfb_read_lpc_pci_dword(SiS_Pr, 0x74);
942 SiS_GetVBInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
948 SiS_Pr->SiS_SetFlag = 0;
950 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
952 SiS_Pr->SiS_ModeType = modeflag & ModeTypeMask;
954 if((ModeNo > 0x13) && (!SiS_Pr->UseCustomMode)) {
955 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
960 if(SiS_HaveBridge(SiS_Pr)) {
962 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
964 tempax = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) << 8;
969 if(SiS_Pr->ChipType >= SIS_315H) {
970 if(SiS_Pr->SiS_VBType & VB_SISLCDA) {
973 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x31,0xbf);
975 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & (DriverMode >> 8))) {
977 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x38,0xfc);
980 if(SiS_Pr->SiS_UseLCDA) {
981 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x5f) & 0xF0) {
982 if((ModeNo <= 0x13) || (!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & (DriverMode >> 8)))) {
983 SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x38,(EnableDualEdge | SetToLCDA));
988 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
994 if(SiS_Pr->ChipType >= SIS_661) { /* New CR layout */
996 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x38) & 0x04) {
997 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35) & 0xe0;
999 else if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
1005 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1006 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1010 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1020 if(!(SiS_Pr->SiS_VBType & VB_SISVGA2)) {
1024 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1034 if(SiS_Pr->ChipType >= SIS_315H) {
1035 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1047 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1060 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1080 if(SiS_Pr->ChipType >= SIS_315H) {
1085 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1093 if(SiS_Pr->ChipType >= SIS_315H) {
1110 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
1111 if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
1112 ((SiS_Pr->SiS_VBType & VB_NoLCD) && (tempbx & SetCRT2ToLCD)) ) {
1125 if(SiS_BridgeIsEnabled(SiS_Pr)) {
1127 if(SiS_BridgeInSlavemode(SiS_Pr)) {
1151 SiS_Pr->SiS_VBInfo = tempbx;
1154 if(SiS_Pr->ChipType == SIS_630) {
1155 SiS_SetChrontelGPIO(SiS_Pr, SiS_Pr->SiS_VBInfo);
1164 SiS_Pr->SiS_VBInfo, SiS_Pr->SiS_SetFlag);
1174 SiS_SetYPbPr(struct SiS_Private *SiS_Pr)
1187 SiS_Pr->SiS_YPbPr = 0;
1188 if(SiS_Pr->ChipType >= SIS_661) return;
1190 if(SiS_Pr->SiS_VBType) {
1191 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1192 SiS_Pr->SiS_YPbPr = YPbPrHiVision;
1196 if(SiS_Pr->ChipType >= SIS_315H) {
1197 if(SiS_Pr->SiS_VBType & VB_SISYPBPR) {
1198 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1201 case 0x00: SiS_Pr->SiS_YPbPr = YPbPr525i; break;
1202 case 0x01: SiS_Pr->SiS_YPbPr = YPbPr525p; break;
1203 case 0x02: SiS_Pr->SiS_YPbPr = YPbPr750p; break;
1204 case 0x03: SiS_Pr->SiS_YPbPr = YPbPrHiVision; break;
1217 SiS_SetTVMode(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
1219 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
1221 unsigned char OutputSelect = *SiS_Pr->pSiS_OutputSelect;
1223 SiS_Pr->SiS_TVMode = 0;
1225 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) return;
1226 if(SiS_Pr->UseCustomMode) return;
1229 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
1232 if(SiS_Pr->ChipType < SIS_661) {
1234 if(SiS_Pr->SiS_VBInfo & SetPALTV) SiS_Pr->SiS_TVMode |= TVSetPAL;
1236 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1238 if((SiS_Pr->ChipType == SIS_630) ||
1239 (SiS_Pr->ChipType == SIS_730)) {
1242 } else if(SiS_Pr->ChipType >= SIS_315H) {
1244 if(SiS_Pr->ChipType < XGI_20) {
1246 if(SiS_Pr->ChipType >= SIS_330) romindex = 0x11b;
1250 if(romindex && SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
1253 SiS_SetRegAND(SiS_Pr->SiS_P3d4,temp,0x3F);
1256 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,temp);
1257 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
1259 SiS_Pr->SiS_TVMode |= TVSetPALM;
1260 SiS_Pr->SiS_TVMode &= ~TVSetPAL;
1262 SiS_Pr->SiS_TVMode |= TVSetPALN;
1266 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1271 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1272 if(SiS_Pr->SiS_YPbPr == YPbPr750p) SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;
1273 else if(SiS_Pr->SiS_YPbPr == YPbPr525p) SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;
1274 else if(SiS_Pr->SiS_YPbPr == YPbPrHiVision) SiS_Pr->SiS_TVMode |= TVSetHiVision;
1275 else SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;
1276 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetYPbPr525p | TVSetYPbPr525i)) {
1277 SiS_Pr->SiS_VBInfo &= ~SetCRT2ToHiVision;
1278 SiS_Pr->SiS_VBInfo |= SetCRT2ToYPbPr525750;
1279 } else if(SiS_Pr->SiS_TVMode & TVSetHiVision) {
1280 SiS_Pr->SiS_TVMode |= TVSetPAL;
1283 } else if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
1284 if(SiS_Pr->SiS_CHOverScan) {
1285 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
1286 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1287 if((temp & TVOverScan) || (SiS_Pr->SiS_CHOverScan == 1)) {
1288 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1290 } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1291 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x79);
1292 if((temp & 0x80) || (SiS_Pr->SiS_CHOverScan == 1)) {
1293 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1296 if(SiS_Pr->SiS_CHSOverScan) {
1297 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1300 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1301 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);
1302 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
1303 if(temp & EnablePALM) SiS_Pr->SiS_TVMode |= TVSetPALM;
1304 else if(temp & EnablePALN) SiS_Pr->SiS_TVMode |= TVSetPALN;
1307 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1315 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1317 SiS_Pr->SiS_TVMode |= TVSetPAL;
1319 SiS_Pr->SiS_TVMode |= TVSetPALN;
1321 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1322 SiS_Pr->SiS_TVMode &= ~TVSetPAL;
1324 SiS_Pr->SiS_TVMode |= TVSetPALM;
1328 SiS_Pr->SiS_TVMode |= TVSetNTSCJ;
1331 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
1332 if(SiS_Pr->SiS_CHOverScan) {
1333 if((temp1 & 0x10) || (SiS_Pr->SiS_CHOverScan == 1)) {
1334 SiS_Pr->SiS_TVMode |= TVSetCHOverScan;
1338 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1339 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
1341 if(temp1 == 0x00) SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;
1342 else if(temp1 == 0x20) SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;
1343 else if(temp1 == 0x40) SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;
1344 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1345 SiS_Pr->SiS_TVMode |= (TVSetHiVision | TVSetPAL);
1347 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToYPbPr525750 | SetCRT2ToHiVision)) {
1349 SiS_Pr->SiS_TVMode |= TVAspect169;
1351 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x39);
1353 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetHiVision)) {
1354 SiS_Pr->SiS_TVMode |= TVAspect169;
1356 SiS_Pr->SiS_TVMode |= TVAspect43LB;
1359 SiS_Pr->SiS_TVMode |= TVAspect43;
1366 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) SiS_Pr->SiS_TVMode |= TVSetPAL;
1368 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1370 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
1371 SiS_Pr->SiS_TVMode |= TVSetPAL;
1372 SiS_Pr->SiS_TVMode &= ~(TVSetPALM | TVSetPALN | TVSetNTSCJ);
1373 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
1374 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525i | TVSetYPbPr525p | TVSetYPbPr750p)) {
1375 SiS_Pr->SiS_TVMode &= ~(TVSetPAL | TVSetNTSCJ | TVSetPALM | TVSetPALN);
1379 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
1380 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
1381 SiS_Pr->SiS_TVMode |= TVSetTVSimuMode;
1385 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
1387 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
1388 SiS_Pr->SiS_TVMode |= TVSet525p1024;
1389 } else if(!(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr750p))) {
1390 SiS_Pr->SiS_TVMode |= TVSetNTSC1024;
1395 SiS_Pr->SiS_TVMode |= TVRPLLDIV2XO;
1396 if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) &&
1397 (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
1398 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1399 } else if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) {
1400 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1401 } else if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) {
1402 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
1403 SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;
1409 SiS_Pr->SiS_VBInfo &= ~SetPALTV;
1413 xf86DrvMsg(0, X_INFO, "(init301: TVMode %x, VBInfo %x)\n", SiS_Pr->SiS_TVMode, SiS_Pr->SiS_VBInfo);
1423 SiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr)
1425 unsigned short temp = SiS_Pr->SiS_LCDResInfo;
1436 SiS_GetLCDInfoBIOS(struct SiS_Private *SiS_Pr)
1445 SiS_Pr->PanelHT, SiS_Pr->PanelVT,
1446 SiS_Pr->PanelHRS, SiS_Pr->PanelHRE,
1447 SiS_Pr->PanelVRS, SiS_Pr->PanelVRE,
1448 SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].CLOCK,
1449 SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_A,
1450 SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_B);
1454 if((ROMAddr = GetLCDStructPtr661(SiS_Pr))) {
1455 if((temp = SISGETROMW(6)) != SiS_Pr->PanelHT) {
1456 SiS_Pr->SiS_NeedRomModeData = true;
1457 SiS_Pr->PanelHT = temp;
1459 if((temp = SISGETROMW(8)) != SiS_Pr->PanelVT) {
1460 SiS_Pr->SiS_NeedRomModeData = true;
1461 SiS_Pr->PanelVT = temp;
1463 SiS_Pr->PanelHRS = SISGETROMW(10);
1464 SiS_Pr->PanelHRE = SISGETROMW(12);
1465 SiS_Pr->PanelVRS = SISGETROMW(14);
1466 SiS_Pr->PanelVRE = SISGETROMW(16);
1467 SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;
1468 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].CLOCK =
1469 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].CLOCK = (unsigned short)((unsigned char)ROMAddr[18]);
1470 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2B =
1471 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_A = ROMAddr[19];
1472 SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2C =
1473 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_B = ROMAddr[20];
1478 SiS_Pr->PanelHT, SiS_Pr->PanelVT,
1479 SiS_Pr->PanelHRS, SiS_Pr->PanelHRE,
1480 SiS_Pr->PanelVRS, SiS_Pr->PanelVRE,
1481 SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].CLOCK,
1482 SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_A,
1483 SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_B);
1492 SiS_CheckScaling(struct SiS_Private *SiS_Pr, unsigned short resinfo,
1498 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ||
1499 (SiS_Pr->UsePanelScaler == -1)) {
1500 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1508 SiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
1513 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
1522 SiS_Pr->SiS_LCDResInfo = 0;
1523 SiS_Pr->SiS_LCDTypeInfo = 0;
1524 SiS_Pr->SiS_LCDInfo = 0;
1525 SiS_Pr->PanelHRS = 999; /* HSync start */
1526 SiS_Pr->PanelHRE = 999; /* HSync end */
1527 SiS_Pr->PanelVRS = 999; /* VSync start */
1528 SiS_Pr->PanelVRE = 999; /* VSync end */
1529 SiS_Pr->SiS_NeedRomModeData = false;
1532 SiS_Pr->Alternate1600x1200 = false;
1534 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))) return;
1536 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
1538 if((ModeNo > 0x13) && (!SiS_Pr->UseCustomMode)) {
1539 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
1540 modexres = SiS_Pr->SiS_ModeResInfo[resinfo].HTotal;
1541 modeyres = SiS_Pr->SiS_ModeResInfo[resinfo].VTotal;
1544 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
1549 if((SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
1550 SiS_Pr->SiS_LCDTypeInfo = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x7c) >> 2;
1551 } else if((SiS_Pr->ChipType < SIS_315H) || (SiS_Pr->ChipType >= SIS_661)) {
1552 SiS_Pr->SiS_LCDTypeInfo = temp >> 4;
1554 SiS_Pr->SiS_LCDTypeInfo = (temp & 0x0F) - 1;
1558 if(SiS_Pr->ChipType < SIS_315H) {
1560 if(SiS_Pr->SiS_VBType & VB_SIS301) {
1570 if(SiS_Pr->ChipType == SIS_550) {
1574 } else if(SiS_Pr->ChipType >= SIS_661) {
1579 if(SiS_Pr->SiS_VBType & VB_SISLVDS) { /* SiS LVDS */
1583 if(SiS_Pr->SiS_ROMNew) {
1590 SiS_Pr->SiS_LCDResInfo = temp;
1593 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1594 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
1595 SiS_Pr->SiS_LCDResInfo = Panel_Barco1366;
1596 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848) {
1597 SiS_Pr->SiS_LCDResInfo = Panel_848x480;
1598 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL856) {
1599 SiS_Pr->SiS_LCDResInfo = Panel_856x480;
1604 if(SiS_Pr->SiS_VBType & VB_SISVB) {
1605 if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMin301)
1606 SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMin301;
1608 if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMinLVDS)
1609 SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMinLVDS;
1612 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);
1613 SiS_Pr->SiS_LCDInfo = temp & ~0x000e;
1617 switch(SiS_Pr->SiS_LCDResInfo) {
1622 SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
1625 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1628 panelcanscale = (bool)(SiS_Pr->SiS_LCDInfo & DontExpandLCD);
1630 if(!SiS_Pr->UsePanelScaler) SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;
1631 else if(SiS_Pr->UsePanelScaler == 1) SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1635 if(SiS_Pr->ChipType >= SIS_661) {
1636 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
1637 if(temp & 0x08) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1639 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1640 if(SiS_Pr->SiS_ROMNew) {
1641 if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1642 } else if((myptr = GetLCDStructPtr661(SiS_Pr))) {
1643 if(myptr[2] & 0x01) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1646 } else if(SiS_Pr->ChipType >= SIS_315H) {
1647 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
1648 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x01) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1650 if((SiS_Pr->SiS_ROMNew) && (!(SiS_Pr->PanelSelfDetected))) {
1651 SiS_Pr->SiS_LCDInfo &= ~(LCDRGB18Bit);
1652 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);
1653 if(temp & 0x01) SiS_Pr->SiS_LCDInfo |= LCDRGB18Bit;
1654 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1655 if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1657 } else if(!(SiS_Pr->SiS_ROMNew)) {
1658 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
1659 if((SiS_Pr->SiS_CustomT == CUT_CLEVO1024) &&
1660 (SiS_Pr->SiS_LCDResInfo == Panel_1024x768)) {
1661 SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1663 if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
1664 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
1665 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||
1666 (SiS_Pr->SiS_LCDResInfo == Panel_1680x1050)) {
1667 SiS_Pr->SiS_LCDInfo |= LCDDualLink;
1675 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
1677 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1678 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
1679 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
1681 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1684 if(panelcanscale) SiS_Pr->SiS_LCDInfo |= LCDPass11;
1685 if(SiS_Pr->CenterScreen == 1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
1689 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1690 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
1692 switch(SiS_Pr->SiS_LCDResInfo) {
1695 case Panel_320x240_3: SiS_Pr->PanelXRes = 640; SiS_Pr->PanelYRes = 480;
1696 SiS_Pr->PanelVRS = 24; SiS_Pr->PanelVRE = 3;
1697 SiS_Pr->PanelVCLKIdx300 = VCLK28;
1698 SiS_Pr->PanelVCLKIdx315 = VCLK28;
1700 case Panel_640x480: SiS_Pr->PanelXRes = 640; SiS_Pr->PanelYRes = 480;
1701 SiS_Pr->PanelVRE = 3;
1702 SiS_Pr->PanelVCLKIdx300 = VCLK28;
1703 SiS_Pr->PanelVCLKIdx315 = VCLK28;
1705 case Panel_800x600: SiS_Pr->PanelXRes = 800; SiS_Pr->PanelYRes = 600;
1706 SiS_Pr->PanelHT = 1056; SiS_Pr->PanelVT = 628;
1707 SiS_Pr->PanelHRS = 40; SiS_Pr->PanelHRE = 128;
1708 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 4;
1709 SiS_Pr->PanelVCLKIdx300 = VCLK40;
1710 SiS_Pr->PanelVCLKIdx315 = VCLK40;
1712 case Panel_1024x600: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 600;
1713 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 800;
1714 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
1715 SiS_Pr->PanelVRS = 2 /* 88 */ ; SiS_Pr->PanelVRE = 6;
1716 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1717 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
1719 case Panel_1024x768: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768;
1720 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
1721 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
1722 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1723 if(SiS_Pr->ChipType < SIS_315H) {
1724 SiS_Pr->PanelHRS = 23;
1725 SiS_Pr->PanelVRE = 5;
1727 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1728 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
1729 SiS_GetLCDInfoBIOS(SiS_Pr);
1731 case Panel_1152x768: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 768;
1732 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
1733 SiS_Pr->PanelHRS = 24; SiS_Pr->PanelHRE = 136;
1734 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1735 if(SiS_Pr->ChipType < SIS_315H) {
1736 SiS_Pr->PanelHRS = 23;
1737 SiS_Pr->PanelVRE = 5;
1739 SiS_Pr->PanelVCLKIdx300 = VCLK65_300;
1740 SiS_Pr->PanelVCLKIdx315 = VCLK65_315;
1742 case Panel_1152x864: SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes = 864;
1744 case Panel_1280x720: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 720;
1745 SiS_Pr->PanelHT = 1650; SiS_Pr->PanelVT = 750;
1746 SiS_Pr->PanelHRS = 110; SiS_Pr->PanelHRE = 40;
1747 SiS_Pr->PanelVRS = 5; SiS_Pr->PanelVRE = 5;
1748 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x720;
1750 SiS_GetLCDInfoBIOS(SiS_Pr);
1752 case Panel_1280x768: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 768;
1753 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
1754 SiS_Pr->PanelHT = 1408; SiS_Pr->PanelVT = 806;
1755 SiS_Pr->PanelVCLKIdx300 = VCLK81_300; /* ? */
1756 SiS_Pr->PanelVCLKIdx315 = VCLK81_315; /* ? */
1758 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 802;
1759 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRS = 112;
1760 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1761 SiS_Pr->PanelVCLKIdx300 = VCLK81_300;
1762 SiS_Pr->PanelVCLKIdx315 = VCLK81_315;
1765 case Panel_1280x768_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 768;
1766 SiS_Pr->PanelHT = 1660; SiS_Pr->PanelVT = 806;
1767 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1768 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1769 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x768_2;
1770 SiS_GetLCDInfoBIOS(SiS_Pr);
1772 case Panel_1280x800: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 800;
1773 SiS_Pr->PanelHT = 1408; SiS_Pr->PanelVT = 816;
1774 SiS_Pr->PanelHRS = 21; SiS_Pr->PanelHRE = 24;
1775 SiS_Pr->PanelVRS = 4; SiS_Pr->PanelVRE = 3;
1776 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315;
1777 SiS_GetLCDInfoBIOS(SiS_Pr);
1779 case Panel_1280x800_2: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 800;
1780 SiS_Pr->PanelHT = 1552; SiS_Pr->PanelVT = 812;
1781 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1782 SiS_Pr->PanelVRS = 4; SiS_Pr->PanelVRE = 3;
1783 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x800_315_2;
1784 SiS_GetLCDInfoBIOS(SiS_Pr);
1786 case Panel_1280x854: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 854;
1787 SiS_Pr->PanelHT = 1664; SiS_Pr->PanelVT = 861;
1788 SiS_Pr->PanelHRS = 16; SiS_Pr->PanelHRE = 112;
1789 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1790 SiS_Pr->PanelVCLKIdx315 = VCLK_1280x854;
1791 SiS_GetLCDInfoBIOS(SiS_Pr);
1793 case Panel_1280x960: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 960;
1794 SiS_Pr->PanelHT = 1800; SiS_Pr->PanelVT = 1000;
1795 SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;
1796 SiS_Pr->PanelVCLKIdx315 = VCLK108_3_315;
1798 SiS_Pr->PanelVCLKIdx300 = VCLK100_300;
1799 SiS_Pr->PanelVCLKIdx315 = VCLK100_315;
1802 case Panel_1280x1024: SiS_Pr->PanelXRes = 1280; SiS_Pr->PanelYRes = 1024;
1803 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
1804 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1805 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1806 SiS_Pr->PanelVCLKIdx300 = VCLK108_3_300;
1807 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
1808 SiS_GetLCDInfoBIOS(SiS_Pr);
1810 case Panel_1400x1050: SiS_Pr->PanelXRes = 1400; SiS_Pr->PanelYRes = 1050;
1811 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
1812 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 112;
1813 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1814 SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;
1815 SiS_GetLCDInfoBIOS(SiS_Pr);
1817 case Panel_1600x1200: SiS_Pr->PanelXRes = 1600; SiS_Pr->PanelYRes = 1200;
1818 SiS_Pr->PanelHT = 2160; SiS_Pr->PanelVT = 1250;
1819 SiS_Pr->PanelHRS = 64; SiS_Pr->PanelHRE = 192;
1820 SiS_Pr->PanelVRS = 1; SiS_Pr->PanelVRE = 3;
1821 SiS_Pr->PanelVCLKIdx315 = VCLK162_315;
1822 if(SiS_Pr->SiS_VBType & VB_SISTMDSLCDA) {
1823 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
1824 SiS_Pr->PanelHT = 1760; SiS_Pr->PanelVT = 1235;
1825 SiS_Pr->PanelHRS = 48; SiS_Pr->PanelHRE = 32;
1826 SiS_Pr->PanelVRS = 2; SiS_Pr->PanelVRE = 4;
1827 SiS_Pr->PanelVCLKIdx315 = VCLK130_315;
1828 SiS_Pr->Alternate1600x1200 = true;
1830 } else if(SiS_Pr->SiS_IF_DEF_LVDS) {
1831 SiS_Pr->PanelHT = 2048; SiS_Pr->PanelVT = 1320;
1832 SiS_Pr->PanelHRS = SiS_Pr->PanelHRE = 999;
1833 SiS_Pr->PanelVRS = SiS_Pr->PanelVRE = 999;
1835 SiS_GetLCDInfoBIOS(SiS_Pr);
1837 case Panel_1680x1050: SiS_Pr->PanelXRes = 1680; SiS_Pr->PanelYRes = 1050;
1838 SiS_Pr->PanelHT = 1900; SiS_Pr->PanelVT = 1066;
1839 SiS_Pr->PanelHRS = 26; SiS_Pr->PanelHRE = 76;
1840 SiS_Pr->PanelVRS = 3; SiS_Pr->PanelVRE = 6;
1841 SiS_Pr->PanelVCLKIdx315 = VCLK121_315;
1842 SiS_GetLCDInfoBIOS(SiS_Pr);
1844 case Panel_Barco1366: SiS_Pr->PanelXRes = 1360; SiS_Pr->PanelYRes = 1024;
1845 SiS_Pr->PanelHT = 1688; SiS_Pr->PanelVT = 1066;
1847 case Panel_848x480: SiS_Pr->PanelXRes = 848; SiS_Pr->PanelYRes = 480;
1848 SiS_Pr->PanelHT = 1088; SiS_Pr->PanelVT = 525;
1850 case Panel_856x480: SiS_Pr->PanelXRes = 856; SiS_Pr->PanelYRes = 480;
1851 SiS_Pr->PanelHT = 1088; SiS_Pr->PanelVT = 525;
1853 case Panel_Custom: SiS_Pr->PanelXRes = SiS_Pr->CP_MaxX;
1854 SiS_Pr->PanelYRes = SiS_Pr->CP_MaxY;
1855 SiS_Pr->PanelHT = SiS_Pr->CHTotal;
1856 SiS_Pr->PanelVT = SiS_Pr->CVTotal;
1857 if(SiS_Pr->CP_PreferredIndex != -1) {
1858 SiS_Pr->PanelXRes = SiS_Pr->CP_HDisplay[SiS_Pr->CP_PreferredIndex];
1859 SiS_Pr->PanelYRes = SiS_Pr->CP_VDisplay[SiS_Pr->CP_PreferredIndex];
1860 SiS_Pr->PanelHT = SiS_Pr->CP_HTotal[SiS_Pr->CP_PreferredIndex];
1861 SiS_Pr->PanelVT = SiS_Pr->CP_VTotal[SiS_Pr->CP_PreferredIndex];
1862 SiS_Pr->PanelHRS = SiS_Pr->CP_HSyncStart[SiS_Pr->CP_PreferredIndex];
1863 SiS_Pr->PanelHRE = SiS_Pr->CP_HSyncEnd[SiS_Pr->CP_PreferredIndex];
1864 SiS_Pr->PanelVRS = SiS_Pr->CP_VSyncStart[SiS_Pr->CP_PreferredIndex];
1865 SiS_Pr->PanelVRE = SiS_Pr->CP_VSyncEnd[SiS_Pr->CP_PreferredIndex];
1866 SiS_Pr->PanelHRS -= SiS_Pr->PanelXRes;
1867 SiS_Pr->PanelHRE -= SiS_Pr->PanelHRS;
1868 SiS_Pr->PanelVRS -= SiS_Pr->PanelYRes;
1869 SiS_Pr->PanelVRE -= SiS_Pr->PanelVRS;
1870 if(SiS_Pr->CP_PrefClock) {
1872 SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;
1873 SiS_Pr->PanelVCLKIdx300 = VCLK_CUSTOM_300;
1874 if(SiS_Pr->ChipType < SIS_315H) idx = VCLK_CUSTOM_300;
1876 SiS_Pr->SiS_VCLKData[idx].CLOCK =
1877 SiS_Pr->SiS_VBVCLKData[idx].CLOCK = SiS_Pr->CP_PrefClock;
1878 SiS_Pr->SiS_VCLKData[idx].SR2B =
1879 SiS_Pr->SiS_VBVCLKData[idx].Part4_A = SiS_Pr->CP_PrefSR2B;
1880 SiS_Pr->SiS_VCLKData[idx].SR2C =
1881 SiS_Pr->SiS_VBVCLKData[idx].Part4_B = SiS_Pr->CP_PrefSR2C;
1885 default: SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes = 768;
1886 SiS_Pr->PanelHT = 1344; SiS_Pr->PanelVT = 806;
1891 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
1892 (SiS_Pr->SiS_IF_DEF_DSTN) ||
1893 (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
1894 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
1895 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
1896 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
1897 SiS_Pr->PanelHRS = 999;
1898 SiS_Pr->PanelHRE = 999;
1901 if( (SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
1902 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
1903 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
1904 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
1905 SiS_Pr->PanelVRS = 999;
1906 SiS_Pr->PanelVRE = 999;
1910 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
1912 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (modeflag & NoSupportLCDScale)) {
1914 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1917 switch(SiS_Pr->SiS_LCDResInfo) {
1922 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1929 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1938 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1947 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1948 if(SiS_Pr->PanelHT == 1650) {
1949 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1959 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1961 case SIS_RI_1280x720: if(SiS_Pr->UsePanelScaler == -1) {
1962 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1974 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1983 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
1986 case SIS_RI_1280x768: if(SiS_Pr->UsePanelScaler == -1) {
1987 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
1999 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2003 case SIS_RI_1280x800: if(SiS_Pr->UsePanelScaler == -1) {
2004 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2017 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2027 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2037 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2039 case SIS_RI_1280x720: if(SiS_Pr->UsePanelScaler == -1) {
2040 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2043 case SIS_RI_1280x1024: SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
2055 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2065 SiS_CheckScaling(SiS_Pr, resinfo, nonscalingmodes);
2072 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2073 if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
2074 SiS_Pr->SiS_LCDInfo = 0x80 | 0x40 | 0x20; /* neg h/v sync, RGB24(D0 = 0) */
2078 if(SiS_Pr->ChipType < SIS_315H) {
2079 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2080 if(SiS_Pr->SiS_UseROM) {
2083 SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
2087 } else if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2088 if((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10))) {
2089 SiS_Pr->SiS_LCDInfo &= (~DontExpandLCD);
2097 if(modexres == SiS_Pr->PanelXRes && modeyres == SiS_Pr->PanelYRes) {
2098 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2101 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
2102 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2105 switch(SiS_Pr->SiS_LCDResInfo) {
2107 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2111 if(SiS_Pr->CenterScreen == -1) SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2114 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2117 if((!SiS_Pr->CP_PrefClock) ||
2118 (modexres > SiS_Pr->PanelXRes) || (modeyres > SiS_Pr->PanelYRes)) {
2119 SiS_Pr->SiS_LCDInfo |= LCDPass11;
2124 if((SiS_Pr->UseCustomMode) || (SiS_Pr->SiS_CustomT == CUT_UNKNOWNLCD)) {
2125 SiS_Pr->SiS_LCDInfo |= (DontExpandLCD | LCDPass11);
2129 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2130 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
2134 if(!((SiS_Pr->ChipType < SIS_315H) && (SiS_Pr->SiS_SetFlag & SetDOSMode))) {
2136 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
2137 if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0) {
2139 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
2140 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2143 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x600) {
2144 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2146 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2155 if(SiS_Pr->SiS_IF_DEF_TRUMPION == 1) {
2156 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2157 } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
2158 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2159 } else if(SiS_Pr->SiS_LCDResInfo == Panel_640x480) {
2160 SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2162 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
2163 if(resinfo == SIS_RI_512x384) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2164 } else if(SiS_Pr->SiS_LCDResInfo == Panel_800x600) {
2165 if(resinfo == SIS_RI_400x300) SiS_Pr->SiS_SetFlag |= EnableLVDSDDA;
2173 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2174 if(SiS_Pr->SiS_VBInfo & SetNotSimuMode) {
2175 SiS_Pr->SiS_SetFlag |= LCDVESATiming;
2178 SiS_Pr->SiS_SetFlag |= LCDVESATiming;
2186 SiS_Pr->SiS_LCDInfo, SiS_Pr->SiS_LCDResInfo, SiS_Pr->SiS_LCDTypeInfo, SiS_Pr->SiS_SetFlag);
2195 SiS_GetVCLK2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
2203 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
2204 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
2205 CRT2Index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
2206 VCLKIndexGEN = (SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02)) >> 2) & 0x03;
2209 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
2210 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
2211 CRT2Index = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
2212 VCLKIndexGEN = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK;
2213 VCLKIndexGENCRT = SiS_GetRefCRTVCLK(SiS_Pr, RefreshRateTableIndex,
2214 (SiS_Pr->SiS_SetFlag & ProgrammingCRT2) ? SiS_Pr->SiS_UseWideCRT2 : SiS_Pr->SiS_UseWide);
2217 if(SiS_Pr->SiS_VBType & VB_SISVB) { /* 30x/B/LV */
2219 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
2222 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) { /* LCD */
2224 if(SiS_Pr->ChipType < SIS_315H) {
2225 VCLKIndex = SiS_Pr->PanelVCLKIdx300;
2226 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
2230 VCLKIndex = SiS_Pr->PanelVCLKIdx315;
2231 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (SiS_Pr->SiS_LCDInfo & LCDPass11)) {
2248 if(SiS_Pr->ChipType <= SIS_315PRO) {
2249 if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x42;
2251 if(SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC == 1) VCLKIndex = 0x00;
2254 if(SiS_Pr->ChipType <= SIS_315PRO) {
2262 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* TV */
2264 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
2265 if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) VCLKIndex = HiTVVCLKDIV2;
2267 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) VCLKIndex = HiTVSimuVCLK;
2268 } else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) VCLKIndex = YPbPr750pVCLK;
2269 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) VCLKIndex = TVVCLKDIV2;
2270 else if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) VCLKIndex = TVVCLKDIV2;
2273 if(SiS_Pr->ChipType < SIS_315H) VCLKIndex += TVCLKBASE_300;
2279 if(SiS_Pr->ChipType < SIS_315H) {
2281 if( (SiS_Pr->ChipType == SIS_630) &&
2282 (SiS_Pr->ChipRevision >= 0x30)) {
2294 if(SiS_Pr->ChipType < SIS_315H) {
2296 if( (SiS_Pr->ChipType != SIS_630) &&
2297 (SiS_Pr->ChipType != SIS_300) ) {
2308 if(SiS_Pr->SiS_SetFlag & ProgrammingCRT2) {
2310 if( (SiS_Pr->SiS_IF_DEF_CH70xx != 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) ) {
2314 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2315 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
2317 if(SiS_Pr->SiS_ModeType > ModeVGA) {
2318 if(SiS_Pr->SiS_CHSOverScan) tempbx = 8;
2320 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
2322 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2323 } else if(SiS_Pr->SiS_TVMode & TVSetPALN) {
2325 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx += 1;
2329 case 0: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUNTSC; break;
2330 case 1: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKONTSC; break;
2331 case 2: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPAL; break;
2332 case 3: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPAL; break;
2333 case 4: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPALM; break;
2334 case 5: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPALM; break;
2335 case 6: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKUPALN; break;
2336 case 7: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPALN; break;
2337 case 8: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKSOPAL; break;
2338 default: CHTVVCLKPtr = SiS_Pr->SiS_CHTVVCLKOPAL; break;
2342 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
2344 if(SiS_Pr->ChipType < SIS_315H) {
2345 VCLKIndex = SiS_Pr->PanelVCLKIdx300;
2347 VCLKIndex = SiS_Pr->PanelVCLKIdx315;
2352 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) VCLKIndex = 0x44;
2355 if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
2356 if(SiS_Pr->ChipType < SIS_315H) {
2369 if(SiS_Pr->ChipType < SIS_315H) {
2371 if( (SiS_Pr->ChipType == SIS_630) &&
2372 (SiS_Pr->ChipRevision >= 0x30) ) {
2382 if(SiS_Pr->ChipType < SIS_315H) {
2384 if( (SiS_Pr->ChipType != SIS_630) &&
2385 (SiS_Pr->ChipType != SIS_300) ) {
2409 SiS_SetCRT2ModeRegs(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
2417 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
2421 modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);
2423 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
2425 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xAF,0x40);
2426 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2E,0xF7);
2430 for(i=0,j=4; i<3; i++,j++) SiS_SetReg(SiS_Pr->SiS_Part1Port,j,0);
2431 if(SiS_Pr->ChipType >= SIS_315H) {
2432 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0x7F);
2435 tempcl = SiS_Pr->SiS_ModeType;
2437 if(SiS_Pr->ChipType < SIS_315H) {
2442 if(SiS_Pr->SiS_VBType & VB_NoLCD) {
2443 tempbl = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32);
2446 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTV) || (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
2450 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,tempbl);
2460 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0xA0;
2477 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempah ^= 0x50;
2483 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2485 if(SiS_Pr->ChipType < SIS_315H) {
2486 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,tempah);
2489 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
2490 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xa0,tempah);
2491 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
2493 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,tempah);
2495 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x00,0xa0,tempah);
2501 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2504 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
2507 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
2509 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
2514 if(SiS_Pr->ChipType < SIS_315H) {
2516 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2519 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,tempah);
2524 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0x08;
2525 else if(!(SiS_IsDualEdge(SiS_Pr))) tempah |= 0x08;
2526 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2E,0xF0,tempah);
2531 if((SiS_Pr->SiS_ModeType == ModeVGA) && (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode))) {
2536 if(SiS_Pr->SiS_VBType & VB_SIS301) {
2537 if(SiS_Pr->PanelXRes < 1280 && SiS_Pr->PanelYRes < 960) tempah &= ~0x80;
2540 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
2541 if(!(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetYPbPr525p))) {
2542 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2548 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0D,0x40,tempah);
2551 if(SiS_Pr->SiS_VBType & VB_SIS301) {
2552 if(SiS_Pr->PanelXRes < 1280 && SiS_Pr->PanelYRes < 960) tempah = 0;
2555 if(SiS_IsDualLink(SiS_Pr)) tempah |= 0x40;
2557 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
2558 if(SiS_Pr->SiS_TVMode & TVRPLLDIV2XO) {
2563 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0C,tempah);
2567 if(SiS_Pr->ChipType >= SIS_315H) {
2572 if((modeflag & CRT2Mode) && (SiS_Pr->SiS_ModeType > ModeVGA)) {
2573 if(SiS_Pr->SiS_VBInfo & DriverMode) {
2578 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) tempah |= 0x02;
2580 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempah ^= 0x01;
2582 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 1;
2584 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2e,0xF0,tempah);
2591 if( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) && (SiS_Pr->SiS_ModeType > ModeVGA) ) {
2596 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0;
2598 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,tempah);
2607 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2609 if(SiS_Pr->ChipType >= SIS_315H) {
2612 /* unsigned char bridgerev = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x01); */
2628 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2630 if(SiS_IsDualEdge(SiS_Pr)) {
2634 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
2646 if((IS_SIS740) || (SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
2649 if((SiS_Pr->SiS_VBInfo & DisableCRT2Display) ||
2650 ((SiS_Pr->SiS_ROMNew) && (!(ROMAddr[0x5b] & 0x04)))) {
2654 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,0xcf,tempah);
2655 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0x3f,tempbl);
2656 } else if(SiS_Pr->SiS_VBType & VB_SIS301) {
2658 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2c,0xcf); /* For 301 */
2659 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x21,0x3f);
2660 } else if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
2661 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30); /* For 30xLV */
2662 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x21,0xc0);
2663 } else if(SiS_Pr->SiS_VBType & VB_NoLCD) { /* For 301B-DH */
2666 if(SiS_Pr->SiS_TVBlue == 0) {
2668 } else if(SiS_Pr->SiS_TVBlue == -1) {
2674 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
2675 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl2,tempah2);
2679 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2681 if(SiS_IsDualEdge(SiS_Pr)) {
2685 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2c,tempbl,tempah);
2686 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,tempbl2,tempah2);
2691 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) tempah = 0x00;
2692 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,0x7f,tempah);
2696 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2698 if(!(SiS_IsDualEdge(SiS_Pr))) tempah = 0x80;
2700 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x23,tempbl,tempah);
2705 } else if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2708 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x21,0x3f);
2710 if((SiS_Pr->SiS_VBInfo & DisableCRT2Display) ||
2711 ((SiS_Pr->SiS_VBType & VB_NoLCD) &&
2712 (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD))) {
2713 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x23,0x7F);
2715 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x23,0x80);
2721 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
2722 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x0D,0x80);
2723 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
2724 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3A,0xC0);
2731 if(SiS_Pr->ChipType >= SIS_315H) {
2733 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
2737 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
2739 if(SiS_IsDualEdge(SiS_Pr)) tempbl = 0xff;
2741 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,tempbl,tempah);
2743 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
2744 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
2747 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30);
2749 } else if(SiS_Pr->ChipType == SIS_550) {
2751 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
2752 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2c,0x30);
2768 SiS_GetResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
2771 return ((unsigned short)SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo);
2773 return ((unsigned short)SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO);
2777 SiS_GetCRT2ResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
2781 if(SiS_Pr->UseCustomMode) {
2782 xres = SiS_Pr->CHDisplay;
2783 if(SiS_Pr->CModeFlag & HalfDCLK) xres <<= 1;
2784 SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
2786 SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = SiS_Pr->CVDisplay;
2790 resindex = SiS_GetResInfo(SiS_Pr,ModeNo,ModeIdIndex);
2793 xres = SiS_Pr->SiS_StResInfo[resindex].HTotal;
2794 yres = SiS_Pr->SiS_StResInfo[resindex].VTotal;
2796 xres = SiS_Pr->SiS_ModeResInfo[resindex].HTotal;
2797 yres = SiS_Pr->SiS_ModeResInfo[resindex].VTotal;
2798 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
2801 if(!SiS_Pr->SiS_IF_DEF_DSTN && !SiS_Pr->SiS_IF_DEF_FSTN) {
2803 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_IF_DEF_LVDS == 1)) {
2804 if((ModeNo != 0x03) && (SiS_Pr->SiS_SetFlag & SetDOSMode)) {
2807 if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x3a) & 0x01) {
2817 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
2819 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
2820 switch(SiS_Pr->SiS_LCDResInfo) {
2822 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
2823 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2831 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2836 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
2841 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
2850 if(SiS_Pr->SiS_VBType & VB_SISVB) {
2851 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToHiVision)) {
2856 if(SiS_Pr->SiS_SetFlag & SetDOSMode) {
2858 if(SiS_Pr->ChipType >= SIS_315H) {
2859 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x17) & 0x80) yres = 480;
2861 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x80) yres = 480;
2863 if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) yres = 480;
2867 SiS_Pr->SiS_VGAHDE = SiS_Pr->SiS_HDE = xres;
2868 SiS_Pr->SiS_VGAVDE = SiS_Pr->SiS_VDE = yres;
2876 SiS_GetCRT2Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
2883 tempal = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
2885 tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
2886 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
2889 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_IF_DEF_LVDS == 0)) {
2891 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) { /* LCD */
2893 tempbx = SiS_Pr->SiS_LCDResInfo;
2894 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 32;
2897 if(SiS_Pr->SiS_LCDResInfo == Panel_1680x1050) {
2900 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x800) ||
2901 (SiS_Pr->SiS_LCDResInfo == Panel_1280x800_2) ||
2902 (SiS_Pr->SiS_LCDResInfo == Panel_1280x854)) {
2906 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
2912 tempal = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC_NS;
2917 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
2918 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
2919 if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
2921 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx++;
2929 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
2930 /* if(SiS_Pr->SiS_VGAVDE > 480) SiS_Pr->SiS_TVMode &= (~TVSetTVSimuMode); */
2932 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
2934 if(!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) tempbx = 14;
2936 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2937 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempbx = 7;
2938 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tempbx = 6;
2940 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) tempbx += 5;
2942 if(SiS_Pr->SiS_TVMode & TVSetPAL) tempbx = 3;
2944 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) tempbx += 5;
2952 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision) {
2956 if(SiS_Pr->SiS_TVMode & (TVSetPAL | TVSetPALN)) tempal = 9;
2962 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2963 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempal = 8;
2972 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2973 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tempal = 8;
2977 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
2978 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempal = 9;
2991 if((SiS_Pr->SiS_IF_DEF_CH70xx) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
2994 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
2996 if(SiS_Pr->SiS_ModeType > ModeVGA) {
2997 if(SiS_Pr->SiS_CHSOverScan) tempbx = 99;
2999 if(SiS_Pr->SiS_TVMode & TVSetPALM) tempbx = 94;
3000 else if(SiS_Pr->SiS_TVMode & TVSetPALN) tempbx = 96;
3003 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) tempbx++;
3008 switch(SiS_Pr->SiS_LCDResInfo) {
3026 switch(SiS_Pr->SiS_LCDResInfo) {
3033 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
3036 if(SiS_Pr->SiS_LCDInfo & LCDPass11) tempbx = 30;
3039 if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
3041 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
3042 } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848 || SiS_Pr->SiS_CustomT == CUT_PANEL856) {
3044 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
3056 SiS_GetRAMDAC2DATA(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3062 SiS_Pr->SiS_RVBHCMAX = 1;
3063 SiS_Pr->SiS_RVBHCFACT = 1;
3067 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3068 index = SiS_GetModePtr(SiS_Pr,ModeNo,ModeIdIndex);
3070 tempax = SiS_Pr->SiS_StandTable[index].CRTC[0];
3071 tempbx = SiS_Pr->SiS_StandTable[index].CRTC[6];
3072 temp1 = SiS_Pr->SiS_StandTable[index].CRTC[7];
3078 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
3079 index = SiS_GetRefCRT1CRTC(SiS_Pr, RefreshRateTableIndex, SiS_Pr->SiS_UseWideCRT2);
3081 tempax = SiS_Pr->SiS_CRT1Table[index].CR[0];
3082 tempax |= (SiS_Pr->SiS_CRT1Table[index].CR[14] << 8);
3084 tempbx = SiS_Pr->SiS_CRT1Table[index].CR[6];
3085 tempcx = SiS_Pr->SiS_CRT1Table[index].CR[13] << 8;
3089 temp1 = SiS_Pr->SiS_CRT1Table[index].CR[7];
3104 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3105 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = tempbx;
3109 SiS_CalcPanelLinkTiming(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
3114 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3115 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
3116 if(SiS_Pr->UseCustomMode) {
3117 ResIndex = SiS_Pr->CHTotal;
3118 if(SiS_Pr->CModeFlag & HalfDCLK) ResIndex <<= 1;
3119 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = ResIndex;
3120 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3123 ResIndex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
3125 ResIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC_NS;
3128 if(SiS_Pr->Alternate1600x1200) ResIndex = 0x20; /* 1600x1200 LCDA */
3129 else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) ResIndex = 0x21; /* 1600x1200 LVDS */
3131 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_NoScaleData[ResIndex].VGAHT;
3132 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_NoScaleData[ResIndex].VGAVT;
3133 SiS_Pr->SiS_HT = SiS_Pr->SiS_NoScaleData[ResIndex].LCDHT;
3134 SiS_Pr->SiS_VT = SiS_Pr->SiS_NoScaleData[ResIndex].LCDVT;
3137 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3138 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3142 SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
3143 SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
3144 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3145 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3146 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT - (SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE);
3147 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT - (SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE);
3152 SiS_GetCRT2DataLVDS(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3158 SiS_GetCRT2ResInfo(SiS_Pr, ModeNo, ModeIdIndex);
3160 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3161 SiS_Pr->SiS_RVBHCMAX = 1;
3162 SiS_Pr->SiS_RVBHCFACT = 1;
3163 SiS_Pr->SiS_NewFlickerMode = 0;
3164 SiS_Pr->SiS_RVBHRS = 50;
3165 SiS_Pr->SiS_RY1COE = 0;
3166 SiS_Pr->SiS_RY2COE = 0;
3167 SiS_Pr->SiS_RY3COE = 0;
3168 SiS_Pr->SiS_RY4COE = 0;
3169 SiS_Pr->SiS_RVBHRS2 = 0;
3172 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3175 SiS_CalcPanelLinkTiming(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3176 SiS_CalcLCDACRT1Timing(SiS_Pr, ModeNo, ModeIdIndex);
3182 backup = SiS_Pr->SiS_IF_DEF_LVDS;
3183 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
3184 SiS_Pr->SiS_IF_DEF_LVDS = 1;
3187 SiS_GetCRT2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
3190 SiS_Pr->SiS_IF_DEF_LVDS = backup;
3193 case 10: LVDSData = SiS_Pr->SiS_LVDS320x240Data_1; break;
3194 case 14: LVDSData = SiS_Pr->SiS_LVDS320x240Data_2; break;
3195 case 12: LVDSData = SiS_Pr->SiS_LVDS640x480Data_1; break;
3196 case 16: LVDSData = SiS_Pr->SiS_LVDS800x600Data_1; break;
3197 case 18: LVDSData = SiS_Pr->SiS_LVDS1024x600Data_1; break;
3198 case 20: LVDSData = SiS_Pr->SiS_LVDS1024x768Data_1; break;
3200 case 80: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_1; break;
3201 case 81: LVDSData = SiS_Pr->SiS_LVDSBARCO1366Data_2; break;
3202 case 82: LVDSData = SiS_Pr->SiS_LVDSBARCO1024Data_1; break;
3203 case 84: LVDSData = SiS_Pr->SiS_LVDS848x480Data_1; break;
3204 case 85: LVDSData = SiS_Pr->SiS_LVDS848x480Data_2; break;
3206 case 90: LVDSData = SiS_Pr->SiS_CHTVUNTSCData; break;
3207 case 91: LVDSData = SiS_Pr->SiS_CHTVONTSCData; break;
3208 case 92: LVDSData = SiS_Pr->SiS_CHTVUPALData; break;
3209 case 93: LVDSData = SiS_Pr->SiS_CHTVOPALData; break;
3210 case 94: LVDSData = SiS_Pr->SiS_CHTVUPALMData; break;
3211 case 95: LVDSData = SiS_Pr->SiS_CHTVOPALMData; break;
3212 case 96: LVDSData = SiS_Pr->SiS_CHTVUPALNData; break;
3213 case 97: LVDSData = SiS_Pr->SiS_CHTVOPALNData; break;
3214 case 99: LVDSData = SiS_Pr->SiS_CHTVSOPALData; break;
3218 SiS_Pr->SiS_VGAHT = (LVDSData+ResIndex)->VGAHT;
3219 SiS_Pr->SiS_VGAVT = (LVDSData+ResIndex)->VGAVT;
3220 SiS_Pr->SiS_HT = (LVDSData+ResIndex)->LCDHT;
3221 SiS_Pr->SiS_VT = (LVDSData+ResIndex)->LCDVT;
3223 SiS_CalcPanelLinkTiming(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3226 if( (!(SiS_Pr->SiS_VBType & VB_SISVB)) &&
3227 (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
3228 (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) ) {
3229 if( (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ||
3230 (SiS_Pr->SiS_SetFlag & SetDOSMode) ) {
3231 SiS_Pr->SiS_HDE = SiS_Pr->PanelXRes;
3232 SiS_Pr->SiS_VDE = SiS_Pr->PanelYRes;
3234 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
3236 SiS_Pr->SiS_HDE = 1280;
3237 SiS_Pr->SiS_VDE = 1024;
3247 SiS_GetCRT2Data301(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3260 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3261 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
3262 } else if(SiS_Pr->UseCustomMode) {
3263 modeflag = SiS_Pr->CModeFlag;
3266 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
3267 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
3269 resinfo661 = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].ROMMODEIDX661;
3270 if( (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) &&
3271 (SiS_Pr->SiS_SetFlag & LCDVESATiming) &&
3273 (SiS_Pr->SiS_NeedRomModeData) ) {
3274 if((ROMAddr = GetLCDStructPtr661(SiS_Pr))) {
3277 ROMAddr = SiS_Pr->VirtualRomBase;
3284 SiS_Pr->SiS_NewFlickerMode = 0;
3285 SiS_Pr->SiS_RVBHRS = 50;
3286 SiS_Pr->SiS_RY1COE = 0;
3287 SiS_Pr->SiS_RY2COE = 0;
3288 SiS_Pr->SiS_RY3COE = 0;
3289 SiS_Pr->SiS_RY4COE = 0;
3290 SiS_Pr->SiS_RVBHRS2 = 0;
3292 SiS_GetCRT2ResInfo(SiS_Pr,ModeNo,ModeIdIndex);
3294 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
3296 if(SiS_Pr->UseCustomMode) {
3298 SiS_Pr->SiS_RVBHCMAX = 1;
3299 SiS_Pr->SiS_RVBHCFACT = 1;
3300 SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
3301 SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
3303 tempax = SiS_Pr->CHTotal;
3305 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3306 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3310 SiS_GetRAMDAC2DATA(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3314 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
3316 SiS_GetCRT2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
3320 case 2: TVPtr = SiS_Pr->SiS_ExtHiTVData; break;
3321 case 3: TVPtr = SiS_Pr->SiS_ExtPALData; break;
3322 case 4: TVPtr = SiS_Pr->SiS_ExtNTSCData; break;
3323 case 5: TVPtr = SiS_Pr->SiS_Ext525iData; break;
3324 case 6: TVPtr = SiS_Pr->SiS_Ext525pData; break;
3325 case 7: TVPtr = SiS_Pr->SiS_Ext750pData; break;
3326 case 8: TVPtr = SiS_Pr->SiS_StPALData; break;
3327 case 9: TVPtr = SiS_Pr->SiS_StNTSCData; break;
3328 case 10: TVPtr = SiS_Pr->SiS_St525iData; break;
3329 case 11: TVPtr = SiS_Pr->SiS_St525pData; break;
3330 case 12: TVPtr = SiS_Pr->SiS_St750pData; break;
3331 case 13: TVPtr = SiS_Pr->SiS_St1HiTVData; break;
3332 case 14: TVPtr = SiS_Pr->SiS_St2HiTVData; break;
3333 default: TVPtr = SiS_Pr->SiS_StPALData; break;
3336 SiS_Pr->SiS_RVBHCMAX = (TVPtr+ResIndex)->RVBHCMAX;
3337 SiS_Pr->SiS_RVBHCFACT = (TVPtr+ResIndex)->RVBHCFACT;
3338 SiS_Pr->SiS_VGAHT = (TVPtr+ResIndex)->VGAHT;
3339 SiS_Pr->SiS_VGAVT = (TVPtr+ResIndex)->VGAVT;
3340 SiS_Pr->SiS_HDE = (TVPtr+ResIndex)->TVHDE;
3341 SiS_Pr->SiS_VDE = (TVPtr+ResIndex)->TVVDE;
3342 SiS_Pr->SiS_RVBHRS2 = (TVPtr+ResIndex)->RVBHRS2 & 0x0fff;
3344 SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->HALFRVBHRS;
3345 if(SiS_Pr->SiS_RVBHRS2) {
3346 SiS_Pr->SiS_RVBHRS2 = ((SiS_Pr->SiS_RVBHRS2 + 3) >> 1) - 3;
3348 if((TVPtr+ResIndex)->RVBHRS2 & 0x8000) SiS_Pr->SiS_RVBHRS2 -= tempax;
3349 else SiS_Pr->SiS_RVBHRS2 += tempax;
3352 SiS_Pr->SiS_RVBHRS = (TVPtr+ResIndex)->RVBHRS;
3354 SiS_Pr->SiS_NewFlickerMode = ((TVPtr+ResIndex)->FlickerMode) << 7;
3356 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
3362 SiS_Pr->SiS_NewFlickerMode = 0x40;
3365 if(SiS_Pr->SiS_VGAVDE == 350) SiS_Pr->SiS_TVMode |= TVSetTVSimuMode;
3367 SiS_Pr->SiS_HT = ExtHiTVHT;
3368 SiS_Pr->SiS_VT = ExtHiTVVT;
3369 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
3370 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
3371 SiS_Pr->SiS_HT = StHiTVHT;
3372 SiS_Pr->SiS_VT = StHiTVVT;
3376 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
3378 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) {
3379 SiS_Pr->SiS_HT = 1650;
3380 SiS_Pr->SiS_VT = 750;
3381 } else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
3382 SiS_Pr->SiS_HT = NTSCHT;
3383 if(SiS_Pr->SiS_TVMode & TVSet525p1024) SiS_Pr->SiS_HT = NTSC2HT;
3384 SiS_Pr->SiS_VT = NTSCVT;
3386 SiS_Pr->SiS_HT = NTSCHT;
3387 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) SiS_Pr->SiS_HT = NTSC2HT;
3388 SiS_Pr->SiS_VT = NTSCVT;
3393 SiS_Pr->SiS_RY1COE = (TVPtr+ResIndex)->RY1COE;
3394 SiS_Pr->SiS_RY2COE = (TVPtr+ResIndex)->RY2COE;
3395 SiS_Pr->SiS_RY3COE = (TVPtr+ResIndex)->RY3COE;
3396 SiS_Pr->SiS_RY4COE = (TVPtr+ResIndex)->RY4COE;
3399 SiS_Pr->SiS_RY1COE = 0x00;
3400 SiS_Pr->SiS_RY2COE = 0xf4;
3401 SiS_Pr->SiS_RY3COE = 0x10;
3402 SiS_Pr->SiS_RY4COE = 0x38;
3405 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
3406 SiS_Pr->SiS_HT = NTSCHT;
3407 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) SiS_Pr->SiS_HT = NTSC2HT;
3408 SiS_Pr->SiS_VT = NTSCVT;
3410 SiS_Pr->SiS_HT = PALHT;
3411 SiS_Pr->SiS_VT = PALVT;
3416 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3418 SiS_Pr->SiS_RVBHCMAX = 1;
3419 SiS_Pr->SiS_RVBHCFACT = 1;
3421 if(SiS_Pr->UseCustomMode) {
3423 SiS_Pr->SiS_HDE = SiS_Pr->SiS_VGAHDE;
3424 SiS_Pr->SiS_VDE = SiS_Pr->SiS_VGAVDE;
3426 tempax = SiS_Pr->CHTotal;
3428 SiS_Pr->SiS_VGAHT = SiS_Pr->SiS_HT = tempax;
3429 SiS_Pr->SiS_VGAVT = SiS_Pr->SiS_VT = SiS_Pr->CVTotal;
3435 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
3437 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT;
3438 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT;
3439 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3440 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3443 } else if( (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) && (romptr) && (ROMAddr) ) {
3446 SiS_Pr->SiS_RVBHCMAX = ROMAddr[romptr];
3447 SiS_Pr->SiS_RVBHCFACT = ROMAddr[romptr+1];
3448 SiS_Pr->SiS_VGAHT = ROMAddr[romptr+2] | ((ROMAddr[romptr+3] & 0x0f) << 8);
3449 SiS_Pr->SiS_VGAVT = (ROMAddr[romptr+4] << 4) | ((ROMAddr[romptr+3] & 0xf0) >> 4);
3450 SiS_Pr->SiS_HT = ROMAddr[romptr+5] | ((ROMAddr[romptr+6] & 0x0f) << 8);
3451 SiS_Pr->SiS_VT = (ROMAddr[romptr+7] << 4) | ((ROMAddr[romptr+6] & 0xf0) >> 4);
3452 SiS_Pr->SiS_RVBHRS2 = ROMAddr[romptr+8] | ((ROMAddr[romptr+9] & 0x0f) << 8);
3453 if((SiS_Pr->SiS_RVBHRS2) && (modeflag & HalfDCLK)) {
3454 SiS_Pr->SiS_RVBHRS2 = ((SiS_Pr->SiS_RVBHRS2 + 3) >> 1) - 3;
3456 if(ROMAddr[romptr+9] & 0x80) SiS_Pr->SiS_RVBHRS2 -= tempax;
3457 else SiS_Pr->SiS_RVBHRS2 += tempax;
3459 if(SiS_Pr->SiS_VGAHT) gotit = true;
3461 SiS_Pr->SiS_LCDInfo |= DontExpandLCD;
3462 SiS_Pr->SiS_LCDInfo &= ~LCDPass11;
3463 SiS_Pr->SiS_RVBHCMAX = 1;
3464 SiS_Pr->SiS_RVBHCFACT = 1;
3465 SiS_Pr->SiS_VGAHT = SiS_Pr->PanelHT;
3466 SiS_Pr->SiS_VGAVT = SiS_Pr->PanelVT;
3467 SiS_Pr->SiS_HT = SiS_Pr->PanelHT;
3468 SiS_Pr->SiS_VT = SiS_Pr->PanelVT;
3469 SiS_Pr->SiS_RVBHRS2 = 0;
3478 SiS_GetCRT2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex,
3482 case Panel_1024x768 : LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break;
3483 case Panel_1024x768 + 32: LCDPtr = SiS_Pr->SiS_St2LCD1024x768Data; break;
3485 case Panel_1280x720 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x720Data; break;
3486 case Panel_1280x768_2 : LCDPtr = SiS_Pr->SiS_ExtLCD1280x768_2Data; break;
3487 case Panel_1280x768_2+ 32: LCDPtr = SiS_Pr->SiS_StLCD1280x768_2Data; break;
3489 case Panel_1280x800 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x800Data; break;
3491 case Panel_1280x800_2+ 32: LCDPtr = SiS_Pr->SiS_LCD1280x800_2Data; break;
3493 case Panel_1280x854 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x854Data; break;
3495 case Panel_1280x960 + 32: LCDPtr = SiS_Pr->SiS_LCD1280x960Data; break;
3496 case Panel_1280x1024 : LCDPtr = SiS_Pr->SiS_ExtLCD1280x1024Data; break;
3497 case Panel_1280x1024 + 32: LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break;
3498 case Panel_1400x1050 : LCDPtr = SiS_Pr->SiS_ExtLCD1400x1050Data; break;
3499 case Panel_1400x1050 + 32: LCDPtr = SiS_Pr->SiS_StLCD1400x1050Data; break;
3500 case Panel_1600x1200 : LCDPtr = SiS_Pr->SiS_ExtLCD1600x1200Data; break;
3501 case Panel_1600x1200 + 32: LCDPtr = SiS_Pr->SiS_StLCD1600x1200Data; break;
3503 case Panel_1680x1050 + 32: LCDPtr = SiS_Pr->SiS_LCD1680x1050Data; break;
3504 case 100 : LCDPtr = SiS_Pr->SiS_NoScaleData; break;
3507 case 201 : LCDPtr = SiS_Pr->SiS_St2LCD1280x1024Data; break;
3509 default : LCDPtr = SiS_Pr->SiS_ExtLCD1024x768Data; break;
3518 SiS_Pr->SiS_RVBHCMAX = (LCDPtr+ResIndex)->RVBHCMAX;
3519 SiS_Pr->SiS_RVBHCFACT = (LCDPtr+ResIndex)->RVBHCFACT;
3520 SiS_Pr->SiS_VGAHT = (LCDPtr+ResIndex)->VGAHT;
3521 SiS_Pr->SiS_VGAVT = (LCDPtr+ResIndex)->VGAVT;
3522 SiS_Pr->SiS_HT = (LCDPtr+ResIndex)->LCDHT;
3523 SiS_Pr->SiS_VT = (LCDPtr+ResIndex)->LCDVT;
3527 tempax = SiS_Pr->PanelXRes;
3528 tempbx = SiS_Pr->PanelYRes;
3530 switch(SiS_Pr->SiS_LCDResInfo) {
3532 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
3533 if(SiS_Pr->ChipType < SIS_315H) {
3534 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
3535 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
3538 if (SiS_Pr->SiS_VGAVDE == 357) tempbx = 527;
3539 else if(SiS_Pr->SiS_VGAVDE == 420) tempbx = 620;
3540 else if(SiS_Pr->SiS_VGAVDE == 525) tempbx = 775;
3541 else if(SiS_Pr->SiS_VGAVDE == 600) tempbx = 775;
3542 else if(SiS_Pr->SiS_VGAVDE == 350) tempbx = 560;
3543 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 640;
3547 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 700;
3548 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 800;
3549 else if(SiS_Pr->SiS_VGAVDE == 1024) tempbx = 960;
3552 if (SiS_Pr->SiS_VGAVDE == 360) tempbx = 768;
3553 else if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 800;
3554 else if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 864;
3557 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
3558 if (SiS_Pr->SiS_VGAVDE == 350) tempbx = 875;
3559 else if(SiS_Pr->SiS_VGAVDE == 400) tempbx = 1000;
3564 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3565 tempax = SiS_Pr->SiS_VGAHDE;
3566 tempbx = SiS_Pr->SiS_VGAVDE;
3569 SiS_Pr->SiS_HDE = tempax;
3570 SiS_Pr->SiS_VDE = tempbx;
3576 SiS_GetCRT2Data(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3580 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3582 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
3583 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3585 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
3587 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3589 SiS_GetCRT2Data301(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3595 SiS_GetCRT2DataLVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
3605 SiS_GetLVDSDesPtr(struct SiS_Private *SiS_Pr)
3610 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3612 if(SiS_Pr->ChipType < SIS_315H) {
3613 if(SiS_Pr->SiS_LCDTypeInfo == 4) {
3614 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
3615 PanelDesPtr = SiS_Pr->SiS_PanelType04_1a;
3616 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3617 PanelDesPtr = SiS_Pr->SiS_PanelType04_2a;
3619 } else if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
3620 PanelDesPtr = SiS_Pr->SiS_PanelType04_1b;
3621 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3622 PanelDesPtr = SiS_Pr->SiS_PanelType04_2b;
3633 SiS_GetLVDSDesData(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
3639 SiS_Pr->SiS_LCDHDES = 0;
3640 SiS_Pr->SiS_LCDVDES = 0;
3643 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
3646 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
3647 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
3648 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3649 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3656 if(SiS_Pr->ChipType < SIS_315H) {
3657 if(SiS_Pr->SiS_LCDResInfo == Panel_640x480 && SiS_Pr->SiS_LCDTypeInfo == 3) {
3658 SiS_Pr->SiS_LCDHDES = 8;
3659 if (SiS_Pr->SiS_VGAVDE >= 480) SiS_Pr->SiS_LCDVDES = 512;
3660 else if(SiS_Pr->SiS_VGAVDE >= 400) SiS_Pr->SiS_LCDVDES = 436;
3661 else if(SiS_Pr->SiS_VGAVDE >= 350) SiS_Pr->SiS_LCDVDES = 440;
3668 if( (SiS_Pr->UseCustomMode) ||
3669 (SiS_Pr->SiS_LCDResInfo == Panel_Custom) ||
3670 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
3671 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ||
3672 (SiS_Pr->SiS_LCDInfo & LCDPass11) ) {
3676 if(ModeNo <= 0x13) ResIndex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
3677 else ResIndex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
3679 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3682 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3684 if(SiS_Pr->SiS_VGAHDE != SiS_Pr->PanelXRes) {
3685 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE) / 2);
3687 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->PanelYRes) {
3688 SiS_Pr->SiS_LCDVDES = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE) / 2);
3691 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3692 switch(SiS_Pr->SiS_CustomT) {
3696 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
3697 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3701 switch(SiS_Pr->SiS_LCDResInfo) {
3703 if(SiS_Pr->SiS_CustomT != CUT_COMPAQ1280) {
3704 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3710 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3718 if((SiS_Pr->SiS_IF_DEF_CH70xx != 0) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
3720 if((SiS_Pr->SiS_TVMode & TVSetPAL) && (!(SiS_Pr->SiS_TVMode & TVSetPALM))) {
3721 if(ResIndex <= 3) SiS_Pr->SiS_LCDHDES = 256;
3724 } else if((PanelDesPtr = SiS_GetLVDSDesPtr(SiS_Pr))) {
3726 SiS_Pr->SiS_LCDHDES = (PanelDesPtr+ResIndex)->LCDHDES;
3727 SiS_Pr->SiS_LCDVDES = (PanelDesPtr+ResIndex)->LCDVDES;
3729 } else if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
3731 if(SiS_Pr->SiS_VGAHDE != SiS_Pr->PanelXRes) {
3732 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_VGAHDE) / 2);
3734 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->PanelYRes) {
3735 SiS_Pr->SiS_LCDVDES = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VGAVDE) / 2);
3737 if(SiS_Pr->ChipType < SIS_315H) {
3738 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3740 switch(SiS_Pr->SiS_LCDResInfo) {
3744 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT;
3747 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3755 if(SiS_Pr->ChipType < SIS_315H) {
3757 switch(SiS_Pr->SiS_LCDResInfo) {
3759 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3760 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3762 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT + 3;
3763 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT;
3764 if(SiS_Pr->SiS_VGAVDE == 400) SiS_Pr->SiS_LCDVDES -= 2;
3765 else SiS_Pr->SiS_LCDVDES -= 4;
3769 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3770 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3772 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT - 1;
3773 if(SiS_Pr->SiS_VGAVDE <= 400) SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 8;
3774 if(SiS_Pr->SiS_VGAVDE <= 350) SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 12;
3779 if( (SiS_Pr->SiS_VGAHDE == SiS_Pr->PanelXRes) &&
3780 (SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) ) {
3781 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3783 SiS_Pr->SiS_LCDHDES = SiS_Pr->PanelHT - 1;
3788 switch(SiS_Pr->SiS_LCDTypeInfo) {
3790 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_LCDVDES = 0;
3793 SiS_Pr->SiS_LCDHDES = 8;
3794 if (SiS_Pr->SiS_VGAVDE >= 480) SiS_Pr->SiS_LCDVDES = 512;
3795 else if(SiS_Pr->SiS_VGAVDE >= 400) SiS_Pr->SiS_LCDVDES = 436;
3796 else if(SiS_Pr->SiS_VGAVDE >= 350) SiS_Pr->SiS_LCDVDES = 440;
3802 switch(SiS_Pr->SiS_LCDResInfo) {
3805 if(SiS_Pr->SiS_VGAVDE == SiS_Pr->PanelYRes) {
3806 SiS_Pr->SiS_LCDVDES = SiS_Pr->PanelVT - 1;
3812 SiS_Pr->SiS_LCDVDES = 524;
3819 if((ModeNo <= 0x13) && (SiS_Pr->SiS_LCDInfo & DontExpandLCD)) {
3820 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
3821 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
3822 if(!(modeflag & HalfDCLK)) SiS_Pr->SiS_LCDHDES = 632;
3823 } else if(!(SiS_Pr->SiS_SetFlag & SetDOSMode)) {
3824 if(SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) {
3825 if(SiS_Pr->SiS_LCDResInfo >= Panel_1024x768) {
3826 if(SiS_Pr->ChipType < SIS_315H) {
3827 if(!(modeflag & HalfDCLK)) SiS_Pr->SiS_LCDHDES = 320;
3830 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) SiS_Pr->SiS_LCDHDES = 480;
3831 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) SiS_Pr->SiS_LCDHDES = 804;
3832 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) SiS_Pr->SiS_LCDHDES = 704;
3834 SiS_Pr->SiS_LCDHDES = 320;
3835 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) SiS_Pr->SiS_LCDHDES = 632;
3836 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) SiS_Pr->SiS_LCDHDES = 542;
3853 SiS_HandlePWD(struct SiS_Private *SiS_Pr)
3857 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
3858 unsigned short romptr = GetLCDStructPtr661_2(SiS_Pr);
3859 unsigned char drivermode = SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & 0x40;
3862 if( (SiS_Pr->SiS_VBType & VB_SISPWD) &&
3864 (SiS_Pr->SiS_PWDOffset) ) {
3865 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2b,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 0]);
3866 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2c,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 1]);
3867 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2d,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 2]);
3868 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2e,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 3]);
3869 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2f,ROMAddr[romptr + SiS_Pr->SiS_PWDOffset + 4]);
3875 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x27,0x7f,temp);
3892 SiS_DisableBridge(struct SiS_Private *SiS_Pr)
3899 if(SiS_Pr->SiS_VBType & VB_SISVB) {
3901 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* ===== For 30xB/C/LV ===== */
3903 if(SiS_Pr->ChipType < SIS_315H) {
3907 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
3908 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3909 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFE);
3911 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
3913 SiS_PanelDelay(SiS_Pr, 3);
3915 if(SiS_Is301B(SiS_Pr)) {
3916 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,0x3f);
3917 SiS_ShortDelay(SiS_Pr,1);
3919 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF);
3920 SiS_DisplayOff(SiS_Pr);
3921 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
3922 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
3923 SiS_UnLockCRT2(SiS_Pr);
3924 if(!(SiS_Pr->SiS_VBType & VB_SISLVDS)) {
3925 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
3926 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
3928 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
3929 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
3930 SiS_PanelDelay(SiS_Pr, 2);
3931 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3932 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFD);
3934 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
3945 bool custom1 = (SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) ||
3946 (SiS_Pr->SiS_CustomT == CUT_CLEVO1400);
3948 modenum = SiS_GetReg(SiS_Pr->SiS_P3d4,0x34) & 0x7f;
3950 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3953 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
3954 if(SiS_Pr->SiS_CustomT != CUT_CLEVO1400) {
3955 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
3960 didpwd = SiS_HandlePWD(SiS_Pr);
3963 (SiS_IsVAMode(SiS_Pr)) ||
3964 (!(SiS_IsDualEdge(SiS_Pr))) ) {
3966 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xfe);
3967 if(custom1) SiS_PanelDelay(SiS_Pr, 3);
3969 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xfc);
3974 SiS_DDC2Delay(SiS_Pr,0xff00);
3975 SiS_DDC2Delay(SiS_Pr,0xe000);
3976 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0x00);
3977 pushax = SiS_GetReg(SiS_Pr->SiS_P3c4,0x06);
3979 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
3981 SiS_PanelDelay(SiS_Pr, 3);
3986 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
3987 /* if(SiS_Pr->ChipType < SIS_340) {*/
3989 if(SiS_IsVAMode(SiS_Pr)) tempah = 0xf7;
3990 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,tempah);
3994 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
3995 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,~0x10);
3999 if(SiS_IsDualEdge(SiS_Pr)) {
4001 if(!(SiS_IsVAMode(SiS_Pr))) tempah = 0xbf;
4003 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1F,tempah);
4005 if((SiS_IsVAMode(SiS_Pr)) ||
4006 ((SiS_Pr->SiS_VBType & VB_SISLVDS) && (modenum <= 0x13))) {
4008 SiS_DisplayOff(SiS_Pr);
4009 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4010 SiS_PanelDelay(SiS_Pr, 2);
4012 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4013 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1E,0xDF);
4017 if((!(SiS_IsVAMode(SiS_Pr))) ||
4018 ((SiS_Pr->SiS_VBType & VB_SISLVDS) && (modenum <= 0x13))) {
4020 if(!(SiS_IsDualEdge(SiS_Pr))) {
4021 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xdf);
4022 SiS_DisplayOff(SiS_Pr);
4024 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4026 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4027 SiS_PanelDelay(SiS_Pr, 2);
4030 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4031 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
4032 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
4033 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4034 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,temp);
4038 if(SiS_IsNotM650orLater(SiS_Pr)) {
4039 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4042 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4044 if( (!(SiS_IsVAMode(SiS_Pr))) &&
4045 (!(SiS_CRT2IsLCD(SiS_Pr))) &&
4046 (!(SiS_IsDualEdge(SiS_Pr))) ) {
4048 if(custom1) SiS_PanelDelay(SiS_Pr, 2);
4050 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFD);
4052 if(custom1) SiS_PanelDelay(SiS_Pr, 4);
4056 SiS_SetReg(SiS_Pr->SiS_P3c4,0x06,pushax);
4057 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4058 if(SiS_IsVAorLCD(SiS_Pr)) {
4059 SiS_PanelDelayLoop(SiS_Pr, 3, 20);
4072 if(SiS_Pr->ChipType < SIS_315H) {
4074 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4075 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4076 SiS_PanelDelay(SiS_Pr, 3);
4081 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xDF); /* disable VB */
4082 SiS_DisplayOff(SiS_Pr);
4084 if(SiS_Pr->ChipType >= SIS_315H) {
4085 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4088 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF); /* disable lock mode */
4090 if(SiS_Pr->ChipType >= SIS_315H) {
4091 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
4092 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x10);
4093 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4094 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,temp);
4097 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF); /* disable CRT2 */
4098 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
4099 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
4100 SiS_PanelDelay(SiS_Pr, 2);
4101 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4110 if(SiS_Pr->ChipType < SIS_315H) {
4114 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
4115 SiS_SetCH700x(SiS_Pr,0x0E,0x09);
4118 if(SiS_Pr->ChipType == SIS_730) {
4119 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x08)) {
4120 SiS_WaitVBRetrace(SiS_Pr);
4122 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4123 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4124 SiS_PanelDelay(SiS_Pr, 3);
4127 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x08)) {
4128 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4129 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4130 SiS_WaitVBRetrace(SiS_Pr);
4131 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x06) & 0x1c)) {
4132 SiS_DisplayOff(SiS_Pr);
4134 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4135 SiS_PanelDelay(SiS_Pr, 3);
4141 SiS_DisplayOff(SiS_Pr);
4143 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4145 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4146 SiS_UnLockCRT2(SiS_Pr);
4147 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80);
4148 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
4150 if( (!(SiS_CRT2IsLCD(SiS_Pr))) ||
4151 (!(SiS_CR36BIOSWord23d(SiS_Pr))) ) {
4152 SiS_PanelDelay(SiS_Pr, 2);
4153 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4162 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4163 /*if(SiS_Pr->ChipType < SIS_340) { */ /* XGI needs this */
4164 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x4c,~0x18);
4168 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
4170 if(SiS_Pr->ChipType == SIS_740) {
4171 temp = SiS_GetCH701x(SiS_Pr,0x61);
4173 SiS_SetCH701x(SiS_Pr,0x76,0xac);
4174 SiS_SetCH701x(SiS_Pr,0x66,0x00);
4177 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4178 (SiS_IsTVOrYPbPrOrScart(SiS_Pr)) ) {
4179 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
4183 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4184 (SiS_IsVAMode(SiS_Pr)) ) {
4185 SiS_Chrontel701xBLOff(SiS_Pr);
4186 SiS_Chrontel701xOff(SiS_Pr);
4189 if(SiS_Pr->ChipType != SIS_740) {
4190 if( (!(SiS_IsDualEdge(SiS_Pr))) ||
4191 (SiS_IsTVOrYPbPrOrScart(SiS_Pr)) ) {
4192 SiS_SetCH701x(SiS_Pr,0x49,0x01);
4198 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4199 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x08);
4200 SiS_PanelDelay(SiS_Pr, 3);
4203 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4204 (!(SiS_IsDualEdge(SiS_Pr))) ||
4205 (!(SiS_IsTVOrYPbPrOrScart(SiS_Pr))) ) {
4206 SiS_DisplayOff(SiS_Pr);
4209 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4210 (!(SiS_IsDualEdge(SiS_Pr))) ||
4211 (!(SiS_IsVAMode(SiS_Pr))) ) {
4212 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x00,0x80);
4215 if(SiS_Pr->ChipType == SIS_740) {
4216 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4219 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x32,0xDF);
4221 if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4222 (!(SiS_IsDualEdge(SiS_Pr))) ||
4223 (!(SiS_IsVAMode(SiS_Pr))) ) {
4224 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x1E,0xDF);
4227 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4228 if(SiS_CRT2IsLCD(SiS_Pr)) {
4229 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4230 if(SiS_Pr->ChipType == SIS_550) {
4231 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xbf);
4232 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xef);
4236 if(SiS_Pr->ChipType == SIS_740) {
4237 if(SiS_IsLCDOrLCDA(SiS_Pr)) {
4238 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4240 } else if(SiS_IsVAMode(SiS_Pr)) {
4241 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x1e,0xdf);
4245 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
4246 if(SiS_IsDualEdge(SiS_Pr)) {
4247 /* SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xff); */
4249 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xfb);
4253 SiS_UnLockCRT2(SiS_Pr);
4255 if(SiS_Pr->ChipType == SIS_550) {
4256 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x80); /* DirectDVD PAL?*/
4257 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40); /* VB clock / 4 ? */
4258 } else if( (SiS_Pr->SiS_IF_DEF_CH70xx == 0) ||
4259 (!(SiS_IsDualEdge(SiS_Pr))) ||
4260 (!(SiS_IsVAMode(SiS_Pr))) ) {
4261 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
4264 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4265 if(SiS_CRT2IsLCD(SiS_Pr)) {
4266 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4267 SiS_PanelDelay(SiS_Pr, 2);
4268 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x04);
4293 SiS_EnableBridge(struct SiS_Private *SiS_Pr)
4301 if(SiS_Pr->SiS_VBType & VB_SISVB) {
4303 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* ====== For 301B et al ====== */
4305 if(SiS_Pr->ChipType < SIS_315H) {
4309 if(SiS_CRT2IsLCD(SiS_Pr)) {
4310 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4311 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
4312 } else if(SiS_Pr->SiS_VBType & VB_NoLCD) {
4313 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4315 if(SiS_Pr->SiS_VBType & (VB_SISLVDS | VB_NoLCD)) {
4316 if(!(SiS_CR36BIOSWord23d(SiS_Pr))) {
4317 SiS_PanelDelay(SiS_Pr, 0);
4322 if((SiS_Pr->SiS_VBType & VB_NoLCD) &&
4323 (SiS_CRT2IsLCD(SiS_Pr))) {
4325 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* Enable CRT2 */
4326 SiS_DisplayOn(SiS_Pr);
4327 SiS_UnLockCRT2(SiS_Pr);
4328 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
4329 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4330 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
4332 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
4334 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4335 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4336 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4337 SiS_PanelDelay(SiS_Pr, 1);
4339 SiS_WaitVBRetrace(SiS_Pr);
4340 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4346 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF; /* lock mode */
4347 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4348 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4351 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4352 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4353 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20); /* enable VB processor */
4354 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,0xC0);
4355 SiS_DisplayOn(SiS_Pr);
4356 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4357 if(SiS_CRT2IsLCD(SiS_Pr)) {
4358 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4359 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4360 SiS_PanelDelay(SiS_Pr, 1);
4362 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
4382 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4383 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x1f,0xef);
4385 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4386 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
4391 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4392 /*if(SiS_Pr->ChipType < SIS_340) { */
4394 if(SiS_LCDAEnabled(SiS_Pr)) {
4395 if(SiS_TVEnabled(SiS_Pr)) tempah = 0x18;
4398 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4c,tempah);
4402 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4404 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0x00);
4405 SiS_DisplayOff(SiS_Pr);
4406 pushax = SiS_GetReg(SiS_Pr->SiS_P3c4,0x06);
4408 SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x06,0xE3);
4411 didpwd = SiS_HandlePWD(SiS_Pr);
4413 if(SiS_IsVAorLCD(SiS_Pr)) {
4415 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
4416 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4417 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
4418 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4419 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4420 SiS_GenericDelay(SiS_Pr, 17664);
4424 SiS_PanelDelayLoop(SiS_Pr, 3, 2);
4425 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4426 SiS_GenericDelay(SiS_Pr, 17664);
4431 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4,0x31) & 0x40)) {
4432 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4438 if(!(SiS_IsVAMode(SiS_Pr))) {
4440 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF;
4441 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4442 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4444 if(!(SiS_LCDAEnabled(SiS_Pr))) temp |= 0x20;
4447 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4449 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* enable CRT2 */
4451 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4452 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4454 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4455 SiS_PanelDelay(SiS_Pr, 2);
4460 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x20);
4464 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1f,0x20);
4465 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4467 if(SiS_Pr->SiS_VBType & VB_SISPOWER) {
4468 if( (SiS_LCDAEnabled(SiS_Pr)) ||
4469 (SiS_CRT2IsLCD(SiS_Pr)) ) {
4471 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x2a,0x7f);
4473 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x7f);
4478 if(SiS_IsDualEdge(SiS_Pr)) {
4480 if(!(SiS_IsVAMode(SiS_Pr))) tempah = 0x40;
4482 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1F,tempah);
4484 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
4486 SiS_PanelDelay(SiS_Pr, 2);
4488 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x1f,0x10);
4489 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2e,0x80);
4491 if(SiS_Pr->SiS_CustomT != CUT_CLEVO1400) {
4493 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4494 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
4495 SiS_GenericDelay(SiS_Pr, 2048);
4498 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x0c);
4500 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4502 cr36 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);
4504 if(SiS_Pr->SiS_ROMNew) {
4505 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
4506 unsigned short romptr = GetLCDStructPtr661_2(SiS_Pr);
4508 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20); /* Reset */
4509 SiS_Pr->EMI_30 = 0;
4510 SiS_Pr->EMI_31 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 0];
4511 SiS_Pr->EMI_32 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 1];
4512 SiS_Pr->EMI_33 = ROMAddr[romptr + SiS_Pr->SiS_EMIOffset + 2];
4513 if(ROMAddr[romptr + 1] & 0x10) SiS_Pr->EMI_30 = 0x40;
4515 SiS_Pr->HaveEMI = SiS_Pr->HaveEMILCD = SiS_Pr->OverruleEMI = true;
4530 if(SiS_Pr->HaveEMI) {
4531 r30 = SiS_Pr->EMI_30; r31 = SiS_Pr->EMI_31;
4532 r32 = SiS_Pr->EMI_32; r33 = SiS_Pr->EMI_33;
4538 if((!SiS_Pr->HaveEMI) || (!SiS_Pr->HaveEMILCD)) {
4542 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) r30 &= ~0x40;
4543 if(!SiS_Pr->HaveEMI) {
4551 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) r30 |= 0x40;
4552 if(!SiS_Pr->HaveEMI) {
4554 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
4561 if(!SiS_Pr->HaveEMI) {
4563 if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
4570 if(!SiS_Pr->HaveEMI) {
4577 if(!SiS_Pr->OverruleEMI) {
4579 if(SiS_Pr->SiS_CustomT == CUT_COMPAL1400_2) {
4586 if(SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) {
4593 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
4604 if(!(SiS_Pr->OverruleEMI && (!r30) && (!r31) && (!r32) && (!r33))) {
4605 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x20); /* Reset */
4606 SiS_GenericDelay(SiS_Pr, 2048);
4608 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x31,r31);
4609 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x32,r32);
4610 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x33,r33);
4613 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
4616 if( (SiS_LCDAEnabled(SiS_Pr)) ||
4617 (SiS_CRT2IsLCD(SiS_Pr)) ) {
4619 /*SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x2a,0x80);*/
4620 SiS_PanelDelayLoop(SiS_Pr, 3, 5);
4622 SiS_PanelDelayLoop(SiS_Pr, 3, 5);
4625 SiS_WaitVBRetrace(SiS_Pr);
4626 SiS_WaitVBRetrace(SiS_Pr);
4627 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
4628 SiS_GenericDelay(SiS_Pr, 1280);
4630 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x30,0x40); /* Enable */
4631 /*SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x2a,0x7f);*/
4638 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4639 if(SiS_IsVAorLCD(SiS_Pr)) {
4640 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4642 SiS_PanelDelayLoop(SiS_Pr, 3, 10);
4644 SiS_WaitVBRetrace(SiS_Pr);
4645 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
4646 SiS_GenericDelay(SiS_Pr, 2048);
4647 SiS_WaitVBRetrace(SiS_Pr);
4650 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
4652 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x03);
4657 SiS_SetReg(SiS_Pr->SiS_P3c4,0x06,pushax);
4658 SiS_DisplayOn(SiS_Pr);
4659 SiS_SetRegByte(SiS_Pr->SiS_P3c6,0xff);
4663 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4664 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4673 if(SiS_Pr->ChipType < SIS_315H) {
4674 if(SiS_CRT2IsLCD(SiS_Pr)) {
4675 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4676 SiS_PanelDelay(SiS_Pr, 0);
4680 temp = SiS_GetReg(SiS_Pr->SiS_P3c4,0x32) & 0xDF; /* lock mode */
4681 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4682 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x30);
4685 SiS_SetReg(SiS_Pr->SiS_P3c4,0x32,temp);
4687 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20); /* enable CRT2 */
4689 if(SiS_Pr->ChipType >= SIS_315H) {
4690 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
4692 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80); /* BVBDOENABLE=1 */
4696 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x00,0x1F,0x20); /* enable VB processor */
4698 SiS_VBLongWait(SiS_Pr);
4699 SiS_DisplayOn(SiS_Pr);
4700 if(SiS_Pr->ChipType >= SIS_315H) {
4701 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4703 SiS_VBLongWait(SiS_Pr);
4705 if(SiS_Pr->ChipType < SIS_315H) {
4706 if(SiS_CRT2IsLCD(SiS_Pr)) {
4707 SiS_PanelDelay(SiS_Pr, 1);
4708 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4716 if(SiS_Pr->ChipType < SIS_315H) {
4720 if(SiS_CRT2IsLCD(SiS_Pr)) {
4721 if(SiS_Pr->ChipType == SIS_730) {
4722 SiS_PanelDelay(SiS_Pr, 1);
4723 SiS_PanelDelay(SiS_Pr, 1);
4724 SiS_PanelDelay(SiS_Pr, 1);
4726 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4727 if(!(SiS_CR36BIOSWord23d(SiS_Pr))) {
4728 SiS_PanelDelay(SiS_Pr, 0);
4732 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4733 SiS_DisplayOn(SiS_Pr);
4734 SiS_UnLockCRT2(SiS_Pr);
4735 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xBF);
4736 if(SiS_BridgeInSlavemode(SiS_Pr)) {
4737 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x01,0x1F);
4739 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0x1F,0x40);
4742 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
4743 if(!(SiS_CRT2IsLCD(SiS_Pr))) {
4744 SiS_WaitVBRetrace(SiS_Pr);
4745 SiS_SetCH700x(SiS_Pr,0x0E,0x0B);
4749 if(SiS_CRT2IsLCD(SiS_Pr)) {
4750 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x13) & 0x40)) {
4751 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x16) & 0x10)) {
4752 if(!(SiS_CR36BIOSWord23b(SiS_Pr))) {
4753 SiS_PanelDelay(SiS_Pr, 1);
4754 SiS_PanelDelay(SiS_Pr, 1);
4756 SiS_WaitVBRetrace(SiS_Pr);
4757 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4768 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
4769 /*if(SiS_Pr->ChipType < SIS_340) {*/ /* XGI needs this */
4770 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x4c,0x18);
4774 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4775 if(SiS_CRT2IsLCD(SiS_Pr)) {
4776 SiS_SetRegSR11ANDOR(SiS_Pr,0xFB,0x00);
4777 SiS_PanelDelay(SiS_Pr, 0);
4781 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
4782 SiS_UnLockCRT2(SiS_Pr);
4784 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0xf7);
4786 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4787 temp = SiS_GetCH701x(SiS_Pr,0x66);
4789 SiS_Chrontel701xBLOff(SiS_Pr);
4792 if(SiS_Pr->ChipType != SIS_550) {
4793 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2e,0x7f);
4796 if(SiS_Pr->ChipType == SIS_740) {
4797 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4798 if(SiS_IsLCDOrLCDA(SiS_Pr)) {
4799 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
4804 temp1 = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x2E);
4806 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2E,0x80);
4809 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4811 SiS_Chrontel701xBLOn(SiS_Pr);
4815 if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4816 if(SiS_CRT2IsLCD(SiS_Pr)) {
4817 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
4818 if(SiS_Pr->ChipType == SIS_550) {
4819 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x40);
4820 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x10);
4823 } else if(SiS_IsVAMode(SiS_Pr)) {
4824 if(SiS_Pr->ChipType != SIS_740) {
4825 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1E,0x20);
4829 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4830 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x00,0x7f);
4833 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4834 if(SiS_IsTVOrYPbPrOrScart(SiS_Pr)) {
4835 SiS_Chrontel701xOn(SiS_Pr);
4837 if( (SiS_IsVAMode(SiS_Pr)) ||
4838 (SiS_IsLCDOrLCDA(SiS_Pr)) ) {
4839 SiS_ChrontelDoSomething1(SiS_Pr);
4843 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
4844 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4845 if( (SiS_IsVAMode(SiS_Pr)) ||
4846 (SiS_IsLCDOrLCDA(SiS_Pr)) ) {
4847 SiS_Chrontel701xBLOn(SiS_Pr);
4848 SiS_ChrontelInitTVVSync(SiS_Pr);
4851 } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 0) {
4852 if(!(SiS_WeHaveBacklightCtrl(SiS_Pr))) {
4853 if(SiS_CRT2IsLCD(SiS_Pr)) {
4854 SiS_PanelDelay(SiS_Pr, 1);
4855 SiS_SetRegSR11ANDOR(SiS_Pr,0xF7,0x00);
4874 SiS_SetCRT2Offset(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
4880 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) return;
4882 offset = SiS_GetOffset(SiS_Pr,ModeNo,ModeIdIndex,RRTI);
4884 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x07,(offset & 0xFF));
4885 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x09,(offset >> 8));
4889 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x03,temp);
4894 SiS_SetCRT2Sync(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short RefreshRateTableIndex)
4900 if(SiS_Pr->UseCustomMode) {
4901 infoflag = SiS_Pr->CInfoFlag;
4903 infoflag = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_InfoFlag;
4906 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) { /* LVDS */
4908 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
4910 } else if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->SiS_LCDInfo & LCDSync)) {
4911 tempah = SiS_Pr->SiS_LCDInfo;
4915 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4916 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
4917 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
4918 (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
4921 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
4922 (SiS_Pr->SiS_IF_DEF_DSTN) ||
4923 (SiS_Pr->SiS_IF_DEF_TRUMPION) ||
4924 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
4925 (SiS_Pr->SiS_CustomT == CUT_PANEL856) ) {
4928 if( (SiS_Pr->SiS_IF_DEF_FSTN) ||
4929 (SiS_Pr->SiS_IF_DEF_DSTN) ) {
4933 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
4934 if(SiS_Pr->ChipType >= SIS_315H) {
4937 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xE7,tempah);
4940 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,0xe0);
4943 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4946 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
4948 if(SiS_Pr->ChipType < SIS_315H) {
4952 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) { /* 630 - 301B(-DH) */
4956 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
4957 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
4958 tempah = SiS_Pr->SiS_LCDInfo;
4964 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4966 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4967 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
4968 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
4974 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
4975 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
4985 if(SiS_Pr->SiS_VBType & VB_SISLVDS) { /* 315 - LVDS */
4988 if((SiS_Pr->SiS_CustomT == CUT_COMPAQ1280) &&
4989 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
4991 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
4992 tempbl = ((SiS_Pr->SiS_LCDInfo & 0xc0) >> 6);
4994 } else if((SiS_Pr->SiS_CustomT == CUT_CLEVO1400) &&
4995 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050)) {
4999 tempah = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);
5002 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempbl |= 0x04;
5006 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
5007 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) tempah |= 0xc0;
5008 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
5009 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
5010 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5011 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
5018 if(!SiS_Pr->UseCustomMode) {
5020 if((SiS_Pr->SiS_VBType & VB_SIS30xC) && (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
5022 tempah = SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02));
5025 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5026 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5027 if(SiS_Pr->SiS_LCDInfo & LCDSync) {
5028 tempah = SiS_Pr->SiS_LCDInfo;
5036 if(!(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)) tempah |= 0x10;
5037 if(SiS_Pr->SiS_VBType & VB_NoLCD) {
5039 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) tempah |= 0xc0;
5041 if((SiS_Pr->SiS_VBType & VB_SIS30xC) && (SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC)) {
5044 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xe7,tempah);
5046 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0F,tempah);
5047 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
5048 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5049 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xf0,tempbl);
5063 SiS_SetCRT2FIFO_300(struct SiS_Private *SiS_Pr,unsigned short ModeNo)
5065 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
5074 SelectRate_backup = SiS_Pr->SiS_SelectCRT2Rate;
5076 if(!SiS_Pr->CRT1UsesCustomMode) {
5078 CRT1ModeNo = SiS_Pr->SiS_CRT1Mode; /* get CRT1 ModeNo */
5079 SiS_SearchModeID(SiS_Pr, &CRT1ModeNo, &modeidindex);
5080 SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
5081 SiS_Pr->SiS_SelectCRT2Rate = 0;
5082 refreshratetableindex = SiS_GetRatePtr(SiS_Pr, CRT1ModeNo, modeidindex);
5086 index = SiS_GetRefCRTVCLK(SiS_Pr, refreshratetableindex, SiS_Pr->SiS_UseWide);
5087 VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;
5090 colorth = SiS_GetColorDepth(SiS_Pr,CRT1ModeNo,modeidindex) >> 1;
5099 VCLK = SiS_Pr->CSRClock_CRT1;
5102 colorth = colortharray[((SiS_Pr->CModeFlag_CRT1 & ModeTypeMask) - 2)];
5108 if(SiS_Pr->ChipType == SIS_300) {
5109 index = SiS_GetReg(SiS_Pr->SiS_P3c4,0x3A);
5111 index = SiS_GetReg(SiS_Pr->SiS_P3c4,0x1A);
5114 MCLK = SiS_Pr->SiS_MCLKData_0[index].CLOCK;
5116 temp = ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) >> 6) & 0x03) << 1;
5126 if(SiS_Pr->ChipType == SIS_300) {
5128 SiS_GetFIFOThresholdIndex300(SiS_Pr, &tempbx, &tempcl);
5134 pci50 = sisfb_read_nbridge_pci_dword(SiS_Pr, 0x50);
5135 pciA0 = sisfb_read_nbridge_pci_dword(SiS_Pr, 0xa0);
5141 if(SiS_Pr->ChipType == SIS_730) {
5159 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) & 0x80) index += 12;
5163 data = SiS_GetLatencyFactor630(SiS_Pr, index) + 15;
5164 if(!(SiS_GetReg(SiS_Pr->SiS_P3c4,0x14) & 0x80)) data += 5;
5170 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
5171 SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
5173 if(!SiS_Pr->UseCustomMode) {
5176 SiS_SearchModeID(SiS_Pr, &CRT2ModeNo, &modeidindex);
5178 refreshratetableindex = SiS_GetRatePtr(SiS_Pr, CRT2ModeNo, modeidindex);
5181 index = SiS_GetVCLK2Ptr(SiS_Pr, CRT2ModeNo, modeidindex, refreshratetableindex);
5182 VCLK = SiS_Pr->SiS_VCLKData[index].CLOCK;
5184 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
5185 if(SiS_Pr->SiS_UseROM) {
5196 VCLK = SiS_Pr->CSRClock;
5201 colorth = SiS_GetColorDepth(SiS_Pr,CRT2ModeNo,modeidindex) >> 1;
5212 if(SiS_Pr->ChipType == SIS_300) {
5214 if((data <= 0x0f) || (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024))
5218 if(( (SiS_Pr->ChipType == SIS_630) ||
5219 (SiS_Pr->ChipType == SIS_730) ) &&
5220 (SiS_Pr->ChipRevision >= 0x30))
5223 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x01,0xe0,temp);
5225 if((SiS_Pr->ChipType == SIS_630) &&
5226 (SiS_Pr->ChipRevision >= 0x30)) {
5229 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,0xe0,data);
5233 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
5234 SiS_Pr->SiS_SelectCRT2Rate = SelectRate_backup;
5243 SiS_SetCRT2FIFO_310(struct SiS_Private *SiS_Pr)
5245 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,0x3B);
5246 if( (SiS_Pr->ChipType == SIS_760) &&
5247 (SiS_Pr->SiS_SysFlags & SF_760LFB) &&
5248 (SiS_Pr->SiS_ModeType == Mode32Bpp) &&
5249 (SiS_Pr->SiS_VGAHDE >= 1280) &&
5250 (SiS_Pr->SiS_VGAVDE >= 1024) ) {
5251 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2f,0x03);
5252 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x01,0x3b);
5253 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4d,0xc0);
5254 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2f,0x01);
5255 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x4d,0xc0);
5256 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x02,0x6e);
5258 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x02,~0x3f,0x04);
5265 SiS_GetVGAHT2(struct SiS_Private *SiS_Pr)
5269 tempbx = (SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) * SiS_Pr->SiS_RVBHCMAX;
5270 tempax = (SiS_Pr->SiS_VT - SiS_Pr->SiS_VDE) * SiS_Pr->SiS_RVBHCFACT;
5271 tempax = (tempax * SiS_Pr->SiS_HT) / tempbx;
5277 SiS_SetGroup1_301(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex,
5291 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
5292 } else if(SiS_Pr->UseCustomMode) {
5293 modeflag = SiS_Pr->CModeFlag;
5294 xres = SiS_Pr->CHDisplay;
5296 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
5297 xres = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].XRes;
5302 if(SiS_Pr->ChipType >= SIS_315H) {
5304 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x31,0x04);
5308 SiS_Pr->CHTotal = 8224; /* Max HT, 0x2020, results in 0x3ff in registers */
5310 SiS_Pr->CHDisplay = SiS_Pr->SiS_VGAHDE;
5311 if(modeflag & HalfDCLK) SiS_Pr->CHDisplay >>= 1;
5313 SiS_Pr->CHBlankStart = SiS_Pr->CHDisplay;
5314 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
5315 SiS_Pr->CHBlankStart += 16;
5318 SiS_Pr->CHBlankEnd = 32;
5319 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
5320 if(xres == 1600) SiS_Pr->CHBlankEnd += 80;
5323 temp = SiS_Pr->SiS_VGAHT - 96;
5325 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
5326 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x04);
5327 temp |= ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x0b) & 0xc0) << 2);
5331 if(SiS_Pr->SiS_RVBHRS2) temp = SiS_Pr->SiS_RVBHRS2;
5333 SiS_Pr->CHSyncStart = temp;
5335 SiS_Pr->CHSyncEnd = 0xffe8; /* results in 0x2000 in registers */
5337 SiS_Pr->CVTotal = 2049; /* Max VT, 0x0801, results in 0x7ff in registers */
5339 VGAVDE = SiS_Pr->SiS_VGAVDE;
5347 SiS_Pr->CVDisplay = VGAVDE;
5349 SiS_Pr->CVBlankStart = SiS_Pr->CVDisplay;
5351 SiS_Pr->CVBlankEnd = 1;
5352 if(ModeNo == 0x3c) SiS_Pr->CVBlankEnd = 226;
5354 temp = (SiS_Pr->SiS_VGAVT - VGAVDE) >> 1;
5355 SiS_Pr->CVSyncStart = VGAVDE + temp;
5358 SiS_Pr->CVSyncEnd = SiS_Pr->CVSyncStart + temp;
5360 SiS_CalcCRRegisters(SiS_Pr, 0);
5361 SiS_Pr->CCRT1CRTC[16] &= ~0xE0;
5364 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[i]);
5367 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5370 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5373 SiS_SetReg(SiS_Pr->SiS_Part1Port,CRTranslation[i],SiS_Pr->CCRT1CRTC[j]);
5376 temp = SiS_Pr->CCRT1CRTC[16] & 0xE0;
5377 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,CRTranslation[0x0E],0x1F,temp);
5379 temp = (SiS_Pr->CCRT1CRTC[16] & 0x01) << 5;
5381 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,CRTranslation[0x09],0x5F,temp);
5384 temp |= (SiS_GetReg(SiS_Pr->SiS_P3c4,0x01) & 0x01);
5386 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,temp); /* SR01: HalfDCLK[3], 8/9 div dotclock[0] */
5388 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0F,0x00); /* CR14: (text mode: underline location) */
5389 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x12,0x00); /* CR17: n/a */
5392 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
5393 temp = (SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) << 7;
5395 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1A,temp); /* SR0E, dither[7] */
5397 temp = SiS_GetRegByte((SiS_Pr->SiS_P3ca+0x02));
5398 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,temp); /* ? */
5403 SiS_Pr->CHDisplay, SiS_Pr->CHSyncStart, SiS_Pr->CHSyncEnd, SiS_Pr->CHTotal,
5404 SiS_Pr->CVDisplay, SiS_Pr->CVSyncStart, SiS_Pr->CVSyncEnd, SiS_Pr->CVTotal,
5405 SiS_Pr->CHBlankStart, SiS_Pr->CHBlankEnd, SiS_Pr->CVBlankStart, SiS_Pr->CVBlankEnd);
5408 SiS_Pr->CCRT1CRTC[0], SiS_Pr->CCRT1CRTC[1],
5409 SiS_Pr->CCRT1CRTC[2], SiS_Pr->CCRT1CRTC[3],
5410 SiS_Pr->CCRT1CRTC[4], SiS_Pr->CCRT1CRTC[5],
5411 SiS_Pr->CCRT1CRTC[6], SiS_Pr->CCRT1CRTC[7]);
5413 SiS_Pr->CCRT1CRTC[8], SiS_Pr->CCRT1CRTC[9],
5414 SiS_Pr->CCRT1CRTC[10], SiS_Pr->CCRT1CRTC[11],
5415 SiS_Pr->CCRT1CRTC[12], SiS_Pr->CCRT1CRTC[13],
5416 SiS_Pr->CCRT1CRTC[14], SiS_Pr->CCRT1CRTC[15]);
5417 xf86DrvMsg(0, X_INFO, " 0x%02x}},\n", SiS_Pr->CCRT1CRTC[16]);
5427 SiS_SetGroup1_LVDS(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
5442 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
5443 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
5445 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
5447 } else if(SiS_Pr->UseCustomMode) {
5448 modeflag = SiS_Pr->CModeFlag;
5450 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
5451 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
5453 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
5458 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {
5463 if((SiS_Pr->SiS_VBType & VB_SISVB) && (!(SiS_Pr->SiS_VBType & VB_NoLCD))) {
5467 if((SiS_Pr->ChipType >= SIS_315H) && (islvds) && (!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA))) {
5468 if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) {
5474 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
5476 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);
5479 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);
5480 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x03);
5481 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
5482 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x10);
5486 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);
5487 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x00);
5488 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
5489 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2D,0x0f);
5490 if(SiS_Pr->SiS_VBType & VB_SIS30xC) {
5491 if((SiS_Pr->SiS_LCDResInfo == Panel_1024x768) ||
5492 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
5493 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x20);
5503 tempax = SiS_Pr->SiS_LCDHDES;
5505 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5506 if(!SiS_Pr->SiS_IF_DEF_FSTN && !SiS_Pr->SiS_IF_DEF_DSTN) {
5507 if((SiS_Pr->SiS_LCDResInfo == Panel_640x480) &&
5508 (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode))) {
5516 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1A,temp); /* BPLHDESKEW[2:0] */
5518 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,temp); /* BPLHDESKEW[10:3] */
5520 tempbx = SiS_Pr->SiS_HDE;
5521 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5522 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5523 tempbx = SiS_Pr->PanelXRes;
5525 if((SiS_Pr->SiS_LCDResInfo == Panel_320x240_1) ||
5526 (SiS_Pr->SiS_LCDResInfo == Panel_320x240_2) ||
5527 (SiS_Pr->SiS_LCDResInfo == Panel_320x240_3)) {
5533 if(tempax >= SiS_Pr->SiS_HT) tempax -= SiS_Pr->SiS_HT;
5538 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,temp); /* BPLHDEE */
5540 tempcx = (SiS_Pr->SiS_HT - tempbx) >> 2;
5542 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5543 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5544 if(SiS_Pr->PanelHRS != 999) tempcx = SiS_Pr->PanelHRS;
5549 if(tempcx >= SiS_Pr->SiS_HT) tempcx -= SiS_Pr->SiS_HT;
5552 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5553 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5554 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5575 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,temp); /* BPLHRS */
5577 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5579 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5581 if(SiS_Pr->PanelHRE != 999) {
5582 temp = tempcx + SiS_Pr->PanelHRE;
5583 if(temp >= SiS_Pr->SiS_HT) temp -= SiS_Pr->SiS_HT;
5593 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,temp); /* BPLHRE */
5597 tempax = SiS_Pr->SiS_VGAVDE;
5598 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5599 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5600 tempax = SiS_Pr->PanelYRes;
5604 tempbx = SiS_Pr->SiS_LCDVDES + tempax;
5605 if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
5609 tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE;
5610 if(SiS_Pr->ChipType < SIS_315H) {
5611 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5612 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5613 tempcx = SiS_Pr->SiS_VGAVT - SiS_Pr->PanelYRes;
5620 if( (SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) &&
5621 (!(SiS_Pr->SiS_LCDInfo & LCDPass11)) &&
5622 (SiS_Pr->PanelVRS != 999) ) {
5623 tempcx = SiS_Pr->PanelVRS;
5628 if(SiS_Pr->ChipType < SIS_315H) tempbx++;
5632 if(tempbx >= SiS_Pr->SiS_VT) tempbx -= SiS_Pr->SiS_VT;
5635 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5636 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5640 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,temp); /* BPLVRS */
5645 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5646 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
5647 if(SiS_Pr->PanelVRE != 999) tempcx = SiS_Pr->PanelVRE;
5653 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp); /* BPLVRE */
5656 if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
5657 if(SiS_Pr->SiS_HDE != 640) {
5658 if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
5660 } else if(SiS_Pr->SiS_VGAVDE != SiS_Pr->SiS_VDE) temp |= 0x40;
5661 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) temp |= 0x40;
5663 if((SiS_Pr->ChipType >= SIS_315H) ||
5664 (SiS_Pr->ChipRevision >= 0x30)) {
5666 if((SiS_Pr->SiS_IF_DEF_CH70xx == 1) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
5667 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x03) temp |= 0x80;
5670 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
5671 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
5672 if(SiS_GetReg(SiS_Pr->SiS_P3c4,0x06) & 0x10) temp |= 0x80;
5674 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) temp |= 0x80;
5678 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,tempbx,temp);
5682 tempcx = SiS_Pr->SiS_LCDVDES; /* BPLVDES */
5684 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
5685 switch(SiS_Pr->SiS_LCDResInfo) {
5687 tempbx = SiS_Pr->SiS_VGAVDE - 1;
5688 tempcx = SiS_Pr->SiS_VGAVDE;
5691 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5696 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5698 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
5704 if(SiS_Pr->ChipType < SIS_315H) {
5705 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
5715 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1D,temp);
5716 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1C,tempbx);
5717 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1B,tempcx);
5721 if(SiS_Pr->ChipType < SIS_315H) {
5724 tempeax = SiS_Pr->SiS_VGAVDE << 6;
5725 temp = (tempeax % (unsigned int)SiS_Pr->SiS_VDE);
5726 tempeax = tempeax / (unsigned int)SiS_Pr->SiS_VDE;
5729 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) tempeax = 0x3F;
5732 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1E,temp); /* BPLVCFACT */
5739 tempeax = SiS_Pr->SiS_VGAVDE << 18;
5740 tempebx = SiS_Pr->SiS_VDE;
5747 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x37,temp);
5749 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x36,temp);
5751 if(SiS_Pr->SiS_VDE == SiS_Pr->SiS_VGAVDE) temp |= 0x04;
5752 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x35,temp);
5754 if(SiS_Pr->SiS_VBType & VB_SISPART4SCALER) {
5756 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x3c,temp);
5758 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x3b,temp);
5760 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0x3f,temp);
5762 if(SiS_Pr->SiS_VDE != SiS_Pr->SiS_VGAVDE) temp |= 0x08;
5763 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x30,0xf3,temp);
5771 tempeax = SiS_Pr->SiS_VGAHDE; /* 1f = ( (VGAHDE * 65536) / ( (VGAHDE * 65536) / HDE ) ) - 1*/
5776 if(SiS_Pr->SiS_HDE == tempeax) {
5779 tempecx = tempebx / SiS_Pr->SiS_HDE;
5780 if(SiS_Pr->ChipType >= SIS_315H) {
5781 if(tempebx % SiS_Pr->SiS_HDE) tempecx++;
5785 if(SiS_Pr->ChipType >= SIS_315H) {
5788 tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;
5792 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1F,temp);
5794 if(SiS_Pr->ChipType >= SIS_315H) {
5795 tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;
5798 tempeax = SiS_Pr->SiS_VGAVDE << 6;
5804 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tempbx--;
5805 if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA) {
5806 if((!SiS_Pr->SiS_IF_DEF_FSTN) && (!SiS_Pr->SiS_IF_DEF_DSTN)) tempbx = 1;
5807 else if(SiS_Pr->SiS_LCDResInfo != Panel_640x480) tempbx = 1;
5812 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x20,temp);
5813 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x21,tempbx);
5820 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x22,temp);
5822 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x23,temp);
5825 if(SiS_Pr->ChipType >= SIS_315H) {
5826 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
5827 if((islvds) || (SiS_Pr->SiS_VBInfo & VB_SISLVDS)) {
5828 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1e,0x20);
5832 if(SiS_Pr->ChipType == SIS_740) {
5833 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
5835 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1e,0x23);
5843 if(SiS_Pr->SiS_IF_DEF_TRUMPION) {
5844 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
5851 if(SiS_Pr->SiS_UseROM) {
5854 if(SiS_Pr->SiS_LCDTypeInfo == 0x0e) j += 7;
5858 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x02,0xbf);
5860 SiS_SetTrumpionBlock(SiS_Pr, trumpdata);
5862 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
5865 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode13[0]);
5869 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode10_1[0]);
5870 SiS_SetTrumpionBlock(SiS_Pr, &TrumpMode10_2[0]);
5874 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x02,0x40);
5879 if(SiS_Pr->SiS_IF_DEF_FSTN || SiS_Pr->SiS_IF_DEF_DSTN) {
5880 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x25,0x00);
5881 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x26,0x00);
5882 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x27,0x00);
5883 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x28,0x87);
5884 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x29,0x5A);
5885 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2A,0x4B);
5886 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x07,0x03);
5887 tempax = SiS_Pr->SiS_HDE; /* Blps = lcdhdee(lcdhdes+HDE) + 64 */
5888 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5889 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5890 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5892 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x38,tempax & 0xff);
5894 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);
5896 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x39,tempax & 0xff);
5897 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3A,0x00); /* Bflml = 0 */
5898 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x3C,~0x007);
5900 tempax = SiS_Pr->SiS_VDE;
5901 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5902 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5903 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5905 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3B,tempax & 0xff);
5907 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);
5909 tempeax = SiS_Pr->SiS_HDE;
5910 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5911 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5912 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempeax >>= 1;
5918 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x45,temp);
5919 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3F,0x00); /* BDxWadrst0 */
5920 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3E,0x00);
5921 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3D,0x10);
5922 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x3C,~0x040);
5924 tempax = SiS_Pr->SiS_HDE;
5925 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5926 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5927 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5931 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x43,temp);
5933 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x0F8,temp);
5935 tempax = SiS_Pr->SiS_VDE; /* BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */
5936 if(SiS_Pr->SiS_LCDResInfo == Panel_320x240_1 ||
5937 SiS_Pr->SiS_LCDResInfo == Panel_320x240_2 ||
5938 SiS_Pr->SiS_LCDResInfo == Panel_320x240_3) tempax >>= 1;
5941 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x42,temp);
5943 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x41,temp);
5945 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x40,temp);
5947 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x080,temp);
5949 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2F,0x03);
5950 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x03,0x50);
5951 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x04,0x00);
5952 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2F,0x01);
5953 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0x38);
5955 if(SiS_Pr->SiS_IF_DEF_FSTN) {
5956 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2b,0x02);
5957 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2c,0x00);
5958 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x00);
5959 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x35,0x0c);
5960 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x36,0x00);
5961 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x37,0x00);
5962 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x38,0x80);
5963 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x39,0xA0);
5964 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3a,0x00);
5965 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3b,0xf0);
5966 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3c,0x00);
5967 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3d,0x10);
5968 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3e,0x00);
5969 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x3f,0x00);
5970 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x40,0x10);
5971 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x41,0x25);
5972 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x42,0x80);
5973 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x43,0x14);
5974 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x44,0x03);
5975 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x45,0x0a);
5983 SiS_SetGroup1(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
5987 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
5995 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
5996 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6001 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
6002 } else if(SiS_Pr->UseCustomMode) {
6003 modeflag = SiS_Pr->CModeFlag;
6005 CRT1Index = SiS_GetRefCRT1CRTC(SiS_Pr, RefreshRateTableIndex, SiS_Pr->SiS_UseWideCRT2);
6006 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
6007 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
6010 SiS_SetCRT2Offset(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6012 if( ! ((SiS_Pr->ChipType >= SIS_315H) &&
6013 (SiS_Pr->SiS_IF_DEF_LVDS == 1) &&
6014 (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ) {
6016 if(SiS_Pr->ChipType < SIS_315H ) {
6018 SiS_SetCRT2FIFO_300(SiS_Pr, ModeNo);
6022 SiS_SetCRT2FIFO_310(SiS_Pr);
6028 if(SiS_Pr->ChipType < SIS_315H ) {
6032 temp = (SiS_Pr->SiS_VGAHT - 1) & 0x0FF; /* BTVGA2HT 0x08,0x09 */
6033 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x08,temp); /* CRT2 Horizontal Total */
6035 temp = (((SiS_Pr->SiS_VGAHT - 1) & 0xFF00) >> 8) << 4;
6036 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0f,temp); /* CRT2 Horizontal Total Overflow [7:4] */
6038 temp = (SiS_Pr->SiS_VGAHDE + 12) & 0x0FF; /* BTVGA2HDEE 0x0A,0x0C */
6039 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0A,temp); /* CRT2 Horizontal Display Enable End */
6041 pushbx = SiS_Pr->SiS_VGAHDE + 12; /* bx BTVGA2HRS 0x0B,0x0C */
6042 tempcx = (SiS_Pr->SiS_VGAHT - SiS_Pr->SiS_VGAHDE) >> 2;
6055 tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HT 0x08,0x09 */
6057 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6060 tempax = SiS_Pr->SiS_VGAHDE >> 1;
6061 tempcx = SiS_Pr->SiS_HT - SiS_Pr->SiS_HDE + tempax;
6062 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
6063 tempcx = SiS_Pr->SiS_HT - tempax;
6068 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x08,tempcx); /* CRT2 Horizontal Total */
6070 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x09,0x0F,temp); /* CRT2 Horizontal Total Overflow [7:4] */
6072 tempcx = SiS_Pr->SiS_VGAHT; /* BTVGA2HDEE 0x0A,0x0C */
6073 tempbx = SiS_Pr->SiS_VGAHDE;
6082 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0A,tempbx); /* CRT2 Horizontal Display Enable End */
6091 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6092 if(SiS_Pr->ChipType >= SIS_661) {
6093 if((SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||
6094 (SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)) {
6108 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6110 if(SiS_Pr->UseCustomMode) {
6111 tempbx = SiS_Pr->CHSyncStart + bridgeadd;
6112 tempcx = SiS_Pr->CHSyncEnd + bridgeadd;
6113 tempax = SiS_Pr->SiS_VGAHT;
6119 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
6121 if(SiS_Pr->UseCustomMode) {
6122 cr4 = SiS_Pr->CCRT1CRTC[4];
6123 cr14 = SiS_Pr->CCRT1CRTC[14];
6124 cr5 = SiS_Pr->CCRT1CRTC[5];
6125 cr15 = SiS_Pr->CCRT1CRTC[15];
6127 cr4 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[4];
6128 cr14 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[14];
6129 cr5 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[5];
6130 cr15 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[15];
6138 tempax = SiS_Pr->SiS_VGAHT;
6144 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSet525p1024)) {
6151 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0B,tempbx); /* CRT2 Horizontal Retrace Start */
6153 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0D,tempcx); /* CRT2 Horizontal Retrace End */
6156 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0C,temp); /* Overflow */
6160 tempcx = SiS_Pr->SiS_VGAVT - 1;
6163 if(SiS_Pr->ChipType < SIS_661) {
6164 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
6165 if(SiS_Pr->ChipType < SIS_315H) {
6166 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6167 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
6174 } else if(SiS_Pr->ChipType >= SIS_315H) {
6178 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0E,temp); /* CRT2 Vertical Total */
6180 tempbx = SiS_Pr->SiS_VGAVDE - 1;
6181 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x0F,tempbx); /* CRT2 Vertical Display Enable End */
6184 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x12,temp); /* Overflow */
6186 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->ChipType < SIS_661)) {
6198 tempbx = (SiS_Pr->SiS_VGAVT + SiS_Pr->SiS_VGAVDE) >> 1; /* BTVGA2VRS 0x10,0x11 */
6199 tempcx = ((SiS_Pr->SiS_VGAVT - SiS_Pr->SiS_VGAVDE) >> 4) + tempbx + 1; /* BTVGA2VRE 0x11 */
6202 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6203 if(SiS_Pr->UseCustomMode) {
6204 tempbx = SiS_Pr->CVSyncStart;
6205 tempcx = SiS_Pr->CVSyncEnd;
6207 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) {
6209 if(SiS_Pr->UseCustomMode) {
6210 cr8 = SiS_Pr->CCRT1CRTC[8];
6211 cr7 = SiS_Pr->CCRT1CRTC[7];
6212 cr13 = SiS_Pr->CCRT1CRTC[13];
6213 tempcx = SiS_Pr->CCRT1CRTC[9];
6215 cr8 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[8];
6216 cr7 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[7];
6217 cr13 = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[13];
6218 tempcx = SiS_Pr->SiS_CRT1Table[CRT1Index].CR[9];
6226 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x10,tempbx); /* CRT2 Vertical Retrace Start */
6229 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x11,temp); /* CRT2 Vert. Retrace End; Overflow */
6233 if(SiS_Pr->ChipType < SIS_315H) {
6237 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6239 if(SiS_Pr->ChipType == SIS_300) {
6241 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) temp = 0x2c;
6242 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) temp = 0x20;
6244 if(SiS_Pr->SiS_VBType & VB_SIS301) {
6245 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) temp = 0x20;
6247 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x960) temp = 0x24;
6248 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) temp = 0x2c;
6249 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp = 0x08;
6250 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6251 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) temp = 0x2c;
6254 if(SiS_Pr->SiS_UseROM) {
6256 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoYPbPrHiVision)
6258 else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision)
6260 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024)
6266 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6267 if(SiS_Pr->PDC != -1) temp = SiS_Pr->PDC;
6272 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
6273 if(SiS_Pr->SiS_LCDResInfo == Panel_640x480) temp = 0x04;
6275 if(SiS_Pr->SiS_UseROM) {
6280 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6281 if(SiS_Pr->PDC != -1) temp = SiS_Pr->PDC;
6287 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp); /* Panel Link Delay Compensation; (Software Command Reset; Power Saving) */
6295 if(SiS_Pr->ChipType < SIS_661) {
6297 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
6299 if(SiS_Pr->ChipType == SIS_740) temp = 0x03;
6302 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp = 0x0a;
6304 if(SiS_Pr->ChipType == SIS_650) {
6305 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6306 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempbl = 0x0F;
6310 if(SiS_Pr->SiS_IF_DEF_DSTN || SiS_Pr->SiS_IF_DEF_FSTN) {
6313 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
6318 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,tempbl,temp); /* Panel Link Delay Compensation */
6326 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2C,0x3f,tempax);
6334 if(SiS_Pr->SiS_VBType & VB_SISVB) {
6335 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
6337 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6338 } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6339 SiS_SetGroup1_301(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6342 if(SiS_Pr->ChipType < SIS_315H) {
6343 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
6345 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
6346 if((!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) || (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
6347 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo,ModeIdIndex,RefreshRateTableIndex);
6350 SiS_SetGroup1_LVDS(SiS_Pr, ModeNo,ModeIdIndex,RefreshRateTableIndex);
6362 SiS_GetGroup2CLVXPtr(struct SiS_Private *SiS_Pr, int tabletype)
6367 a = SiS_Pr->SiS_VGAHDE;
6368 b = SiS_Pr->SiS_HDE;
6370 a = SiS_Pr->SiS_VGAVDE;
6371 b = SiS_Pr->SiS_VDE;
6379 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6384 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6385 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) tableptr = SiS_Part2CLVX_3;
6386 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) tableptr = SiS_Part2CLVX_3;
6388 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6402 SiS_SetGroup2_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
6409 if(!(SiS_Pr->SiS_VBType & VB_SISTAP4SCALER)) return;
6411 tableptr = SiS_GetGroup2CLVXPtr(SiS_Pr, 0);
6413 SiS_SetReg(SiS_Pr->SiS_Part2Port, i, tableptr[j]);
6415 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
6416 tableptr = SiS_GetGroup2CLVXPtr(SiS_Pr, 1);
6418 SiS_SetReg(SiS_Pr->SiS_Part2Port, i, tableptr[j]);
6422 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) temp |= 0x04;
6423 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4e,0xeb,temp);
6427 SiS_GetCRT2Part2Ptr(struct SiS_Private *SiS_Pr,unsigned short ModeNo,unsigned short ModeIdIndex,
6432 if(SiS_Pr->ChipType < SIS_315H) return false;
6435 (*ResIndex) = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6437 (*ResIndex) = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6442 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
6443 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
6448 if(SiS_Pr->SiS_CustomT == CUT_ASUSA2H_2) {
6449 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
6450 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) (*CRT2Index) = 206;
6459 SiS_Group2LCDSpecial(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short crt2crtc)
6467 if(!SiS_Pr->UseCustomMode) {
6468 if( ( ( (SiS_Pr->ChipType == SIS_630) ||
6469 (SiS_Pr->ChipType == SIS_730) ) &&
6470 (SiS_Pr->ChipRevision > 2) ) &&
6471 (SiS_Pr->SiS_LCDResInfo == Panel_1024x768) &&
6472 (!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) &&
6473 (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) ) {
6475 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,0xB9);
6476 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,0xCC);
6477 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xA6);
6479 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x2B);
6480 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x13);
6481 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,0xE5);
6482 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,0x08);
6483 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xE2);
6487 if(SiS_Pr->ChipType < SIS_315H) {
6488 if(SiS_Pr->SiS_LCDTypeInfo == 0x0c) {
6491 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
6492 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6498 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,0xff);
6501 if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {
6502 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6504 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x28);
6508 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x18);
6509 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,atable[tempcx]);
6517 SiS_Set300Part2Regs(struct SiS_Private *SiS_Pr, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex,
6524 if(SiS_Pr->ChipType != SIS_300) return;
6525 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) return;
6526 if(SiS_Pr->UseCustomMode) return;
6529 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6531 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6535 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
6536 else CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_2;
6540 CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1;
6544 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,(CRT2Part2Ptr+resindex)->CR[0]);
6545 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x02,0x80,(CRT2Part2Ptr+resindex)->CR[1]);
6547 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6550 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6553 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
6555 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,(CRT2Part2Ptr+resindex)->CR[10]);
6556 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
6561 SiS_SetTVSpecial(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
6563 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV)) return;
6564 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision)) return;
6565 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) return;
6567 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
6568 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
6576 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,specialtv[j]);
6578 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,0x72);
6579 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750)) {
6580 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6581 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x14);
6582 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1b);
6584 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x14); /* 15 */
6585 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1a); /* 1b */
6592 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1b); /* 21 */
6593 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x54); /* 5a */
6595 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1a); /* 21 */
6596 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x53); /* 5a */
6602 SiS_SetGroup2_Tail(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
6606 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) {
6607 if(SiS_Pr->SiS_VGAVDE == 525) {
6609 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6611 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) temp += 2;
6613 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2f,temp);
6614 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x30,0xb3);
6615 } else if(SiS_Pr->SiS_VGAVDE == 420) {
6617 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6619 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) temp++;
6621 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2f,temp);
6625 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6626 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) {
6627 if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
6628 SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x1a,0x03);
6633 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0b,temp);
6639 SiS_SetGroup2(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
6651 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
6655 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
6656 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
6657 } else if(SiS_Pr->UseCustomMode) {
6658 modeflag = SiS_Pr->CModeFlag;
6661 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
6662 crt2crtc = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
6666 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToAVIDEO)) temp |= 0x08;
6667 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToSVIDEO)) temp |= 0x04;
6668 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) temp |= 0x02;
6669 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) temp |= 0x01;
6671 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) temp |= 0x10;
6673 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x00,temp);
6676 TimingPoint = SiS_Pr->SiS_PALTiming;
6679 if( (SiS_Pr->SiS_VBType & VB_SIS30xBLV) &&
6680 ( (!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
6681 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode) ) ) {
6685 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6687 TimingPoint = SiS_Pr->SiS_HiTVExtTiming;
6688 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6689 TimingPoint = SiS_Pr->SiS_HiTVSt2Timing;
6690 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
6691 TimingPoint = SiS_Pr->SiS_HiTVSt1Timing;
6695 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6698 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) i = 2;
6699 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) i = 1;
6705 } else if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6711 TimingPoint = SiS_Pr->SiS_NTSCTiming;
6712 PhaseIndex = (SiS_Pr->SiS_TVMode & TVSetNTSCJ) ? 0x01 : 0x00; /* SiS_PALPhase : SiS_NTSCPhase */
6717 if(SiS_Pr->SiS_TVMode & (TVSetPALM | TVSetPALN)) {
6718 PhaseIndex = (SiS_Pr->SiS_TVMode & TVSetPALM) ? 0x02 : 0x03; /* SiS_PALMPhase : SiS_PALNPhase */
6722 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
6723 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6725 } else if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) {
6733 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS_TVPhase[(PhaseIndex * 4) + j]);
6737 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,TimingPoint[j]);
6740 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,TimingPoint[j]);
6743 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
6744 if(SiS_Pr->SiS_ModeType != ModeText) {
6745 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x3A,0x1F);
6749 SiS_SetRegOR(SiS_Pr->SiS_Part2Port,0x0A,SiS_Pr->SiS_NewFlickerMode);
6751 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x35,SiS_Pr->SiS_RY1COE);
6752 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x36,SiS_Pr->SiS_RY2COE);
6753 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x37,SiS_Pr->SiS_RY3COE);
6754 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x38,SiS_Pr->SiS_RY4COE);
6756 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempax = 950;
6757 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempax = 680;
6758 else if(SiS_Pr->SiS_TVMode & TVSetPAL) tempax = 520;
6761 if( ((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) && (SiS_Pr->SiS_VDE <= tempax)) ||
6762 ( (SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoHiVision) &&
6763 ((SiS_Pr->SiS_VGAHDE == 1024) || (SiS_Pr->SiS_VDE <= tempax)) ) ) {
6765 tempax -= SiS_Pr->SiS_VDE;
6767 if(!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p))) {
6773 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,temp);
6776 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,temp);
6778 if((SiS_Pr->SiS_VBInfo & SetCRT2ToTVNoYPbPrHiVision) && (SiS_Pr->SiS_VGAHDE >= 1024)) {
6779 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6780 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x1b);
6781 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x54);
6783 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,0x17);
6784 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,0x1d);
6790 tempcx = SiS_Pr->SiS_HT;
6791 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
6793 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) tempcx--;
6794 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1B,tempcx);
6795 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0xF0,((tempcx >> 8) & 0x0f));
6797 tempcx = SiS_Pr->SiS_HT >> 1;
6798 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
6800 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempcx -= 4;
6801 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x22,0x0F,((tempcx << 4) & 0xf0));
6805 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x24,tempbx);
6806 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0F,((tempbx >> 4) & 0xf0));
6809 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6813 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x29,0x0F,((tempbx << 4) & 0xf0));
6817 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x27,tempcx);
6818 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x28,0x0F,((tempcx >> 4) & 0xf0));
6821 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) tempcx -= 4;
6822 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2A,0x0F,((tempcx << 4) & 0xf0));
6824 tempcx = SiS_Pr->SiS_HT >> 1;
6825 if(SiS_IsDualLink(SiS_Pr)) tempcx >>= 1;
6828 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2D,0x0F,((tempcx << 4) & 0xf0));
6831 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
6832 tempcx = SiS_GetVGAHT2(SiS_Pr) - 1;
6834 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2E,tempcx);
6836 tempbx = SiS_Pr->SiS_VDE;
6837 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
6838 if(SiS_Pr->SiS_VGAVDE == 360) tempbx = 746;
6839 if(SiS_Pr->SiS_VGAVDE == 375) tempbx = 746;
6840 if(SiS_Pr->SiS_VGAVDE == 405) tempbx = 853;
6841 } else if( (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) &&
6842 (!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p|TVSetYPbPr750p))) ) {
6844 if(SiS_Pr->ChipType >= SIS_315H) {
6845 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
6847 } else if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6848 if(SiS_Pr->SiS_ModeType <= ModeVGA) {
6853 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
6854 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6857 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {
6863 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2F,tempbx);
6867 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSVIDEO | SetCRT2ToAVIDEO)) {
6869 if(SiS_Pr->SiS_VBInfo & SetCRT2ToAVIDEO) temp |= 0x20;
6871 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x30,temp);
6873 if(SiS_Pr->SiS_VBType & VB_SISPART4OVERFLOW) {
6874 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x10,0xdf,((tempbx & 0x0400) >> 5));
6877 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
6878 tempbx = SiS_Pr->SiS_VDE;
6879 if( (SiS_Pr->SiS_VBInfo & SetCRT2ToTV) &&
6880 (!(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p))) ) {
6885 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x46,temp);
6886 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x47,tempbx);
6888 if(SiS_Pr->SiS_VBType & VB_SISPART4OVERFLOW) {
6889 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x10,0xbf,((tempbx & 0x0400) >> 4));
6895 if(SiS_Pr->SiS_VGAHDE >= SiS_Pr->SiS_HDE) {
6902 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
6903 if(SiS_Pr->SiS_VGAHDE >= 960) {
6904 if((!(modeflag & HalfDCLK)) || (SiS_Pr->ChipType < SIS_315H)) {
6906 if(SiS_Pr->SiS_VGAHDE >= 1280) {
6909 } else if(SiS_Pr->SiS_VGAHDE >= 1024) {
6920 longtemp = ((SiS_Pr->SiS_VGAHDE * tempch) / tempcl) << 13;
6921 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) longtemp <<= 3;
6922 tempax = longtemp / SiS_Pr->SiS_HDE;
6923 if(longtemp % SiS_Pr->SiS_HDE) tempax++;
6928 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x44,tempax);
6929 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x45,0xC0,tempbx);
6931 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
6935 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x46,0xF8,tempcx);
6937 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
6944 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4B,tempbx);
6945 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4C,tempcx);
6948 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
6950 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) temp |= 0x20;
6951 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) temp |= 0x40;
6953 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x4D,temp);
6955 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x43);
6956 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x43,(temp - 3));
6958 SiS_SetTVSpecial(SiS_Pr, ModeNo);
6960 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
6962 if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 8;
6963 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x4e,0xf7,temp);
6968 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
6969 if(!(SiS_Pr->SiS_TVMode & TVSetNTSC1024)) {
6970 temp = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x01);
6971 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,(temp - 1));
6973 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x00,0xEF);
6976 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
6977 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
6978 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0B,0x00);
6982 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) return;
6986 tempbx = SiS_Pr->SiS_HDE;
6987 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
6989 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x2C,tempbx);
6990 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x2B,0x0F,((tempbx >> 4) & 0xf0));
6993 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
6994 if(SiS_Pr->SiS_ModeType == ModeEGA) {
6995 if(SiS_Pr->SiS_VGAHDE >= 1024) {
6997 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
7003 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x0B,temp);
7005 tempbx = SiS_Pr->SiS_VDE - 1;
7006 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x03,tempbx);
7007 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0C,0xF8,((tempbx >> 8) & 0x07));
7009 tempcx = SiS_Pr->SiS_VT - 1;
7010 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x19,tempcx);
7012 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
7014 if(SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00) & 0x01) {
7018 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1A,0x0f,temp);
7020 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x09,0xF0);
7021 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x0A,0xF0);
7023 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x17,0xFB);
7024 SiS_SetRegAND(SiS_Pr->SiS_Part2Port,0x18,0xDF);
7027 if(SiS_GetCRT2Part2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
7032 case 200: CRT2Part2Ptr = SiS_Pr->SiS_CRT2Part2_1024x768_1; break;
7035 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,(CRT2Part2Ptr+resindex)->CR[0]);
7036 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x02,0x80,(CRT2Part2Ptr+resindex)->CR[1]);
7038 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
7041 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
7044 SiS_SetReg(SiS_Pr->SiS_Part2Port,j,(CRT2Part2Ptr+resindex)->CR[i]);
7046 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,(CRT2Part2Ptr+resindex)->CR[10]);
7047 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0x0f,(CRT2Part2Ptr+resindex)->CR[11]);
7049 SiS_SetGroup2_Tail(SiS_Pr, ModeNo);
7059 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7060 if((SiS_Pr->SiS_LCDInfo & LCDPass11) || (SiS_Pr->PanelYRes == SiS_Pr->SiS_VDE)) {
7061 tempbx = SiS_Pr->SiS_VDE - 1;
7062 tempcx = SiS_Pr->SiS_VT - 1;
7064 tempbx = SiS_Pr->SiS_VDE + ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VDE) / 2);
7065 tempcx = SiS_Pr->SiS_VT - ((SiS_Pr->PanelYRes - SiS_Pr->SiS_VDE) / 2);
7068 tempbx = SiS_Pr->PanelYRes;
7069 tempcx = SiS_Pr->SiS_VT;
7071 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7072 tempax = SiS_Pr->PanelYRes;
7073 /* if(SiS_Pr->SiS_VGAVDE == 525) tempax += 0x3c; */ /* 651+301C */
7074 if(SiS_Pr->PanelYRes < SiS_Pr->SiS_VDE) {
7077 tempax -= SiS_Pr->SiS_VDE;
7093 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x05,tempcx); /* lcdvdes */
7094 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x06,tempbx); /* lcdvdee */
7098 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x02,temp);
7100 tempax = SiS_Pr->SiS_VDE;
7101 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7102 tempax = SiS_Pr->PanelYRes;
7104 tempcx = (SiS_Pr->SiS_VT - tempax) >> 4;
7105 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7106 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7107 tempcx = (SiS_Pr->SiS_VT - tempax) / 10;
7111 tempbx = ((SiS_Pr->SiS_VT + SiS_Pr->SiS_VDE) >> 1) - 1;
7112 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7113 if(SiS_Pr->PanelYRes != SiS_Pr->SiS_VDE) {
7114 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) { /* ? */
7115 tempax = SiS_Pr->SiS_VT - SiS_Pr->PanelYRes;
7121 if(tempbx <= SiS_Pr->SiS_VDE) tempbx = SiS_Pr->SiS_VDE + 1;
7125 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
7127 if((!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) || (crt2crtc == 6)) {
7128 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
7137 if(SiS_Pr->UseCustomMode) {
7138 tempbx = SiS_Pr->CVSyncStart;
7147 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,tempbx); /* lcdvrs */
7153 if(SiS_Pr->UseCustomMode) {
7155 temp |= (SiS_Pr->CVSyncEnd & 0x0f);
7164 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x01,temp);
7167 SiS_Group2LCDSpecial(SiS_Pr, ModeNo, crt2crtc);
7171 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) bridgeoffset += 2;
7172 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) bridgeoffset += 2; /* OK for Averatec 1280x800 (301C) */
7173 if(SiS_IsDualLink(SiS_Pr)) bridgeoffset++;
7174 else if(SiS_Pr->SiS_VBType & VB_SIS302LV) bridgeoffset++; /* OK for Asus A4L 1280x800 */
7178 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7179 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) {
7180 temp = SiS_Pr->SiS_HT - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_HDE) / 2);
7181 if(SiS_IsDualLink(SiS_Pr)) temp >>= 1;
7185 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1F,temp); /* lcdhdes */
7186 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x20,0x0F,((temp >> 4) & 0xf0));
7188 tempcx = SiS_Pr->SiS_HT;
7189 tempax = tempbx = SiS_Pr->SiS_HDE;
7190 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7191 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) {
7192 tempax = SiS_Pr->PanelXRes;
7193 tempbx = SiS_Pr->PanelXRes - ((SiS_Pr->PanelXRes - SiS_Pr->SiS_HDE) / 2);
7196 if(SiS_IsDualLink(SiS_Pr)) {
7210 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x23,tempbx); /* lcdhdee */
7211 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x25,0xF0,((tempbx >> 8) & 0x0f));
7218 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
7219 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {
7220 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
7221 if(SiS_Pr->SiS_HDE == 1280) tempbx = (tempbx & 0xff00) | 0x47;
7226 if(SiS_Pr->UseCustomMode) {
7227 tempbx = SiS_Pr->CHSyncStart;
7229 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7239 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x1C,tempbx); /* lcdhrs */
7240 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1D,0x0F,((tempbx >> 4) & 0xf0));
7245 if((SiS_Pr->SiS_LCDInfo & DontExpandLCD) && (!(SiS_Pr->SiS_LCDInfo & LCDPass11))) {
7246 if(SiS_Pr->PanelXRes != SiS_Pr->SiS_HDE) tempcx >>= 2;
7250 if(SiS_Pr->UseCustomMode) {
7251 tempbx = SiS_Pr->CHSyncEnd;
7253 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7263 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x21,tempbx); /* lcdhre */
7265 SiS_SetGroup2_Tail(SiS_Pr, ModeNo);
7268 SiS_Set300Part2Regs(SiS_Pr, ModeIdIndex, RefreshRateTableIndex, ModeNo);
7280 SiS_SetGroup3(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7285 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
7288 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x00,0x00);
7293 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7294 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xFA);
7295 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xC8);
7297 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xF5);
7298 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xB7);
7301 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
7302 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x13,0xFA);
7303 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x14,0xC8);
7304 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x3D,0xA8);
7308 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7309 tempdi = SiS_Pr->SiS_HiTVGroup3Data;
7310 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {
7311 tempdi = SiS_Pr->SiS_HiTVGroup3Simu;
7313 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {
7314 if(!(SiS_Pr->SiS_TVMode & TVSetYPbPr525i)) {
7316 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) tempdi = SiS_HiTVGroup3_2;
7321 SiS_SetReg(SiS_Pr->SiS_Part3Port,i,tempdi[i]);
7323 if(SiS_Pr->SiS_VBType & VB_SIS30xCLV) {
7324 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {
7325 SiS_SetReg(SiS_Pr->SiS_Part3Port,0x28,0x3f);
7342 SiS_SetGroup4_C_ELV(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7345 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
7347 if(!(SiS_Pr->SiS_VBType & VB_SIS30xCLV)) return;
7348 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToHiVision | SetCRT2ToYPbPr525750))) return;
7350 if(SiS_Pr->ChipType >= XGI_20) return;
7352 if((SiS_Pr->ChipType >= SIS_661) && (SiS_Pr->SiS_ROMNew)) {
7357 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
7360 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x3a,0x08);
7361 temp = SiS_GetReg(SiS_Pr->SiS_Part4Port,0x3a);
7363 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x3a,0xdf);
7364 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x25,0xfc);
7365 if((SiS_Pr->ChipType < SIS_661) && (!(SiS_Pr->SiS_ROMNew))) {
7366 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x25,0xf8);
7368 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x0f,0xfb);
7369 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) temp = 0x0000;
7370 else if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) temp = 0x0002;
7371 else if(SiS_Pr->SiS_TVMode & TVSetHiVision) temp = 0x0400;
7373 if((SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {
7375 if(SiS_Pr->SiS_TVMode & TVAspect43) temp1 = 4;
7376 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0f,0xfb,temp1);
7377 if(SiS_Pr->SiS_TVMode & TVAspect43LB) temp |= 0x01;
7378 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0x7c,(temp & 0xff));
7379 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0xfb,(temp >> 8));
7381 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x39,0xfd);
7384 temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x3b) & 0x03;
7387 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x26,0xf8,(temp & 0xff));
7388 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x3a,0xfb,(temp >> 8));
7390 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x3b,0xfd);
7401 SiS_SetCRT2VCLK(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7406 if(SiS_Pr->UseCustomMode) {
7407 reg1 = SiS_Pr->CSR2B;
7408 reg2 = SiS_Pr->CSR2C;
7410 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
7411 reg1 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_A;
7412 reg2 = SiS_Pr->SiS_VBVCLKData[vclkindex].Part4_B;
7415 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7416 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSet525p1024)) {
7417 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,0x57);
7418 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,0x46);
7419 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1f,0xf6);
7421 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,reg1);
7422 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,reg2);
7425 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,0x01);
7426 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0b,reg2);
7427 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x0a,reg1);
7429 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x12,0x00);
7431 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) temp |= 0x20;
7432 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x12,temp);
7436 SiS_SetDualLinkEtc(struct SiS_Private *SiS_Pr)
7438 if(SiS_Pr->ChipType >= SIS_315H) {
7439 if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {
7440 if((SiS_CRT2IsLCD(SiS_Pr)) ||
7441 (SiS_IsVAMode(SiS_Pr))) {
7442 if(SiS_Pr->SiS_LCDInfo & LCDDualLink) {
7443 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x27,0x2c);
7445 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x27,~0x20);
7450 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
7451 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2a,0x00);
7453 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
7455 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
7460 SiS_SetGroup4(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7467 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7468 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
7469 } else if(SiS_Pr->UseCustomMode) {
7470 modeflag = SiS_Pr->CModeFlag;
7473 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7474 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
7477 if(SiS_Pr->ChipType >= SIS_315H) {
7478 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
7479 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
7480 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x24,0x0e);
7485 if(SiS_Pr->SiS_VBType & (VB_SIS30xCLV | VB_SIS302LV)) {
7486 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7487 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x10,0x9f);
7491 if(SiS_Pr->ChipType >= SIS_315H) {
7492 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
7493 SiS_SetDualLinkEtc(SiS_Pr);
7498 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x13,SiS_Pr->SiS_RVBHCFACT);
7500 tempbx = SiS_Pr->SiS_RVBHCMAX;
7501 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x14,tempbx);
7505 tempcx = SiS_Pr->SiS_VGAHT - 1;
7506 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x16,tempcx);
7510 tempcx = SiS_Pr->SiS_VGAVT - 1;
7511 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) tempcx -= 5;
7512 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x17,tempcx);
7515 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x15,temp);
7517 tempbx = SiS_Pr->SiS_VGAHDE;
7519 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7521 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7524 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7528 } else if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) {
7537 temp |= SiS_Pr->Init_P4_0E;
7539 if(SiS_Pr->SiS_VBType & VB_SIS301) {
7540 if(SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) {
7546 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0E,0x10,temp);
7548 tempeax = SiS_Pr->SiS_VGAVDE;
7549 tempebx = SiS_Pr->SiS_VDE;
7550 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
7554 tempcx = SiS_Pr->SiS_RVBHRS;
7555 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x18,tempcx);
7571 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1B,temp);
7573 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1A,temp);
7576 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x19,temp);
7578 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
7580 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1C,0x28);
7584 if(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr750p)) tempbx = 0x08;
7585 tempax = SiS_Pr->SiS_VGAHDE;
7587 if(SiS_IsDualLink(SiS_Pr)) tempax >>= 1;
7589 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7600 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7613 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1D,tempax);
7614 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x1E,temp);
7617 if((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
7620 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
7621 if(!(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSetHiVision | TVSetYPbPr750p | TVSetYPbPr525p))) {
7623 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
7624 if(!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
7630 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x1F,tempbx,temp);
7632 tempbx = SiS_Pr->SiS_HT >> 1;
7633 if(SiS_IsDualLink(SiS_Pr)) tempbx >>= 1;
7635 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x22,tempbx);
7637 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x21,0xC0,temp);
7639 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
7640 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
7641 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x24,0x0e);
7646 SiS_SetDualLinkEtc(SiS_Pr);
7650 SiS_SetCRT2VCLK(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
7658 SiS_SetGroup5(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
7661 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) return;
7663 if(SiS_Pr->SiS_ModeType == ModeVGA) {
7664 if(!(SiS_Pr->SiS_VBInfo & (SetInSlaveMode | LoadDACFlag))) {
7665 SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x1E,0x20);
7666 SiS_LoadDAC(SiS_Pr, ModeNo, ModeIdIndex);
7676 SiS_GetLVDSCRT1Ptr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7686 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7687 (*ResIndex) = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
7689 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7690 (*ResIndex) = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
7695 if((SiS_Pr->SiS_IF_DEF_CH70xx) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
7698 if((SiS_Pr->SiS_TVMode & TVSetPAL) && (!(SiS_Pr->SiS_TVMode & TVSetPALM))) {
7700 if(SiS_Pr->SiS_ModeType > ModeVGA) {
7701 if(SiS_Pr->SiS_CHSOverScan) (*DisplayType) = 84;
7705 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) (*DisplayType)++;
7711 switch(SiS_Pr->SiS_LCDResInfo) {
7730 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x600) {
7731 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) (*DisplayType) += 2;
7740 SiS_ModCRT1CRTC(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7750 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
7751 (SiS_Pr->SiS_CustomT == CUT_BARCO1024) ||
7752 (SiS_Pr->SiS_CustomT == CUT_PANEL848) ||
7753 (SiS_Pr->SiS_CustomT == CUT_PANEL856) )
7756 if(SiS_Pr->SiS_IF_DEF_LVDS) {
7757 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
7758 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) return;
7760 } else if(SiS_Pr->SiS_VBType & VB_SISVB) {
7761 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) return;
7764 if(SiS_Pr->SiS_LCDInfo & LCDPass11) return;
7766 if(SiS_Pr->ChipType < SIS_315H) {
7767 if(SiS_Pr->SiS_SetFlag & SetDOSMode) return;
7770 if(!(SiS_GetLVDSCRT1Ptr(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex,
7776 case 50: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_1; break; /* xSTN */
7777 case 14: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_2; break; /* xSTN */
7778 case 15: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_2_H; break; /* xSTN */
7779 case 18: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_3; break; /* xSTN */
7780 case 19: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1320x240_3_H; break; /* xSTN */
7781 case 10: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1; break;
7782 case 11: LVDSCRT1Ptr = SiS_Pr->SiS_LVDSCRT1640x480_1_H; break;
7783 case 80: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1UNTSC; break;
7784 case 81: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1ONTSC; break;
7785 case 82: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1UPAL; break;
7786 case 83: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1OPAL; break;
7787 case 84: LVDSCRT1Ptr = SiS_Pr->SiS_CHTVCRT1SOPAL; break;
7792 SiS_SetRegAND(SiS_Pr->SiS_P3d4,0x11,0x7f);
7796 SiS_SetReg(SiS_Pr->SiS_P3d4,CRIdx[i],tempah);
7801 SiS_SetReg(SiS_Pr->SiS_P3c4,i,tempah);
7805 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x0E,0x1f,tempah);
7807 if(ModeNo <= 0x13) modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
7808 else modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
7812 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x09,~0x020,tempah);
7816 SiS_CalcLCDACRT1Timing(SiS_Pr, ModeNo, ModeIdIndex);
7826 SiS_SetCRT2ECLK(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7829 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
7833 if(SiS_Pr->SiS_LCDInfo & LCDPass11) {
7834 SiS_Pr->SiS_SetFlag &= (~ProgrammingCRT2);
7835 if(SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRTVCLK == 2) {
7838 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex,
7840 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
7842 vclkindex = SiS_GetVCLK2Ptr(SiS_Pr, ModeNo, ModeIdIndex,
7846 sr2b = SiS_Pr->SiS_VCLKData[vclkindex].SR2B;
7847 sr2c = SiS_Pr->SiS_VCLKData[vclkindex].SR2C;
7849 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) || (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
7850 if(SiS_Pr->SiS_UseROM) {
7859 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA)) {
7860 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {
7865 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x20);
7866 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
7867 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
7868 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x10);
7869 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
7870 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
7871 SiS_SetReg(SiS_Pr->SiS_P3c4,0x31,0x00);
7872 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase,sr2b);
7873 SiS_SetReg(SiS_Pr->SiS_P3c4,clkbase+1,sr2c);
7881 SiS_SetCHTVReg(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
7888 resindex = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
7890 resindex = SiS_Pr->SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
7895 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
7896 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7898 if(SiS_Pr->SiS_ModeType > ModeVGA) {
7899 if(SiS_Pr->SiS_CHSOverScan) TVType = 8;
7901 if(SiS_Pr->SiS_TVMode & TVSetPALM) {
7903 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
7904 } else if(SiS_Pr->SiS_TVMode & TVSetPALN) {
7906 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) TVType += 1;
7911 case 0: CHTVRegData = SiS_Pr->SiS_CHTVReg_UNTSC; break;
7912 case 1: CHTVRegData = SiS_Pr->SiS_CHTVReg_ONTSC; break;
7913 case 2: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPAL; break;
7914 case 3: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPAL; break;
7915 case 4: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPALM; break;
7916 case 5: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPALM; break;
7917 case 6: CHTVRegData = SiS_Pr->SiS_CHTVReg_UPALN; break;
7918 case 7: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPALN; break;
7919 case 8: CHTVRegData = SiS_Pr->SiS_CHTVReg_SOPAL; break;
7920 default: CHTVRegData = SiS_Pr->SiS_CHTVReg_OPAL; break;
7924 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
7933 if(SiS_Pr->SiS_TVMode & TVSetPAL) {
7934 SiS_SetCH700x(SiS_Pr,0x04,0x43); /* 0x40=76uA (PAL); 0x03=15bit non-multi RGB*/
7935 SiS_SetCH700x(SiS_Pr,0x09,0x69); /* Black level for PAL (105)*/
7937 SiS_SetCH700x(SiS_Pr,0x04,0x03); /* upper nibble=71uA (NTSC), 0x03=15bit non-multi RGB*/
7938 SiS_SetCH700x(SiS_Pr,0x09,0x71); /* Black level for NTSC (113)*/
7941 SiS_SetCH700x(SiS_Pr,0x00,CHTVRegData[resindex].Reg[0]); /* Mode register */
7942 SiS_SetCH700x(SiS_Pr,0x07,CHTVRegData[resindex].Reg[1]); /* Start active video register */
7943 SiS_SetCH700x(SiS_Pr,0x08,CHTVRegData[resindex].Reg[2]); /* Position overflow register */
7944 SiS_SetCH700x(SiS_Pr,0x0a,CHTVRegData[resindex].Reg[3]); /* Horiz Position register */
7945 SiS_SetCH700x(SiS_Pr,0x0b,CHTVRegData[resindex].Reg[4]); /* Vertical Position register */
7952 SiS_SetCH700x(SiS_Pr,0x01,0x28);
7961 SiS_SetCH700x(SiS_Pr,0x03,0xb1); /* old: 3103 */
7967 SiS_SetCH70xx(SiS_Pr,0x3d,0x00);
7973 SiS_SetCH70xxANDOR(SiS_Pr,0x10,0x00,0x1F);
7978 SiS_SetCH70xxANDOR(SiS_Pr,0x11,0x02,0xF8);
7982 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x00,0xEF);
7984 if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) { /* ---- NTSC ---- */
7985 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) {
7987 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
7988 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on, no need to set FSCI */
7990 SiS_SetCH70xxANDOR(SiS_Pr,0x18,0x01,0xF0); /* 0x18-0x1f: FSCI 469,762,048 */
7991 SiS_SetCH70xxANDOR(SiS_Pr,0x19,0x0C,0xF0);
7992 SiS_SetCH70xxANDOR(SiS_Pr,0x1a,0x00,0xF0);
7993 SiS_SetCH70xxANDOR(SiS_Pr,0x1b,0x00,0xF0);
7994 SiS_SetCH70xxANDOR(SiS_Pr,0x1c,0x00,0xF0);
7995 SiS_SetCH70xxANDOR(SiS_Pr,0x1d,0x00,0xF0);
7996 SiS_SetCH70xxANDOR(SiS_Pr,0x1e,0x00,0xF0);
7997 SiS_SetCH70xxANDOR(SiS_Pr,0x1f,0x00,0xF0);
7998 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x01,0xEF); /* Loop filter on for mode 23 */
7999 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x00,0xFE); /* ACIV off, need to set FSCI */
8003 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
8004 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE);
8006 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
8007 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE);
8013 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
8014 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on */
8016 SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
8017 SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on */
8035 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp |= 0x10;
8036 SiS_SetCH701x(SiS_Pr,0x00,temp);
8038 SiS_SetCH701x(SiS_Pr,0x01,CHTVRegData[resindex].Reg[1]);
8039 SiS_SetCH701x(SiS_Pr,0x02,CHTVRegData[resindex].Reg[2]);
8040 SiS_SetCH701x(SiS_Pr,0x04,CHTVRegData[resindex].Reg[3]);
8041 SiS_SetCH701x(SiS_Pr,0x03,CHTVRegData[resindex].Reg[4]);
8042 SiS_SetCH701x(SiS_Pr,0x05,CHTVRegData[resindex].Reg[5]);
8043 SiS_SetCH701x(SiS_Pr,0x06,CHTVRegData[resindex].Reg[6]);
8046 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp = 0x66;
8047 SiS_SetCH701x(SiS_Pr,0x07,temp);
8049 SiS_SetCH701x(SiS_Pr,0x08,CHTVRegData[resindex].Reg[8]);
8050 SiS_SetCH701x(SiS_Pr,0x15,CHTVRegData[resindex].Reg[9]);
8051 SiS_SetCH701x(SiS_Pr,0x1f,CHTVRegData[resindex].Reg[10]);
8052 SiS_SetCH701x(SiS_Pr,0x0c,CHTVRegData[resindex].Reg[11]);
8053 SiS_SetCH701x(SiS_Pr,0x0d,CHTVRegData[resindex].Reg[12]);
8054 SiS_SetCH701x(SiS_Pr,0x0e,CHTVRegData[resindex].Reg[13]);
8055 SiS_SetCH701x(SiS_Pr,0x0f,CHTVRegData[resindex].Reg[14]);
8056 SiS_SetCH701x(SiS_Pr,0x10,CHTVRegData[resindex].Reg[15]);
8058 temp = SiS_GetCH701x(SiS_Pr,0x21) & ~0x02;
8065 if(SiS_Pr->SiS_TVMode & (TVSetPALN | TVSetNTSCJ)) temp |= 0x02;
8066 SiS_SetCH701x(SiS_Pr,0x21,temp);
8081 SiS_Chrontel701xBLOn(struct SiS_Private *SiS_Pr)
8086 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8087 if(SiS_Pr->ChipType == SIS_740) {
8088 SiS_SetCH701x(SiS_Pr,0x66,0x65);
8090 temp = SiS_GetCH701x(SiS_Pr,0x66);
8092 SiS_SetCH701x(SiS_Pr,0x66,temp);
8098 SiS_Chrontel701xBLOff(struct SiS_Private *SiS_Pr)
8103 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8104 temp = SiS_GetCH701x(SiS_Pr,0x66);
8106 SiS_SetCH701x(SiS_Pr,0x66,temp);
8111 SiS_ChrontelPowerSequencing(struct SiS_Private *SiS_Pr)
8125 if(SiS_Pr->ChipType == SIS_740) {
8126 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
8127 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) tableptr = asus1024_740;
8129 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
8130 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
8131 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200)) {
8132 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) tableptr = asus1400_740;
8136 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
8138 } else if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||
8139 (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||
8140 (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200)) {
8146 SiS_SetCH701x(SiS_Pr, regtable[i], tableptr[i]);
8151 SiS_SetCH701xForLCD(struct SiS_Private *SiS_Pr)
8193 if(SiS_Pr->ChipType == SIS_740) {
8194 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tableptr = table1024_740;
8195 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) tableptr = table1280_740;
8196 else if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) tableptr = table1400_740;
8197 else if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) tableptr = table1600_740;
8200 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) tableptr = table1024_650;
8201 else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) tableptr = table1280_650;
8202 else if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) tableptr = table1400_650;
8203 else if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) tableptr = table1600_650;
8207 tempbh = SiS_GetCH701x(SiS_Pr,0x74);
8209 tempbh = SiS_GetCH701x(SiS_Pr,0x73);
8211 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) return;
8213 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) return;
8214 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) return;
8216 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) return;
8220 if(SiS_Pr->ChipType == SIS_740) tempbh = 0x0d;
8224 SiS_SetCH701x(SiS_Pr, regtable[i], tableptr[i]);
8226 SiS_ChrontelPowerSequencing(SiS_Pr);
8227 tempbh = SiS_GetCH701x(SiS_Pr,0x1e);
8229 SiS_SetCH701x(SiS_Pr,0x1e,tempbh);
8231 if(SiS_Pr->ChipType == SIS_740) {
8232 tempbh = SiS_GetCH701x(SiS_Pr,0x1c);
8234 SiS_SetCH701x(SiS_Pr,0x1c,tempbh);
8235 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x03);
8236 tempbh = SiS_GetCH701x(SiS_Pr,0x64);
8238 SiS_SetCH701x(SiS_Pr,0x64,tempbh);
8239 tempbh = SiS_GetCH701x(SiS_Pr,0x03);
8241 SiS_SetCH701x(SiS_Pr,0x03,tempbh);
8246 SiS_ChrontelResetVSync(struct SiS_Private *SiS_Pr)
8250 temp1 = SiS_GetCH701x(SiS_Pr,0x49);
8251 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
8252 temp = SiS_GetCH701x(SiS_Pr,0x47);
8254 SiS_SetCH701x(SiS_Pr,0x47,temp);
8255 SiS_LongDelay(SiS_Pr, 3);
8256 temp = SiS_GetCH701x(SiS_Pr,0x47);
8258 SiS_SetCH701x(SiS_Pr,0x47,temp);
8259 SiS_SetCH701x(SiS_Pr,0x49,temp1);
8263 SiS_Chrontel701xOn(struct SiS_Private *SiS_Pr)
8267 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8268 if(SiS_Pr->ChipType == SIS_740) {
8269 temp = SiS_GetCH701x(SiS_Pr,0x1c);
8271 SiS_SetCH701x(SiS_Pr,0x1c,temp);
8273 if(SiS_IsYPbPr(SiS_Pr)) {
8274 temp = SiS_GetCH701x(SiS_Pr,0x01);
8277 SiS_SetCH701x(SiS_Pr,0x01,temp);
8279 if(SiS_IsChScart(SiS_Pr)) {
8280 temp = SiS_GetCH701x(SiS_Pr,0x01);
8283 SiS_SetCH701x(SiS_Pr,0x01,temp);
8285 if(SiS_Pr->ChipType == SIS_740) {
8286 SiS_ChrontelResetVSync(SiS_Pr);
8287 SiS_SetCH701x(SiS_Pr,0x49,0x20); /* Enable TV path */
8289 SiS_SetCH701x(SiS_Pr,0x49,0x20); /* Enable TV path */
8290 temp = SiS_GetCH701x(SiS_Pr,0x49);
8291 if(SiS_IsYPbPr(SiS_Pr)) {
8292 temp = SiS_GetCH701x(SiS_Pr,0x73);
8294 SiS_SetCH701x(SiS_Pr,0x73,temp);
8296 temp = SiS_GetCH701x(SiS_Pr,0x47);
8298 SiS_SetCH701x(SiS_Pr,0x47,temp);
8299 SiS_LongDelay(SiS_Pr, 2);
8300 temp = SiS_GetCH701x(SiS_Pr,0x47);
8302 SiS_SetCH701x(SiS_Pr,0x47,temp);
8308 SiS_Chrontel701xOff(struct SiS_Private *SiS_Pr)
8313 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8314 if(SiS_Pr->ChipType == SIS_740) {
8315 SiS_LongDelay(SiS_Pr, 1);
8316 SiS_GenericDelay(SiS_Pr, 5887);
8317 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8318 SiS_SetCH701x(SiS_Pr,0x66,0x00);
8320 SiS_LongDelay(SiS_Pr, 2);
8321 temp = SiS_GetCH701x(SiS_Pr,0x76);
8323 SiS_SetCH701x(SiS_Pr,0x76,temp);
8324 SiS_SetCH701x(SiS_Pr,0x66,0x00);
8330 SiS_ChrontelResetDB(struct SiS_Private *SiS_Pr)
8334 if(SiS_Pr->ChipType == SIS_740) {
8336 temp = SiS_GetCH701x(SiS_Pr,0x4a); /* Version ID */
8340 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8341 temp = SiS_GetCH701x(SiS_Pr,0x49);
8342 SiS_SetCH701x(SiS_Pr,0x49,0x3e);
8346 SiS_SetCH701x(SiS_Pr,0x48,0x10);
8347 SiS_LongDelay(SiS_Pr, 1);
8348 SiS_SetCH701x(SiS_Pr,0x48,0x18);
8350 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8351 SiS_ChrontelResetVSync(SiS_Pr);
8352 SiS_SetCH701x(SiS_Pr,0x49,temp);
8358 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8360 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8361 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8363 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8364 temp = SiS_GetCH701x(SiS_Pr,0x5c);
8366 SiS_SetCH701x(SiS_Pr,0x5c,temp);
8367 temp = SiS_GetCH701x(SiS_Pr,0x61);
8369 SiS_SetCH701xForLCD(SiS_Pr);
8375 SiS_SetCH701x(SiS_Pr,0x48,0x10);
8376 SiS_LongDelay(SiS_Pr, 1);
8377 SiS_SetCH701x(SiS_Pr,0x48,0x18);
8382 SiS_ChrontelInitTVVSync(struct SiS_Private *SiS_Pr)
8386 if(SiS_Pr->ChipType == SIS_740) {
8388 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8389 SiS_ChrontelResetVSync(SiS_Pr);
8394 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* Power up LVDS block */
8395 temp = SiS_GetCH701x(SiS_Pr,0x49);
8398 temp = SiS_GetCH701x(SiS_Pr,0x47);
8400 SiS_SetCH701x(SiS_Pr,0x47,temp); /* enable VSYNC */
8401 SiS_LongDelay(SiS_Pr, 3);
8402 temp = SiS_GetCH701x(SiS_Pr,0x47);
8404 SiS_SetCH701x(SiS_Pr,0x47,temp); /* disable VSYNC */
8411 SiS_ChrontelDoSomething3(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
8415 if(SiS_Pr->ChipType == SIS_740) {
8417 temp = SiS_GetCH701x(SiS_Pr,0x61);
8420 SiS_SetCH701x(SiS_Pr,0x61,temp);
8422 SiS_SetCH701x(SiS_Pr,0x66,0x45); /* Panel power on */
8423 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* All power on */
8424 SiS_LongDelay(SiS_Pr, 1);
8425 SiS_GenericDelay(SiS_Pr, 5887);
8430 temp = SiS_GetCH701x(SiS_Pr,0x61);
8433 SiS_SetCH701x(SiS_Pr,0x61,temp);
8436 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8437 temp = SiS_GetCH701x(SiS_Pr,0x66);
8439 SiS_SetCH701x(SiS_Pr,0x66,temp);
8441 if(SiS_WeHaveBacklightCtrl(SiS_Pr)) {
8442 SiS_GenericDelay(SiS_Pr, 1023);
8444 SiS_GenericDelay(SiS_Pr, 767);
8448 SiS_GenericDelay(SiS_Pr, 767);
8450 temp = SiS_GetCH701x(SiS_Pr,0x76);
8452 SiS_SetCH701x(SiS_Pr,0x76,temp);
8453 temp = SiS_GetCH701x(SiS_Pr,0x66);
8455 SiS_SetCH701x(SiS_Pr,0x66,temp);
8456 SiS_LongDelay(SiS_Pr, 1);
8462 SiS_ChrontelDoSomething2(struct SiS_Private *SiS_Pr)
8466 SiS_LongDelay(SiS_Pr, 1);
8469 temp = SiS_GetCH701x(SiS_Pr,0x66);
8473 if(SiS_Pr->ChipType == SIS_740) {
8475 SiS_SetCH701x(SiS_Pr,0x76,0xac);
8478 SiS_SetCH701xForLCD(SiS_Pr);
8480 temp = SiS_GetCH701x(SiS_Pr,0x76);
8482 SiS_SetCH701x(SiS_Pr,0x76,temp);
8483 SiS_LongDelay(SiS_Pr, 2);
8484 temp = SiS_GetCH701x(SiS_Pr,0x76);
8486 SiS_SetCH701x(SiS_Pr,0x76,temp);
8487 if(SiS_Pr->ChipType == SIS_740) {
8488 SiS_SetCH701x(SiS_Pr,0x78,0xe0); /* PLL loop filter */
8490 SiS_SetCH701x(SiS_Pr,0x78,0x60);
8492 SiS_LongDelay(SiS_Pr, 2);
8495 SiS_SetCH701x(SiS_Pr,0x77,0x00); /* MV? */
8499 SiS_ChrontelDoSomething1(struct SiS_Private *SiS_Pr)
8503 temp = SiS_GetCH701x(SiS_Pr,0x03);
8506 SiS_SetCH701x(SiS_Pr,0x03,temp);
8508 if(SiS_Pr->ChipType == SIS_740) {
8510 temp = SiS_GetCH701x(SiS_Pr,0x1c);
8512 SiS_SetCH701x(SiS_Pr,0x1c,temp);
8514 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2d,0x03);
8516 temp = SiS_GetCH701x(SiS_Pr,0x64);
8518 SiS_SetCH701x(SiS_Pr,0x64,temp);
8520 temp = SiS_GetCH701x(SiS_Pr,0x03);
8522 SiS_SetCH701x(SiS_Pr,0x03,temp);
8524 if(SiS_Pr->SiS_CustomT == CUT_ASUSL3000D) {
8525 SiS_SetCH701x(SiS_Pr,0x63,0x40); /* LVDS off */
8526 SiS_LongDelay(SiS_Pr, 1);
8527 SiS_SetCH701x(SiS_Pr,0x63,0x00); /* LVDS on */
8528 SiS_ChrontelResetDB(SiS_Pr);
8529 SiS_ChrontelDoSomething2(SiS_Pr);
8530 SiS_ChrontelDoSomething3(SiS_Pr, 0);
8532 temp = SiS_GetCH701x(SiS_Pr,0x66);
8534 SiS_ChrontelResetDB(SiS_Pr);
8535 SiS_ChrontelDoSomething2(SiS_Pr);
8536 SiS_ChrontelDoSomething3(SiS_Pr, 0);
8542 SiS_ChrontelResetDB(SiS_Pr);
8543 SiS_ChrontelDoSomething2(SiS_Pr);
8544 temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x34);
8545 SiS_ChrontelDoSomething3(SiS_Pr,temp);
8546 SiS_SetCH701x(SiS_Pr,0x76,0xaf); /* All power on, LVDS normal operation */
8558 SiS_SetCRT2Group(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
8561 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
8565 SiS_Pr->SiS_SetFlag |= ProgrammingCRT2;
8567 if(!SiS_Pr->UseCustomMode) {
8568 SiS_SearchModeID(SiS_Pr, &ModeNo, &ModeIdIndex);
8574 SiS_Pr->SiS_SelectCRT2Rate = 4;
8576 SiS_UnLockCRT2(SiS_Pr);
8578 RefreshRateTableIndex = SiS_GetRatePtr(SiS_Pr, ModeNo, ModeIdIndex);
8580 SiS_SaveCRT2Info(SiS_Pr,ModeNo);
8582 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8583 SiS_DisableBridge(SiS_Pr);
8584 if((SiS_Pr->SiS_IF_DEF_LVDS == 1) && (SiS_Pr->ChipType == SIS_730)) {
8585 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x00,0x80);
8587 SiS_SetCRT2ModeRegs(SiS_Pr, ModeNo, ModeIdIndex);
8590 if(SiS_Pr->SiS_VBInfo & DisableCRT2Display) {
8591 SiS_LockCRT2(SiS_Pr);
8592 SiS_DisplayOn(SiS_Pr);
8596 SiS_GetCRT2Data(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8599 SiS_Pr->SiS_LCDHDES = SiS_Pr->SiS_LCDVDES = 0;
8600 if( (SiS_Pr->SiS_IF_DEF_LVDS == 1) ||
8601 ((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) ||
8602 ((SiS_Pr->ChipType >= SIS_315H) && (SiS_Pr->SiS_VBType & VB_SIS30xBLV)) ) {
8603 SiS_GetLVDSDesData(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8608 xf86DrvMsg(0, X_INFO, "(init301: LCDHDES 0x%03x LCDVDES 0x%03x)\n", SiS_Pr->SiS_LCDHDES, SiS_Pr->SiS_LCDVDES);
8609 xf86DrvMsg(0, X_INFO, "(init301: HDE 0x%03x VDE 0x%03x)\n", SiS_Pr->SiS_HDE, SiS_Pr->SiS_VDE);
8610 xf86DrvMsg(0, X_INFO, "(init301: VGAHDE 0x%03x VGAVDE 0x%03x)\n", SiS_Pr->SiS_VGAHDE, SiS_Pr->SiS_VGAVDE);
8611 xf86DrvMsg(0, X_INFO, "(init301: HT 0x%03x VT 0x%03x)\n", SiS_Pr->SiS_HT, SiS_Pr->SiS_VT);
8612 xf86DrvMsg(0, X_INFO, "(init301: VGAHT 0x%03x VGAVT 0x%03x)\n", SiS_Pr->SiS_VGAHT, SiS_Pr->SiS_VGAVT);
8616 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8617 SiS_SetGroup1(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8620 if(SiS_Pr->SiS_VBType & VB_SISVB) {
8622 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8624 SiS_SetGroup2(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8626 SiS_SetGroup2_C_ELV(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8628 SiS_SetGroup3(SiS_Pr, ModeNo, ModeIdIndex);
8629 SiS_SetGroup4(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8631 SiS_SetGroup4_C_ELV(SiS_Pr, ModeNo, ModeIdIndex);
8633 SiS_SetGroup5(SiS_Pr, ModeNo, ModeIdIndex);
8635 SiS_SetCRT2Sync(SiS_Pr, ModeNo, RefreshRateTableIndex);
8638 if((SiS_Pr->SiS_VBType & VB_NoLCD) && (SiS_Pr->SiS_VBInfo & SetCRT2ToLCD)) {
8640 if(!((SiS_Pr->SiS_SetFlag & SetDOSMode) && ((ModeNo == 0x03) || (ModeNo == 0x10)))) {
8641 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {
8642 SiS_ModCRT1CRTC(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8645 SiS_SetCRT2ECLK(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8651 SiS_SetCRT2Sync(SiS_Pr, ModeNo, RefreshRateTableIndex);
8653 SiS_ModCRT1CRTC(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8655 SiS_SetCRT2ECLK(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8657 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8658 if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {
8659 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
8660 if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {
8662 SiS_SetCH701xForLCD(SiS_Pr);
8666 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
8667 SiS_SetCHTVReg(SiS_Pr,ModeNo,ModeIdIndex,RefreshRateTableIndex);
8675 if(SiS_Pr->ChipType < SIS_315H) {
8676 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8677 if(SiS_Pr->SiS_UseOEM) {
8678 if((SiS_Pr->SiS_UseROM) && (SiS_Pr->SiS_UseOEM == -1)) {
8680 SiS_OEM300Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8683 SiS_OEM300Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8686 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
8687 if((SiS_Pr->SiS_CustomT == CUT_BARCO1366) ||
8688 (SiS_Pr->SiS_CustomT == CUT_BARCO1024)) {
8689 SetOEMLCDData2(SiS_Pr, ModeNo, ModeIdIndex,RefreshRateTableIndex);
8691 SiS_DisplayOn(SiS_Pr);
8698 if(SiS_Pr->ChipType >= SIS_315H) {
8699 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8700 if(SiS_Pr->ChipType < SIS_661) {
8701 SiS_FinalizeLCD(SiS_Pr, ModeNo, ModeIdIndex);
8702 SiS_OEM310Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8704 SiS_OEM661Setting(SiS_Pr, ModeNo, ModeIdIndex, RefreshRateTableIndex);
8706 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x40);
8711 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8712 SiS_EnableBridge(SiS_Pr);
8715 SiS_DisplayOn(SiS_Pr);
8717 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {
8718 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
8720 SiS_SetRegSR11ANDOR(SiS_Pr,0xFF,0x0C);
8723 SiS_SetCH70xxANDOR(SiS_Pr,0x0e,0x01,0xf8);
8727 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
8728 SiS_LockCRT2(SiS_Pr);
8740 SiS_SiS30xBLOn(struct SiS_Private *SiS_Pr)
8743 SiS_DDC2Delay(SiS_Pr,0xff00);
8744 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x02)) {
8745 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x02);
8746 SiS_WaitVBRetrace(SiS_Pr);
8748 if(!(SiS_GetReg(SiS_Pr->SiS_Part4Port,0x26) & 0x01)) {
8749 SiS_SetRegOR(SiS_Pr->SiS_Part4Port,0x26,0x01);
8754 SiS_SiS30xBLOff(struct SiS_Private *SiS_Pr)
8757 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x26,0xFE);
8758 SiS_DDC2Delay(SiS_Pr,0xff00);
8766 SiS_SetupDDCN(struct SiS_Private *SiS_Pr)
8768 SiS_Pr->SiS_DDC_NData = ~SiS_Pr->SiS_DDC_Data;
8769 SiS_Pr->SiS_DDC_NClk = ~SiS_Pr->SiS_DDC_Clk;
8770 if((SiS_Pr->SiS_DDC_Index == 0x11) && (SiS_Pr->SiS_SensibleSR11)) {
8771 SiS_Pr->SiS_DDC_NData &= 0x0f;
8772 SiS_Pr->SiS_DDC_NClk &= 0x0f;
8778 SiS_SetTrumpBlockLoop(struct SiS_Private *SiS_Pr, unsigned char *dataptr)
8789 SiS_SetStop(SiS_Pr);
8790 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 2);
8792 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
8793 tempah = SiS_Pr->SiS_DDC_DeviceAddr;
8794 temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write DAB (S0=0=write) */
8797 temp = SiS_WriteDDC2Data(SiS_Pr,tempah); /* Write register number */
8801 temp = SiS_WriteDDC2Data(SiS_Pr,tempah);/* Write DAB (S0=0=write) */
8805 if(SiS_SetStop(SiS_Pr)) continue;
8812 SiS_SetTrumpionBlock(struct SiS_Private *SiS_Pr, unsigned char *dataptr)
8814 SiS_Pr->SiS_DDC_DeviceAddr = 0xF0; /* DAB (Device Address Byte) */
8815 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8816 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
8817 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
8818 SiS_SetupDDCN(SiS_Pr);
8820 SiS_SetSwitchDDC2(SiS_Pr);
8823 dataptr = SiS_SetTrumpBlockLoop(SiS_Pr, dataptr);
8843 SiS_SetChReg(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val, unsigned short myor)
8849 SiS_SetStop(SiS_Pr);
8850 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 4);
8852 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
8853 temp = SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr); /* Write DAB (S0=0=write) */
8855 temp = SiS_WriteDDC2Data(SiS_Pr, (reg | myor)); /* Write RAB (700x: set bit 7, see datasheet) */
8857 temp = SiS_WriteDDC2Data(SiS_Pr, val); /* Write data */
8859 if(SiS_SetStop(SiS_Pr)) continue; /* Set stop condition */
8860 SiS_Pr->SiS_ChrontelInit = 1;
8868 SiS_SetCH700x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
8870 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
8872 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
8874 if(!(SiS_Pr->SiS_ChrontelInit)) {
8875 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8876 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
8877 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
8878 SiS_SetupDDCN(SiS_Pr);
8881 if( (!(SiS_SetChReg(SiS_Pr, reg, val, 0x80))) &&
8882 (!(SiS_Pr->SiS_ChrontelInit)) ) {
8883 SiS_Pr->SiS_DDC_Index = 0x0a;
8884 SiS_Pr->SiS_DDC_Data = 0x80;
8885 SiS_Pr->SiS_DDC_Clk = 0x40;
8886 SiS_SetupDDCN(SiS_Pr);
8888 SiS_SetChReg(SiS_Pr, reg, val, 0x80);
8895 SiS_SetCH701x(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
8897 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8898 SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
8899 SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
8900 SiS_SetupDDCN(SiS_Pr);
8901 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB (Device Address Byte) */
8902 SiS_SetChReg(SiS_Pr, reg, val, 0);
8909 SiS_SetCH70xx(struct SiS_Private *SiS_Pr, unsigned short reg, unsigned char val)
8911 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
8912 SiS_SetCH700x(SiS_Pr, reg, val);
8914 SiS_SetCH701x(SiS_Pr, reg, val);
8918 SiS_GetChReg(struct SiS_Private *SiS_Pr, unsigned short myor)
8924 SiS_SetStop(SiS_Pr);
8925 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT * 4);
8927 if(SiS_SetStart(SiS_Pr)) continue; /* Set start condition */
8928 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_DeviceAddr); /* Write DAB (S0=0=write) */
8930 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_ReadAddr | myor); /* Write RAB (700x: | 0x80) */
8932 if (SiS_SetStart(SiS_Pr)) continue; /* Re-start */
8933 temp = SiS_WriteDDC2Data(SiS_Pr,SiS_Pr->SiS_DDC_DeviceAddr | 0x01);/* DAB (S0=1=read) */
8935 tempah = SiS_ReadDDC2Data(SiS_Pr); /* Read byte */
8936 if(SiS_SetStop(SiS_Pr)) continue; /* Stop condition */
8937 SiS_Pr->SiS_ChrontelInit = 1;
8946 SiS_GetCH700x(struct SiS_Private *SiS_Pr, unsigned short tempbx)
8950 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
8952 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
8954 if(!(SiS_Pr->SiS_ChrontelInit)) {
8955 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8956 SiS_Pr->SiS_DDC_Data = 0x02; /* Bitmask in IndexReg for Data */
8957 SiS_Pr->SiS_DDC_Clk = 0x01; /* Bitmask in IndexReg for Clk */
8958 SiS_SetupDDCN(SiS_Pr);
8961 SiS_Pr->SiS_DDC_ReadAddr = tempbx;
8963 if( ((result = SiS_GetChReg(SiS_Pr,0x80)) == 0xFFFF) &&
8964 (!SiS_Pr->SiS_ChrontelInit) ) {
8966 SiS_Pr->SiS_DDC_Index = 0x0a;
8967 SiS_Pr->SiS_DDC_Data = 0x80;
8968 SiS_Pr->SiS_DDC_Clk = 0x40;
8969 SiS_SetupDDCN(SiS_Pr);
8971 result = SiS_GetChReg(SiS_Pr,0x80);
8979 SiS_GetCH701x(struct SiS_Private *SiS_Pr, unsigned short tempbx)
8981 SiS_Pr->SiS_DDC_Index = 0x11; /* Bit 0 = SC; Bit 1 = SD */
8982 SiS_Pr->SiS_DDC_Data = 0x08; /* Bitmask in IndexReg for Data */
8983 SiS_Pr->SiS_DDC_Clk = 0x04; /* Bitmask in IndexReg for Clk */
8984 SiS_SetupDDCN(SiS_Pr);
8985 SiS_Pr->SiS_DDC_DeviceAddr = 0xEA; /* DAB */
8987 SiS_Pr->SiS_DDC_ReadAddr = tempbx;
8989 return SiS_GetChReg(SiS_Pr,0);
8998 SiS_GetCH70xx(struct SiS_Private *SiS_Pr, unsigned short tempbx)
9000 if(SiS_Pr->SiS_IF_DEF_CH70xx == 1)
9001 return SiS_GetCH700x(SiS_Pr, tempbx);
9003 return SiS_GetCH701x(SiS_Pr, tempbx);
9007 SiS_SetCH70xxANDOR(struct SiS_Private *SiS_Pr, unsigned short reg,
9012 tempbl = (SiS_GetCH70xx(SiS_Pr, (reg & 0xFF)) & myand) | myor;
9013 SiS_SetCH70xx(SiS_Pr, reg, tempbl);
9021 SiS_InitDDCRegs(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
9036 SiS_Pr->SiS_ChrontelInit = 0; /* force re-detection! */
9038 SiS_Pr->SiS_DDC_SecAddr = 0;
9039 SiS_Pr->SiS_DDC_DeviceAddr = ddcdtype[DDCdatatype];
9040 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_P3c4;
9041 SiS_Pr->SiS_DDC_Index = 0x11;
9044 cr32 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x32);
9052 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
9053 SiS_Pr->SiS_DDC_Index = 0x0f;
9084 SiS_Pr->SiS_DDC_Port = SiS_Pr->SiS_Part4Port;
9085 SiS_Pr->SiS_DDC_Index = 0x0f;
9107 SiS_Pr->SiS_DDC_Data = 0x02 << temp;
9108 SiS_Pr->SiS_DDC_Clk = 0x01 << temp;
9110 SiS_SetupDDCN(SiS_Pr);
9115 SiS_Pr->SiS_DDC_Port, SiS_Pr->SiS_DDC_Index, temp);
9122 SiS_WriteDABDDC(struct SiS_Private *SiS_Pr)
9124 if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
9125 if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_DeviceAddr)) {
9128 if(SiS_WriteDDC2Data(SiS_Pr, SiS_Pr->SiS_DDC_SecAddr)) {
9135 SiS_PrepareReadDDC(struct SiS_Private *SiS_Pr)
9137 if(SiS_SetStart(SiS_Pr)) return 0xFFFF;
9138 if(SiS_WriteDDC2Data(SiS_Pr, (SiS_Pr->SiS_DDC_DeviceAddr | 0x01))) {
9145 SiS_PrepareDDC(struct SiS_Private *SiS_Pr)
9147 if(SiS_WriteDABDDC(SiS_Pr)) SiS_WriteDABDDC(SiS_Pr);
9148 if(SiS_PrepareReadDDC(SiS_Pr)) return (SiS_PrepareReadDDC(SiS_Pr));
9153 SiS_SendACK(struct SiS_Private *SiS_Pr, unsigned short yesno)
9155 SiS_SetSCLKLow(SiS_Pr);
9157 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9158 SiS_Pr->SiS_DDC_Index,
9159 SiS_Pr->SiS_DDC_NData,
9160 SiS_Pr->SiS_DDC_Data);
9162 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9163 SiS_Pr->SiS_DDC_Index,
9164 SiS_Pr->SiS_DDC_NData,
9167 SiS_SetSCLKHigh(SiS_Pr);
9171 SiS_DoProbeDDC(struct SiS_Private *SiS_Pr)
9177 SiS_SetSwitchDDC2(SiS_Pr);
9178 if(SiS_PrepareDDC(SiS_Pr)) {
9179 SiS_SetStop(SiS_Pr);
9189 if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
9190 temp = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9191 SiS_SendACK(SiS_Pr, 0);
9206 temp = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9207 SiS_SendACK(SiS_Pr, 1);
9217 if(SiS_Pr->SiS_DDC_DeviceAddr == 0xa0) {
9222 SiS_SetStop(SiS_Pr);
9230 SiS_ProbeDDC(struct SiS_Private *SiS_Pr)
9235 SiS_Pr->SiS_DDC_DeviceAddr = 0xa0;
9236 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x02;
9237 SiS_Pr->SiS_DDC_DeviceAddr = 0xa2;
9238 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x08;
9239 SiS_Pr->SiS_DDC_DeviceAddr = 0xa6;
9240 if(!(SiS_DoProbeDDC(SiS_Pr))) flag |= 0x10;
9249 SiS_ReadDDC(struct SiS_Private *SiS_Pr, unsigned short DDCdatatype, unsigned char *buffer)
9257 SiS_SetSwitchDDC2(SiS_Pr);
9258 if(!(SiS_PrepareDDC(SiS_Pr))) {
9264 buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9267 SiS_SendACK(SiS_Pr, 0);
9269 buffer[i] = (unsigned char)SiS_ReadDDC2Data(SiS_Pr);
9271 SiS_SendACK(SiS_Pr, 1);
9277 SiS_SetStop(SiS_Pr);
9287 we use our pre-detected pSiS-values instead of SiS_Pr as
9303 SiS_HandleDDC(struct SiS_Private *SiS_Pr, unsigned int VBFlags, int VGAEngine,
9319 if(SiS_InitDDCRegs(SiS_Pr, VBFlags, VGAEngine, adaptnum, DDCdatatype, false, VBFlags2) == 0xFFFF)
9322 sr1f = SiS_GetReg(SiS_Pr->SiS_P3c4,0x1f);
9323 SiS_SetRegANDOR(SiS_Pr->SiS_P3c4,0x1f,0x3f,0x04);
9325 cr17 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x17) & 0x80;
9327 SiS_SetRegOR(SiS_Pr->SiS_P3d4,0x17,0x80);
9328 SiS_SetReg(SiS_Pr->SiS_P3c4,0x00,0x01);
9329 SiS_SetReg(SiS_Pr->SiS_P3c4,0x00,0x03);
9333 SiS_WaitRetrace1(SiS_Pr);
9334 SiS_WaitRetrace1(SiS_Pr);
9335 SiS_WaitRetrace1(SiS_Pr);
9336 SiS_WaitRetrace1(SiS_Pr);
9340 result = SiS_ProbeDDC(SiS_Pr);
9342 result = SiS_ReadDDC(SiS_Pr, DDCdatatype, buffer);
9349 if(!SiS_Pr->DDCPortMixup) {
9359 SiS_SetReg(SiS_Pr->SiS_P3c4,0x1f,sr1f);
9361 SiS_SetRegANDOR(SiS_Pr->SiS_P3d4,0x17,0x7f,cr17);
9369 SiS_SetSwitchDDC2(struct SiS_Private *SiS_Pr)
9371 SiS_SetSCLKHigh(SiS_Pr);
9372 SiS_WaitRetrace1(SiS_Pr);
9374 SiS_SetSCLKLow(SiS_Pr);
9375 SiS_WaitRetrace1(SiS_Pr);
9379 SiS_ReadDDC1Bit(struct SiS_Private *SiS_Pr)
9381 SiS_WaitRetrace1(SiS_Pr);
9382 return ((SiS_GetReg(SiS_Pr->SiS_P3c4,0x11) & 0x02) >> 1);
9388 SiS_SetStart(struct SiS_Private *SiS_Pr)
9390 if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9391 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9392 SiS_Pr->SiS_DDC_Index,
9393 SiS_Pr->SiS_DDC_NData,
9394 SiS_Pr->SiS_DDC_Data); /* SD->high */
9395 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
9396 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9397 SiS_Pr->SiS_DDC_Index,
9398 SiS_Pr->SiS_DDC_NData,
9400 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9407 SiS_SetStop(struct SiS_Private *SiS_Pr)
9409 if(SiS_SetSCLKLow(SiS_Pr)) return 0xFFFF; /* (SC->low) */
9410 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9411 SiS_Pr->SiS_DDC_Index,
9412 SiS_Pr->SiS_DDC_NData,
9414 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* SC->high */
9415 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9416 SiS_Pr->SiS_DDC_Index,
9417 SiS_Pr->SiS_DDC_NData,
9418 SiS_Pr->SiS_DDC_Data); /* SD->high = stop condition */
9419 if(SiS_SetSCLKHigh(SiS_Pr)) return 0xFFFF; /* (SC->high) */
9425 SiS_WriteDDC2Data(struct SiS_Private *SiS_Pr, unsigned short tempax)
9431 SiS_SetSCLKLow(SiS_Pr); /* SC->low */
9433 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9434 SiS_Pr->SiS_DDC_Index,
9435 SiS_Pr->SiS_DDC_NData,
9436 SiS_Pr->SiS_DDC_Data); /* Write bit (1) to SD */
9438 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9439 SiS_Pr->SiS_DDC_Index,
9440 SiS_Pr->SiS_DDC_NData,
9443 SiS_SetSCLKHigh(SiS_Pr); /* SC->high */
9446 temp = SiS_CheckACK(SiS_Pr); /* Check acknowledge */
9451 SiS_ReadDDC2Data(struct SiS_Private *SiS_Pr)
9458 SiS_SetSCLKLow(SiS_Pr);
9459 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9460 SiS_Pr->SiS_DDC_Index,
9461 SiS_Pr->SiS_DDC_NData,
9462 SiS_Pr->SiS_DDC_Data);
9463 SiS_SetSCLKHigh(SiS_Pr);
9464 temp = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);
9465 if(temp & SiS_Pr->SiS_DDC_Data) getdata |= 0x01;
9471 SiS_SetSCLKLow(struct SiS_Private *SiS_Pr)
9473 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9474 SiS_Pr->SiS_DDC_Index,
9475 SiS_Pr->SiS_DDC_NClk,
9477 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9482 SiS_SetSCLKHigh(struct SiS_Private *SiS_Pr)
9486 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9487 SiS_Pr->SiS_DDC_Index,
9488 SiS_Pr->SiS_DDC_NClk,
9489 SiS_Pr->SiS_DDC_Clk); /* SetSCLKHigh() */
9491 temp = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index);
9492 } while((!(temp & SiS_Pr->SiS_DDC_Clk)) && --watchdog);
9501 SiS_DDC2Delay(SiS_Pr,SiS_I2CDELAYSHORT);
9508 SiS_CheckACK(struct SiS_Private *SiS_Pr)
9512 SiS_SetSCLKLow(SiS_Pr); /* (SC->low) */
9513 SiS_SetRegANDOR(SiS_Pr->SiS_DDC_Port,
9514 SiS_Pr->SiS_DDC_Index,
9515 SiS_Pr->SiS_DDC_NData,
9516 SiS_Pr->SiS_DDC_Data); /* (SD->high) */
9517 SiS_SetSCLKHigh(SiS_Pr); /* SC->high = clock impulse for ack */
9518 tempah = SiS_GetReg(SiS_Pr->SiS_DDC_Port,SiS_Pr->SiS_DDC_Index); /* Read SD */
9519 SiS_SetSCLKLow(SiS_Pr); /* SC->low = end of clock impulse */
9520 if(tempah & SiS_Pr->SiS_DDC_Data) return 1; /* Ack OK if bit = 0 */
9532 GetRAMDACromptr(struct SiS_Private *SiS_Pr)
9534 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9537 if(SiS_Pr->ChipType < SIS_330) {
9539 if(SiS_Pr->SiS_VBType & VB_SIS30xB)
9543 if(SiS_Pr->SiS_VBType & VB_SIS30xB)
9550 GetLCDromptr(struct SiS_Private *SiS_Pr)
9552 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9555 if(SiS_Pr->ChipType < SIS_330) {
9557 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9561 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9568 GetTVromptr(struct SiS_Private *SiS_Pr)
9570 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9573 if(SiS_Pr->ChipType < SIS_330) {
9575 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9579 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV)
9586 GetLCDPtrIndexBIOS(struct SiS_Private *SiS_Pr)
9590 if((IS_SIS650) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
9591 if(!(SiS_IsNotM650orLater(SiS_Pr))) {
9592 if((index = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0xf0)) {
9595 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9596 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9602 index = SiS_GetBIOSLCDResInfo(SiS_Pr) & 0x0F;
9603 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) index -= 5;
9604 if(SiS_Pr->SiS_VBType & VB_SIS301C) { /* 1.15.20 and later (not VB specific) */
9605 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) index -= 5;
9606 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x768) index -= 5;
9608 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) index -= 6;
9612 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9613 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9618 GetLCDPtrIndex(struct SiS_Private *SiS_Pr)
9622 index = ((SiS_GetBIOSLCDResInfo(SiS_Pr) & 0x0F) - 1) * 3;
9623 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) index += 2;
9624 else if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) index++;
9629 GetTVPtrIndex(struct SiS_Private *SiS_Pr)
9634 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 1;
9635 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) index = 2;
9637 if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) index = 0;
9641 if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) &&
9642 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
9650 GetOEMTVPtr661_2_GEN(struct SiS_Private *SiS_Pr, int addme)
9654 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 1;
9655 if(SiS_Pr->SiS_TVMode & TVSetPALM) index = 2;
9656 if(SiS_Pr->SiS_TVMode & TVSetPALN) index = 3;
9657 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) index = 6;
9658 if(SiS_Pr->SiS_TVMode & TVSetNTSC1024) {
9660 if(SiS_Pr->SiS_TVMode & TVSetPALM) index++;
9661 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) index = 7;
9664 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
9665 if((!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) ||
9666 (SiS_Pr->SiS_TVMode & TVSetTVSimuMode)) {
9676 GetOEMTVPtr661_2_OLD(struct SiS_Private *SiS_Pr)
9678 return (GetOEMTVPtr661_2_GEN(SiS_Pr, 8));
9683 GetOEMTVPtr661(struct SiS_Private *SiS_Pr)
9687 if(SiS_Pr->SiS_TVMode & TVSetPAL) index = 2;
9688 if(SiS_Pr->SiS_ROMNew) {
9689 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) index = 4;
9690 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) index = 6;
9691 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) index = 8;
9692 if(SiS_Pr->SiS_TVMode & TVSetHiVision) index = 10;
9694 if(SiS_Pr->SiS_TVMode & TVSetHiVision) index = 4;
9695 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525i) index = 6;
9696 if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) index = 8;
9697 if(SiS_Pr->SiS_TVMode & TVSetYPbPr750p) index = 10;
9700 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) index++;
9706 SetDelayComp(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
9708 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
9712 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
9713 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x20,0xbf);
9715 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x35,0x7f);
9720 if(SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) { /* ------------ VGA */
9722 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9723 romptr = GetRAMDACromptr(SiS_Pr);
9728 if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
9733 } else if(SiS_Pr->ChipType < SIS_330) {
9738 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
9743 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD|SetCRT2ToLCDA)) { /* ---------- LCD/LCDA */
9749 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
9750 if(SiS_Pr->PDC != -1) {
9751 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((SiS_Pr->PDC >> 1) & 0x0f));
9752 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((SiS_Pr->PDC & 0x01) << 7));
9756 if(SiS_Pr->PDCA != -1) {
9757 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((SiS_Pr->PDCA << 3) & 0xf0));
9758 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((SiS_Pr->PDCA & 0x01) << 6));
9765 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) {
9766 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
9768 if((SiS_Pr->PanelXRes <= 1280) && (SiS_Pr->PanelYRes <= 1024)) {
9771 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,delay);
9774 if(SiS_Pr->SiS_VBType & VB_SIS301C) {
9776 if((SiS_Pr->PanelXRes > 1280) && (SiS_Pr->PanelYRes > 1024)) {
9779 } else if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
9783 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,delay);
9793 switch(SiS_Pr->SiS_CustomT) {
9796 if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
9810 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
9814 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2D,delay);
9824 index = GetLCDPtrIndexBIOS(SiS_Pr);
9825 myindex = GetLCDPtrIndex(SiS_Pr);
9827 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
9829 if(SiS_IsNotM650orLater(SiS_Pr)) {
9831 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9835 /* if(SiS_Pr->SiS_VBType & VB_SIS302LV) */
9846 if(SiS_Pr->SiS_VBType & (VB_SIS302LV | VB_SIS302ELV))
9851 } else if(SiS_Pr->SiS_UseROM &&
9852 (!(SiS_Pr->SiS_ROMNew)) &&
9853 (SiS_Pr->SiS_LCDResInfo != Panel_1280x1024) &&
9854 (SiS_Pr->SiS_LCDResInfo != Panel_1280x768) &&
9855 (SiS_Pr->SiS_LCDResInfo != Panel_1280x960) &&
9856 (SiS_Pr->SiS_LCDResInfo != Panel_1600x1200) &&
9857 ((romptr = GetLCDromptr(SiS_Pr)))) {
9863 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
9871 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
9873 else if(SiS_Pr->ChipType <= SIS_315PRO) delay = SiS310_LCDDelayCompensation_3xx301LV[myindex];
9875 } else if(SiS_Pr->SiS_VBType & VB_SIS301C) {
9878 if(SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) delay = 0x00; /* experience */
9879 } else if(SiS_Pr->SiS_VBType & VB_SIS30xB) {
9888 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
9889 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0x0F,((delay << 4) & 0xf0));
9893 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) { /* ------------ TV */
9895 index = GetTVPtrIndex(SiS_Pr);
9897 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
9899 if(SiS_IsNotM650orLater(SiS_Pr)) {
9901 if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9905 /* if(SiS_Pr->SiS_VBType & VB_SIS302LV) */
9918 switch(SiS_Pr->SiS_CustomT) {
9933 if(SiS_Pr->SiS_VBType & VB_SIS302LV) {
9939 } else if((SiS_Pr->SiS_UseROM) && (!(SiS_Pr->SiS_ROMNew))) {
9941 romptr = GetTVromptr(SiS_Pr);
9945 } else if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
9952 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
9958 if(SiS_Pr->SiS_VBType & VB_SIS301C) delay = 0x02;
9964 if(SiS_LCDAEnabled(SiS_Pr)) {
9973 if(SiS_Pr->SiS_VBType & VB_SISVB) {
9975 if(IS_SIS650 && (SiS_Pr->SiS_VBType & VB_SISLVDS) && dochiptest) {
9977 temp = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0xf0) >> 4;
9987 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x2D,delay);
9991 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
9997 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
9998 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
10000 if(IS_SIS650 && (SiS_Pr->SiS_IF_DEF_CH70xx != 0)) {
10002 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0x0F,delay);
10004 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2D,0xF0,delay);
10013 SetAntiFlicker(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10015 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10018 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p|TVSetYPbPr525p)) return;
10021 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVFlickerIndex;
10023 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVFlickerIndex;
10025 temp = GetTVPtrIndex(SiS_Pr);
10029 if(SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
10030 if(SiS_Pr->ChipType >= SIS_661) {
10031 temp1 = GetOEMTVPtr661(SiS_Pr);
10034 if(SiS_Pr->ChipType >= SIS_760) {
10037 } else if(SiS_Pr->ChipType >= SIS_330) {
10052 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0A,0x8f,temp); /* index 0A D[6:4] */
10056 SetEdgeEnhance(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10058 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10061 temp = temp1 = GetTVPtrIndex(SiS_Pr) >> 1; /* 0: NTSC/YPbPr, 1: PAL, 2: HiTV */
10064 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVEdgeIndex;
10066 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVEdgeIndex;
10068 if(SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {
10069 if(SiS_Pr->ChipType >= SIS_661) {
10071 if(SiS_Pr->ChipType >= SIS_760) {
10074 temp1 = GetOEMTVPtr661(SiS_Pr);
10076 } else if(SiS_Pr->ChipType >= SIS_330) {
10090 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x3A,0x1F,temp); /* index 0A D[7:5] */
10094 SetYFilter(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10099 index = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].VB_StTVYFilterIndex;
10101 index = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].VB_ExtTVYFilterIndex;
10104 temp = GetTVPtrIndex(SiS_Pr) >> 1; /* 0: NTSC/YPbPr, 1: PAL, 2: HiTV */
10106 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) temp = 1; /* NTSC-J uses PAL */
10107 else if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 3; /* PAL-M */
10108 else if(SiS_Pr->SiS_TVMode & TVSetPALN) temp = 4; /* PAL-N */
10109 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) temp = 1; /* HiVision uses PAL */
10111 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10113 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter2[temp][index][j]);
10116 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter2[temp][index][j]);
10120 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVYFilter1[temp][index][j]);
10126 SetPhaseIncr(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10128 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10132 if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) return;
10135 if(SiS_Pr->SiS_TVMode & TVSetNTSCJ) return;
10137 if((SiS_Pr->ChipType >= SIS_661) || SiS_Pr->SiS_ROMNew) {
10138 lindex = GetOEMTVPtr661_2_OLD(SiS_Pr) & 0xffff;
10141 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS_TVPhase[lindex + j]);
10147 if(SiS_Pr->SiS_TVMode & (TVSetPALM | TVSetPALN)) return;
10150 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
10152 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
10155 temp = GetTVPtrIndex(SiS_Pr);
10159 if(SiS_Pr->SiS_UseROM) {
10161 if(SiS_Pr->ChipType >= SIS_330) {
10164 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10166 if(SiS_Pr->ChipType >= SIS_330) {
10169 if((SiS_Pr->SiS_VBInfo & SetInSlaveMode) && (!(SiS_Pr->SiS_TVMode & TVSetTVSimuMode))) {
10171 if(SiS_Pr->ChipType >= SIS_330) {
10180 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
10186 if(!(SiS_Pr->SiS_VBType & VB_SIS30xBLV))
10187 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr1[temp][index][j]);
10188 else if((!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) || (SiS_Pr->SiS_TVMode & TVSetTVSimuMode))
10189 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr2[temp][index][j]);
10191 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS310_TVPhaseIncr1[temp][index][j]);
10195 if((SiS_Pr->SiS_VBType & VB_SIS30xBLV) && (!(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision))) {
10196 if((!(SiS_Pr->SiS_TVMode & (TVSetPAL | TVSetYPbPr525p | TVSetYPbPr750p))) && (ModeNo > 0x13)) {
10199 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x31,0x21);
10200 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x32,0xf0);
10201 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x33,0xf5);
10202 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x34,0x7f);
10204 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x31,0x1e);
10205 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x32,0x8b);
10206 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x33,0xfb);
10207 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x34,0x7b);
10214 SetDelayComp661(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10218 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10220 if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToTV | SetCRT2ToLCD | SetCRT2ToLCDA | SetCRT2ToRAMDAC)))
10226 if(SiS_Pr->SiS_ROMNew) {
10227 if((SiS_Pr->SiS_VBInfo & SetCRT2ToRAMDAC) ||
10228 ((SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) &&
10229 (SiS_Pr->SiS_LCDInfo & LCDPass11))) {
10231 if(SiS_Pr->UseCustomMode) {
10232 index = SiS_Pr->CSRClock;
10234 index = SiS_GetVCLK2Ptr(SiS_Pr,ModeNo,ModeIdIndex,RTI);
10235 index = SiS_Pr->SiS_VCLKData[index].CLOCK;
10239 if((ROMAddr[0x5b] & 0x80) || (SiS_Pr->SiS_VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToLCD))) {
10244 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToRAMDAC | SetCRT2ToLCD)) {
10245 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((delay >> 1) & 0x0f));
10246 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((delay & 0x01) << 7));
10248 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((delay << 3) & 0xf0));
10249 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((delay & 0x01) << 6));
10257 if(SiS_Pr->UseCustomMode) delay = 0x04;
10259 else delay = (SiS_Pr->SiS_RefIndex[RTI].Ext_PDC >> 4);
10262 if(SiS_Pr->ChipType >= XGI_20) {
10265 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10268 if(SiS_Pr->SiS_XGIROM) {
10269 index = GetTVPtrIndex(SiS_Pr);
10276 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {
10277 if(SiS_Pr->ChipType == XGI_40 && SiS_Pr->ChipRevision == 0x02) {
10283 } else if(SiS_Pr->ChipType >= SIS_340) {
10286 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10291 } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10295 index = GetOEMTVPtr661(SiS_Pr);
10296 if(SiS_Pr->SiS_ROMNew) {
10298 if(SiS_Pr->SiS_VBType & VB_UMC) romptr += 12;
10305 } else if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10309 if( (SiS_Pr->SiS_LCDResInfo != Panel_Custom) &&
10310 ((romptr = GetLCDStructPtr661_2(SiS_Pr))) ) {
10312 lcdpdcindex = (SiS_Pr->SiS_VBType & VB_UMC) ? 14 : 12;
10322 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
10323 switch(SiS_Pr->SiS_LCDResInfo) {
10336 if((SiS_Pr->PanelXRes <= 1024) && (SiS_Pr->PanelYRes <= 768)) {
10338 } else if((SiS_Pr->PanelXRes == 1280) && (SiS_Pr->PanelYRes == 1024)) {
10340 } else if((SiS_Pr->PanelXRes <= 1400) && (SiS_Pr->PanelYRes <= 1050)) {
10342 } else if((SiS_Pr->PanelXRes <= 1600) && (SiS_Pr->PanelYRes <= 1200)) {
10352 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) && (SiS_Pr->PDC != -1)) {
10353 delay = SiS_Pr->PDC & 0x1f;
10355 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) && (SiS_Pr->PDCA != -1)) {
10356 delay = (SiS_Pr->PDCA & 0x1f) << 8;
10363 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10365 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0x0f,((delay << 3) & 0xf0));
10366 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x20,0xbf,((delay & 0x01) << 6));
10368 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x2d,0xf0,((delay >> 1) & 0x0f));
10369 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,0x7f,((delay & 0x01) << 7));
10374 SetCRT2SyncDither661(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short RTI)
10379 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10382 infoflag = SiS_GetRegByte(SiS_Pr->SiS_P3ca+2);
10383 } else if(SiS_Pr->UseCustomMode) {
10384 infoflag = SiS_Pr->CInfoFlag;
10386 infoflag = SiS_Pr->SiS_RefIndex[RTI].Ext_InfoFlag;
10389 if(!(SiS_Pr->SiS_LCDInfo & LCDPass11)) {
10390 infoflag = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37); /* No longer check D5 */
10395 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
10397 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
10399 if(SiS_Pr->SiS_ModeType >= Mode24Bpp) temp |= 0x10;
10401 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x1a,0xe0,temp);
10404 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) temp = 0x20;
10406 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0f,temp);
10408 if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {
10409 if(SiS_Pr->SiS_ModeType >= Mode24Bpp) temp |= 0x80;
10411 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1a,0x7f,temp);
10418 SetPanelParms661(struct SiS_Private *SiS_Pr)
10420 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10423 if(SiS_Pr->SiS_VBType & (VB_SISLVDS | VB_SIS30xC)) {
10424 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x24,0x0f);
10427 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10428 if(SiS_Pr->LVDSHL != -1) {
10429 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,SiS_Pr->LVDSHL);
10433 if(SiS_Pr->SiS_ROMNew) {
10435 if((romptr = GetLCDStructPtr661_2(SiS_Pr))) {
10436 if(SiS_Pr->SiS_VBType & VB_SISLVDS) {
10439 if(SiS_Pr->LVDSHL != -1) {
10443 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,temp2,temp1);
10445 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
10447 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x0d,0xbf,temp1);
10455 SiS_OEM310Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RRTI)
10457 if((SiS_Pr->SiS_ROMNew) && (SiS_Pr->SiS_VBType & VB_SISLVDS)) {
10458 SetDelayComp661(SiS_Pr, ModeNo, ModeIdIndex, RRTI);
10459 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10460 SetCRT2SyncDither661(SiS_Pr, ModeNo, RRTI);
10461 SetPanelParms661(SiS_Pr);
10464 SetDelayComp(SiS_Pr,ModeNo);
10467 if((SiS_Pr->SiS_VBType & VB_SISVB) && (SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) {
10468 SetAntiFlicker(SiS_Pr,ModeNo,ModeIdIndex);
10469 SetPhaseIncr(SiS_Pr,ModeNo,ModeIdIndex);
10470 SetYFilter(SiS_Pr,ModeNo,ModeIdIndex);
10471 if(SiS_Pr->SiS_VBType & VB_SIS301) {
10472 SetEdgeEnhance(SiS_Pr,ModeNo,ModeIdIndex);
10478 SiS_OEM661Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo,
10481 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10483 SetDelayComp661(SiS_Pr, ModeNo, ModeIdIndex, RRTI);
10485 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10486 SetCRT2SyncDither661(SiS_Pr, ModeNo, RRTI);
10487 SetPanelParms661(SiS_Pr);
10490 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
10491 SetPhaseIncr(SiS_Pr, ModeNo, ModeIdIndex);
10492 SetYFilter(SiS_Pr, ModeNo, ModeIdIndex);
10493 SetAntiFlicker(SiS_Pr, ModeNo, ModeIdIndex);
10494 if(SiS_Pr->SiS_VBType & VB_SIS301) {
10495 SetEdgeEnhance(SiS_Pr, ModeNo, ModeIdIndex);
10509 SiS_FinalizeLCD(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10514 if(!(SiS_Pr->SiS_VBType & VB_SISLVDS)) return;
10515 if(SiS_Pr->SiS_ROMNew) return;
10517 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10518 if(SiS_Pr->LVDSHL != -1) {
10519 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,SiS_Pr->LVDSHL);
10523 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) return;
10524 if(SiS_Pr->UseCustomMode) return;
10526 switch(SiS_Pr->SiS_CustomT) {
10535 resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;
10536 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
10538 resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;
10539 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
10543 if(!(SiS_GetReg(SiS_Pr->SiS_P3d4, 0x5f) & 0xf0)) {
10544 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) {
10545 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x02);
10547 SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x1e,0x03);
10552 if(SiS_Pr->SiS_CustomT == CUT_CLEVO1024) {
10553 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10555 if(SiS_Pr->LVDSHL == -1) {
10556 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10562 if(SiS_Pr->SiS_CustomT == CUT_CLEVO10242) {
10563 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10564 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10565 if(SiS_Pr->LVDSHL == -1) {
10567 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10569 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10570 tempch = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
10572 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10573 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x25);
10574 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x00);
10575 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
10583 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA)) {
10584 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10585 if(SiS_Pr->SiS_VBType & VB_SISEMI) {
10586 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x2a,0x00);
10588 SiS_SetRegAND(SiS_Pr->SiS_Part4Port,0x30,0x0c);
10590 SiS_SetReg(SiS_Pr->SiS_Part4Port,0x34,0x10);
10592 } else if(SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) {
10593 if(SiS_Pr->LVDSHL == -1) {
10595 SiS_SetRegANDOR(SiS_Pr->SiS_Part4Port,0x24,0xfc,0x01);
10598 tempch = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) >> 4;
10599 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {
10600 if(SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) {
10601 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1f,0x76);
10602 } else if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10604 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10605 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x25);
10606 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x00);
10607 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x1b);
10609 if(SiS_Pr->Backup && (SiS_Pr->Backup_Mode == ModeNo)) {
10610 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,SiS_Pr->Backup_14);
10611 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,SiS_Pr->Backup_15);
10612 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,SiS_Pr->Backup_16);
10613 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,SiS_Pr->Backup_17);
10614 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,SiS_Pr->Backup_18);
10615 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,SiS_Pr->Backup_19);
10616 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1a,SiS_Pr->Backup_1a);
10617 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,SiS_Pr->Backup_1b);
10618 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,SiS_Pr->Backup_1c);
10619 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,SiS_Pr->Backup_1d);
10620 } else if(!(SiS_Pr->SiS_LCDInfo & DontExpandLCD)) { /* 1.10.8w */
10621 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,0x90);
10623 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x11);
10625 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x18);
10628 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02);
10630 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x02); /* 1.10.7u */
10634 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x70);
10635 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xff);
10636 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x48);
10637 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x12);
10640 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x14,0x20);
10641 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x15,0x1a);
10642 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x16,0x28);
10643 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x17,0x00);
10644 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x4c);
10645 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xdc);
10649 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x95);
10650 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x19,0xdc);
10651 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1a,0x10);
10652 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x95);
10653 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1c,0x48);
10654 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1d,0x12);
10657 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,0x95);
10658 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x48);
10661 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x1b,0x95);
10669 tempcl = tempbh = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x01);
10673 tempbl = SiS_GetReg(SiS_Pr->SiS_Part2Port,0x04);
10675 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10676 if((resinfo == SIS_RI_1024x768) || (!(SiS_Pr->SiS_LCDInfo & DontExpandLCD))) {
10677 if(SiS_Pr->SiS_SetFlag & LCDVESATiming) {
10681 if(SiS_Pr->SiS_VGAVDE < 600) {
10682 tempax = 768 - SiS_Pr->SiS_VGAVDE;
10684 if(SiS_Pr->SiS_VGAVDE <= 480) tempax >>= 4; /* 1.10.7w; 1.10.6s: < 480; >>=1; */
10691 SiS_SetReg(SiS_Pr->SiS_Part2Port,0x04,temp);
10693 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x01,0x80,temp);
10705 SetOEMLCDData2(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex,
10713 modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;
10714 crt2crtc = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;
10716 modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;
10717 crt2crtc = SiS_Pr->SiS_RefIndex[RefTabIndex].Ext_CRT2CRTC;
10722 if(SiS_Pr->SiS_CustomT == CUT_BARCO1024) {
10723 SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x13,0xdf);
10726 if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {
10729 if(SiS_Pr->SiS_SetFlag & LowModeTests) {
10732 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,
10739 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x00);
10741 temp = SiS_GetReg(SiS_Pr->SiS_Part1Port,0x18);
10743 SiS_SetReg(SiS_Pr->SiS_Part1Port,0x18,temp);
10749 GetOEMLCDPtr(struct SiS_Private *SiS_Pr, int Flag)
10751 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10762 if(SiS_Pr->ChipType == SIS_300) {
10764 tempbx = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36) & 0x0f;
10765 if(SiS_Pr->SiS_VBType & VB_SIS301) tempbx &= 0x07;
10767 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx += 4;
10768 if(SiS_Pr->SiS_LCDResInfo == Panel_1024x768) {
10769 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx += 3;
10771 if(SiS_Pr->SiS_UseROM) {
10773 tempbx = SiS_Pr->SiS_LCDTypeInfo;
10776 if(romptr) tempbx = ROMAddr[romptr + SiS_Pr->SiS_LCDTypeInfo];
10777 else tempbx = customtable300[SiS_Pr->SiS_LCDTypeInfo];
10781 if(!(SiS_Pr->SiS_SetFlag & LCDVESATiming)) tempbx++;
10788 if(SiS_Pr->SiS_UseROM) {
10790 if(romptr) tempbx = ROMAddr[romptr + SiS_Pr->SiS_LCDTypeInfo];
10793 tempbx = customtable630[SiS_Pr->SiS_LCDTypeInfo];
10797 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempbx += 2;
10798 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
10801 tempbx = SiS_Pr->SiS_LCDTypeInfo << 2;
10802 if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) tempbx += 2;
10803 if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) tempbx++;
10811 SetOEMLCDDelay(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10813 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10816 if(SiS_Pr->SiS_LCDResInfo == Panel_Custom) return;
10818 if(SiS_Pr->SiS_UseROM) {
10831 if(SiS_Pr->PDC != -1) return;
10833 temp = GetOEMLCDPtr(SiS_Pr, 0);
10835 if(SiS_Pr->UseCustomMode)
10838 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_LCDDelayIndex;
10840 if(SiS_Pr->ChipType != SIS_300) {
10847 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10854 if(SiS_Pr->SiS_UseROM && (ROMAddr[0x235] & 0x80)) {
10864 if(SiS_Pr->SiS_UseROM) {
10880 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp); /* index 0A D[6:4] */
10884 SetOEMLCDData(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10889 GetOEMTVPtr(struct SiS_Private *SiS_Pr)
10894 if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) index += 4;
10895 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10896 if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) index += 2;
10897 else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) index += 3;
10898 else if(SiS_Pr->SiS_TVMode & TVSetPAL) index += 1;
10900 if(SiS_Pr->SiS_TVMode & TVSetCHOverScan) index += 2;
10901 if(SiS_Pr->SiS_TVMode & TVSetPAL) index += 1;
10907 SetOEMTVDelay(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10909 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10912 if(SiS_Pr->SiS_UseROM) {
10918 temp = GetOEMTVPtr(SiS_Pr);
10920 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVDelayIndex;
10928 if(SiS_Pr->SiS_VBType & VB_SISVB) {
10935 SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,~0x3C,temp);
10939 SetOEMAntiFlicker(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
10941 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10944 if(SiS_Pr->SiS_UseROM) {
10950 temp = GetOEMTVPtr(SiS_Pr);
10952 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVFlickerIndex;
10963 SiS_SetRegANDOR(SiS_Pr->SiS_Part2Port,0x0A,0x8F,temp);
10967 SetOEMPhaseIncr(struct SiS_Private *SiS_Pr, unsigned short ModeNo,unsigned short ModeIdIndex)
10969 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
10972 if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) return;
10974 if(SiS_Pr->SiS_TVMode & (TVSetNTSC1024 | TVSetNTSCJ | TVSetPALM | TVSetPALN)) return;
10976 if(SiS_Pr->SiS_UseROM) {
10982 temp = GetOEMTVPtr(SiS_Pr);
10984 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVPhaseIndex;
10986 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
10988 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Phase2[temp][index][j]);
10996 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
11000 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Phase1[temp][index][j]);
11007 SetOEMYFilter(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex)
11009 unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;
11012 if(SiS_Pr->SiS_VBInfo & (SetCRT2ToSCART | SetCRT2ToHiVision | SetCRT2ToYPbPr525750)) return;
11014 if(SiS_Pr->SiS_UseROM) {
11020 temp = GetOEMTVPtr(SiS_Pr);
11022 if(SiS_Pr->SiS_TVMode & TVSetPALM) temp = 8;
11023 else if(SiS_Pr->SiS_TVMode & TVSetPALN) temp = 9;
11026 index = SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].VB_TVYFilterIndex;
11028 if(SiS_Pr->SiS_VBType & VB_SIS30xBLV) {
11030 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter2[temp][index][j]);
11033 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter2[temp][index][j]);
11036 if((romptr) && (!(SiS_Pr->SiS_TVMode & (TVSetPALM|TVSetPALN)))) {
11041 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,ROMAddr[romptr + j]);
11045 SiS_SetReg(SiS_Pr->SiS_Part2Port,i,SiS300_Filter1[temp][index][j]);
11052 SiS_SearchVBModeID(struct SiS_Private *SiS_Pr, unsigned short *ModeNo)
11055 unsigned char VGAINFO = SiS_Pr->SiS_VGAINFO;
11060 if(SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].ModeID == *ModeNo) break;
11061 if(SiS_Pr->SiS_VBModeIDTable[ModeIdIndex].ModeID == 0xFF) return 0;
11076 SiS_OEM300Setting(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex,
11081 if(!SiS_Pr->UseCustomMode) {
11082 OEMModeIdIndex = SiS_SearchVBModeID(SiS_Pr,&ModeNo);
11086 if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) {
11087 SetOEMLCDDelay(SiS_Pr, ModeNo, OEMModeIdIndex);
11088 if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {
11089 SetOEMLCDData(SiS_Pr, ModeNo, OEMModeIdIndex);
11092 if(SiS_Pr->UseCustomMode) return;
11093 if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {
11094 SetOEMTVDelay(SiS_Pr, ModeNo,OEMModeIdIndex);
11095 if(SiS_Pr->SiS_VBType & VB_SISVB) {
11096 SetOEMAntiFlicker(SiS_Pr, ModeNo, OEMModeIdIndex);
11097 SetOEMPhaseIncr(SiS_Pr, ModeNo, OEMModeIdIndex);
11098 SetOEMYFilter(SiS_Pr, ModeNo, OEMModeIdIndex);