• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/staging/xgifb/

Lines Matching defs:pVBInfo

23 unsigned char  XGI_IsLCDDualLink(struct vb_device_info *pVBInfo);
26 struct vb_device_info *pVBInfo);
27 unsigned char XGI_BacklightByDrv(struct vb_device_info *pVBInfo);
29 unsigned char XGI_IsLCDON(struct vb_device_info *pVBInfo);
30 unsigned char XGI_DisableChISLCD(struct vb_device_info *pVBInfo);
31 unsigned char XGI_EnableChISLCD(struct vb_device_info *pVBInfo);
35 unsigned short *i, struct vb_device_info *pVBInfo);
38 struct vb_device_info *pVBInfo);
41 struct vb_device_info *pVBInfo);
44 unsigned char XGI_BridgeIsOn(struct vb_device_info *pVBInfo);
47 struct vb_device_info *pVBInfo);
52 struct vb_device_info *pVBInfo);
56 struct vb_device_info *pVBInfo);
59 struct vb_device_info *pVBInfo);
62 struct vb_device_info *pVBInfo);
63 unsigned short XGI_GetVGAHT2(struct vb_device_info *pVBInfo);
68 struct vb_device_info *pVBInfo);
69 void XGI_VBLongWait(struct vb_device_info *pVBInfo);
70 void XGI_SaveCRT2Info(unsigned short ModeNo, struct vb_device_info *pVBInfo);
71 void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
72 void XGI_GetCRT2ResInfo(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
73 void XGI_PreSetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
74 void XGI_SetGroup1(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
75 void XGI_SetLockRegs(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
76 void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
77 void XGI_SetGroup2(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
78 void XGI_SetGroup3(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
79 void XGI_SetGroup4(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
80 void XGI_SetGroup5(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
81 void *XGI_GetLcdPtr(unsigned short BX, unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
82 void *XGI_GetTVPtr(unsigned short BX, unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
83 void XGI_FirePWDEnable(struct vb_device_info *pVBInfo);
84 void XGI_EnableGatingCRT(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
85 void XGI_DisableGatingCRT(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
86 void XGI_SetPanelDelay(unsigned short tempbl, struct vb_device_info *pVBInfo);
87 void XGI_SetPanelPower(unsigned short tempah, unsigned short tempbl, struct vb_device_info *pVBInfo);
88 void XGI_EnablePWD(struct vb_device_info *pVBInfo);
89 void XGI_DisablePWD(struct vb_device_info *pVBInfo);
90 void XGI_AutoThreshold(struct vb_device_info *pVBInfo);
91 void XGI_SetTap4Regs(struct vb_device_info *pVBInfo);
93 void XGI_DisplayOn(struct xgi_hw_device_info *, struct vb_device_info *pVBInfo);
94 void XGI_DisplayOff(struct xgi_hw_device_info *, struct vb_device_info *pVBInfo);
95 void XGI_SetCRT1Group(struct xgi_hw_device_info *HwDeviceExtension, unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
96 void XGI_SetXG21CRTC(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
97 void XGI_SetXG21LCD(struct vb_device_info *pVBInfo, unsigned short RefreshRateTableIndex, unsigned short ModeNo);
98 void XGI_SetXG27CRTC(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
99 void XGI_SetXG27LCD(struct vb_device_info *pVBInfo, unsigned short RefreshRateTableIndex, unsigned short ModeNo);
100 void XGI_UpdateXG21CRTC(unsigned short ModeNo, struct vb_device_info *pVBInfo, unsigned short RefreshRateTableIndex);
101 void XGI_WaitDisply(struct vb_device_info *pVBInfo);
102 void XGI_SenseCRT1(struct vb_device_info *pVBInfo);
103 void XGI_SetSeqRegs(unsigned short ModeNo, unsigned short StandTableIndex, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
104 void XGI_SetMiscRegs(unsigned short StandTableIndex, struct vb_device_info *pVBInfo);
105 void XGI_SetCRTCRegs(struct xgi_hw_device_info *HwDeviceExtension, unsigned short StandTableIndex, struct vb_device_info *pVBInfo);
106 void XGI_SetATTRegs(unsigned short ModeNo, unsigned short StandTableIndex, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
107 void XGI_SetGRCRegs(unsigned short StandTableIndex, struct vb_device_info *pVBInfo);
108 void XGI_ClearExt1Regs(struct vb_device_info *pVBInfo);
110 void XGI_SetSync(unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
111 void XGI_SetCRT1CRTC(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo, struct xgi_hw_device_info *HwDeviceExtension);
112 void XGI_SetCRT1Timing_H(struct vb_device_info *pVBInfo, struct xgi_hw_device_info *HwDeviceExtension);
113 void XGI_SetCRT1Timing_V(unsigned short ModeIdIndex, unsigned short ModeNo, struct vb_device_info *pVBInfo);
114 void XGI_SetCRT1DE(struct xgi_hw_device_info *HwDeviceExtension, unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
115 void XGI_SetCRT1VCLK(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
116 void XGI_SetCRT1FIFO(unsigned short ModeNo, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
117 void XGI_SetCRT1ModeRegs(struct xgi_hw_device_info *HwDeviceExtension, unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
118 void XGI_SetVCLKState(struct xgi_hw_device_info *HwDeviceExtension, unsigned short ModeNo, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
120 void XGI_LoadDAC(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
121 void XGI_WriteDAC(unsigned short dl, unsigned short ah, unsigned short al, unsigned short dh, struct vb_device_info *pVBInfo);
122 /*void XGI_ClearBuffer(struct xgi_hw_device_info *HwDeviceExtension, unsigned short ModeNo, struct vb_device_info *pVBInfo);*/
123 void XGI_SetLCDAGroup(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
125 struct vb_device_info *pVBInfo);
126 void XGI_GetLVDSData(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
130 struct vb_device_info *pVBInfo);
131 void XGI_SetLVDSRegs(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
132 void XGI_UpdateModeInfo(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
133 void XGI_GetVGAType(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
134 void XGI_GetVBType(struct vb_device_info *pVBInfo);
135 void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
136 void XGI_GetTVInfo(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
137 void XGI_SetCRT2ECLK(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
138 void InitTo330Pointer(unsigned char, struct vb_device_info *pVBInfo);
139 void XGI_GetLCDSync(unsigned short *HSyncWidth, unsigned short *VSyncWidth, struct vb_device_info *pVBInfo);
140 void XGI_DisableBridge(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
141 void XGI_EnableBridge(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
142 void XGI_SetCRT2VCLK(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
143 void XGI_OEM310Setting(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
144 void XGI_SetDelayComp(struct vb_device_info *pVBInfo);
145 void XGI_SetLCDCap(struct vb_device_info *pVBInfo);
146 void XGI_SetLCDCap_A(unsigned short tempcx, struct vb_device_info *pVBInfo);
147 void XGI_SetLCDCap_B(unsigned short tempcx, struct vb_device_info *pVBInfo);
148 void SetSpectrum(struct vb_device_info *pVBInfo);
149 void XGI_SetAntiFlicker(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
150 void XGI_SetEdgeEnhance(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
151 void XGI_SetPhaseIncr(struct vb_device_info *pVBInfo);
152 void XGI_SetYFilter(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
154 unsigned char *tempch, struct vb_device_info *pVBInfo);
155 unsigned short XGI_GetTVPtrIndex(struct vb_device_info *pVBInfo);
156 void XGI_SetCRT2ModeRegs(unsigned short ModeNo, struct xgi_hw_device_info *, struct vb_device_info *pVBInfo);
157 void XGI_CloseCRTC(struct xgi_hw_device_info *, struct vb_device_info *pVBInfo);
158 void XGI_OpenCRTC(struct xgi_hw_device_info *, struct vb_device_info *pVBInfo);
159 void XGI_GetRAMDAC2DATA(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo);
160 void XGI_UnLockCRT2(struct xgi_hw_device_info *, struct vb_device_info *pVBInfo);
161 void XGI_LockCRT2(struct xgi_hw_device_info *, struct vb_device_info *pVBInfo);
162 void XGINew_EnableCRT2(struct vb_device_info *pVBInfo);
163 void XGINew_LCD_Wait_Time(unsigned char DelayTime, struct vb_device_info *pVBInfo);
164 void XGI_LongWait(struct vb_device_info *pVBInfo);
165 void XGI_SetCRT1Offset(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo);
167 struct vb_device_info *pVBInfo);
171 struct vb_device_info *pVBInfo);
173 unsigned char *di_1, struct vb_device_info *pVBInfo);
174 unsigned short XGI_GetLCDCapPtr(struct vb_device_info *pVBInfo);
175 unsigned short XGI_GetLCDCapPtr1(struct vb_device_info *pVBInfo);
176 struct XGI301C_Tap4TimingStruct *XGI_GetTap4Ptr(unsigned short tempcx, struct vb_device_info *pVBInfo);
177 void XGI_SetXG21FPBits(struct vb_device_info *pVBInfo);
178 void XGI_SetXG27FPBits(struct vb_device_info *pVBInfo);
179 unsigned char XGI_XG21GetPSCValue(struct vb_device_info *pVBInfo);
180 unsigned char XGI_XG27GetPSCValue(struct vb_device_info *pVBInfo);
181 void XGI_XG21BLSignalVDD(unsigned short tempbh, unsigned short tempbl, struct vb_device_info *pVBInfo);
182 void XGI_XG27BLSignalVDD(unsigned short tempbh, unsigned short tempbl, struct vb_device_info *pVBInfo);
183 void XGI_XG21SetPanelDelay(unsigned short tempbl, struct vb_device_info *pVBInfo);
184 unsigned char XGI_XG21CheckLVDSMode(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
185 void XGI_SetXG21LVDSPara(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
186 void XGI_SetXG27LVDSPara(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo);
187 unsigned char XGI_SetDefaultVCLK(struct vb_device_info *pVBInfo);
189 extern void ReadVBIOSTablData(unsigned char ChipType, struct vb_device_info *pVBInfo);
243 void InitTo330Pointer(unsigned char ChipType, struct vb_device_info *pVBInfo)
245 pVBInfo->SModeIDTable = (struct XGI_StStruct *) XGI330_SModeIDTable ;
246 pVBInfo->StandTable = (struct XGI_StandTableStruct *) XGI330_StandTable ;
247 pVBInfo->EModeIDTable = (struct XGI_ExtStruct *) XGI330_EModeIDTable ;
248 pVBInfo->RefIndex = (struct XGI_Ext2Struct *) XGI330_RefIndex ;
249 pVBInfo->XGINEWUB_CRT1Table = (struct XGI_CRT1TableStruct *) XGI_CRT1Table ;
258 pVBInfo->MCLKData = (struct XGI_MCLKDataStruct *) XGI340New_MCLKData;
259 pVBInfo->ECLKData = (struct XGI_ECLKDataStruct *) XGI340_ECLKData;
263 pVBInfo->MCLKData = (struct XGI_MCLKDataStruct *) XGI330New_MCLKData;
264 pVBInfo->ECLKData = (struct XGI_ECLKDataStruct *) XGI330_ECLKData;
267 pVBInfo->VCLKData = (struct XGI_VCLKDataStruct *) XGI_VCLKData ;
268 pVBInfo->VBVCLKData = (struct XGI_VBVCLKDataStruct *) XGI_VBVCLKData ;
269 pVBInfo->ScreenOffset = XGI330_ScreenOffset ;
270 pVBInfo->StResInfo = (struct XGI_StResInfoStruct *) XGI330_StResInfo ;
271 pVBInfo->ModeResInfo = (struct XGI_ModeResInfoStruct *) XGI330_ModeResInfo ;
273 pVBInfo->pOutputSelect = &XGI330_OutputSelect ;
274 pVBInfo->pSoftSetting = &XGI330_SoftSetting ;
275 pVBInfo->pSR07 = &XGI330_SR07 ;
276 pVBInfo->LCDResInfo = 0 ;
277 pVBInfo->LCDTypeInfo = 0 ;
278 pVBInfo->LCDInfo = 0 ;
279 pVBInfo->VBInfo = 0 ;
280 pVBInfo->TVInfo = 0;
283 pVBInfo->SR15 = XGI340_SR13 ;
284 pVBInfo->CR40 = XGI340_cr41 ;
285 pVBInfo->SR25 = XGI330_sr25 ;
286 pVBInfo->pSR31 = &XGI330_sr31 ;
287 pVBInfo->pSR32 = &XGI330_sr32 ;
288 pVBInfo->CR6B = XGI340_CR6B ;
289 pVBInfo->CR6E = XGI340_CR6E ;
290 pVBInfo->CR6F = XGI340_CR6F ;
291 pVBInfo->CR89 = XGI340_CR89 ;
292 pVBInfo->AGPReg = XGI340_AGPReg ;
293 pVBInfo->SR16 = XGI340_SR16 ;
294 pVBInfo->pCRCF = &XG40_CRCF ;
295 pVBInfo->pXGINew_DRAMTypeDefinition = &XG40_DRAMTypeDefinition ;
298 pVBInfo->CR49 = XGI330_CR49 ;
299 pVBInfo->pSR1F = &XGI330_SR1F ;
300 pVBInfo->pSR21 = &XGI330_SR21 ;
301 pVBInfo->pSR22 = &XGI330_SR22 ;
302 pVBInfo->pSR23 = &XGI330_SR23 ;
303 pVBInfo->pSR24 = &XGI330_SR24 ;
304 pVBInfo->pSR33 = &XGI330_SR33 ;
308 pVBInfo->pCRT2Data_1_2 = &XGI330_CRT2Data_1_2 ;
309 pVBInfo->pCRT2Data_4_D = &XGI330_CRT2Data_4_D ;
310 pVBInfo->pCRT2Data_4_E = &XGI330_CRT2Data_4_E ;
311 pVBInfo->pCRT2Data_4_10 = &XGI330_CRT2Data_4_10 ;
312 pVBInfo->pRGBSenseData = &XGI330_RGBSenseData ;
313 pVBInfo->pVideoSenseData = &XGI330_VideoSenseData ;
314 pVBInfo->pYCSenseData = &XGI330_YCSenseData ;
315 pVBInfo->pRGBSenseData2 = &XGI330_RGBSenseData2 ;
316 pVBInfo->pVideoSenseData2 = &XGI330_VideoSenseData2 ;
317 pVBInfo->pYCSenseData2 = &XGI330_YCSenseData2 ;
319 pVBInfo->NTSCTiming = XGI330_NTSCTiming ;
320 pVBInfo->PALTiming = XGI330_PALTiming ;
321 pVBInfo->HiTVExtTiming = XGI330_HiTVExtTiming ;
322 pVBInfo->HiTVSt1Timing = XGI330_HiTVSt1Timing ;
323 pVBInfo->HiTVSt2Timing = XGI330_HiTVSt2Timing ;
324 pVBInfo->HiTVTextTiming = XGI330_HiTVTextTiming ;
325 pVBInfo->YPbPr750pTiming = XGI330_YPbPr750pTiming ;
326 pVBInfo->YPbPr525pTiming = XGI330_YPbPr525pTiming ;
327 pVBInfo->YPbPr525iTiming = XGI330_YPbPr525iTiming ;
328 pVBInfo->HiTVGroup3Data = XGI330_HiTVGroup3Data ;
329 pVBInfo->HiTVGroup3Simu = XGI330_HiTVGroup3Simu ;
330 pVBInfo->HiTVGroup3Text = XGI330_HiTVGroup3Text ;
331 pVBInfo->Ren525pGroup3 = XGI330_Ren525pGroup3 ;
332 pVBInfo->Ren750pGroup3 = XGI330_Ren750pGroup3 ;
335 pVBInfo->TimingH = (struct XGI_TimingHStruct *) XGI_TimingH ;
336 pVBInfo->TimingV = (struct XGI_TimingVStruct *) XGI_TimingV ;
337 pVBInfo->UpdateCRT1 = (struct XGI_XG21CRT1Struct *) XGI_UpdateCRT1Table ;
339 pVBInfo->CHTVVCLKUNTSC = XGI330_CHTVVCLKUNTSC ;
340 pVBInfo->CHTVVCLKONTSC = XGI330_CHTVVCLKONTSC ;
341 pVBInfo->CHTVVCLKUPAL = XGI330_CHTVVCLKUPAL ;
342 pVBInfo->CHTVVCLKOPAL = XGI330_CHTVVCLKOPAL ;
345 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
346 pVBInfo->LCDCapList = XGI_LCDDLCapList ;
348 pVBInfo->LCDCapList = XGI_LCDCapList ;
351 pVBInfo->XG21_LVDSCapList = XGI21_LCDCapList ;
353 pVBInfo->XGI_TVDelayList = XGI301TVDelayList ;
354 pVBInfo->XGI_TVDelayList2 = XGI301TVDelayList2 ;
357 pVBInfo->pXGINew_I2CDefinition = &XG40_I2CDefinition ;
360 pVBInfo->pXGINew_CR97 = &XG20_CR97 ;
364 pVBInfo->MCLKData = (struct XGI_MCLKDataStruct *) XGI27New_MCLKData;
365 pVBInfo->CR40 = XGI27_cr41 ;
366 pVBInfo->pXGINew_CR97 = &XG27_CR97 ;
367 pVBInfo->pSR36 = &XG27_SR36 ;
368 pVBInfo->pCR8F = &XG27_CR8F ;
369 pVBInfo->pCRD0 = XG27_CRD0 ;
370 pVBInfo->pCRDE = XG27_CRDE ;
371 pVBInfo->pSR40 = &XG27_SR40 ;
372 pVBInfo->pSR41 = &XG27_SR41 ;
378 pVBInfo->pDVOSetting = &XG21_DVOSetting ;
379 pVBInfo->pCR2E = &XG21_CR2E ;
380 pVBInfo->pCR2F = &XG21_CR2F ;
381 pVBInfo->pCR46 = &XG21_CR46 ;
382 pVBInfo->pCR47 = &XG21_CR47 ;
402 /* unsigned char *pVBInfo->FBAddr = HwDeviceExtension->pjVideoMemoryAddress ; */
404 struct vb_device_info *pVBInfo = &VBINF;
405 pVBInfo->ROMAddr = HwDeviceExtension->pjVirtualRomBase ;
406 pVBInfo->BaseAddr = (unsigned long)HwDeviceExtension->pjIOAddress ;
407 pVBInfo->IF_DEF_LVDS = 0 ;
408 pVBInfo->IF_DEF_CH7005 = 0 ;
409 pVBInfo->IF_DEF_LCDA = 1 ;
410 pVBInfo->IF_DEF_CH7017 = 0 ;
411 pVBInfo->IF_DEF_CH7007 = 0 ; /* [Billy] 2007/05/14 */
412 pVBInfo->IF_DEF_VideoCapture = 0 ;
413 pVBInfo->IF_DEF_ScaleLCD = 0 ;
414 pVBInfo->IF_DEF_OEMUtil = 0 ;
415 pVBInfo->IF_DEF_PWD = 0 ;
420 pVBInfo->IF_DEF_YPbPr = 0 ;
421 pVBInfo->IF_DEF_HiVision = 0 ;
422 pVBInfo->IF_DEF_CRT2Monitor = 0 ;
423 pVBInfo->VBType = 0 ; /*set VBType default 0*/
427 pVBInfo->IF_DEF_YPbPr = 1 ;
428 pVBInfo->IF_DEF_HiVision = 1 ;
429 pVBInfo->IF_DEF_CRT2Monitor = 1 ;
433 pVBInfo->IF_DEF_YPbPr = 1 ;
434 pVBInfo->IF_DEF_HiVision = 1 ;
435 pVBInfo->IF_DEF_CRT2Monitor = 0 ;
438 pVBInfo->P3c4 = pVBInfo->BaseAddr + 0x14 ;
439 pVBInfo->P3d4 = pVBInfo->BaseAddr + 0x24 ;
440 pVBInfo->P3c0 = pVBInfo->BaseAddr + 0x10 ;
441 pVBInfo->P3ce = pVBInfo->BaseAddr + 0x1e ;
442 pVBInfo->P3c2 = pVBInfo->BaseAddr + 0x12 ;
443 pVBInfo->P3cc = pVBInfo->BaseAddr + 0x1C ;
444 pVBInfo->P3ca = pVBInfo->BaseAddr + 0x1a ;
445 pVBInfo->P3c6 = pVBInfo->BaseAddr + 0x16 ;
446 pVBInfo->P3c7 = pVBInfo->BaseAddr + 0x17 ;
447 pVBInfo->P3c8 = pVBInfo->BaseAddr + 0x18 ;
448 pVBInfo->P3c9 = pVBInfo->BaseAddr + 0x19 ;
449 pVBInfo->P3da = pVBInfo->BaseAddr + 0x2A ;
450 pVBInfo->Part0Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_00 ;
451 pVBInfo->Part1Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_04 ;
452 pVBInfo->Part2Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_10 ;
453 pVBInfo->Part3Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_12 ;
454 pVBInfo->Part4Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_14 ;
455 pVBInfo->Part5Port = pVBInfo->BaseAddr + XGI_CRT2_PORT_14 + 2 ;
459 if ( ( XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) & 0xE0 ) == 0xC0 )
461 pVBInfo->IF_DEF_LVDS = 1 ;
466 if ( ( XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) & 0xE0 ) == 0xC0 )
468 if ( XGINew_GetReg1( pVBInfo->P3d4 , 0x30 ) & 0x20 )
470 pVBInfo->IF_DEF_LVDS = 1 ;
476 XGI_GetVBType( pVBInfo ) ;
478 InitTo330Pointer( HwDeviceExtension->jChipType, pVBInfo ) ;
489 XGINew_SetReg1( pVBInfo->P3c4 , 0x05 , 0x86 ) ;
492 XGI_UnLockCRT2( HwDeviceExtension , pVBInfo ) ;
494 XGI_SearchModeID( ModeNo , &ModeIdIndex, pVBInfo ) ;
496 XGI_GetVGAType(HwDeviceExtension, pVBInfo) ;
500 XGI_GetVBInfo(ModeNo , ModeIdIndex , HwDeviceExtension, pVBInfo ) ;
501 XGI_GetTVInfo(ModeNo , ModeIdIndex, pVBInfo ) ;
502 XGI_GetLCDInfo(ModeNo , ModeIdIndex, pVBInfo ) ;
503 XGI_DisableBridge( HwDeviceExtension,pVBInfo ) ;
504 /* XGI_OpenCRTC( HwDeviceExtension, pVBInfo ) ; */
506 if ( pVBInfo->VBInfo & ( SetSimuScanMode | SetCRT2ToLCDA ) )
508 XGI_SetCRT1Group(HwDeviceExtension , ModeNo , ModeIdIndex, pVBInfo ) ;
510 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
512 XGI_SetLCDAGroup(ModeNo , ModeIdIndex , HwDeviceExtension, pVBInfo ) ;
517 if ( !( pVBInfo->VBInfo & SwitchToCRT2) )
519 XGI_SetCRT1Group( HwDeviceExtension , ModeNo , ModeIdIndex, pVBInfo ) ;
520 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
522 XGI_SetLCDAGroup( ModeNo , ModeIdIndex , HwDeviceExtension, pVBInfo ) ;
527 if ( pVBInfo->VBInfo & ( SetSimuScanMode | SwitchToCRT2 ) )
532 XGI_SetCRT2Group301( ModeNo , HwDeviceExtension, pVBInfo ) ; /*add for CRT2 */
536 XGI_SetCRT2Group301(ModeNo , HwDeviceExtension, pVBInfo ) ; /*add for CRT2 */
544 XGI_SetCRT2ModeRegs( ModeNo, HwDeviceExtension,pVBInfo ) ;
545 XGI_OEM310Setting( ModeNo, ModeIdIndex,pVBInfo ) ; /*0212*/
546 XGI_CloseCRTC( HwDeviceExtension, pVBInfo ) ;
547 XGI_EnableBridge( HwDeviceExtension ,pVBInfo) ;
551 if (pVBInfo->IF_DEF_LVDS == 1)
552 if (!XGI_XG21CheckLVDSMode(ModeNo , ModeIdIndex, pVBInfo))
557 pVBInfo->ModeType = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag & ModeInfoFlag;
561 pVBInfo->ModeType = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag & ModeInfoFlag;
564 pVBInfo->SetFlag = 0 ;
565 if ( pVBInfo->IF_DEF_CH7007 != 1 )
567 pVBInfo->VBInfo = DisableCRT2Display ;
571 XGI_DisplayOff(HwDeviceExtension, pVBInfo) ;
573 XGI_SetCRT1Group(HwDeviceExtension , ModeNo , ModeIdIndex, pVBInfo ) ;
575 XGI_DisplayOn( HwDeviceExtension, pVBInfo ) ;
578 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x09 , ~0x80 , 0x80 ) ;
586 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
590 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
592 pVBInfo->ModeType = modeflag&ModeInfoFlag ;
593 pVBInfo->SetFlag = 0x00 ;
594 pVBInfo->VBInfo = DisableCRT2Display ;
595 temp = XGINew_CheckMemorySize( HwDeviceExtension , ModeNo , ModeIdIndex, pVBInfo ) ;
600 XGI_DisplayOff( HwDeviceExtension, pVBInfo) ;
601 XGI_SetCRT1Group( HwDeviceExtension , ModeNo , ModeIdIndex, pVBInfo ) ;
602 XGI_DisplayOn( HwDeviceExtension, pVBInfo) ;
605 XGI_UpdateModeInfo( HwDeviceExtension, pVBInfo ) ;
609 XGI_LockCRT2( HwDeviceExtension, pVBInfo ) ;
624 unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
631 unsigned short XGINew_P3cc = pVBInfo->P3cc;
634 StandTableIndex = XGI_GetModePtr( ModeNo , ModeIdIndex, pVBInfo ) ;
637 XGI_SetSeqRegs( ModeNo , StandTableIndex , ModeIdIndex, pVBInfo ) ;
638 XGI_SetMiscRegs( StandTableIndex, pVBInfo ) ;
639 XGI_SetCRTCRegs( HwDeviceExtension , StandTableIndex, pVBInfo) ;
640 XGI_SetATTRegs( ModeNo , StandTableIndex , ModeIdIndex, pVBInfo ) ;
641 XGI_SetGRCRegs( StandTableIndex, pVBInfo ) ;
642 XGI_ClearExt1Regs(pVBInfo) ;
644 /* if ( pVBInfo->IF_DEF_ExpLink ) */
647 if ( pVBInfo->IF_DEF_LVDS == 0 )
649 XGI_SetDefaultVCLK( pVBInfo ) ;
654 pVBInfo->SetFlag &= temp ;
655 pVBInfo->SelectCRT2Rate = 0 ;
657 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
659 if ( pVBInfo->VBInfo & ( SetSimuScanMode | SetCRT2ToLCDA | SetInSlaveMode ) )
661 pVBInfo->SetFlag |= ProgrammingCRT2 ;
665 RefreshRateTableIndex = XGI_GetRatePtrCRT2( HwDeviceExtension, ModeNo , ModeIdIndex, pVBInfo ) ;
668 XGI_SetSync( RefreshRateTableIndex, pVBInfo ) ;
669 XGI_SetCRT1CRTC( ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo, HwDeviceExtension ) ;
670 XGI_SetCRT1DE( HwDeviceExtension , ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
671 XGI_SetCRT1Offset( ModeNo , ModeIdIndex , RefreshRateTableIndex , HwDeviceExtension, pVBInfo ) ;
672 XGI_SetCRT1VCLK( ModeNo , ModeIdIndex , HwDeviceExtension , RefreshRateTableIndex, pVBInfo ) ;
680 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , 0x4E) ;
681 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , 0xE9) ;
687 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , 0x1B) ;
688 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , 0xE3) ;
696 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) ;
700 /*XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~0x20 ) ;*/ /* Enable write GPIOF */
701 /*XGINew_SetRegAND( pVBInfo->P3d4 , 0x48 , ~0x20 ) ;*/ /* P. DWN */
704 XGI_SetXG27CRTC( ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo );
706 XGI_SetXG21CRTC( ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo );
708 XGI_UpdateXG21CRTC( ModeNo , pVBInfo , RefreshRateTableIndex) ;
711 XGI_SetXG27LCD( pVBInfo , RefreshRateTableIndex , ModeNo );
713 XGI_SetXG21LCD( pVBInfo , RefreshRateTableIndex , ModeNo );
715 if ( pVBInfo->IF_DEF_LVDS == 1 )
718 XGI_SetXG27LVDSPara(ModeNo,ModeIdIndex, pVBInfo );
720 XGI_SetXG21LVDSPara(ModeNo,ModeIdIndex, pVBInfo );
722 /*XGINew_SetRegOR( pVBInfo->P3d4 , 0x48 , 0x20 ) ;*/ /* P. ON */
726 pVBInfo->SetFlag &= ( ~ProgrammingCRT2 ) ;
727 XGI_SetCRT1FIFO( ModeNo , HwDeviceExtension, pVBInfo ) ;
728 XGI_SetCRT1ModeRegs( HwDeviceExtension , ModeNo , ModeIdIndex , RefreshRateTableIndex , pVBInfo) ;
733 XGI_LoadDAC( ModeNo , ModeIdIndex, pVBInfo ) ;
734 /* XGI_ClearBuffer( HwDeviceExtension , ModeNo, pVBInfo ) ; */
745 struct vb_device_info *pVBInfo)
750 index = pVBInfo->SModeIDTable[ ModeIdIndex ].St_StTableIndex ;
753 if ( pVBInfo->ModeType <= 0x02 )
758 return( index ) ; /* Get pVBInfo->StandTable index */
793 unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
802 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
804 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
806 XGINew_SetReg1( pVBInfo->P3c4 , 0x00 , 0x03 ) ; /* Set SR0 */
807 tempah=pVBInfo->StandTable[ StandTableIndex ].SR[ 0 ] ;
810 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
816 if ( pVBInfo->VBInfo & ( SetCRT2ToTV | SetCRT2ToLCD ) )
818 if ( pVBInfo->VBInfo & SetInSlaveMode )
824 XGINew_SetReg1( pVBInfo->P3c4 , 0x01 , tempah ) ; /* Set SR1 */
828 SRdata = pVBInfo->StandTable[ StandTableIndex ].SR[ i - 1 ] ; /* Get SR2,3,4 from file */
829 XGINew_SetReg1( pVBInfo->P3c4 , i , SRdata ) ; /* Set SR2 3 4 */
840 void XGI_SetMiscRegs(unsigned short StandTableIndex, struct vb_device_info *pVBInfo)
844 Miscdata = pVBInfo->StandTable[ StandTableIndex ].MISC ; /* Get Misc from file */
846 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
848 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
855 XGINew_SetReg3( pVBInfo->P3c2 , Miscdata ) ; /* Set Misc(3c2) */
866 unsigned short StandTableIndex, struct vb_device_info *pVBInfo)
871 CRTCdata = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x11);
873 XGINew_SetReg1( pVBInfo->P3d4 , 0x11 , CRTCdata ) ; /* Unlock CRTC */
877 CRTCdata = pVBInfo->StandTable[ StandTableIndex ].CRTC[ i ] ; /* Get CRTC from file */
878 XGINew_SetReg1( pVBInfo->P3d4 , i , CRTCdata ) ; /* Set CRTC( 3d4 ) */
883 if ( pVBInfo->VBInfo & SetInSlaveMode )
885 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToTV ) )
887 XGINew_SetReg1( pVBInfo->P3d4 , 0x18 , 0xFE ) ;
902 unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
908 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
910 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
914 ARdata = pVBInfo->StandTable[ StandTableIndex ].ATTR[ i ] ;
919 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
923 if ( pVBInfo->VBInfo & ( SetCRT2ToTV | SetCRT2ToLCD ) )
925 if ( pVBInfo->VBInfo & SetInSlaveMode )
932 XGINew_GetReg2( pVBInfo->P3da ) ; /* reset 3da */
933 XGINew_SetReg3( pVBInfo->P3c0 , i ) ; /* set index */
934 XGINew_SetReg3( pVBInfo->P3c0 , ARdata ) ; /* set data */
937 XGINew_GetReg2( pVBInfo->P3da ) ; /* reset 3da */
938 XGINew_SetReg3( pVBInfo->P3c0 , 0x14 ) ; /* set index */
939 XGINew_SetReg3( pVBInfo->P3c0 , 0x00 ) ; /* set data */
940 XGINew_GetReg2( pVBInfo->P3da ) ; /* Enable Attribute */
941 XGINew_SetReg3( pVBInfo->P3c0 , 0x20 ) ;
951 void XGI_SetGRCRegs(unsigned short StandTableIndex, struct vb_device_info *pVBInfo)
958 GRdata = pVBInfo->StandTable[ StandTableIndex ].GRC[ i ] ; /* Get GR from file */
959 XGINew_SetReg1( pVBInfo->P3ce , i , GRdata ) ; /* Set GR(3ce) */
962 if ( pVBInfo->ModeType > ModeVGA )
964 GRdata = (unsigned char)XGINew_GetReg1(pVBInfo->P3ce, 0x05);
966 XGINew_SetReg1( pVBInfo->P3ce , 0x05 , GRdata ) ;
977 void XGI_ClearExt1Regs(struct vb_device_info *pVBInfo)
982 XGINew_SetReg1( pVBInfo->P3c4 , i , 0x00 ) ; /* Clear SR0A-SR0E */
992 unsigned char XGI_SetDefaultVCLK(struct vb_device_info *pVBInfo)
995 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x31 , ~0x30 , 0x20 ) ;
996 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , pVBInfo->VCLKData[ 0 ].SR2B ) ;
997 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , pVBInfo->VCLKData[ 0 ].SR2C ) ;
999 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x31 , ~0x30 , 0x10 ) ;
1000 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , pVBInfo->VCLKData[ 1 ].SR2B ) ;
1001 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , pVBInfo->VCLKData[ 1 ].SR2C ) ;
1003 XGINew_SetRegAND( pVBInfo->P3c4 , 0x31 , ~0x30 ) ;
1017 struct vb_device_info *pVBInfo)
1026 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
1030 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
1033 if ( pVBInfo->IF_DEF_CH7005 == 1 )
1035 if ( pVBInfo->VBInfo & SetCRT2ToTV )
1045 index = XGINew_GetReg1( pVBInfo->P3d4 , 0x33 ) ;
1046 index = index >> pVBInfo->SelectCRT2Rate ;
1049 if ( pVBInfo->LCDInfo & LCDNonExpanding )
1055 if ( pVBInfo->SetFlag & ProgrammingCRT2 )
1057 if ( pVBInfo->IF_DEF_CH7005 == 1 )
1059 if ( pVBInfo->VBInfo & SetCRT2ToTV )
1065 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
1067 if( pVBInfo->IF_DEF_LVDS == 0 )
1069 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
1070 temp = LCDARefreshIndex[ pVBInfo->LCDResInfo & 0x0F ] ; /* 301b */
1072 temp = LCDRefreshIndex[ pVBInfo->LCDResInfo & 0x0F ] ;
1086 RefreshRateTableIndex = pVBInfo->EModeIDTable[ ModeIdIndex ].REFindex ;
1087 ModeNo = pVBInfo->RefIndex[ RefreshRateTableIndex ].ModeID ;
1091 if ( pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag & XG2xNotSupport )
1096 if ( ( pVBInfo->RefIndex[ RefreshRateTableIndex ].XRes == 800 ) &&
1097 ( pVBInfo->RefIndex[ RefreshRateTableIndex ].YRes == 600 ) )
1102 if ( ( pVBInfo->RefIndex[ RefreshRateTableIndex ].XRes == 1024 ) &&
1103 ( pVBInfo->RefIndex[ RefreshRateTableIndex ].YRes == 768 ) )
1107 if ( ( pVBInfo->RefIndex[ RefreshRateTableIndex ].XRes == 1280 ) &&
1108 ( pVBInfo->RefIndex[ RefreshRateTableIndex ].YRes == 1024 ) )
1117 if ( pVBInfo->RefIndex[ RefreshRateTableIndex + i ].ModeID != ModeNo )
1119 temp = pVBInfo->RefIndex[ RefreshRateTableIndex + i ].Ext_InfoFlag ;
1121 if ( temp < pVBInfo->ModeType )
1127 if ( !( pVBInfo->VBInfo & SetCRT2ToRAMDAC ) )
1129 if ( pVBInfo->VBInfo & SetInSlaveMode )
1131 temp = pVBInfo->RefIndex[ RefreshRateTableIndex + i - 1 ].Ext_InfoFlag ;
1139 if ( ( pVBInfo->SetFlag & ProgrammingCRT2 ) )
1141 temp = XGI_AjustCRT2Rate( ModeNo , ModeIdIndex , RefreshRateTableIndex , &i, pVBInfo) ;
1155 unsigned short *i, struct vb_device_info *pVBInfo)
1161 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ModeFlag */
1165 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
1168 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
1169 tempbx = pVBInfo->RefIndex[ RefreshRateTableIndex + ( *i ) ].ModeID ;
1172 if ( pVBInfo->IF_DEF_LVDS == 0 )
1174 if ( pVBInfo->VBInfo & SetCRT2ToRAMDAC )
1178 if ( pVBInfo->VBType & VB_XGI301C )
1182 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) /* 301b */
1186 if ( pVBInfo->LCDResInfo != Panel1280x1024 )
1188 if ( pVBInfo->LCDResInfo != Panel1280x960 )
1190 if ( pVBInfo->LCDInfo & LCDNonExpanding )
1202 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV ) /* for HiTV */
1204 if ( ( pVBInfo->VBType & VB_XGI301LV ) && ( pVBInfo->VBExtInfo == VB_YPbPr1080i ) )
1207 if ( pVBInfo->VBInfo & SetInSlaveMode )
1222 if ( pVBInfo->VBInfo & SetInSlaveMode )
1229 if ( pVBInfo->SetFlag & TVSimuMode )
1240 if ( pVBInfo->VBInfo & ( SetCRT2ToAVIDEO | SetCRT2ToSVIDEO | SetCRT2ToSCART | SetCRT2ToYPbPr | SetCRT2ToHiVisionTV ) )
1244 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
1249 if ( !( pVBInfo->VBInfo & SetPALTV ) )
1253 if ( pVBInfo->VBInfo & SetInSlaveMode )
1255 if ( !( pVBInfo->VBInfo & SetNotSimuMode ) )
1267 if ( pVBInfo->IF_DEF_CH7005 == 1 )
1269 if ( pVBInfo->VBInfo & SetCRT2ToTV )
1275 if ( pVBInfo->VBInfo & SetCRT2ToLCD )
1282 if ( pVBInfo->LCDResInfo < Panel1024x768 )
1293 for( ; pVBInfo->RefIndex[ RefreshRateTableIndex + ( *i ) ].ModeID == tempbx ; ( *i )-- )
1295 infoflag = pVBInfo->RefIndex[ RefreshRateTableIndex + ( *i ) ].Ext_InfoFlag ;
1306 infoflag = pVBInfo->RefIndex[ RefreshRateTableIndex + ( *i ) ].Ext_InfoFlag ;
1307 if ( pVBInfo->RefIndex[ RefreshRateTableIndex + ( *i ) ].ModeID != tempbx )
1327 void XGI_SetSync(unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo)
1332 sync = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag >> 8 ; /* di+0x00 */
1336 XGINew_SetReg3( pVBInfo->P3c2 , temp ) ; /* Set Misc(3c2) */
1348 struct vb_device_info *pVBInfo,
1354 index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ; /* Get index */
1357 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x11);
1359 XGINew_SetReg1(pVBInfo->P3d4,0x11,data); /* Unlock CRTC */
1362 pVBInfo->TimingH[ 0 ].data[ i ] = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ i ] ;
1365 pVBInfo->TimingV[ 0 ].data[ i ] = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ i + 8 ] ;
1367 XGI_SetCRT1Timing_H( pVBInfo, HwDeviceExtension ) ;
1371 XGI_SetCRT1Timing_V( ModeIdIndex , ModeNo, pVBInfo ) ;
1374 if( pVBInfo->ModeType > 0x03 )
1375 XGINew_SetReg1( pVBInfo->P3d4 , 0x14 , 0x4F ) ;
1385 void XGI_SetCRT1Timing_H(struct vb_device_info *pVBInfo, struct xgi_hw_device_info *HwDeviceExtension)
1390 /* XGINew_SetReg1( pVBInfo->P3d4 , 0x51 , 0 ) ; */
1391 /* XGINew_SetReg1( pVBInfo->P3d4 , 0x56 , 0 ) ; */
1392 /* XGINew_SetRegANDOR( pVBInfo->P3d4 ,0x11 , 0x7f , 0x00 ) ; */
1394 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x11); /* unlock cr0-7 */
1396 XGINew_SetReg1( pVBInfo->P3d4 , 0x11 , data ) ;
1398 data = pVBInfo->TimingH[ 0 ].data[ 0 ] ;
1399 XGINew_SetReg1( pVBInfo->P3d4 , 0 , data ) ;
1403 data = pVBInfo->TimingH[ 0 ].data[ i ] ;
1404 XGINew_SetReg1( pVBInfo->P3d4, (unsigned short)(i + 1), data);
1409 data = pVBInfo->TimingH[ 0 ].data[ i ];
1410 XGINew_SetReg1(pVBInfo->P3c4, (unsigned short)(i + 6), data);
1413 j = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x0e);
1415 data = pVBInfo->TimingH[ 0 ].data[ 7 ] ;
1418 XGINew_SetReg1( pVBInfo->P3c4 , 0x0e , data ) ;
1422 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x04);
1424 XGINew_SetReg1( pVBInfo->P3d4 , 0x04 , data ) ;
1425 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x05);
1432 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x0c);
1434 XGINew_SetReg1( pVBInfo->P3c4 , 0x0c , data ) ;
1439 XGINew_SetReg1( pVBInfo->P3d4 , 0x05 , data ) ;
1440 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x0e);
1446 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0e , ~0xE0 , data ) ;
1459 struct vb_device_info *pVBInfo)
1464 /* XGINew_SetReg1( pVBInfo->P3d4 , 0x51 , 0 ) ; */
1465 /* XGINew_SetReg1( pVBInfo->P3d4 , 0x56 , 0 ) ; */
1466 /* XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x11 , 0x7f , 0x00 ) ; */
1470 data = pVBInfo->TimingV[ 0 ].data[ i ] ;
1471 XGINew_SetReg1(pVBInfo->P3d4, (unsigned short)(i + 6), data);
1476 data = pVBInfo->TimingV[ 0 ].data[ i ] ;
1477 XGINew_SetReg1(pVBInfo->P3d4, (unsigned short)(i + 0x0e), data);
1482 data = pVBInfo->TimingV[ 0 ].data[ i ] ;
1483 XGINew_SetReg1(pVBInfo->P3d4, (unsigned short)(i + 0x11), data);
1486 j = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x0a);
1488 data = pVBInfo->TimingV[ 0 ].data[ 6 ] ;
1491 XGINew_SetReg1( pVBInfo->P3c4 , 0x0a , data ) ;
1493 data = pVBInfo->TimingV[ 0 ].data[ 6 ] ;
1498 i = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
1500 i = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
1506 j = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x09);
1509 XGINew_SetReg1( pVBInfo->P3d4 , 0x09 , data ) ;
1521 struct vb_device_info *pVBInfo)
1528 StandTableIndex = XGI_GetModePtr( ModeNo , ModeIdIndex, pVBInfo ) ;
1529 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 4 ] ; /* CR04 HRS */
1530 XGINew_SetReg1( pVBInfo->P3c4 , 0x2E , Tempax ) ; /* SR2E [7:0]->HRS */
1531 Tempbx = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 5 ] ; /* Tempbx: CR05 HRE */
1539 XGINew_SetReg1( pVBInfo->P3c4 , 0x2F , Tempdx ) ; /* SR2F [7:2]->HRE */
1540 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x30 , 0xE3 , 00 ) ;
1542 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 16 ] ; /* Tempax: CR16 VRS */
1545 XGINew_SetRegOR( pVBInfo->P3c4 , 0x33 , Tempax ) ; /* SR33[0]->VRS */
1546 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 7 ] ; /* Tempax: CR7 VRS */
1551 XGINew_SetReg1( pVBInfo->P3c4 , 0x34 , Tempdx ) ; /* SR34[7:0]: VRS[8:1] */
1559 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 17 ] ; /* CR16 VRE */
1574 XGINew_SetReg1( pVBInfo->P3c4 , 0x3F , Tempax ) ; /* SR3F D[7:2]->VRE D[1:0]->VRS */
1578 index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ;
1579 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 3 ] ; /* Tempax: CR4 HRS */
1581 XGINew_SetReg1( pVBInfo->P3c4 , 0x2E , Tempax ) ; /* SR2E[7:0]->HRS */
1583 Tempdx = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 5 ] ; /* SRB */
1589 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 4 ] ; /* CR5 HRE */
1592 Tempbx = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 6 ] ; /* SRC */
1609 XGINew_SetReg1( pVBInfo->P3c4 , 0x2F , Tempax ) ; /* SR2F D[7:2]->HRE, D[1:0]->HRS */
1610 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x30 , 0xE3 , 00 ) ;
1612 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 10 ] ; /* CR10 VRS */
1615 XGINew_SetRegOR( pVBInfo->P3c4 , 0x33 , Tempax ) ; /* SR33[0]->VRS[0] */
1616 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 9 ] ; /* CR7[2][7] VRE */
1621 XGINew_SetReg1( pVBInfo->P3c4 , 0x34 , Tempcx ) ; /* SR34[8:1]->VRS */
1629 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 14 ] ; /* Tempax: SRA */
1635 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 11 ] ; /* Tempax: CR11 VRE */
1637 Tempbx = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 14 ] ; /* Tempbx: SRA */
1656 XGINew_SetReg1( pVBInfo->P3c4 , 0x3F , Tempax ) ; /* SR3F D[7:2]->VRE D[1:0]->VRS */
1662 struct vb_device_info *pVBInfo)
1668 StandTableIndex = XGI_GetModePtr( ModeNo , ModeIdIndex, pVBInfo ) ;
1669 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 4 ] ; /* CR04 HRS */
1670 XGINew_SetReg1( pVBInfo->P3c4 , 0x2E , Tempax ) ; /* SR2E [7:0]->HRS */
1671 Tempbx = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 5 ] ; /* Tempbx: CR05 HRE */
1679 XGINew_SetReg1( pVBInfo->P3c4 , 0x2F , Tempdx ) ; /* SR2F [7:2]->HRE */
1680 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x30 , 0xE3 , 00 ) ;
1682 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 16 ] ; /* Tempax: CR10 VRS */
1683 XGINew_SetReg1( pVBInfo->P3c4 , 0x34 , Tempax ) ; /* SR34[7:0]->VRS */
1685 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 7 ] ; /* Tempax[7][2]: CR7[7][2] VRS[9][8] */
1689 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x35 , ~0x01, Tempax ) ; /* SR35 D[0]->VRS D[8] */
1694 Tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 17 ] ; /* CR11 VRE */
1704 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x3F , ~0xFC, Tempax ) ; /* SR3F D[7:2]->VRE D[5:0] */
1705 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x35 , ~0x06, Tempcx ) ; /* SR35 D[2:1]->VRS[10:9] */
1709 index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ;
1710 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 3 ] ; /* Tempax: CR4 HRS */
1712 XGINew_SetReg1( pVBInfo->P3c4 , 0x2E , Tempax ) ; /* SR2E[7:0]->HRS */
1714 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 5 ] ; /* SR0B */
1718 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 4 ] ; /* CR5 HRE */
1722 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 6 ] ; /* SRC */
1730 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 3 ] ; /* Tempax: CR4 HRS */
1735 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 5 ] ; /* SR0B */
1739 XGINew_SetReg1( pVBInfo->P3c4 , 0x2F , Tempax ) ; /* SR2F [7:2][1:0]: HRE[5:0]HRS[9:8] */
1740 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x30 , 0xE3 , 00 ) ;
1742 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 10 ] ; /* CR10 VRS */
1743 XGINew_SetReg1( pVBInfo->P3c4 , 0x34 , Tempax ) ; /* SR34[7:0]->VRS[7:0] */
1746 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 9 ] ; /* CR7[7][2] VRS[9][8] */
1750 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x35 , ~0x01 , Tempax ) ; /* SR35[0]: VRS[8] */
1753 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 14 ] ; /* Tempax: SR0A */
1758 Tempax = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 11 ] ; /* Tempax: CR11 VRE */
1760 Tempbx = pVBInfo->XGINEWUB_CRT1Table[ index ].CR[ 14 ] ; /* Tempbx: SR0A */
1772 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x3F , ~0xFC , Tempax ) ; /* SR3F[7:2]:VRE[5:0] */
1774 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x35 , ~0x07 , Tempax ) ; /* SR35[2:0]:VRS[10:8] */
1785 void XGI_SetXG21LCD(struct vb_device_info *pVBInfo,
1792 XGI_P3cc = pVBInfo->P3cc ;
1794 XGINew_SetReg1( pVBInfo->P3d4 , 0x2E , 0x00 ) ;
1795 XGINew_SetReg1( pVBInfo->P3d4 , 0x2F , 0x00 ) ;
1796 XGINew_SetReg1( pVBInfo->P3d4 , 0x46 , 0x00 ) ;
1797 XGINew_SetReg1( pVBInfo->P3d4 , 0x47 , 0x00 ) ;
1798 if ( ((*pVBInfo->pDVOSetting)&0xC0) == 0xC0 )
1800 XGINew_SetReg1( pVBInfo->P3d4 , 0x2E , *pVBInfo->pCR2E ) ;
1801 XGINew_SetReg1( pVBInfo->P3d4 , 0x2F , *pVBInfo->pCR2F ) ;
1802 XGINew_SetReg1( pVBInfo->P3d4 , 0x46 , *pVBInfo->pCR46 ) ;
1803 XGINew_SetReg1( pVBInfo->P3d4 , 0x47 , *pVBInfo->pCR47 ) ;
1806 Temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x37 ) ;
1810 XGINew_SetRegOR( pVBInfo->P3c4 , 0x06 , 0x40 ) ; /* 18 bits FP */
1811 XGINew_SetRegOR( pVBInfo->P3c4 , 0x09 , 0x40 ) ;
1814 XGINew_SetRegOR( pVBInfo->P3c4 , 0x1E , 0x01 ) ; /* Negative blank polarity */
1816 XGINew_SetRegAND( pVBInfo->P3c4 , 0x30 , ~0x20 ) ;
1817 XGINew_SetRegAND( pVBInfo->P3c4 , 0x35 , ~0x80 ) ;
1823 XGINew_SetRegOR( pVBInfo->P3c4 , 0x30 , 0x20 ) ; /* Hsync polarity */
1825 XGINew_SetRegOR( pVBInfo->P3c4 , 0x35 , 0x80 ) ; /* Vsync polarity */
1829 Data = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag ;
1831 XGINew_SetRegOR( pVBInfo->P3c4 , 0x30 , 0x20 ) ; /* Hsync polarity */
1833 XGINew_SetRegOR( pVBInfo->P3c4 , 0x35 , 0x80 ) ; /* Vsync polarity */
1837 void XGI_SetXG27LCD(struct vb_device_info *pVBInfo,
1844 XGI_P3cc = pVBInfo->P3cc ;
1846 XGINew_SetReg1( pVBInfo->P3d4 , 0x2E , 0x00 ) ;
1847 XGINew_SetReg1( pVBInfo->P3d4 , 0x2F , 0x00 ) ;
1848 XGINew_SetReg1( pVBInfo->P3d4 , 0x46 , 0x00 ) ;
1849 XGINew_SetReg1( pVBInfo->P3d4 , 0x47 , 0x00 ) ;
1851 Temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x37 ) ;
1854 XGINew_SetReg1( pVBInfo->P3d4 , 0x46 , 0x13 ) ;
1855 XGINew_SetReg1( pVBInfo->P3d4 , 0x47 , 0x13 ) ;
1858 if ( ((*pVBInfo->pDVOSetting)&0xC0) == 0xC0 )
1860 XGINew_SetReg1( pVBInfo->P3d4 , 0x2E , *pVBInfo->pCR2E ) ;
1861 XGINew_SetReg1( pVBInfo->P3d4 , 0x2F , *pVBInfo->pCR2F ) ;
1862 XGINew_SetReg1( pVBInfo->P3d4 , 0x46 , *pVBInfo->pCR46 ) ;
1863 XGINew_SetReg1( pVBInfo->P3d4 , 0x47 , *pVBInfo->pCR47 ) ;
1866 XGI_SetXG27FPBits(pVBInfo);
1868 XGINew_SetRegOR( pVBInfo->P3c4 , 0x1E , 0x01 ) ; /* Negative blank polarity */
1870 XGINew_SetRegAND( pVBInfo->P3c4 , 0x30 , ~0x20 ) ; /* Hsync polarity */
1871 XGINew_SetRegAND( pVBInfo->P3c4 , 0x35 , ~0x80 ) ; /* Vsync polarity */
1877 XGINew_SetRegOR( pVBInfo->P3c4 , 0x30 , 0x20 ) ; /* Hsync polarity */
1879 XGINew_SetRegOR( pVBInfo->P3c4 , 0x35 , 0x80 ) ; /* Vsync polarity */
1883 Data = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag ;
1885 XGINew_SetRegOR( pVBInfo->P3c4 , 0x30 , 0x20 ) ; /* Hsync polarity */
1887 XGINew_SetRegOR( pVBInfo->P3c4 , 0x35 , 0x80 ) ; /* Vsync polarity */
1898 struct vb_device_info *pVBInfo,
1903 XGINew_SetRegAND( pVBInfo->P3d4 , 0x11 , 0x7F ) ; /* Unlock CR0~7 */
1908 if ( ModeNo == pVBInfo->UpdateCRT1[ i ].ModeID )
1914 if ( ModeNo == 0x2E && ( pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC == RES640x480x60 ) )
1916 else if ( ModeNo == 0x2E && ( pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC == RES640x480x72 ) )
1928 XGINew_SetReg1( pVBInfo->P3d4 , 0x02 , pVBInfo->UpdateCRT1[ index ].CR02 ) ;
1929 XGINew_SetReg1( pVBInfo->P3d4 , 0x03 , pVBInfo->UpdateCRT1[ index ].CR03 ) ;
1930 XGINew_SetReg1( pVBInfo->P3d4 , 0x15 , pVBInfo->UpdateCRT1[ index ].CR15 ) ;
1931 XGINew_SetReg1( pVBInfo->P3d4 , 0x16 , pVBInfo->UpdateCRT1[ index ].CR16 ) ;
1946 struct vb_device_info *pVBInfo)
1952 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
1956 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
1957 tempax = pVBInfo->StResInfo[ resindex ].HTotal ;
1958 tempbx = pVBInfo->StResInfo[ resindex ].VTotal ;
1962 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
1963 tempax = pVBInfo->ModeResInfo[ resindex ].HTotal ;
1964 tempbx = pVBInfo->ModeResInfo[ resindex ].VTotal ;
1975 temp = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag ;
1993 temp = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x11);
1994 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x11);
1996 XGINew_SetReg1( pVBInfo->P3d4 , 0x11 , data ) ; /* Unlock CRTC */
1997 XGINew_SetReg1(pVBInfo->P3d4, 0x01, (unsigned short)(tempcx & 0xff));
1998 XGINew_SetRegANDOR(pVBInfo->P3d4, 0x0b, ~0x0c, (unsigned short)((tempcx & 0x0ff00) >> 10));
1999 XGINew_SetReg1(pVBInfo->P3d4, 0x12, (unsigned short)(tempbx & 0xff));
2009 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x42 , tempax ) ;
2010 data = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x07);
2017 XGINew_SetRegANDOR( pVBInfo->P3d4 ,0x0a , ~0x02 , tempax ) ;
2018 XGINew_SetReg1( pVBInfo->P3d4 , 0x11 , temp ) ;
2030 struct vb_device_info *pVBInfo)
2036 resindex = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ; /* si+St_ResInfo */
2040 resindex = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ; /* si+Ext_ResInfo */
2056 struct vb_device_info *pVBInfo)
2066 temp = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeInfo ;
2068 temp = pVBInfo->ScreenOffset[ temp ] ;
2070 temp2 = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag ;
2076 temp2 = pVBInfo->ModeType - ModeEGA ;
2112 i = XGINew_GetReg1( pVBInfo->P3c4 , 0x0E ) ;
2115 XGINew_SetReg1( pVBInfo->P3c4 , 0x0E , i ) ;
2119 XGINew_SetReg1( pVBInfo->P3d4 , 0x13 , temp ) ;
2122 temp2 = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag ;
2139 XGINew_SetReg1( pVBInfo->P3c4 , 0x10 , ah ) ;
2152 struct vb_device_info *pVBInfo)
2157 if ( pVBInfo->IF_DEF_LVDS == 1 )
2159 index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRTVCLK ;
2160 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x31 ) & 0xCF ;
2161 XGINew_SetReg1( pVBInfo->P3c4 , 0x31 , data ) ;
2162 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , pVBInfo->VCLKData[ index ].SR2B ) ;
2163 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , pVBInfo->VCLKData[ index ].SR2C ) ;
2164 XGINew_SetReg1( pVBInfo->P3c4 , 0x2D , 0x01 ) ;
2166 else if ( ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) ) && ( pVBInfo->VBInfo & SetCRT2ToLCDA ) )
2168 vclkindex = XGI_GetVCLK2Ptr( ModeNo , ModeIdIndex , RefreshRateTableIndex , HwDeviceExtension, pVBInfo ) ;
2169 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x31 ) & 0xCF ;
2170 XGINew_SetReg1( pVBInfo->P3c4 , 0x31 , data ) ;
2171 data = pVBInfo->VBVCLKData[ vclkindex ].Part4_A ;
2172 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , data ) ;
2173 data = pVBInfo->VBVCLKData[ vclkindex ].Part4_B ;
2174 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , data ) ;
2175 XGINew_SetReg1( pVBInfo->P3c4 , 0x2D , 0x01 ) ;
2179 index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRTVCLK ;
2180 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x31 ) & 0xCF ;
2181 XGINew_SetReg1( pVBInfo->P3c4 , 0x31 , data ) ;
2182 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , pVBInfo->VCLKData[ index ].SR2B ) ;
2183 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , pVBInfo->VCLKData[ index ].SR2C ) ;
2184 XGINew_SetReg1( pVBInfo->P3c4 , 0x2D , 0x01 ) ;
2189 if ( pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag & HalfDCLK )
2191 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x2B ) ;
2192 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , data ) ;
2193 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x2C ) ;
2200 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , data ) ;
2214 struct vb_device_info *pVBInfo)
2218 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x3D ) ;
2220 XGINew_SetReg1( pVBInfo->P3c4 , 0x3D , data ) ; /* diable auto-threshold */
2224 XGINew_SetReg1( pVBInfo->P3c4 , 0x08 , 0x34 ) ;
2225 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x09 ) ;
2227 XGINew_SetReg1( pVBInfo->P3c4 , 0x09 , data | 0x30) ;
2228 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x3D ) ;
2230 XGINew_SetReg1( pVBInfo->P3c4 , 0x3D , data ) ;
2236 XGINew_SetReg1( pVBInfo->P3c4 , 0x08 , 0x0E ) ;
2237 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x09 ) ;
2239 XGINew_SetReg1( pVBInfo->P3c4 , 0x09 , data | 0x20 ) ;
2243 XGINew_SetReg1( pVBInfo->P3c4 , 0x08 , 0xAE ) ;
2244 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x09 ) ;
2246 XGINew_SetReg1( pVBInfo->P3c4 , 0x09 , data ) ;
2252 XGI_SetXG21FPBits(pVBInfo); /* Fix SR9[7:6] can't read back */
2266 struct vb_device_info *pVBInfo)
2278 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
2279 infoflag = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag ;
2282 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ModeFlag */
2284 if ( XGINew_GetReg1( pVBInfo->P3d4 , 0x31 ) & 0x01 )
2285 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x1F , 0x3F , 0x00 ) ;
2296 if ( pVBInfo->ModeType > 0x02 )
2299 data3 = pVBInfo->ModeType - ModeVGA ;
2310 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x06 , ~0x3F , data2 ) ;
2311 /* XGINew_SetReg1(pVBInfo->P3c4,0x06,data2); */
2312 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
2314 xres = pVBInfo->StResInfo[ resindex ].HTotal ;
2316 xres = pVBInfo->ModeResInfo[ resindex ].HTotal ; /* xres->ax */
2328 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x19 , 0xFF , data2 ) ;
2330 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x19 , 0xFC , data2 ) ;
2333 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x01 , 0xF7 , 0x08 ) ;
2342 if ( pVBInfo->ModeType == ModeEGA )
2346 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0F , ~0x48 , data2 ) ;
2348 if ( pVBInfo->ModeType != ModeText )
2351 if ( pVBInfo->ModeType != ModeEGA )
2356 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x21 , 0x1F , data ) ;
2358 XGI_SetVCLKState( HwDeviceExtension , ModeNo , RefreshRateTableIndex, pVBInfo) ;
2364 data=XGINew_GetReg1( pVBInfo->P3d4 , 0x31 ) ;
2372 XGINew_SetReg1( pVBInfo->P3d4 , 0x52 , data ) ;
2373 XGINew_SetRegOR( pVBInfo->P3d4 , 0x51 , 0x10 ) ;
2382 XGINew_SetReg1( pVBInfo->P3d4 , 0x52 , data ) ;
2383 XGINew_SetReg1( pVBInfo->P3d4 , 0x51 , 0x02 ) ;
2391 XGINew_SetReg1( pVBInfo->P3d4 , 0x52 , data ) ;
2406 struct vb_device_info *pVBInfo)
2418 index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRTVCLK ;
2420 VCLK = pVBInfo->VCLKData[ index ].CLOCK ;
2423 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x32 ) ;
2431 XGINew_SetReg1( pVBInfo->P3c4 , 0x32 , data ) ;
2435 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x1F ) ;
2439 XGINew_SetReg1( pVBInfo->P3c4 , 0x1F , data ) ;
2454 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x07 , 0xFC , data2 ) ;
2457 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x40 , 0xFC , data2&0x03 ) ;
2470 /*void XGI_VesaLowResolution(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
2475 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
2477 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
2485 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
2487 if ( !( pVBInfo->VBInfo & SetCRT2ToRAMDAC ) )
2489 if ( pVBInfo->VBInfo & SetInSlaveMode )
2491 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x01 , 0xf7 , 0x00 ) ;
2492 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0f , 0x7f , 0x00 ) ;
2497 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0f , 0xff , 0x80 ) ;
2498 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x01 , 0xf7 , 0x00 ) ;
2503 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0f , 0x7f , 0x00 ) ;
2515 struct vb_device_info *pVBInfo)
2523 data = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
2525 data = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
2547 XGINew_SetReg3( pVBInfo->P3c6 , 0xFF ) ;
2548 XGINew_SetReg3( pVBInfo->P3c8 , 0x00 ) ;
2564 XGINew_SetReg3( pVBInfo->P3c9 , data2 ) ;
2576 XGINew_SetReg3( pVBInfo->P3c9 , data ) ;
2595 XGI_WriteDAC( dl , ah , al , dh, pVBInfo ) ;
2606 XGI_WriteDAC( dl , ah , al , dh, pVBInfo ) ;
2626 struct vb_device_info *pVBInfo)
2651 XGINew_SetReg3(pVBInfo->P3c9, (unsigned short)dh);
2652 XGINew_SetReg3(pVBInfo->P3c9, (unsigned short)bh);
2653 XGINew_SetReg3(pVBInfo->P3c9, (unsigned short)bl);
2665 struct vb_device_info *pVBInfo)
2670 /* pVBInfo->SelectCRT2Rate = 0 ; */
2672 pVBInfo->SetFlag |= ProgrammingCRT2 ;
2673 RefreshRateTableIndex = XGI_GetRatePtrCRT2( HwDeviceExtension, ModeNo , ModeIdIndex, pVBInfo ) ;
2674 XGI_GetLVDSResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
2675 XGI_GetLVDSData( ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo);
2676 XGI_ModCRT1Regs( ModeNo , ModeIdIndex , RefreshRateTableIndex , HwDeviceExtension, pVBInfo ) ;
2677 XGI_SetLVDSRegs( ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
2678 XGI_SetCRT2ECLK( ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
2690 struct vb_device_info *pVBInfo)
2696 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ; /* si+St_ResInfo */
2700 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ; /* si+Ext_ResInfo */
2705 /* modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ; */
2707 /* modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; */
2711 resindex = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ; /* si+St_ResInfo */
2715 resindex = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ; /* si+Ext_ResInfo */
2718 /* resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ; */
2722 xres = pVBInfo->StResInfo[ resindex ].HTotal ;
2723 yres = pVBInfo->StResInfo[ resindex ].VTotal ;
2727 xres = pVBInfo->ModeResInfo[ resindex ].HTotal ;
2728 yres = pVBInfo->ModeResInfo[ resindex ].VTotal ;
2745 pVBInfo->VGAHDE = xres ;
2746 pVBInfo->HDE = xres ;
2747 pVBInfo->VGAVDE = yres ;
2748 pVBInfo->VDE = yres ;
2761 struct vb_device_info *pVBInfo)
2769 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
2771 LCDPtr = (struct XGI330_LVDSDataStruct *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2772 pVBInfo->VGAHT = LCDPtr->VGAHT ;
2773 pVBInfo->VGAVT = LCDPtr->VGAVT ;
2774 pVBInfo->HT = LCDPtr->LCDHT ;
2775 pVBInfo->VT = LCDPtr->LCDVT ;
2777 if ( pVBInfo->IF_DEF_CH7017 == 1 )
2779 if ( pVBInfo->VBInfo & SetCRT2ToTV )
2781 TVPtr = (struct XGI330_CHTVDataStruct *)XGI_GetTVPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2782 pVBInfo->VGAHT = TVPtr->VGAHT ;
2783 pVBInfo->VGAVT = TVPtr->VGAVT ;
2784 pVBInfo->HT = TVPtr->LCDHT ;
2785 pVBInfo->VT = TVPtr->LCDVT ;
2789 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
2791 if ( !( pVBInfo->LCDInfo & ( SetLCDtoNonExpanding | EnableScalingLCD ) ) )
2793 if ( ( pVBInfo->LCDResInfo == Panel1024x768 ) || ( pVBInfo->LCDResInfo == Panel1024x768x75 ) )
2795 pVBInfo->HDE = 1024 ;
2796 pVBInfo->VDE = 768 ;
2798 else if ( ( pVBInfo->LCDResInfo == Panel1280x1024 ) || ( pVBInfo->LCDResInfo == Panel1280x1024x75 ) )
2800 pVBInfo->HDE = 1280 ;
2801 pVBInfo->VDE = 1024 ;
2803 else if ( pVBInfo->LCDResInfo == Panel1400x1050 )
2805 pVBInfo->HDE = 1400 ;
2806 pVBInfo->VDE = 1050 ;
2810 pVBInfo->HDE = 1600 ;
2811 pVBInfo->VDE = 1200 ;
2827 struct vb_device_info *pVBInfo)
2838 index = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC ;
2840 index = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
2844 if ( ( pVBInfo->IF_DEF_ScaleLCD == 0 ) || ( ( pVBInfo->IF_DEF_ScaleLCD == 1 ) && ( !( pVBInfo->LCDInfo & EnableScalingLCD ) ) ) )
2848 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
2850 LCDPtr = (struct XGI_LVDSCRT1HDataStruct *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2853 pVBInfo->TimingH[ 0 ].data[ i ] = LCDPtr[ 0 ].Reg[ i ] ;
2856 if ( pVBInfo->IF_DEF_CH7007 == 1 )
2858 if ( pVBInfo->VBInfo & SetCRT2ToTV )
2860 CH7007TV_TimingHPtr = (struct XGI_CH7007TV_TimingHStruct *)XGI_GetTVPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2863 pVBInfo->TimingH[ 0 ].data[ i ] = CH7007TV_TimingHPtr[ 0 ].data[ i ] ;
2867 /* if ( pVBInfo->IF_DEF_CH7017 == 1 )
2869 if ( pVBInfo->VBInfo & SetCRT2ToTV )
2870 TVPtr = ( struct XGI330_CHTVDataStruct *)XGI_GetTVPtr( tempbx , ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
2873 XGI_SetCRT1Timing_H(pVBInfo,HwDeviceExtension) ;
2875 if ( pVBInfo->IF_DEF_CH7007 == 1 )
2877 XGINew_SetReg1( pVBInfo->P3c4 , 0x2E , CH7007TV_TimingHPtr[ 0 ].data[ 8 ] ) ;
2878 XGINew_SetReg1( pVBInfo->P3c4 , 0x2F , CH7007TV_TimingHPtr[ 0 ].data[ 9 ] ) ;
2883 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
2885 LCDPtr1 = (struct XGI_LVDSCRT1VDataStruct *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2887 pVBInfo->TimingV[ 0 ].data[ i ] = LCDPtr1[ 0 ].Reg[ i ] ;
2890 if ( pVBInfo->IF_DEF_CH7007 == 1 )
2892 if ( pVBInfo->VBInfo & SetCRT2ToTV )
2894 CH7007TV_TimingVPtr = (struct XGI_CH7007TV_TimingVStruct *)XGI_GetTVPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2897 pVBInfo->TimingV[ 0 ].data[ i ] = CH7007TV_TimingVPtr[ 0 ].data[ i ] ;
2900 /* if ( pVBInfo->IF_DEF_CH7017 == 1 )
2902 if ( pVBInfo->VBInfo & SetCRT2ToTV )
2903 TVPtr = ( struct XGI330_CHTVDataStruct *)XGI_GetTVPtr( tempbx , ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
2906 XGI_SetCRT1Timing_V( ModeIdIndex , ModeNo , pVBInfo) ;
2908 if ( pVBInfo->IF_DEF_CH7007 == 1 )
2910 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x33 , ~0x01 , CH7007TV_TimingVPtr[ 0 ].data[ 7 ]&0x01 ) ;
2911 XGINew_SetReg1( pVBInfo->P3c4 , 0x34 , CH7007TV_TimingVPtr[ 0 ].data[8 ] ) ;
2912 XGINew_SetReg1( pVBInfo->P3c4 , 0x3F , CH7007TV_TimingVPtr[ 0 ].data[9 ] ) ;
2928 struct vb_device_info *pVBInfo)
2936 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
2938 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
2940 if ( !( pVBInfo->SetFlag & Win9xDOSMode ) )
2942 if ( ( pVBInfo->IF_DEF_CH7017 == 0 ) || ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) )
2944 if ( pVBInfo->IF_DEF_OEMUtil == 1 )
2947 LCDPtr = (struct XGI330_LCDDataDesStruct *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2950 if ( ( pVBInfo->IF_DEF_OEMUtil == 0 ) || ( LCDPtr == 0 ) )
2953 if ( pVBInfo->LCDInfo & EnableScalingLCD )
2954 LCDPtr1 = (struct XGI330_LCDDataDesStruct2 *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2956 LCDPtr = (struct XGI330_LCDDataDesStruct *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
2959 XGI_GetLCDSync( &tempax , &tempbx ,pVBInfo) ;
2964 if ( ( pVBInfo->LCDResInfo == Panel1024x768 ) || ( pVBInfo->LCDResInfo == Panel1024x768x75 ) )
2969 else if ( ( pVBInfo->LCDResInfo == Panel1280x1024 ) || ( pVBInfo->LCDResInfo == Panel1280x1024x75 ) )
2974 else if ( pVBInfo->LCDResInfo == Panel1400x1050 )
2985 if ( pVBInfo->LCDInfo & SetLCDtoNonExpanding )
2987 pVBInfo->HDE=tempax;
2988 pVBInfo->VDE=tempbx;
2989 pVBInfo->VGAHDE=tempax;
2990 pVBInfo->VGAVDE=tempbx;
2993 if ( ( pVBInfo->IF_DEF_ScaleLCD == 1 ) && ( pVBInfo->LCDInfo & EnableScalingLCD ) )
2995 tempax=pVBInfo->HDE;
2996 tempbx=pVBInfo->VDE;
2999 tempax = pVBInfo->HT ;
3001 if ( pVBInfo->LCDInfo & EnableScalingLCD )
3006 tempcx = pVBInfo->HDE ;
3013 XGINew_SetReg1( pVBInfo->Part1Port , 0x1A , tempbx & 0x07 ) ;
3018 XGINew_SetReg1(pVBInfo->Part1Port, 0x16, (unsigned short)(tempbx & 0xff));
3019 XGINew_SetReg1(pVBInfo->Part1Port, 0x17, (unsigned short)(tempcx & 0xff));
3021 tempax = pVBInfo->HT ;
3023 if ( pVBInfo->LCDInfo & EnableScalingLCD )
3030 if ( pVBInfo->LCDInfo & EnableScalingLCD )
3046 XGINew_SetReg1( pVBInfo->Part1Port , 0x15 , tempax ) ;
3047 XGINew_SetReg1(pVBInfo->Part1Port, 0x14, (unsigned short)(tempbx & 0xff));
3049 tempax = pVBInfo->VT ;
3050 if ( pVBInfo->LCDInfo & EnableScalingLCD )
3054 tempcx = pVBInfo->VDE ;
3061 XGINew_SetReg1(pVBInfo->Part1Port, 0x1b, (unsigned short)(tempbx & 0xff));
3062 XGINew_SetReg1(pVBInfo->Part1Port, 0x1c, (unsigned short)(tempcx & 0xff));
3067 XGINew_SetReg1(pVBInfo->Part1Port, 0x1d, (unsigned short)((tempcx << 3) | tempbx));
3069 tempax = pVBInfo->VT ;
3070 if ( pVBInfo->LCDInfo & EnableScalingLCD )
3078 if ( pVBInfo->LCDInfo & EnableScalingLCD )
3085 XGINew_SetReg1(pVBInfo->Part1Port, 0x18, (unsigned short)(tempbx & 0xff));
3086 XGINew_SetRegANDOR(pVBInfo->Part1Port, 0x19, ~0x0f, (unsigned short)(tempcx & 0x0f));
3090 tempbx = pVBInfo->VGAVDE ;
3091 if ( tempbx != pVBInfo->VDE )
3094 if ( pVBInfo->LCDInfo & EnableLVDSDDA )
3097 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x1a , 0x07 , tempax ) ;
3099 tempcx = pVBInfo->VGAVT ;
3100 tempbx = pVBInfo->VDE ;
3101 tempax = pVBInfo->VGAVDE ;
3115 XGINew_SetReg1(pVBInfo->Part1Port, 0x37, (unsigned short)(temp2 & 0xff));
3116 XGINew_SetReg1(pVBInfo->Part1Port, 0x36, (unsigned short)((temp2 >> 8) & 0xff));
3121 tempbx = pVBInfo->VGAVDE ;
3122 if ( tempbx == pVBInfo->VDE )
3125 XGINew_SetReg1( pVBInfo->Part1Port , 0x35 , tempax ) ;
3127 if ( pVBInfo->VBType & VB_XGI301C )
3130 XGINew_SetReg1(pVBInfo->Part4Port, 0x3c, (unsigned short)(temp2 & 0xff));
3131 XGINew_SetReg1(pVBInfo->Part4Port, 0x3b, (unsigned short)((temp2 >> 8) & 0xff));
3133 XGINew_SetRegANDOR(pVBInfo->Part4Port, 0x3a, ~0xc0, (unsigned short)((tempbx & 0xff) << 6));
3135 tempcx = pVBInfo->VGAVDE ;
3136 if ( tempcx == pVBInfo->VDE )
3137 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x30 , ~0x0c , 0x00 ) ;
3139 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x30 , ~0x0c , 0x08 ) ;
3142 tempcx = pVBInfo->VGAHDE ;
3143 tempbx = pVBInfo->HDE ;
3153 temp1 = pVBInfo->VGAHDE << 16 ;
3162 XGINew_SetReg1( pVBInfo->Part1Port , 0x1f , tempax ) ;
3164 temp1 = pVBInfo->VGAVDE << 18 ;
3168 if ( pVBInfo->LCDResInfo == Panel1024x768 )
3173 XGINew_SetReg1(pVBInfo->Part1Port, 0x20, (unsigned short)(tempax & 0xff));
3174 XGINew_SetReg1(pVBInfo->Part1Port, 0x21, (unsigned short)(tempbx & 0xff));
3181 XGINew_SetReg1(pVBInfo->Part1Port , 0x22, (unsigned short)((temp3 >> 8) & 0xff));
3182 XGINew_SetReg1(pVBInfo->Part1Port , 0x23, (unsigned short)(temp3 & 0xff));
3194 void XGI_SetCRT2ECLK(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo)
3199 tempal = XGI_GetVCLKPtr( RefreshRateTableIndex , ModeNo , ModeIdIndex, pVBInfo ) ;
3200 XGI_GetVCLKLen( tempal , &di_0 , &di_1, pVBInfo ) ;
3201 XGI_GetLCDVCLKPtr( &di_0 , &di_1, pVBInfo ) ;
3205 XGINew_SetRegANDOR(pVBInfo->P3d4, 0x31, ~0x30, (unsigned short)(0x10 * i));
3206 if ( pVBInfo->IF_DEF_CH7007 == 1 )
3208 XGINew_SetReg1( pVBInfo->P3c4 , 0x2b , di_0 ) ;
3209 XGINew_SetReg1( pVBInfo->P3c4 , 0x2c , di_1 ) ;
3211 else if ( ( !( pVBInfo->VBInfo & SetCRT2ToLCDA ) ) && ( !( pVBInfo->VBInfo & SetInSlaveMode ) ) )
3213 XGINew_SetReg1( pVBInfo->P3c4 , 0x2e , di_0 ) ;
3214 XGINew_SetReg1( pVBInfo->P3c4 , 0x2f , di_1 ) ;
3218 XGINew_SetReg1( pVBInfo->P3c4 , 0x2b , di_0 ) ;
3219 XGINew_SetReg1( pVBInfo->P3c4 , 0x2c , di_1 ) ;
3231 void XGI_UpdateModeInfo(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
3239 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
3243 temp = XGINew_GetReg1( pVBInfo->P3c4 , 0x01 ) ;
3247 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x17 ) ;
3251 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x53 ) ;
3253 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x63 ) ;
3260 temp = XGINew_GetReg1( pVBInfo->Part1Port , 0x2e ) ;
3265 tempax = XGINew_GetReg1( pVBInfo->Part1Port , 0x13 ) ; /* Check ChannelA by Part1_13 [2003/10/03] */
3280 temp = XGINew_GetReg1( pVBInfo->Part2Port , 0x00 ) ;
3291 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
3297 if ( pVBInfo->VBInfo & SetCRT2ToYPbPr )
3299 temp = XGINew_GetReg1( pVBInfo->Part2Port , 0x4d ) ;
3310 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x3d ) ;
3313 if ( ( pVBInfo->SetFlag & ReserveTVOption ) )
3321 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x3d , tempbl , temp ) ;
3323 if ( !( pVBInfo->SetFlag & ReserveTVOption ) )
3324 XGINew_SetReg1( pVBInfo->P3d4 , 0x3e , tempch ) ;
3339 void XGI_GetVGAType(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
3344 pVBInfo->Set_VGAType = XG20;
3348 pVBInfo->Set_VGAType = VGA_XGI340 ;
3351 pVBInfo->Set_VGAType = HwDeviceExtension->jChipType;
3361 void XGI_GetVBType(struct vb_device_info *pVBInfo)
3365 if ( pVBInfo->IF_DEF_CH7007 == 1 )
3367 pVBInfo->VBType = VB_CH7007 ;
3370 if ( pVBInfo->IF_DEF_LVDS == 0 )
3373 flag = XGINew_GetReg1( pVBInfo->Part4Port , 0x00 ) ;
3377 flag = XGINew_GetReg1( pVBInfo->Part4Port , 0x01 ) ;
3390 tempah = XGINew_GetReg1( pVBInfo->Part4Port , 0x39 ) ;
3399 flag = XGINew_GetReg1( pVBInfo->Part4Port , 0x23 ) ;
3406 pVBInfo->VBType = tempbx ;
3409 else if ( pVBInfo->IF_DEF_CH7017 == 1 )
3410 pVBInfo->VBType = VB_CH7017 ;
3412 pVBInfo->VBType = VB_LVDS_NS ;
3424 void XGI_GetVBInfo(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
3434 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
3438 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
3441 pVBInfo->SetFlag = 0 ;
3442 pVBInfo->ModeType = modeflag & ModeInfoFlag ;
3445 if ( pVBInfo->VBType & 0xFFFF )
3447 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x30 ) ; /* Check Display Device */
3449 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x31 ) ;
3458 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) ;
3460 if ( pVBInfo->IF_DEF_LCDA == 1 )
3463 if ( ( pVBInfo->Set_VGAType >= XG20 ) || ( pVBInfo->Set_VGAType >= XG40 ))
3465 if ( pVBInfo->IF_DEF_LVDS == 0 )
3467 /* if ( ( pVBInfo->VBType & VB_XGI302B ) || ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) || ( pVBInfo->VBType & VB_XGI301C ) ) */
3468 if ( pVBInfo->VBType & ( VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
3479 else if ( pVBInfo->IF_DEF_CH7017 == 1 )
3481 if ( pVBInfo->VBType & VB_CH7017 )
3495 if ( pVBInfo->IF_DEF_YPbPr == 1 )
3497 if ( ( ( pVBInfo->IF_DEF_LVDS == 0 ) && ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) || ( pVBInfo->VBType & VB_XGI301C ) ) )
3498 || ( ( pVBInfo->IF_DEF_CH7017 == 1 ) && ( pVBInfo->VBType&VB_CH7017 ) ) || ( (pVBInfo->IF_DEF_CH7007 == 1) && (pVBInfo->VBType&VB_CH7007) ) ) /* [Billy] 07/05/04 */
3502 if ( pVBInfo->IF_DEF_HiVision == 1 )
3504 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x35 ) ; /* shampoo add for new scratch */
3520 if ( pVBInfo->IF_DEF_LVDS == 0 )
3522 if ( pVBInfo->IF_DEF_YPbPr == 1 )
3524 if ( pVBInfo->IF_DEF_HiVision == 1 )
3531 if ( pVBInfo->IF_DEF_HiVision == 1 )
3539 if ( pVBInfo->IF_DEF_CH7017 == 1 )
3541 else if ( pVBInfo->IF_DEF_CH7007 == 1 ) /* [Billy] 07/05/03 */
3555 if ( pVBInfo->IF_DEF_LCDA == 1 ) /* Select Display Device */
3557 if ( !( pVBInfo->VBType & VB_NoLCD ) )
3572 if ( pVBInfo->IF_DEF_CRT2Monitor == 1 )
3584 if ( !( pVBInfo->VBType & VB_NoLCD ) )
3599 if ( pVBInfo->IF_DEF_YPbPr == 1 )
3605 if ( pVBInfo->IF_DEF_HiVision == 1 )
3621 if ( pVBInfo->IF_DEF_LCDA == 1 )
3627 if ( pVBInfo->IF_DEF_VideoCapture == 1 )
3629 if ( ( ( HwDeviceExtension->jChipType == XG40 ) && ( pVBInfo->Set_VGAType == XG40 ) )
3630 || ( ( HwDeviceExtension->jChipType == XG41 ) && ( pVBInfo->Set_VGAType == XG41 ) )
3631 || ( ( HwDeviceExtension->jChipType == XG42 ) && ( pVBInfo->Set_VGAType == XG42 ) )
3632 || ( ( HwDeviceExtension->jChipType == XG45 ) && ( pVBInfo->Set_VGAType == XG45 ) ) )
3639 pVBInfo->SetFlag |= EnableVCMode ;
3650 pVBInfo->SetFlag |= ReserveTVOption ;
3655 pVBInfo->VBInfo = tempbx ;
3665 void XGI_GetTVInfo(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
3676 if ( pVBInfo->VBInfo & SetCRT2ToTV )
3680 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ModeFlag */
3681 resinfo = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ; /* si+St_ResInfo */
3685 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
3686 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ; /* si+Ext_ResInfo */
3689 if ( pVBInfo->VBInfo & SetCRT2ToTV )
3691 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x35 ) ;
3702 if ( pVBInfo->IF_DEF_LVDS == 0 )
3704 index1 = XGINew_GetReg1( pVBInfo->P3d4 , 0x38 ) ; //PAL-M/PAL-N Info
3713 if ( pVBInfo->IF_DEF_CH7017 == 1 )
3715 tempbx = XGINew_GetReg1( pVBInfo->P3d4 , 0x35 ) ;
3721 if ( pVBInfo->IF_DEF_CH7007 == 1 ) /* [Billy] 07/05/04 */
3723 tempbx = XGINew_GetReg1( pVBInfo->P3d4 , 0x35 ) ;
3732 if ( pVBInfo->IF_DEF_LVDS == 0 )
3734 if ( pVBInfo->VBInfo & SetCRT2ToSCART )
3738 if ( pVBInfo->IF_DEF_YPbPr == 1 )
3740 if ( pVBInfo->VBInfo & SetCRT2ToYPbPr )
3742 index1 = XGINew_GetReg1( pVBInfo->P3d4 , 0x35 ) ;
3755 if ( pVBInfo->IF_DEF_HiVision == 1 )
3757 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
3763 if ( pVBInfo->IF_DEF_LVDS == 0 )
3765 if ( ( pVBInfo->VBInfo & SetInSlaveMode ) && ( !( pVBInfo->VBInfo & SetNotSimuMode ) ) )
3773 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
3775 if ( pVBInfo->VBInfo & SetInSlaveMode )
3782 else if ( !( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) ) )
3790 pVBInfo->TVInfo = tempbx ;
3801 struct vb_device_info *pVBInfo)
3810 pVBInfo->LCDResInfo = 0 ;
3811 pVBInfo->LCDTypeInfo = 0 ;
3812 pVBInfo->LCDInfo = 0 ;
3816 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ModeFlag // */
3820 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
3821 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ; /* si+Ext_ResInfo// */
3824 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x36 ) ; /* Get LCD Res.Info */
3833 if ( pVBInfo->VBInfo & DriverMode )
3835 tempax = XGINew_GetReg1( pVBInfo->P3d4 , 0x33 ) ;
3836 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
3854 pVBInfo->LCDResInfo = tempbx ;
3858 if( pVBInfo->IF_DEF_OEMUtil == 1 )
3860 pVBInfo->LCDTypeInfo = ( temp & 0xf0 ) >> 4 ;
3863 if ( !( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) )
3870 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x37 ) ;
3874 if ( ( pVBInfo->IF_DEF_ScaleLCD == 1 ) && ( temp & LCDNonExpanding ) )
3879 LCDIdIndex = XGI_GetLCDCapPtr1(pVBInfo) ;
3881 tempax = pVBInfo->LCDCapList[ LCDIdIndex ].LCD_Capability ;
3883 if ( pVBInfo->IF_DEF_LVDS == 0 ) /* shampoo */
3885 if ( ( ( pVBInfo->VBType & VB_XGI302LV ) || ( pVBInfo->VBType & VB_XGI301C ) ) && ( tempax & LCDDualLink ) )
3891 if ( pVBInfo->IF_DEF_CH7017 == 1 )
3899 if ( pVBInfo->IF_DEF_LVDS == 0 )
3901 if ( ( pVBInfo->LCDResInfo == Panel1400x1050 ) && ( pVBInfo->VBInfo & SetCRT2ToLCD ) && ( ModeNo > 0x13 ) && ( resinfo == 9 ) && ( !( tempbx & EnableScalingLCD ) ) )
3912 if ( pVBInfo->IF_DEF_ExpLink == 1 )
3916 /* if ( !( pVBInfo->LCDInfo&LCDNonExpanding ) ) */
3925 if ( pVBInfo->LCDResInfo == Panel1024x768 )
3937 if ( pVBInfo->VBInfo & SetInSlaveMode )
3939 if ( pVBInfo->VBInfo & SetNotSimuMode )
3949 pVBInfo->LCDInfo = tempbx ;
3951 if ( pVBInfo->IF_DEF_PWD == 1 )
3953 if ( pVBInfo->LCDInfo & SetPWDEnable )
3955 if ( ( pVBInfo->VBType & VB_XGI302LV ) || ( pVBInfo->VBType & VB_XGI301C ) )
3959 pVBInfo->LCDInfo &= ~SetPWDEnable ;
3965 if ( pVBInfo->IF_DEF_LVDS == 0 )
3969 if ( pVBInfo->VBInfo & SetInSlaveMode )
3975 pVBInfo->VBInfo &= ~( SetSimuScanMode | SetInSlaveMode | SetCRT2ToLCD ) ;
3976 pVBInfo->VBInfo |= SetCRT2ToLCDA | SetCRT2ToDualEdge ;
3984 if ( pVBInfo->IF_DEF_LVDS == 0 )
3988 if ( pVBInfo->VBInfo & SetInSlaveMode )
3992 pVBInfo->VBInfo&=~(SetSimuScanMode|SetInSlaveMode|SetCRT2ToLCD);
3993 pVBInfo->VBInfo|=SetCRT2ToLCDA|SetCRT2ToDualEdge;
4012 struct vb_device_info *pVBInfo)
4022 /* for (*ModeIdIndex=0;*ModeIdIndex<sizeof(pVBInfo->SModeIDTable)/sizeof(struct XGI_StStruct);(*ModeIdIndex)++) */
4025 if (pVBInfo->SModeIDTable[*ModeIdIndex].St_ModeID == ModeNo)
4027 if (pVBInfo->SModeIDTable[*ModeIdIndex].St_ModeID == 0xFF)
4040 /* for (*ModeIdIndex=0;*ModeIdIndex<sizeof(pVBInfo->EModeIDTable)/sizeof(struct XGI_ExtStruct);(*ModeIdIndex)++) */
4043 if (pVBInfo->EModeIDTable[*ModeIdIndex].Ext_ModeID == ModeNo)
4045 if (pVBInfo->EModeIDTable[*ModeIdIndex].Ext_ModeID == 0xFF)
4067 struct vb_device_info *pVBInfo)
4083 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
4086 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
4095 temp = XGINew_GetReg1( pVBInfo->P3c4 , 0x14 ) ; /* Get DRAM Size */
4149 /*void XGINew_IsLowResolution(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned char XGINew_CheckMemorySize(struct xgi_hw_device_info *HwDeviceExtension, unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
4154 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x0F ) ;
4156 XGINew_SetReg1( pVBInfo->P3c4 , 0x0F , data ) ;
4160 ModeFlag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
4163 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x0F ) ;
4165 XGINew_SetReg1( pVBInfo->P3c4 , 0x0F , data ) ;
4166 data = XGINew_GetReg1( pVBInfo->P3c4 , 0x01 ) ;
4168 XGINew_SetReg1( pVBInfo->P3c4 , 0x01 , data ) ;
4181 void XGI_DisplayOn(struct xgi_hw_device_info *pXGIHWDE, struct vb_device_info *pVBInfo)
4184 XGINew_SetRegANDOR(pVBInfo->P3c4,0x01,0xDF,0x00);
4187 if ( pVBInfo->IF_DEF_LVDS == 1 )
4189 if (!(XGI_XG21GetPSCValue( pVBInfo )&0x1))
4191 XGI_XG21BLSignalVDD( 0x01 , 0x01, pVBInfo ) ; /* LVDS VDD on */
4192 XGI_XG21SetPanelDelay( 2,pVBInfo ) ;
4194 if (!(XGI_XG21GetPSCValue( pVBInfo )&0x20))
4196 XGI_XG21BLSignalVDD( 0x20 , 0x20, pVBInfo ) ; /* LVDS signal on */
4198 XGI_XG21SetPanelDelay( 3,pVBInfo ) ;
4199 XGI_XG21BLSignalVDD( 0x02 , 0x02, pVBInfo ) ; /* LVDS backlight on */
4203 XGI_XG21BLSignalVDD( 0x20 , 0x20, pVBInfo ) ; /* DVO/DVI signal on */
4208 if (pVBInfo->IF_DEF_CH7007 == 1) /* [Billy] 07/05/23 For CH7007 */
4216 if ( pVBInfo->IF_DEF_LVDS == 1 )
4218 if (!(XGI_XG27GetPSCValue( pVBInfo )&0x1))
4220 XGI_XG27BLSignalVDD( 0x01 , 0x01, pVBInfo ) ; /* LVDS VDD on */
4221 XGI_XG21SetPanelDelay( 2,pVBInfo ) ;
4223 if (!(XGI_XG27GetPSCValue( pVBInfo )&0x20))
4225 XGI_XG27BLSignalVDD( 0x20 , 0x20, pVBInfo ) ; /* LVDS signal on */
4227 XGI_XG21SetPanelDelay( 3,pVBInfo ) ;
4228 XGI_XG27BLSignalVDD( 0x02 , 0x02, pVBInfo ) ; /* LVDS backlight on */
4232 XGI_XG27BLSignalVDD( 0x20 , 0x20, pVBInfo ) ; /* DVO/DVI signal on */
4245 void XGI_DisplayOff(struct xgi_hw_device_info *pXGIHWDE, struct vb_device_info *pVBInfo)
4250 if ( pVBInfo->IF_DEF_LVDS == 1 )
4252 XGI_XG21BLSignalVDD( 0x02 , 0x00, pVBInfo ) ; /* LVDS backlight off */
4253 XGI_XG21SetPanelDelay( 3,pVBInfo ) ;
4257 XGI_XG21BLSignalVDD( 0x20 , 0x00, pVBInfo ) ; /* DVO/DVI signal off */
4261 if (pVBInfo->IF_DEF_CH7007 == 1) /*[Billy] 07/05/23 For CH7007 */
4263 /* if( IsCH7007TVMode( pVBInfo ) == 0 ) */
4271 if ((XGI_XG27GetPSCValue( pVBInfo )&0x2))
4273 XGI_XG27BLSignalVDD( 0x02 , 0x00, pVBInfo ) ; /* LVDS backlight off */
4274 XGI_XG21SetPanelDelay( 3,pVBInfo ) ;
4277 if ( pVBInfo->IF_DEF_LVDS == 0 )
4279 XGI_XG27BLSignalVDD( 0x20 , 0x00, pVBInfo ) ; /* DVO/DVI signal off */
4283 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x01 , 0xDF , 0x20 ) ;
4293 void XGI_WaitDisply(struct vb_device_info *pVBInfo)
4295 while( ( XGINew_GetReg2( pVBInfo->P3da ) & 0x01 ) )
4298 while( !( XGINew_GetReg2( pVBInfo->P3da ) & 0x01 ) )
4309 void XGI_SenseCRT1(struct vb_device_info *pVBInfo)
4323 XGINew_SetReg1( pVBInfo->P3c4 , 0x05 , 0x86 ) ;
4326 XGINew_SetReg1( pVBInfo->P3d4 , 0x57 , 0x4A ) ;
4327 XGINew_SetReg1(pVBInfo->P3d4, 0x53, (unsigned char)(XGINew_GetReg1(pVBInfo->P3d4, 0x53) | 0x02));
4329 SR31 = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x31);
4330 CR63 = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x63);
4331 SR01 = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x01);
4333 XGINew_SetReg1(pVBInfo->P3c4, 0x01, (unsigned char)(SR01 & 0xDF));
4334 XGINew_SetReg1(pVBInfo->P3d4, 0x63, (unsigned char)(CR63 & 0xBF));
4336 CR17 = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x17);
4337 XGINew_SetReg1(pVBInfo->P3d4, 0x17, (unsigned char)(CR17 | 0x80)) ;
4339 SR1F = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x1F);
4340 XGINew_SetReg1(pVBInfo->P3c4, 0x1F, (unsigned char)(SR1F | 0x04));
4342 SR07 = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x07);
4343 XGINew_SetReg1(pVBInfo->P3c4, 0x07, (unsigned char)(SR07 & 0xFB));
4344 SR06 = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x06);
4345 XGINew_SetReg1(pVBInfo->P3c4, 0x06, (unsigned char)(SR06 & 0xC3));
4347 XGINew_SetReg1( pVBInfo->P3d4 , 0x11 , 0x00 ) ;
4350 XGINew_SetReg1(pVBInfo->P3d4, (unsigned short)i, CRTCData[i]);
4353 XGINew_SetReg1(pVBInfo->P3d4, (unsigned short)(i + 8), CRTCData[i]);
4356 XGINew_SetReg1(pVBInfo->P3d4, (unsigned short)(i + 4), CRTCData[i]);
4359 XGINew_SetReg1(pVBInfo->P3c4, (unsigned short)(i - 3), CRTCData[i]);
4361 XGINew_SetReg1(pVBInfo->P3c4, 0x0E, (unsigned char)(CRTCData[16] & 0xE0));
4363 XGINew_SetReg1( pVBInfo->P3c4 , 0x31 , 0x00 ) ;
4364 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , 0x1B ) ;
4365 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , 0xE1 ) ;
4367 XGINew_SetReg3( pVBInfo->P3c8 , 0x00 ) ;
4371 XGINew_SetReg3((pVBInfo->P3c8 + 1), (unsigned char)DAC_TEST_PARMS[0]);
4372 XGINew_SetReg3((pVBInfo->P3c8 + 1), (unsigned char)DAC_TEST_PARMS[1]);
4373 XGINew_SetReg3((pVBInfo->P3c8 + 1), (unsigned char)DAC_TEST_PARMS[2]);
4376 XGI_VBLongWait( pVBInfo ) ;
4377 XGI_VBLongWait( pVBInfo ) ;
4378 XGI_VBLongWait( pVBInfo ) ;
4380 XGINew_LCD_Wait_Time( 0x01 , pVBInfo ) ;
4382 XGI_WaitDisply( pVBInfo ) ;
4383 temp = XGINew_GetReg2( pVBInfo->P3c2 ) ;
4387 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x32 , 0xDF , 0x20 ) ;
4391 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x32 , 0xDF , 0x00 ) ;
4395 XGINew_SetReg3( pVBInfo->P3c8 , 0x00 ) ;
4399 XGINew_SetReg3( ( pVBInfo->P3c8 + 1 ) , 0 ) ;
4400 XGINew_SetReg3( ( pVBInfo->P3c8 + 1 ) , 0 ) ;
4401 XGINew_SetReg3( ( pVBInfo->P3c8 + 1 ) , 0 ) ;
4404 XGINew_SetReg1( pVBInfo->P3c4 , 0x01 , SR01 ) ;
4405 XGINew_SetReg1( pVBInfo->P3d4 , 0x63 , CR63 ) ;
4406 XGINew_SetReg1( pVBInfo->P3c4 , 0x31 , SR31 ) ;
4409 XGINew_SetReg1(pVBInfo->P3d4, 0x53,
4410 (unsigned char)(XGINew_GetReg1(pVBInfo->P3d4, 0x53) & 0xFD));
4411 XGINew_SetReg1(pVBInfo->P3c4, 0x1F, (unsigned char)SR1F);
4429 void XGI_WaitDisplay(struct vb_device_info *pVBInfo)
4431 while( !( XGINew_GetReg2( pVBInfo->P3da ) & 0x01 ) ) ;
4433 while( XGINew_GetReg2( pVBInfo->P3da ) & 0x01 ) ;
4447 struct vb_device_info *pVBInfo)
4453 tempbx=pVBInfo->VBInfo ;
4454 pVBInfo->SetFlag |= ProgrammingCRT2 ;
4455 XGI_SearchModeID( ModeNo , &ModeIdIndex, pVBInfo ) ;
4456 pVBInfo->SelectCRT2Rate = 4 ;
4457 RefreshRateTableIndex = XGI_GetRatePtrCRT2( HwDeviceExtension, ModeNo , ModeIdIndex, pVBInfo ) ;
4458 XGI_SaveCRT2Info( ModeNo, pVBInfo ) ;
4459 XGI_GetCRT2ResInfo( ModeNo , ModeIdIndex, pVBInfo) ;
4460 XGI_GetCRT2Data( ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
4461 XGI_PreSetGroup1( ModeNo , ModeIdIndex , HwDeviceExtension , RefreshRateTableIndex, pVBInfo ) ;
4462 XGI_SetGroup1( ModeNo , ModeIdIndex , HwDeviceExtension , RefreshRateTableIndex, pVBInfo ) ;
4463 XGI_SetLockRegs( ModeNo , ModeIdIndex , HwDeviceExtension , RefreshRateTableIndex, pVBInfo ) ;
4464 XGI_SetGroup2( ModeNo , ModeIdIndex , RefreshRateTableIndex , HwDeviceExtension, pVBInfo ) ;
4465 XGI_SetLCDRegs(ModeNo , ModeIdIndex , HwDeviceExtension , RefreshRateTableIndex, pVBInfo ) ;
4466 XGI_SetTap4Regs(pVBInfo) ;
4467 XGI_SetGroup3(ModeNo, ModeIdIndex, pVBInfo);
4468 XGI_SetGroup4( ModeNo , ModeIdIndex , RefreshRateTableIndex , HwDeviceExtension, pVBInfo ) ;
4469 XGI_SetCRT2VCLK( ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
4470 XGI_SetGroup5( ModeNo , ModeIdIndex, pVBInfo) ;
4471 XGI_AutoThreshold( pVBInfo) ;
4482 void XGI_AutoThreshold(struct vb_device_info *pVBInfo)
4484 if ( !( pVBInfo->SetFlag & Win9xDOSMode ) )
4485 XGINew_SetRegOR( pVBInfo->Part1Port , 0x01 , 0x40 ) ;
4495 void XGI_SaveCRT2Info(unsigned short ModeNo, struct vb_device_info *pVBInfo)
4500 XGINew_SetReg1( pVBInfo->P3d4 , 0x34 , ModeNo ) ; /* reserve CR34 for CRT1 Mode No */
4501 temp1 = ( pVBInfo->VBInfo&SetInSlaveMode ) >> 8 ;
4503 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x31 , temp2 , temp1 ) ;
4515 struct vb_device_info *pVBInfo)
4522 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo) ;
4525 xres = pVBInfo->StResInfo[ resindex ].HTotal ;
4526 yres = pVBInfo->StResInfo[ resindex ].VTotal ;
4527 /* modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; si+St_ResInfo */
4531 xres = pVBInfo->ModeResInfo[ resindex ].HTotal ; /* xres->ax */
4532 yres = pVBInfo->ModeResInfo[ resindex ].VTotal ; /* yres->bx */
4533 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex].Ext_ModeFlag ; /* si+St_ModeFlag */
4535 /* if ( pVBInfo->IF_DEF_FSTN )
4551 if ( pVBInfo->VBInfo & SetCRT2ToLCD )
4553 if ( pVBInfo->IF_DEF_LVDS == 0 )
4555 if ( pVBInfo->LCDResInfo == Panel1600x1200 )
4557 if ( !( pVBInfo->LCDInfo & LCDVESATiming ) )
4564 if ( pVBInfo->LCDResInfo == Panel1280x1024 )
4571 if ( pVBInfo->LCDInfo & LCDVESATiming )
4578 if ( pVBInfo->LCDResInfo == Panel1024x768 )
4580 if ( !( pVBInfo->LCDInfo & LCDVESATiming ) )
4582 if ( !( pVBInfo->LCDInfo & LCDNonExpanding ) )
4599 pVBInfo->VGAHDE = xres ;
4600 pVBInfo->HDE = xres ;
4601 pVBInfo->VGAVDE = yres ;
4602 pVBInfo->VDE = yres ;
4612 unsigned char XGI_IsLCDDualLink(struct vb_device_info *pVBInfo)
4615 if ( ( ( ( pVBInfo->VBInfo & SetCRT2ToLCD ) | SetCRT2ToLCDA ) ) && ( pVBInfo->LCDInfo & SetLCDDualLink ) ) /* shampoo0129 */
4628 void XGI_GetCRT2Data(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo)
4640 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ResInfo */
4641 resinfo = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ;
4645 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ; /* si+Ext_ResInfo */
4646 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
4649 pVBInfo->NewFlickerMode = 0 ;
4650 pVBInfo->RVBHRS = 50 ;
4652 if ( pVBInfo->VBInfo & SetCRT2ToRAMDAC )
4654 XGI_GetRAMDAC2DATA( ModeNo , ModeIdIndex , RefreshRateTableIndex,pVBInfo ) ;
4660 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
4662 LCDPtr = (struct XGI_LCDDataStruct *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
4664 pVBInfo->RVBHCMAX = LCDPtr->RVBHCMAX ;
4665 pVBInfo->RVBHCFACT = LCDPtr->RVBHCFACT ;
4666 pVBInfo->VGAHT = LCDPtr->VGAHT ;
4667 pVBInfo->VGAVT = LCDPtr->VGAVT ;
4668 pVBInfo->HT = LCDPtr->LCDHT ;
4669 pVBInfo->VT = LCDPtr->LCDVT ;
4671 if ( pVBInfo->LCDResInfo == Panel1024x768 )
4676 if ( !( pVBInfo->LCDInfo & LCDVESATiming ) )
4678 if ( pVBInfo->VGAVDE == 357 )
4680 else if ( pVBInfo->VGAVDE == 420 )
4682 else if ( pVBInfo->VGAVDE == 525 )
4684 else if ( pVBInfo->VGAVDE == 600 )
4686 /* else if(pVBInfo->VGAVDE==350) tempbx=560; */
4687 /* else if(pVBInfo->VGAVDE==400) tempbx=640; */
4694 else if ( pVBInfo->LCDResInfo == Panel1024x768x75 )
4699 else if ( pVBInfo->LCDResInfo == Panel1280x1024 )
4702 if ( pVBInfo->VGAVDE == 360 )
4704 else if ( pVBInfo->VGAVDE == 375 )
4706 else if ( pVBInfo->VGAVDE == 405 )
4711 else if ( pVBInfo->LCDResInfo == Panel1280x1024x75 )
4716 else if ( pVBInfo->LCDResInfo == Panel1280x960 )
4719 if ( pVBInfo->VGAVDE == 350 )
4721 else if ( pVBInfo->VGAVDE == 400 )
4723 else if ( pVBInfo->VGAVDE == 1024 )
4728 else if ( pVBInfo->LCDResInfo == Panel1400x1050 )
4733 if ( pVBInfo->VGAVDE == 1024 )
4739 else if ( pVBInfo->LCDResInfo == Panel1600x1200 )
4743 if ( !( pVBInfo->LCDInfo & LCDVESATiming ) )
4745 if ( pVBInfo->VGAVDE == 350 )
4747 else if ( pVBInfo->VGAVDE == 400 )
4752 if ( pVBInfo->LCDInfo & LCDNonExpanding )
4754 tempax = pVBInfo->VGAHDE ;
4755 tempbx = pVBInfo->VGAVDE ;
4758 pVBInfo->HDE = tempax ;
4759 pVBInfo->VDE = tempbx ;
4763 if ( pVBInfo->VBInfo & ( SetCRT2ToTV ) )
4766 TVPtr = (struct XGI_TVDataStruct *)XGI_GetTVPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
4768 pVBInfo->RVBHCMAX = TVPtr->RVBHCMAX ;
4769 pVBInfo->RVBHCFACT = TVPtr->RVBHCFACT ;
4770 pVBInfo->VGAHT = TVPtr->VGAHT ;
4771 pVBInfo->VGAVT = TVPtr->VGAVT ;
4772 pVBInfo->HDE = TVPtr->TVHDE ;
4773 pVBInfo->VDE = TVPtr->TVVDE ;
4774 pVBInfo->RVBHRS = TVPtr->RVBHRS ;
4775 pVBInfo->NewFlickerMode = TVPtr->FlickerMode ;
4777 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
4780 pVBInfo->NewFlickerMode = 0x40 ;
4782 pVBInfo->NewFlickerMode = 0x40 ;
4784 pVBInfo->NewFlickerMode = 0x40 ;
4786 if ( pVBInfo->VGAVDE == 350 )
4787 pVBInfo->TVInfo |= TVSimuMode ;
4792 if ( pVBInfo->VBInfo & SetInSlaveMode )
4794 if ( pVBInfo->TVInfo & TVSimuMode )
4807 else if ( pVBInfo->VBInfo & SetCRT2ToYPbPr )
4809 if ( pVBInfo->TVInfo & SetYPbPrMode750p )
4815 if ( pVBInfo->TVInfo & SetYPbPrMode525p )
4820 else if ( pVBInfo->TVInfo & SetYPbPrMode525i )
4824 if ( pVBInfo->TVInfo & NTSC1024x768 )
4832 if ( !( pVBInfo->TVInfo & SetPALTV ) )
4836 if ( pVBInfo->TVInfo & NTSC1024x768 )
4841 pVBInfo->HT = tempax ;
4842 pVBInfo->VT = tempbx ;
4854 void XGI_SetCRT2VCLK(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo)
4858 tempal = XGI_GetVCLKPtr( RefreshRateTableIndex , ModeNo , ModeIdIndex, pVBInfo ) ;
4859 XGI_GetVCLKLen( tempal, &di_0 , &di_1, pVBInfo ) ;
4860 XGI_GetLCDVCLKPtr( &di_0 , &di_1, pVBInfo ) ;
4862 if ( pVBInfo->VBType & VB_XGI301 ) /* shampoo 0129 */
4864 XGINew_SetReg1(pVBInfo->Part4Port , 0x0A , 0x10 ) ;
4865 XGINew_SetReg1(pVBInfo->Part4Port , 0x0B , di_1 ) ;
4866 XGINew_SetReg1(pVBInfo->Part4Port , 0x0A , di_0 ) ;
4870 XGINew_SetReg1( pVBInfo->Part4Port , 0x0A , di_0 ) ;
4871 XGINew_SetReg1( pVBInfo->Part4Port , 0x0B , di_1 ) ;
4874 XGINew_SetReg1( pVBInfo->Part4Port , 0x00 , 0x12 ) ;
4876 if ( pVBInfo->VBInfo & SetCRT2ToRAMDAC )
4877 XGINew_SetRegOR( pVBInfo->Part4Port , 0x12 , 0x28 ) ;
4879 XGINew_SetRegOR( pVBInfo->Part4Port , 0x12 , 0x08 ) ;
4890 struct vb_device_info *pVBInfo)
4894 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
4896 if ( pVBInfo->IF_DEF_ScaleLCD == 1 )
4898 if ( pVBInfo->LCDInfo & EnableScalingLCD )
4902 /* index = XGI_GetLCDCapPtr(pVBInfo) ; */
4903 index = XGI_GetLCDCapPtr1( pVBInfo) ;
4905 if ( pVBInfo->VBInfo & SetCRT2ToLCD )
4907 *di_0 = pVBInfo->LCDCapList[ index ].LCUCHAR_VCLKData1 ;
4908 *di_1 = pVBInfo->LCDCapList[ index ].LCUCHAR_VCLKData2 ;
4912 *di_0 = pVBInfo->LCDCapList[ index ].LCDA_VCLKData1 ;
4913 *di_1 = pVBInfo->LCDCapList[ index ].LCDA_VCLKData2 ;
4928 struct vb_device_info *pVBInfo)
4938 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ResInfo */
4940 modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; /* si+Ext_ResInfo */
4943 if ( ( pVBInfo->SetFlag & ProgrammingCRT2 ) && ( !( pVBInfo->LCDInfo & EnableScalingLCD ) ) )
4945 index = XGI_GetLCDCapPtr(pVBInfo) ;
4946 tempal = pVBInfo->LCDCapList[ index ].LCD_VCLK ;
4948 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
4952 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV| VB_XGI302LV| VB_XGI301C ) )
4954 if(pVBInfo->VBInfo&SetCRT2ToHiVisionTV)
4957 if(!(pVBInfo->TVInfo & RPLLDIV2XO))
4959 if(pVBInfo->TVInfo & TVSimuMode)
4969 if ( pVBInfo->TVInfo & SetYPbPrMode750p )
4975 if ( pVBInfo->TVInfo & SetYPbPrMode525p )
4983 if ( !( pVBInfo->TVInfo & NTSC1024x768 ) )
4986 if ( !( pVBInfo->TVInfo & RPLLDIV2XO ) )
4990 if ( pVBInfo->VBInfo & SetCRT2ToTV )
4994 if((pVBInfo->IF_DEF_CH7017==1)&&(pVBInfo->VBType&VB_CH7017))
4997 *tempal = pVBInfo->SModeIDTable[ModeIdIndex].St_CRT2CRTC;
4999 *tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
5003 if(pVBInfo->TVInfo & SetPALTV)
5005 if(pVBInfo->TVInfo & SetCHTVOverScan)
5011 if((pVBInfo->IF_DEF_CH7007==1)&&(pVBInfo->VBType&VB_CH7007)) /* [Billy] 07/05/08 CH7007 */
5013 /* VideoDebugPrint((0, "XGI_GetVCLKPtr: pVBInfo->IF_DEF_CH7007==1\n")); */
5014 if ( (pVBInfo->VBInfo & SetCRT2ToTV) )
5018 tempal = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC ;
5022 tempal = pVBInfo->RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;
5028 if(pVBInfo->TVInfo & SetPALTV)
5032 if(pVBInfo->TVInfo & SetCHTVOverScan)
5039 if ( pVBInfo->IF_DEF_CH7007 == 1 )
5065 CHTVVCLKPtr = pVBInfo->CHTVVCLKUNTSC ;
5068 CHTVVCLKPtr = pVBInfo->CHTVVCLKONTSC ;
5071 CHTVVCLKPtr = pVBInfo->CHTVVCLKUPAL ;
5074 CHTVVCLKPtr = pVBInfo->CHTVVCLKOPAL ;
5087 tempal = (unsigned char)XGINew_GetReg2((pVBInfo->P3ca + 0x02));
5091 if ( ( pVBInfo->LCDInfo & EnableScalingLCD ) && ( modeflag & Charx8Dot ) ) /* for Dot8 Scaling LCD */
5097 tempal = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRTVCLK ;
5109 unsigned char *di_1, struct vb_device_info *pVBInfo)
5111 if ( pVBInfo->IF_DEF_CH7007 == 1 ) /* [Billy] 2007/05/16 */
5113 /* VideoDebugPrint((0, "XGI_GetVCLKLen: pVBInfo->IF_DEF_CH7007==1\n")); */
5117 else if ( pVBInfo->VBType & ( VB_XGI301 | VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
5119 if ( ( !( pVBInfo->VBInfo & SetCRT2ToLCDA ) ) && ( pVBInfo->SetFlag & ProgrammingCRT2 ) )
5143 struct vb_device_info *pVBInfo)
5148 if ( pVBInfo->VBInfo & SetInSlaveMode )
5153 offset = XGI_GetOffset( ModeNo , ModeIdIndex , RefreshRateTableIndex , HwDeviceExtension, pVBInfo ) ;
5155 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , temp ) ;
5157 XGINew_SetReg1(pVBInfo->Part1Port , 0x09 , temp);
5159 XGINew_SetReg1(pVBInfo->Part1Port, 0x03, temp);
5169 unsigned short XGI_GetOffset(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
5178 modeinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeInfo ;
5182 infoflag = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_InfoFlag ;
5187 temp = pVBInfo->ScreenOffset[ index ] ;
5194 colordepth = XGI_GetColorDepth( ModeNo , ModeIdIndex, pVBInfo ) ;
5218 void XGI_SetCRT2FIFO(struct vb_device_info *pVBInfo)
5220 XGINew_SetReg1( pVBInfo->Part1Port , 0x01 , 0x3B ) ; /* threshold high ,disable auto threshold */
5221 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x02 , ~( 0x3F ) , 0x04 ) ; /* threshold low default 04h */
5234 struct vb_device_info *pVBInfo)
5242 CRT1Index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ;
5244 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
5247 XGI_SetCRT2Offset( ModeNo , ModeIdIndex , RefreshRateTableIndex , HwDeviceExtension, pVBInfo ) ;
5248 XGI_SetCRT2FIFO(pVBInfo) ;
5253 XGINew_SetReg1( pVBInfo->Part1Port , tempcx , 0x0 ) ;
5256 XGINew_SetReg1( pVBInfo->Part1Port , 0x50 , 0x00 ) ;
5257 XGINew_SetReg1( pVBInfo->Part1Port , 0x02 , 0x44 ) ; /* temp 0206 */
5270 struct vb_device_info *pVBInfo)
5283 CRT1Index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ;
5285 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
5290 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
5294 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
5300 temp = ( pVBInfo->VGAHT / 2 - 1 ) & 0x0FF ; /* BTVGA2HT 0x08,0x09 */
5301 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , temp ) ;
5302 temp = ( ( ( pVBInfo->VGAHT / 2 - 1 ) & 0xFF00 ) >> 8 ) << 4 ;
5303 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x09 , ~0x0F0 , temp ) ;
5304 temp = ( pVBInfo->VGAHDE / 2 + 16 ) & 0x0FF ; /* BTVGA2HDEE 0x0A,0x0C */
5305 XGINew_SetReg1( pVBInfo->Part1Port , 0x0A , temp ) ;
5306 tempcx = ( ( pVBInfo->VGAHT - pVBInfo->VGAHDE ) / 2 ) >> 2 ;
5307 pushbx = pVBInfo->VGAHDE / 2 + 16 ;
5312 if ( pVBInfo->VBInfo & SetCRT2ToRAMDAC )
5314 tempbx = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 4 ] ;
5315 tempbx |= ( ( pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 14 ] & 0xC0 ) << 2 ) ;
5317 tempcx = pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[ 5 ] ;
5319 temp = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 15 ] ;
5327 if ( tempcx > ( pVBInfo->VGAHT / 2 ) )
5328 tempcx = pVBInfo->VGAHT / 2 ;
5332 XGINew_SetReg1( pVBInfo->Part1Port , 0x0B , temp ) ;
5336 temp = ( pVBInfo->VGAHT - 1 ) & 0x0FF ; /* BTVGA2HT 0x08,0x09 */
5337 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , temp ) ;
5338 temp = ( ( ( pVBInfo->VGAHT - 1 ) & 0xFF00 ) >> 8 ) << 4 ;
5339 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x09 , ~0x0F0 , temp ) ;
5340 temp = ( pVBInfo->VGAHDE + 16 ) & 0x0FF ; /* BTVGA2HDEE 0x0A,0x0C */
5341 XGINew_SetReg1( pVBInfo->Part1Port , 0x0A , temp ) ;
5342 tempcx = ( pVBInfo->VGAHT - pVBInfo->VGAHDE ) >> 2 ; /* cx */
5343 pushbx = pVBInfo->VGAHDE + 16 ;
5348 if ( pVBInfo->VBInfo & SetCRT2ToRAMDAC )
5350 tempbx = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 3 ] ;
5351 tempbx |= ( ( pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 5 ] & 0xC0 ) << 2 ) ;
5353 tempcx = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 4 ] ;
5355 temp = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 6 ] ;
5362 if ( tempcx > pVBInfo->VGAHT )
5363 tempcx = pVBInfo->VGAHT ;
5366 XGINew_SetReg1( pVBInfo->Part1Port , 0x0B , temp ) ;
5374 XGINew_SetReg1( pVBInfo->Part1Port , 0x0C , temp ) ;
5376 XGINew_SetReg1( pVBInfo->Part1Port , 0x0D , temp ) ;
5377 tempcx = ( pVBInfo->VGAVT - 1 ) ;
5380 if ( pVBInfo->IF_DEF_CH7005 == 1 )
5382 if ( pVBInfo->VBInfo & 0x0C )
5388 XGINew_SetReg1( pVBInfo->Part1Port , 0x0E , temp ) ;
5389 tempbx = pVBInfo->VGAVDE - 1 ;
5391 XGINew_SetReg1( pVBInfo->Part1Port , 0x0F , temp ) ;
5394 XGINew_SetReg1( pVBInfo->Part1Port , 0x12 , temp ) ;
5396 tempax = pVBInfo->VGAVDE ;
5397 tempbx = pVBInfo->VGAVDE ;
5398 tempcx = pVBInfo->VGAVT ;
5399 tempbx = ( pVBInfo->VGAVT + pVBInfo->VGAVDE ) >> 1 ; /* BTVGA2VRS 0x10,0x11 */
5400 tempcx = ( ( pVBInfo->VGAVT - pVBInfo->VGAVDE ) >> 4 ) + tempbx + 1 ; /* BTVGA2VRE 0x11 */
5402 if ( pVBInfo->VBInfo & SetCRT2ToRAMDAC )
5404 tempbx = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 10 ] ;
5405 temp = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 9 ] ;
5413 temp = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 14 ] ;
5418 temp = pVBInfo->XGINEWUB_CRT1Table[ CRT1Index ].CR[ 11 ] ;
5423 XGINew_SetReg1( pVBInfo->Part1Port , 0x10 , temp ) ;
5426 XGINew_SetReg1( pVBInfo->Part1Port , 0x11 , temp ) ;
5435 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2C , ~0x0C0 , tempax ) ;
5448 struct vb_device_info *pVBInfo)
5462 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ResInfo */
5463 resinfo = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ;
5467 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ; /* si+Ext_ResInfo */
5468 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
5469 CRT1Index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ;
5473 if ( !( pVBInfo->VBInfo & SetInSlaveMode ) )
5479 XGINew_SetReg1( pVBInfo->Part1Port , 0x03 , temp ) ;
5484 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
5487 tempax = pVBInfo->VGAHDE ; /* 0x04 Horizontal Display End */
5495 XGINew_SetReg1( pVBInfo->Part1Port , 0x04 , temp ) ;
5499 if ( pVBInfo->VBInfo & SetCRT2ToTV )
5501 if ( !( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) ) )
5504 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
5506 if ( pVBInfo->VBType & VB_XGI301LV )
5508 if ( pVBInfo->VBExtInfo == VB_YPbPr1080i )
5520 XGINew_SetReg1( pVBInfo->Part1Port , 0x05 , temp ) ; /* 0x05 Horizontal Display Start */
5521 XGINew_SetReg1( pVBInfo->Part1Port , 0x06 , 0x03 ) ; /* 0x06 Horizontal Blank end */
5523 if ( !( pVBInfo->VBInfo & DisableCRT2Display ) )
5525 if ( pVBInfo->VBInfo & SetCRT2ToTV )
5526 tempax = pVBInfo->VGAHT ;
5528 tempax = XGI_GetVGAHT2( pVBInfo) ;
5531 if ( tempax >= pVBInfo->VGAHT )
5533 tempax = pVBInfo->VGAHT ;
5543 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
5549 if ( pVBInfo->TVInfo & TVSimuMode )
5564 if ( pVBInfo->VBInfo & SetCRT2ToTV )
5572 if ( pVBInfo->VGAHDE >= 800 )
5584 if ( pVBInfo->LCDResInfo != Panel1280x960 )
5586 if( pVBInfo->VGAHDE >= 800 )
5589 if ( pVBInfo->ModeType == ModeEGA )
5591 if ( pVBInfo->VGAVDE == 1024 )
5594 if ( pVBInfo->LCDResInfo != Panel1280x1024 )
5601 if ( pVBInfo->VGAHDE >= 1280 )
5603 if ( pVBInfo->LCDResInfo != Panel1280x960 )
5605 if ( pVBInfo->LCDInfo & LCDNonExpanding )
5617 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , temp ) ; /* 0x07 Horizontal Retrace Start */
5618 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0 ) ; /* 0x08 Horizontal Retrace End */
5620 if ( pVBInfo->VBInfo & SetCRT2ToTV )
5622 if ( pVBInfo->TVInfo & TVSimuMode )
5626 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , 0x5b ) ;
5627 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0x03 ) ;
5632 if ( pVBInfo->TVInfo & SetNTSCTV )
5634 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , 0x2A ) ;
5635 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0x61 ) ;
5639 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , 0x2A ) ;
5640 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0x41 ) ;
5641 XGINew_SetReg1( pVBInfo->Part1Port , 0x0C , 0xF0 ) ;
5647 if ( pVBInfo->TVInfo & SetNTSCTV )
5649 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , 0x54 ) ;
5650 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0x00 ) ;
5654 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , 0x55 ) ;
5655 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0x00 ) ;
5656 XGINew_SetReg1( pVBInfo->Part1Port , 0x0C , 0xF0 ) ;
5662 if ( pVBInfo->TVInfo & SetNTSCTV )
5664 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , 0x30 ) ;
5665 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0x03 ) ;
5669 XGINew_SetReg1( pVBInfo->Part1Port , 0x07 , 0x2f ) ;
5670 XGINew_SetReg1( pVBInfo->Part1Port , 0x08 , 0x02 ) ;
5676 XGINew_SetReg1( pVBInfo->Part1Port , 0x18 , 0x03 ) ; /* 0x18 SR0B */
5677 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x19 , 0xF0 , 0x00 ) ;
5678 XGINew_SetReg1( pVBInfo->Part1Port , 0x09 , 0xFF ) ; /* 0x09 Set Max VT */
5680 tempbx = pVBInfo->VGAVT ;
5683 tempbx = pVBInfo->VGAVDE ; /* 0x0E Virtical Display End */
5698 if ( pVBInfo->VBInfo & SetCRT2ToLCD )
5700 if ( pVBInfo->LCDResInfo == Panel1024x768 )
5702 if ( !( pVBInfo->LCDInfo & LCDVESATiming ) )
5715 XGINew_SetReg1( pVBInfo->Part1Port , 0x10 ,temp ) ; /* 0x10 vertical Blank Start */
5719 XGINew_SetReg1( pVBInfo->Part1Port , 0x0E , temp ) ;
5739 XGINew_SetReg1( pVBInfo->Part1Port , 0x0B , temp ) ;
5746 XGINew_SetReg1( pVBInfo->Part1Port , 0x11 , 0x00 ) ; /* 0x11 Vertival Blank End */
5759 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
5761 if ( pVBInfo->VBType & VB_XGI301LV )
5763 if ( pVBInfo->TVInfo & SetYPbPrMode1080i )
5767 if ( pVBInfo->TVInfo & TVSimuMode )
5769 if ( pVBInfo->TVInfo & SetPALTV )
5771 if ( pVBInfo->VBType & VB_XGI301LV )
5773 if ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p | SetYPbPrMode1080i ) ) )
5787 if ( pVBInfo->TVInfo & TVSimuMode )
5789 if ( pVBInfo->TVInfo & SetPALTV )
5791 if ( pVBInfo->VBType & VB_XGI301LV )
5793 if ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p | SetYPbPrMode1080i ) ) )
5807 if ( ( pVBInfo->TVInfo & SetPALTV ) )
5819 XGINew_SetReg1( pVBInfo->Part1Port , 0x0C , temp ) ;
5822 XGINew_SetReg1( pVBInfo->Part1Port , 0x10 , temp ) ;
5831 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x0B , 0x0FF , 0x20 ) ;
5854 XGINew_SetReg1( pVBInfo->Part1Port , 0x0D , temp ) ; /* 0x0D vertical Retrace End */
5862 XGINew_SetReg1( pVBInfo->Part1Port , 0x0A , temp ) ; /* 0x0A CR07 */
5864 XGINew_SetReg1( pVBInfo->Part1Port , 0x17 , temp ) ; /* 0x17 SR0A */
5870 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
5873 XGINew_SetReg1( pVBInfo->Part1Port , 0x16 , temp ) ; /* 0x16 SR01 */
5874 XGINew_SetReg1( pVBInfo->Part1Port , 0x0F , 0 ) ; /* 0x0F CR14 */
5875 XGINew_SetReg1( pVBInfo->Part1Port , 0x12 , 0 ) ; /* 0x12 CR17 */
5877 if ( pVBInfo->LCDInfo & LCDRGB18Bit )
5882 XGINew_SetReg1( pVBInfo->Part1Port , 0x1A , temp ) ; /* 0x1A SR0E */
5895 struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
5918 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ResInfo */
5919 resinfo = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ;
5920 crt2crtc = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC ;
5924 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ; /* si+Ext_ResInfo */
5925 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
5926 crt2crtc = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT2CRTC ;
5931 if ( !( pVBInfo->VBInfo & SetCRT2ToAVIDEO ) )
5934 if ( !( pVBInfo->VBInfo & SetCRT2ToSVIDEO ) )
5937 if ( pVBInfo->VBInfo & SetCRT2ToSCART )
5940 if ( !( pVBInfo->TVInfo & SetPALTV ) )
5943 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
5946 if ( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) )
5951 XGINew_SetReg1( pVBInfo->Part2Port , 0x0 , tempax ) ;
5952 TimingPoint = pVBInfo->NTSCTiming ;
5954 if ( pVBInfo->TVInfo & SetPALTV )
5956 TimingPoint = pVBInfo->PALTiming ;
5959 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
5961 TimingPoint = pVBInfo->HiTVExtTiming ;
5963 if ( pVBInfo->VBInfo & SetInSlaveMode )
5964 TimingPoint = pVBInfo->HiTVSt2Timing ;
5966 if ( pVBInfo->SetFlag & TVSimuMode )
5967 TimingPoint = pVBInfo->HiTVSt1Timing ;
5970 TimingPoint = pVBInfo->HiTVTextTiming ;
5973 if ( pVBInfo->VBInfo & SetCRT2ToYPbPr )
5975 if ( pVBInfo->TVInfo & SetYPbPrMode525i )
5976 TimingPoint = pVBInfo->YPbPr525iTiming ;
5978 if ( pVBInfo->TVInfo & SetYPbPrMode525p )
5979 TimingPoint = pVBInfo->YPbPr525pTiming ;
5981 if ( pVBInfo->TVInfo & SetYPbPrMode750p )
5982 TimingPoint = pVBInfo->YPbPr750pTiming ;
5987 XGINew_SetReg1( pVBInfo->Part2Port , i , TimingPoint[ j ] ) ;
5992 XGINew_SetReg1( pVBInfo->Part2Port , i , TimingPoint[ j ] ) ; /* di->temp2[j] */
5995 if ( pVBInfo->VBInfo & SetCRT2ToTV )
5997 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x3A , 0x1F , 0x00 ) ;
6000 temp = pVBInfo->NewFlickerMode ;
6002 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x0A , 0xFF , temp ) ;
6004 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
6007 if ( pVBInfo->TVInfo & SetPALTV )
6012 if ( pVBInfo->VDE <= tempax )
6014 tempax -= pVBInfo->VDE ;
6021 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6023 if ( pVBInfo->VBInfo & ( SetCRT2ToAVIDEO | SetCRT2ToSVIDEO | SetCRT2ToSCART | SetCRT2ToYPbPr ) )
6025 tempcx=pVBInfo->VGAHDE;
6029 if ( pVBInfo->TVInfo & SetPALTV )
6035 XGINew_SetReg1( pVBInfo->Part2Port , 0x01 , temp ) ;
6040 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6042 if ( ( pVBInfo->VBInfo & ( SetCRT2ToAVIDEO | SetCRT2ToSVIDEO | SetCRT2ToSCART | SetCRT2ToYPbPr ) ) )
6044 tempcx = pVBInfo->VGAHDE ;
6048 if ( pVBInfo->TVInfo & SetPALTV )
6053 XGINew_SetReg1( pVBInfo->Part2Port , 0x02 , temp ) ;
6057 tempcx = pVBInfo->HT ;
6059 if ( XGI_IsLCDDualLink( pVBInfo ) )
6064 XGINew_SetReg1( pVBInfo->Part2Port , 0x1B , temp ) ;
6067 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x1D , ~0x0F , temp ) ;
6069 tempcx = pVBInfo->HT >> 1 ;
6073 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
6080 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x22 , 0x0F , temp ) ;
6086 XGINew_SetReg1( pVBInfo->Part2Port , 0x24 , temp ) ;
6089 XGINew_SetRegANDOR(pVBInfo->Part2Port,0x25,0x0F,temp);
6093 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
6100 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x29 , 0x0F , temp ) ;
6105 XGINew_SetReg1( pVBInfo->Part2Port , 0x27 , temp ) ;
6107 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x28 , 0x0F , temp ) ;
6110 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
6117 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x2A , 0x0F , temp ) ;
6125 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x2D , 0x0F ,temp ) ;
6129 if ( !( pVBInfo->VBInfo & SetCRT2ToTV ) )
6131 tempax = XGI_GetVGAHT2( pVBInfo) ;
6135 XGINew_SetReg1( pVBInfo->Part2Port , 0x2E , temp ) ;
6137 tempbx = pVBInfo->VDE ;
6139 if ( pVBInfo->VGAVDE == 360 )
6141 if ( pVBInfo->VGAVDE == 375 )
6143 if ( pVBInfo->VGAVDE == 405 )
6146 if ( pVBInfo->VBInfo & SetCRT2ToTV )
6148 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6150 if ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) ) )
6160 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
6162 if ( pVBInfo->VBType & VB_XGI301LV )
6164 if ( pVBInfo->TVInfo & SetYPbPrMode1080i )
6166 if ( pVBInfo->VBInfo & SetInSlaveMode )
6175 if ( pVBInfo->VBInfo & SetInSlaveMode )
6183 XGINew_SetReg1( pVBInfo->Part2Port , 0x2F , temp ) ;
6188 if ( !( pVBInfo->VBInfo & SetCRT2ToHiVisionTV ) )
6190 if ( pVBInfo->VBType & VB_XGI301LV )
6192 if ( pVBInfo->TVInfo & SetYPbPrMode1080i )
6196 if ( !( pVBInfo->VBInfo & SetCRT2ToSVIDEO ) )
6203 if ( !( pVBInfo->VBInfo & SetCRT2ToSVIDEO ) )
6208 XGINew_SetReg1( pVBInfo->Part2Port , 0x30 , temp ) ;
6210 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) ) /* TV gatingno */
6212 tempbx = pVBInfo->VDE ;
6215 if ( pVBInfo->VBInfo & SetCRT2ToTV )
6217 if ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) ) )
6221 if ( pVBInfo->VBType & ( VB_XGI302LV | VB_XGI301C ) )
6230 XGINew_SetReg1( pVBInfo->Part4Port , 0x10 , temp ) ;
6234 XGINew_SetReg1( pVBInfo->Part2Port , 0x46 , temp ) ;
6236 XGINew_SetReg1( pVBInfo->Part2Port , 0x47 , temp ) ;
6243 tempcx = pVBInfo->VGAHDE ;
6244 if ( tempcx >= pVBInfo->HDE )
6253 if( pVBInfo->VBInfo & SetCRT2ToTV ) { /*301b*/
6254 if(pVBInfo->VGAHDE>=1024)
6257 if(pVBInfo->VGAHDE>=1280)
6273 tempeax = pVBInfo->VGAHDE ;
6282 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6288 tempecx = pVBInfo->HDE ;
6299 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6315 XGINew_SetReg1( pVBInfo->Part2Port , 0x44 , temp ) ;
6317 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x45 , ~0x03F , temp ) ;
6323 if ( !( pVBInfo->VBInfo & SetCRT2ToLCD ) )
6326 XGINew_SetRegANDOR(pVBInfo->Part2Port,0x46,~0x1F,temp);
6327 if ( pVBInfo->TVInfo & SetPALTV )
6339 XGINew_SetReg1( pVBInfo->Part2Port , 0x4b , temp ) ;
6341 XGINew_SetReg1( pVBInfo->Part2Port , 0x4c , temp ) ;
6347 if ( pVBInfo->VBInfo & SetCRT2ToYPbPr )
6351 if ( pVBInfo->TVInfo & SetYPbPrMode525p )
6354 if ( pVBInfo->TVInfo & SetYPbPrMode750p )
6358 XGINew_SetReg1( pVBInfo->Part2Port , 0x4d , temp ) ;
6359 temp=XGINew_GetReg1( pVBInfo->Part2Port , 0x43 ) ; /* 301b change */
6360 XGINew_SetReg1( pVBInfo->Part2Port , 0x43, (unsigned short)( temp - 3 ) ) ;
6362 if ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) ) )
6364 if ( pVBInfo->TVInfo & NTSC1024x768 )
6369 XGINew_SetReg1( pVBInfo->Part2Port , i , TimingPoint[ j ] ) ;
6371 XGINew_SetReg1( pVBInfo->Part2Port , 0x43 , 0x72 ) ;
6376 if ( pVBInfo->VBType & VB_XGI301C )
6378 if ( pVBInfo->TVInfo & SetPALMTV )
6379 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x4E , ~0x08 , 0x08 ) ; /* PALM Mode */
6382 if ( pVBInfo->TVInfo & SetPALMTV )
6384 tempax = (unsigned char)XGINew_GetReg1(pVBInfo->Part2Port, 0x01);
6386 XGINew_SetRegAND( pVBInfo->Part2Port , 0x01 , tempax ) ;
6388 /* if ( !( pVBInfo->VBType & VB_XGI301C ) ) */
6389 XGINew_SetRegAND( pVBInfo->Part2Port , 0x00 , 0xEF ) ;
6392 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
6394 if ( !( pVBInfo->VBInfo & SetInSlaveMode ) )
6396 XGINew_SetReg1( pVBInfo->Part2Port , 0x0B , 0x00 ) ;
6400 if ( pVBInfo->VBInfo & SetCRT2ToTV )
6413 void XGI_SetLCDRegs(unsigned short ModeNo, unsigned short ModeIdIndex, struct xgi_hw_device_info *HwDeviceExtension, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo)
6434 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ResInfo */
6435 resinfo = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ;
6439 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ; /* si+Ext_ResInfo */
6440 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
6441 CRT1Index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ;
6445 if ( !( pVBInfo->VBInfo & SetCRT2ToLCD ) )
6450 tempbx = pVBInfo->HDE ; /* RHACTE=HDE-1 */
6452 if ( XGI_IsLCDDualLink( pVBInfo ) )
6457 XGINew_SetReg1( pVBInfo->Part2Port , 0x2C , temp ) ;
6460 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x2B , 0x0F , temp ) ;
6463 if ( pVBInfo->LCDResInfo == Panel1280x1024 )
6465 if ( pVBInfo->ModeType == ModeEGA )
6467 if ( pVBInfo->VGAHDE >= 1024 )
6470 if ( pVBInfo->LCDInfo & LCDVESATiming )
6476 XGINew_SetReg1( pVBInfo->Part2Port , 0x0B , temp ) ;
6477 tempbx = pVBInfo->VDE ; /* RTVACTEO=(VDE-1)&0xFF */
6481 XGINew_SetReg1( pVBInfo->Part2Port , 0x03 , temp ) ;
6483 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x0C , ~0x07 , temp ) ;
6485 tempcx = pVBInfo->VT - 1 ;
6488 XGINew_SetReg1( pVBInfo->Part2Port , 0x19 , temp ) ;
6491 XGINew_SetReg1( pVBInfo->Part2Port , 0x1A , temp ) ;
6492 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x09 , 0xF0 , 0x00 ) ;
6493 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x0A , 0xF0 , 0x00 ) ;
6494 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x17 , 0xFB , 0x00 ) ;
6495 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x18 , 0xDF , 0x00 ) ;
6499 LCDBDesPtr = (struct XGI_LCDDesStruct *)XGI_GetLcdPtr(tempbx, ModeNo, ModeIdIndex, RefreshRateTableIndex, pVBInfo);
6500 tempah = pVBInfo->LCDResInfo ;
6524 if ( pVBInfo->LCDInfo & EnableScalingLCD )
6526 tempbx = pVBInfo->HDE ;
6527 tempcx = pVBInfo->VDE ;
6531 tempax = pVBInfo->VT ;
6532 pVBInfo->LCDHDES = LCDBDesPtr->LCDHDES ;
6533 pVBInfo->LCDHRS = LCDBDesPtr->LCDHRS ;
6534 pVBInfo->LCDVDES = LCDBDesPtr->LCDVDES ;
6535 pVBInfo->LCDVRS = LCDBDesPtr->LCDVRS ;
6536 tempbx = pVBInfo->LCDVDES ;
6543 XGINew_SetReg1( pVBInfo->Part2Port , 0x05 , temp ) ;
6545 XGINew_SetReg1( pVBInfo->Part2Port , 0x06 , temp ) ;
6551 XGINew_SetReg1( pVBInfo->Part2Port , 0x02 , tempah ) ;
6554 XGI_GetLCDSync( &tempax , &tempbx,pVBInfo ) ;
6556 tempax = pVBInfo->VT ;
6557 tempbx = pVBInfo->LCDVRS ;
6565 XGINew_SetReg1( pVBInfo->Part2Port , 0x04 , temp ) ;
6569 XGINew_SetReg1( pVBInfo->Part2Port , 0x01 , temp ) ;
6571 tempax = pVBInfo->HT ;
6572 tempbx = pVBInfo->LCDHDES ;
6575 if ( XGI_IsLCDDualLink( pVBInfo ) )
6582 if ( pVBInfo->VBType & VB_XGI302LV )
6585 if ( pVBInfo->VBType & VB_XGI301C ) /* tap4 */
6594 XGINew_SetReg1( pVBInfo->Part2Port , 0x1F , temp ) ; /* RHBLKE=lcdhdes */
6596 XGINew_SetReg1( pVBInfo->Part2Port , 0x20 , temp ) ;
6598 XGINew_SetReg1( pVBInfo->Part2Port , 0x23 , temp ) ; /* RHEQPLE=lcdhdee */
6600 XGINew_SetReg1( pVBInfo->Part2Port , 0x25 , temp ) ;
6603 XGI_GetLCDSync( &tempax , &tempbx ,pVBInfo) ;
6605 tempax = pVBInfo->HT ;
6606 tempbx = pVBInfo->LCDHRS ;
6608 if ( XGI_IsLCDDualLink( pVBInfo) )
6615 if ( pVBInfo->VBType & VB_XGI302LV )
6624 XGINew_SetReg1( pVBInfo->Part2Port , 0x1C , temp ) ;
6628 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x1D , ~0x0F0 , temp ) ;
6630 XGINew_SetReg1( pVBInfo->Part2Port , 0x21 , temp ) ;
6632 if ( !( pVBInfo->LCDInfo & LCDVESATiming ) )
6634 if ( pVBInfo->VGAVDE == 525 )
6636 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6643 XGINew_SetReg1( pVBInfo->Part2Port , 0x2f , temp ) ;
6644 XGINew_SetReg1( pVBInfo->Part2Port , 0x30 , 0xB3 ) ;
6647 if ( pVBInfo->VGAVDE == 420 )
6649 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6655 XGINew_SetReg1( pVBInfo->Part2Port , 0x2f , temp ) ;
6668 struct vb_device_info *pVBInfo)
6678 tempax = pVBInfo->VGAHDE ;
6679 tempbx = pVBInfo->HDE ;
6683 tempax = pVBInfo->VGAVDE ;
6684 tempbx = pVBInfo->VDE ;
6694 if ( pVBInfo->TVInfo & SetPALTV )
6698 if ( pVBInfo->VBInfo & SetCRT2ToYPbPr )
6700 if ( pVBInfo->TVInfo & SetYPbPrMode525i )
6702 if ( pVBInfo->TVInfo & SetYPbPrMode525p )
6704 if ( pVBInfo->TVInfo & SetYPbPrMode750p )
6708 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
6728 void XGI_SetTap4Regs(struct vb_device_info *pVBInfo)
6735 if ( !( pVBInfo->VBType & VB_XGI301C ) )
6739 XGINew_SetRegAND( pVBInfo->Part2Port , 0x4E , 0xEB ) ; /* Disable Tap4 */
6742 Tap4TimingPtr = XGI_GetTap4Ptr( 0 , pVBInfo) ; /* Set Horizontal Scaling */
6744 XGINew_SetReg1( pVBInfo->Part2Port , i , Tap4TimingPtr->Reg[ j ] ) ;
6746 if ( ( pVBInfo->VBInfo & SetCRT2ToTV ) && ( !( pVBInfo->VBInfo & SetCRT2ToHiVisionTV ) ) )
6748 Tap4TimingPtr = XGI_GetTap4Ptr( 1 , pVBInfo); /* Set Vertical Scaling */
6750 XGINew_SetReg1( pVBInfo->Part2Port , i , Tap4TimingPtr->Reg[ j ] ) ;
6753 if ( ( pVBInfo->VBInfo & SetCRT2ToTV ) && ( !( pVBInfo->VBInfo & SetCRT2ToHiVisionTV ) ) )
6754 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x4E , ~0x14 , 0x04 ) ; /* Enable V.Scaling */
6756 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x4E , ~0x14 , 0x10 ) ; /* Enable H.Scaling */
6766 void XGI_SetGroup3(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
6774 modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; /* si+St_ResInfo */
6778 modeflag = pVBInfo->EModeIDTable[ModeIdIndex].Ext_ModeFlag; /* si+Ext_ResInfo */
6782 XGINew_SetReg1(pVBInfo->Part3Port,0x00,0x00);
6783 if(pVBInfo->TVInfo&SetPALTV)
6785 XGINew_SetReg1(pVBInfo->Part3Port,0x13,0xFA);
6786 XGINew_SetReg1(pVBInfo->Part3Port,0x14,0xC8);
6790 XGINew_SetReg1(pVBInfo->Part3Port,0x13,0xF5);
6791 XGINew_SetReg1(pVBInfo->Part3Port,0x14,0xB7);
6794 if(!(pVBInfo->VBInfo&SetCRT2ToTV))
6799 if(pVBInfo->TVInfo&SetPALMTV)
6801 XGINew_SetReg1(pVBInfo->Part3Port,0x13,0xFA);
6802 XGINew_SetReg1(pVBInfo->Part3Port,0x14,0xC8);
6803 XGINew_SetReg1(pVBInfo->Part3Port,0x3D,0xA8);
6806 if((pVBInfo->VBInfo&SetCRT2ToHiVisionTV)|| (pVBInfo->VBInfo&SetCRT2ToYPbPr))
6808 if(pVBInfo->TVInfo & SetYPbPrMode525i)
6812 tempdi=pVBInfo->HiTVGroup3Data;
6813 if(pVBInfo->SetFlag&TVSimuMode)
6815 tempdi=pVBInfo->HiTVGroup3Simu;
6818 tempdi=pVBInfo->HiTVGroup3Text;
6822 if(pVBInfo->TVInfo & SetYPbPrMode525p)
6824 tempdi=pVBInfo->Ren525pGroup3;
6826 if(pVBInfo->TVInfo & SetYPbPrMode750p)
6828 tempdi=pVBInfo->Ren750pGroup3;
6833 XGINew_SetReg1(pVBInfo->Part3Port,i,tempdi[i]);
6835 if(pVBInfo->VBType&VB_XGI301C) /* Marcovision */
6837 if(pVBInfo->TVInfo & SetYPbPrMode525p)
6839 XGINew_SetReg1(pVBInfo->Part3Port,0x28,0x3f);
6853 void XGI_SetGroup4(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
6869 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ResInfo */
6873 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ; /* si+Ext_ResInfo */
6876 temp = pVBInfo->RVBHCFACT ;
6877 XGINew_SetReg1( pVBInfo->Part4Port , 0x13 , temp ) ;
6879 tempbx = pVBInfo->RVBHCMAX ;
6881 XGINew_SetReg1( pVBInfo->Part4Port , 0x14 , temp ) ;
6883 tempcx = pVBInfo->VGAHT - 1 ;
6885 XGINew_SetReg1( pVBInfo->Part4Port , 0x16 , temp ) ;
6890 tempcx = pVBInfo->VGAVT - 1 ;
6891 if ( !( pVBInfo->VBInfo & SetCRT2ToTV ) )
6897 XGINew_SetReg1( pVBInfo->Part4Port , 0x17 , temp ) ;
6899 XGINew_SetReg1( pVBInfo->Part4Port , 0x15 , temp ) ;
6900 XGINew_SetRegOR( pVBInfo->Part4Port , 0x0D , 0x08 ) ;
6901 tempcx = pVBInfo->VBInfo ;
6902 tempbx = pVBInfo->VGAHDE ;
6909 if ( XGI_IsLCDDualLink( pVBInfo ) )
6929 if(pVBInfo->VBInfo&SetCRT2ToLCD)
6937 if ( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) )
6940 if ( pVBInfo->VGAHDE == 1280 )
6942 if ( pVBInfo->VGAHDE == 1024 )
6945 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x0E , ~0xEF , temp ) ;
6947 tempebx = pVBInfo->VDE ;
6955 tempcx = pVBInfo->RVBHRS ;
6957 XGINew_SetReg1( pVBInfo->Part4Port , 0x18 , temp );
6959 tempeax = pVBInfo->VGAVDE ;
6966 tempeax = pVBInfo->VGAVDE ;
6985 XGINew_SetReg1( pVBInfo->Part4Port , 0x1B , temp ) ;
6988 XGINew_SetReg1( pVBInfo->Part4Port , 0x1A , temp ) ;
6993 XGINew_SetReg1( pVBInfo->Part4Port , 0x19 , temp ) ;
6996 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
6999 XGINew_SetReg1( pVBInfo->Part4Port , 0x1C , temp ) ;
7000 tempax = pVBInfo->VGAHDE ;
7006 if ( XGI_IsLCDDualLink( pVBInfo ) )
7009 /* if((pVBInfo->VBInfo&(SetCRT2ToLCD))||((pVBInfo->TVInfo&SetYPbPrMode525p)||(pVBInfo->TVInfo&SetYPbPrMode750p))) { */
7010 if ( pVBInfo->VBInfo & SetCRT2ToLCD )
7017 if ( pVBInfo->VGAHDE > 800 )
7019 if ( pVBInfo->VGAHDE == 1024 )
7028 if ( pVBInfo->VBInfo & ( SetCRT2ToTV | SetCRT2ToHiVisionTV ) )
7030 if ( pVBInfo->VBType & VB_XGI301LV )
7032 if ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p | SetYPbPrMode1080i ) ) )
7034 if ( pVBInfo->VGAHDE > 800 )
7036 if ( pVBInfo->VGAHDE == 1024 )
7045 if ( pVBInfo->VGAHDE > 800 )
7047 if ( pVBInfo->VGAHDE == 1024 )
7058 XGINew_SetReg1( pVBInfo->Part4Port , 0x1E , temp ) ;
7060 XGINew_SetReg1( pVBInfo->Part4Port , 0x1D , temp ) ;
7062 if ( pVBInfo->VBInfo & ( SetCRT2ToTV | SetCRT2ToHiVisionTV ) )
7064 if ( pVBInfo->VGAHDE > 800 )
7066 XGINew_SetRegOR( pVBInfo->Part4Port , 0x1E , 0x08 ) ;
7071 if ( pVBInfo->VBInfo & SetCRT2ToTV )
7073 if ( !( pVBInfo->TVInfo & ( NTSC1024x768 | SetYPbPrMode525p | SetYPbPrMode750p | SetYPbPrMode1080i ) ) )
7076 if ( ( pVBInfo->VBInfo & SetInSlaveMode ) && ( !( pVBInfo->TVInfo & TVSimuMode ) ) )
7081 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x1F , 0x00C0 , temp ) ;
7082 tempbx = pVBInfo->HT ;
7083 if ( XGI_IsLCDDualLink( pVBInfo ) )
7087 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x21 , 0x00C0 , temp ) ;
7089 XGINew_SetReg1( pVBInfo->Part4Port , 0x22 , temp ) ;
7093 if ( pVBInfo->ISXPDOS == 0 )
7094 XGI_SetCRT2VCLK( ModeNo , ModeIdIndex , RefreshRateTableIndex, pVBInfo ) ;
7104 void XGI_SetGroup5(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
7109 Pindex = pVBInfo->Part5Port ;
7110 Pdata = pVBInfo->Part5Port + 1 ;
7111 if ( pVBInfo->ModeType == ModeVGA )
7113 if ( !( pVBInfo->VBInfo & ( SetInSlaveMode | LoadDACFlag | CRT2DisplayFlag ) ) )
7115 XGINew_EnableCRT2(pVBInfo) ;
7116 /* LoadDAC2(pVBInfo->Part5Port,ModeNo,ModeIdIndex); */
7133 struct vb_device_info *pVBInfo)
7150 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
7151 tempal = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC ;
7155 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
7156 tempal = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT2CRTC ;
7165 tempal = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC ; /* find no Ext_CRT2CRTC2 */
7169 tempal= pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT2CRTC ;
7172 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
7175 tempal = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC2 ;
7177 tempal= pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT2CRTC2 ;
7188 if ( pVBInfo->LCDInfo & EnableScalingLCD ) /* ScaleLCD */
7238 tempdx = pVBInfo->LCDResInfo ;
7242 tempdx = pVBInfo->LCDTypeInfo ;
7245 if ( pVBInfo->LCDInfo & EnableScalingLCD )
7251 tempdx = pVBInfo->LCDInfo ;
7527 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7533 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7539 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7545 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7551 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7563 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7569 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7587 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7593 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7599 if ( ( pVBInfo->VBType & VB_XGI301LV ) || ( pVBInfo->VBType & VB_XGI302LV ) )
7638 struct vb_device_info *pVBInfo)
7647 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
7648 tempal = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC ;
7652 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
7653 tempal = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT2CRTC ;
7663 if ( pVBInfo->IF_DEF_CH7007 == 1 )
7670 if ( pVBInfo->IF_DEF_CH7007 == 1 )
7697 tempdx = pVBInfo->TVInfo ;
7699 if ( pVBInfo->VBInfo & SetInSlaveMode )
7803 unsigned char XGI_BacklightByDrv(struct vb_device_info *pVBInfo)
7807 tempah = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x3A) ;
7822 void XGI_FirePWDDisable(struct vb_device_info *pVBInfo)
7824 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x26 , 0x00 , 0xFC ) ;
7834 void XGI_FirePWDEnable(struct vb_device_info *pVBInfo)
7836 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x26 , 0x03 , 0xFC ) ;
7846 void XGI_EnableGatingCRT(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
7848 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x63 , 0xBF , 0x40 ) ;
7858 void XGI_DisableGatingCRT(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
7861 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x63 , 0xBF , 0x00 ) ;
7875 void XGI_SetPanelDelay(unsigned short tempbl, struct vb_device_info *pVBInfo)
7879 index = XGI_GetLCDCapPtr(pVBInfo) ;
7882 XGINew_LCD_Wait_Time( pVBInfo->LCDCapList[ index ].PSC_S1, pVBInfo ) ;
7885 XGINew_LCD_Wait_Time( pVBInfo->LCDCapList[ index ].PSC_S2, pVBInfo ) ;
7888 XGINew_LCD_Wait_Time( pVBInfo->LCDCapList[ index ].PSC_S3, pVBInfo ) ;
7891 XGINew_LCD_Wait_Time( pVBInfo->LCDCapList[ index ].PSC_S4, pVBInfo ) ;
7905 void XGI_SetPanelPower(unsigned short tempah, unsigned short tempbl, struct vb_device_info *pVBInfo)
7907 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
7908 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x26 , tempbl , tempah ) ;
7910 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x11 , tempbl , tempah ) ;
7934 unsigned char XGI_XG21GetPSCValue(struct vb_device_info *pVBInfo)
7938 CR4A = XGINew_GetReg1( pVBInfo->P3d4 , 0x4A ) ;
7939 XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~0x23 ) ; /* enable GPIO write */
7941 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x48 ) ;
7945 XGINew_SetReg1( pVBInfo->P3d4 , 0x4A , CR4A ) ;
7955 unsigned char XGI_XG27GetPSCValue(struct vb_device_info *pVBInfo)
7959 CR4A = XGINew_GetReg1( pVBInfo->P3d4 , 0x4A ) ;
7960 XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~0x0C ) ; /* enable GPIO write */
7962 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x48 ) ;
7966 XGINew_SetReg1( pVBInfo->P3d4 , 0x4A , CR4A ) ;
7967 CRB4 = XGINew_GetReg1( pVBInfo->P3d4 , 0xB4 ) ;
7980 void XGI_XG21BLSignalVDD(unsigned short tempbh, unsigned short tempbl, struct vb_device_info *pVBInfo)
7984 CR4A = XGINew_GetReg1( pVBInfo->P3d4 , 0x4A ) ;
7987 XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~tempbh ) ; /* enable GPIO write */
7993 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0xB4 , ~0x02 , temp) ; /* CR B4[1] */
7997 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x48 ) ;
8002 XGINew_SetReg1( pVBInfo->P3d4 , 0x48 , temp ) ;
8005 void XGI_XG27BLSignalVDD(unsigned short tempbh, unsigned short tempbl, struct vb_device_info *pVBInfo)
8021 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0xB4 , ~0x02 , temp) ; /* CR B4[1] */
8024 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0xB4 , ~tempbh0 , tempbl0 ) ;
8026 CR4A = XGINew_GetReg1( pVBInfo->P3d4 , 0x4A ) ;
8031 XGINew_SetRegAND( pVBInfo->P3d4 , 0x4A , ~tempbh ) ; /* enable GPIO write */
8032 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x48 , ~tempbh , tempbl ) ;
8036 unsigned short XGI_GetLVDSOEMTableIndex(struct vb_device_info *pVBInfo)
8040 index = XGINew_GetReg1( pVBInfo->P3d4 , 0x36 ) ;
8056 void XGI_XG21SetPanelDelay(unsigned short tempbl, struct vb_device_info *pVBInfo)
8060 index = XGI_GetLVDSOEMTableIndex( pVBInfo );
8062 XGINew_LCD_Wait_Time( pVBInfo->XG21_LVDSCapList[ index ].PSC_S1, pVBInfo ) ;
8065 XGINew_LCD_Wait_Time( pVBInfo->XG21_LVDSCapList[ index ].PSC_S2, pVBInfo ) ;
8068 XGINew_LCD_Wait_Time( pVBInfo->XG21_LVDSCapList[ index ].PSC_S3, pVBInfo ) ;
8071 XGINew_LCD_Wait_Time( pVBInfo->XG21_LVDSCapList[ index ].PSC_S4, pVBInfo ) ;
8076 struct vb_device_info *pVBInfo)
8085 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
8088 xres = pVBInfo->StResInfo[ resindex ].HTotal ;
8089 yres = pVBInfo->StResInfo[ resindex ].VTotal ;
8090 modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; /* si+St_ResInfo */
8094 xres = pVBInfo->ModeResInfo[ resindex ].HTotal ; /* xres->ax */
8095 yres = pVBInfo->ModeResInfo[ resindex ].VTotal ; /* yres->bx */
8096 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex].Ext_ModeFlag ; /* si+St_ModeFlag */
8117 lvdstableindex = XGI_GetLVDSOEMTableIndex( pVBInfo );
8118 if ( xres > (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE) )
8121 if ( yres > (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE) )
8126 if ( ( xres != (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE) ) ||
8127 ( yres != (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE)) )
8129 colordepth = XGI_GetColorDepth( ModeNo , ModeIdIndex, pVBInfo ) ;
8138 void XGI_SetXG21FPBits(struct vb_device_info *pVBInfo)
8142 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x37 ) ; /* D[0] 1: 18bit */
8144 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x06 , ~0x40 , temp ) ; /* SR06[6] 18bit Dither */
8145 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x09 , ~0xc0 , temp | 0x80 ) ; /* SR09[7] enable FP output, SR09[6] 1: sigle 18bits, 0: dual 12bits */
8149 void XGI_SetXG27FPBits(struct vb_device_info *pVBInfo)
8153 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x37 ) ; /* D[1:0] 01: 18bit, 00: dual 12, 10: single 24 */
8155 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x06 , ~0xc0 , temp & 0x80 ) ; /* SR06[7]0: dual 12/1: single 24 [6] 18bit Dither <= 0 h/w recommend */
8156 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x09 , ~0xc0 , temp | 0x80 ) ; /* SR09[7] enable FP output, SR09[6] 1: sigle 18bits, 0: 24bits */
8161 struct vb_device_info *pVBInfo)
8173 lvdstableindex = XGI_GetLVDSOEMTableIndex( pVBInfo );
8175 temp = (unsigned char) ((pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDS_Capability & (LCDPolarity << 8)) >> 8);
8177 Miscdata = (unsigned char) XGINew_GetReg2(pVBInfo->P3cc) ;
8179 XGINew_SetReg3( pVBInfo->P3c2 , (Miscdata & 0x3F) | temp ) ;
8181 temp = (unsigned char) (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDS_Capability & LCDPolarity) ;
8182 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x35 , ~0x80 , temp&0x80 ) ; /* SR35[7] FP VSync polarity */
8183 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x30 , ~0x20 , (temp&0x40)>>1 ) ; /* SR30[5] FP HSync polarity */
8185 XGI_SetXG21FPBits(pVBInfo);
8186 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
8189 xres = pVBInfo->StResInfo[ resindex ].HTotal ;
8190 yres = pVBInfo->StResInfo[ resindex ].VTotal ;
8191 modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; /* si+St_ResInfo */
8195 xres = pVBInfo->ModeResInfo[ resindex ].HTotal ; /* xres->ax */
8196 yres = pVBInfo->ModeResInfo[ resindex ].VTotal ; /* yres->bx */
8197 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex].Ext_ModeFlag ; /* si+St_ModeFlag */
8203 LVDSHT = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHT;
8205 LVDSHBS = xres + ( pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE - xres ) / 2 ;
8212 LVDSHRS = LVDSHBS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHFP ;
8215 LVDSHRE = LVDSHRS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHSYNC ;
8218 LVDSHBE = LVDSHBS + LVDSHT - pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE ;
8220 LVDSVT = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVT;
8222 LVDSVBS = yres + ( pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE - yres ) / 2 ;
8229 LVDSVRS = LVDSVBS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVFP ;
8232 LVDSVRE = LVDSVRS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVSYNC ;
8235 LVDSVBE = LVDSVBS + LVDSVT - pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE ;
8237 temp = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x11) ;
8238 XGINew_SetReg1( pVBInfo->P3d4 , 0x11 , temp & 0x7f ) ; /* Unlock CRTC */
8242 XGINew_SetRegOR( pVBInfo->P3c4 , 0x1 , 0x1 ) ;
8247 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0B , ~0x03 , ( value & 0x300 ) >> 8 ) ;
8248 XGINew_SetReg1( pVBInfo->P3d4 , 0x0 , (value & 0xFF) ) ;
8252 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0B , ~0x30 , ( value & 0x300 ) >> 4 ) ;
8253 XGINew_SetReg1( pVBInfo->P3d4 , 0x2 , (value & 0xFF) ) ;
8257 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0C , ~0x03 , ( value & 0xC0 ) >> 6 ) ;
8258 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x05 , ~0x80 , ( value & 0x20 ) << 2 ) ;
8259 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x03 , ~0x1F , value & 0x1F ) ;
8263 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0B , ~0xC0 , ( value & 0x300 ) >> 2 ) ;
8264 XGINew_SetReg1( pVBInfo->P3d4 , 0x4 , (value & 0xFF) ) ;
8268 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x2F , ~0x03 , ( value & 0x300 ) >> 8 ) ;
8269 XGINew_SetReg1( pVBInfo->P3c4 , 0x2E , (value & 0xFF) ) ;
8273 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0C , ~0x04 , ( value & 0x20 ) >> 3 ) ;
8274 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x05 , ~0x1F , value & 0x1F ) ;
8278 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x2F , ~0xFC , value << 2 ) ;
8282 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x01 , ( value & 0x400 ) >> 10 ) ;
8283 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x20 , ( value & 0x200 ) >> 4 ) ;
8284 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x01 , ( value & 0x100 ) >> 8 ) ;
8285 XGINew_SetReg1( pVBInfo->P3d4 , 0x06 , (value & 0xFF) ) ;
8289 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x04 , ( value & 0x400 ) >> 8 ) ;
8290 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x09 , ~0x20 , ( value & 0x200 ) >> 4 ) ;
8291 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x08 , ( value & 0x100 ) >> 5 ) ;
8292 XGINew_SetReg1( pVBInfo->P3d4 , 0x15 , (value & 0xFF) ) ;
8296 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x10 , ( value & 0x100 ) >> 4 ) ;
8297 XGINew_SetReg1( pVBInfo->P3d4 , 0x16 , (value & 0xFF) ) ;
8301 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x08 , ( value & 0x400 ) >> 7 ) ;
8302 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x80 , ( value & 0x200 ) >> 2 ) ;
8303 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x04 , ( value & 0x100 ) >> 6 ) ;
8304 XGINew_SetReg1( pVBInfo->P3d4 , 0x10 , (value & 0xFF) ) ;
8307 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x3F , ~0x03 , ( value & 0x600 ) >> 9 ) ;
8308 XGINew_SetReg1( pVBInfo->P3c4 , 0x34 , (value >> 1) & 0xFF ) ;
8309 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x33 , ~0x01 , value & 0x01 ) ;
8313 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x20 , ( value & 0x10 ) << 1 ) ;
8314 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x11 , ~0x0F , value & 0x0F ) ;
8317 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x3F , ~0xFC , ( value << 2 ) & 0x7C ) ;
8322 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x31 , ~0x30 , value ) ;
8323 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , pVBInfo->XG21_LVDSCapList[lvdstableindex].VCLKData1) ;
8324 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , pVBInfo->XG21_LVDSCapList[lvdstableindex].VCLKData2) ;
8330 XGINew_GetReg2( pVBInfo->P3da ) ; /* reset 3da */
8331 XGINew_SetReg3( pVBInfo->P3c0 , 0x13 ) ; /* set index */
8332 XGINew_SetReg3( pVBInfo->P3c0 , 0x00 ) ; /* set data, panning = 0, shift left 1 dot*/
8334 XGINew_GetReg2( pVBInfo->P3da ) ; /* Enable Attribute */
8335 XGINew_SetReg3( pVBInfo->P3c0 , 0x20 ) ;
8337 XGINew_GetReg2( pVBInfo->P3da ) ; /* reset 3da */
8345 struct vb_device_info *pVBInfo)
8357 lvdstableindex = XGI_GetLVDSOEMTableIndex( pVBInfo );
8358 temp = (unsigned char) ((pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDS_Capability & (LCDPolarity << 8)) >> 8);
8360 Miscdata = (unsigned char) XGINew_GetReg2(pVBInfo->P3cc);
8362 XGINew_SetReg3( pVBInfo->P3c2 , (Miscdata & 0x3F) | temp ) ;
8364 temp = (unsigned char) (pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDS_Capability & LCDPolarity) ;
8365 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x35 , ~0x80 , temp&0x80 ) ; /* SR35[7] FP VSync polarity */
8366 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x30 , ~0x20 , (temp&0x40)>>1 ) ; /* SR30[5] FP HSync polarity */
8368 XGI_SetXG27FPBits(pVBInfo);
8369 resindex = XGI_GetResInfo( ModeNo , ModeIdIndex, pVBInfo ) ;
8372 xres = pVBInfo->StResInfo[ resindex ].HTotal ;
8373 yres = pVBInfo->StResInfo[ resindex ].VTotal ;
8374 modeflag = pVBInfo->SModeIDTable[ModeIdIndex].St_ModeFlag; /* si+St_ResInfo */
8378 xres = pVBInfo->ModeResInfo[ resindex ].HTotal ; /* xres->ax */
8379 yres = pVBInfo->ModeResInfo[ resindex ].VTotal ; /* yres->bx */
8380 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex].Ext_ModeFlag ; /* si+St_ModeFlag */
8386 LVDSHT = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHT;
8388 LVDSHBS = xres + ( pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE - xres ) / 2 ;
8395 LVDSHRS = LVDSHBS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHFP ;
8398 LVDSHRE = LVDSHRS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHSYNC ;
8401 LVDSHBE = LVDSHBS + LVDSHT - pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSHDE ;
8403 LVDSVT = pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVT;
8405 LVDSVBS = yres + ( pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE - yres ) / 2 ;
8412 LVDSVRS = LVDSVBS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVFP ;
8415 LVDSVRE = LVDSVRS + pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVSYNC ;
8418 LVDSVBE = LVDSVBS + LVDSVT - pVBInfo->XG21_LVDSCapList[lvdstableindex].LVDSVDE ;
8420 temp = (unsigned char)XGINew_GetReg1(pVBInfo->P3d4, 0x11) ;
8421 XGINew_SetReg1( pVBInfo->P3d4 , 0x11 , temp & 0x7f ) ; /* Unlock CRTC */
8425 XGINew_SetRegOR( pVBInfo->P3c4 , 0x1 , 0x1 ) ;
8430 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0B , ~0x03 , ( value & 0x300 ) >> 8 ) ;
8431 XGINew_SetReg1( pVBInfo->P3d4 , 0x0 , (value & 0xFF) ) ;
8435 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0B , ~0x30 , ( value & 0x300 ) >> 4 ) ;
8436 XGINew_SetReg1( pVBInfo->P3d4 , 0x2 , (value & 0xFF) ) ;
8440 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0C , ~0x03 , ( value & 0xC0 ) >> 6 ) ;
8441 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x05 , ~0x80 , ( value & 0x20 ) << 2 ) ;
8442 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x03 , ~0x1F , value & 0x1F ) ;
8446 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0B , ~0xC0 , ( value & 0x300 ) >> 2 ) ;
8447 XGINew_SetReg1( pVBInfo->P3d4 , 0x4 , (value & 0xFF) ) ;
8451 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x2F , ~0x03 , ( value & 0x300 ) >> 8 ) ;
8452 XGINew_SetReg1( pVBInfo->P3c4 , 0x2E , (value & 0xFF) ) ;
8456 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0C , ~0x04 , ( value & 0x20 ) >> 3 ) ;
8457 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x05 , ~0x1F , value & 0x1F ) ;
8461 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x2F , ~0xFC , value << 2 ) ;
8465 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x01 , ( value & 0x400 ) >> 10 ) ;
8466 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x20 , ( value & 0x200 ) >> 4 ) ;
8467 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x01 , ( value & 0x100 ) >> 8 ) ;
8468 XGINew_SetReg1( pVBInfo->P3d4 , 0x06 , (value & 0xFF) ) ;
8472 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x04 , ( value & 0x400 ) >> 8 ) ;
8473 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x09 , ~0x20 , ( value & 0x200 ) >> 4 ) ;
8474 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x08 , ( value & 0x100 ) >> 5 ) ;
8475 XGINew_SetReg1( pVBInfo->P3d4 , 0x15 , (value & 0xFF) ) ;
8479 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x10 , ( value & 0x100 ) >> 4 ) ;
8480 XGINew_SetReg1( pVBInfo->P3d4 , 0x16 , (value & 0xFF) ) ;
8484 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x08 , ( value & 0x400 ) >> 7 ) ;
8485 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x80 , ( value & 0x200 ) >> 2 ) ;
8486 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x07 , ~0x04 , ( value & 0x100 ) >> 6 ) ;
8487 XGINew_SetReg1( pVBInfo->P3d4 , 0x10 , (value & 0xFF) ) ;
8490 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x35 , ~0x07 , ( value & 0x700 ) >> 8 ) ;
8491 XGINew_SetReg1( pVBInfo->P3c4 , 0x34 , value & 0xFF ) ;
8495 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x0A , ~0x20 , ( value & 0x10 ) << 1 ) ;
8496 XGINew_SetRegANDOR( pVBInfo->P3d4 , 0x11 , ~0x0F , value & 0x0F ) ;
8499 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x3F , ~0xFC , ( value << 2 ) & 0xFC ) ;
8504 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x31 , ~0x30 , value ) ;
8505 XGINew_SetReg1( pVBInfo->P3c4 , 0x2B , pVBInfo->XG21_LVDSCapList[lvdstableindex].VCLKData1) ;
8506 XGINew_SetReg1( pVBInfo->P3c4 , 0x2C , pVBInfo->XG21_LVDSCapList[lvdstableindex].VCLKData2) ;
8512 XGINew_GetReg2( pVBInfo->P3da ) ; /* reset 3da */
8513 XGINew_SetReg3( pVBInfo->P3c0 , 0x13 ) ; /* set index */
8514 XGINew_SetReg3( pVBInfo->P3c0 , 0x00 ) ; /* set data, panning = 0, shift left 1 dot*/
8516 XGINew_GetReg2( pVBInfo->P3da ) ; /* Enable Attribute */
8517 XGINew_SetReg3( pVBInfo->P3c0 , 0x20 ) ;
8519 XGINew_GetReg2( pVBInfo->P3da ) ; /* reset 3da */
8532 unsigned char XGI_IsLCDON(struct vb_device_info *pVBInfo)
8536 tempax = pVBInfo->VBInfo ;
8552 void XGI_EnablePWD(struct vb_device_info *pVBInfo)
8557 index = XGI_GetLCDCapPtr(pVBInfo) ;
8558 temp = pVBInfo->LCDCapList[ index ].PWD_2B ;
8559 XGINew_SetReg1( pVBInfo->Part4Port , 0x2B , temp ) ;
8560 XGINew_SetReg1( pVBInfo->Part4Port , 0x2C , pVBInfo->LCDCapList[ index ].PWD_2C ) ;
8561 XGINew_SetReg1( pVBInfo->Part4Port , 0x2D , pVBInfo->LCDCapList[ index ].PWD_2D ) ;
8562 XGINew_SetReg1( pVBInfo->Part4Port , 0x2E , pVBInfo->LCDCapList[ index ].PWD_2E ) ;
8563 XGINew_SetReg1( pVBInfo->Part4Port , 0x2F , pVBInfo->LCDCapList[ index ].PWD_2F ) ;
8564 XGINew_SetRegOR( pVBInfo->Part4Port , 0x27 , 0x80 ) ; /* enable PWD */
8574 void XGI_DisablePWD(struct vb_device_info *pVBInfo)
8576 XGINew_SetRegAND( pVBInfo->Part4Port , 0x27 , 0x7F ) ; /* disable PWD */
8586 unsigned char XGI_DisableChISLCD(struct vb_device_info *pVBInfo)
8591 tempbx = pVBInfo->SetFlag & ( DisableChA | DisableChB ) ;
8592 tempah = ~((unsigned short) XGINew_GetReg1(pVBInfo->Part1Port, 0x2E));
8616 unsigned char XGI_EnableChISLCD(struct vb_device_info *pVBInfo)
8622 tempbx = pVBInfo->SetFlag & ( EnableChA | EnableChB ) ;
8623 tempah = ~( (unsigned short)XGINew_GetReg1( pVBInfo->Part1Port , 0x2E ) ) ;
8647 unsigned short XGI_GetLCDCapPtr(struct vb_device_info *pVBInfo)
8654 tempah = XGINew_GetReg1( pVBInfo->P3d4 , 0x36 ) ;
8658 tempbl = pVBInfo->LCDCapList[ i ].LCD_ID ;
8673 tempbl = pVBInfo->LCDCapList[ i ].LCD_ID ;
8686 unsigned short XGI_GetLCDCapPtr1(struct vb_device_info *pVBInfo)
8693 tempal = pVBInfo->LCDResInfo ;
8694 tempah = pVBInfo->LCDTypeInfo ;
8697 tempbl = pVBInfo->LCDCapList[ i ].LCD_ID;
8711 tempbl = pVBInfo->LCDCapList[ i ].LCD_ID ;
8716 pVBInfo->LCDResInfo = Panel1024x768 ;
8717 pVBInfo->LCDTypeInfo = 0 ;
8732 struct vb_device_info *pVBInfo)
8736 Index = XGI_GetLCDCapPtr(pVBInfo) ;
8737 *HSyncWidth = pVBInfo->LCDCapList[ Index ].LCD_HSyncWidth ;
8738 *VSyncWidth = pVBInfo->LCDCapList[ Index ].LCD_VSyncWidth ;
8751 void XGI_EnableBridge(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
8756 if ( pVBInfo->SetFlag == Win9xDOSMode )
8758 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
8760 XGI_DisplayOn( HwDeviceExtension, pVBInfo) ;
8770 if ( !XGI_DisableChISLCD(pVBInfo) )
8772 if ( ( XGI_EnableChISLCD(pVBInfo) ) || ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) )
8774 if ( pVBInfo->LCDInfo & SetPWDEnable )
8776 XGI_EnablePWD( pVBInfo);
8780 pVBInfo->LCDInfo &= ( ~SetPWDEnable ) ;
8781 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
8792 XGI_SetPanelPower( tempah , tempbl, pVBInfo ) ;
8793 XGI_SetPanelDelay( 1,pVBInfo ) ;
8801 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
8803 if ( !( pVBInfo->SetFlag & DisableChA ) )
8805 if ( pVBInfo->SetFlag & EnableChA )
8807 XGINew_SetReg1( pVBInfo->Part1Port , 0x1E , 0x20 ) ; /* Power on */
8811 if ( pVBInfo->VBInfo & SetCRT2ToDualEdge ) /* SetCRT2ToLCDA ) */
8813 XGINew_SetReg1(pVBInfo->Part1Port,0x1E,0x20); /* Power on */
8818 if ( !( pVBInfo->SetFlag & DisableChB ) )
8820 if ( ( pVBInfo->SetFlag & EnableChB ) || ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToTV | SetCRT2ToRAMDAC ) ) )
8822 tempah = (unsigned char)XGINew_GetReg1(pVBInfo->P3c4, 0x32);
8824 if ( pVBInfo->VBInfo & SetInSlaveMode )
8826 if ( !( pVBInfo->VBInfo & SetCRT2ToRAMDAC ) )
8829 XGINew_SetReg1( pVBInfo->P3c4 , 0x32 , tempah ) ;
8830 XGINew_SetRegOR( pVBInfo->P3c4 , 0x1E , 0x20 ) ;
8832 tempah = (unsigned char)XGINew_GetReg1(pVBInfo->Part1Port, 0x2E);
8835 XGINew_SetRegOR( pVBInfo->Part1Port , 0x2E , 0x80 ) ; /* BVBDOENABLE = 1 */
8837 XGINew_SetRegAND( pVBInfo->Part1Port , 0x00 , 0x7F ) ; /* BScreenOFF = 0 */
8841 if ( ( pVBInfo->SetFlag & ( EnableChA | EnableChB ) ) || ( !( pVBInfo->VBInfo & DisableCRT2Display ) ) )
8843 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x00 , ~0xE0 , 0x20 ) ; /* shampoo 0129 */
8844 if ( pVBInfo->VBType & ( VB_XGI302LV | VB_XGI301C ) )
8846 if ( !XGI_DisableChISLCD(pVBInfo) )
8848 if ( XGI_EnableChISLCD( pVBInfo) || ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) )
8849 XGINew_SetRegAND( pVBInfo->Part4Port ,0x2A , 0x7F ) ; /* LVDS PLL power on */
8851 XGINew_SetRegAND( pVBInfo->Part4Port , 0x30 , 0x7F ) ; /* LVDS Driver power on */
8857 if ( !( pVBInfo->VBInfo & DisableCRT2Display ) )
8861 if ( !( pVBInfo->VBInfo & SetSimuScanMode ) )
8863 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
8865 if ( pVBInfo->VBInfo & SetCRT2ToDualEdge )
8868 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
8871 if ( pVBInfo->SetFlag & DisableChB )
8874 if ( pVBInfo->SetFlag & DisableChA )
8877 if ( pVBInfo->SetFlag & EnableChB )
8880 if ( pVBInfo->SetFlag & EnableChA )
8887 XGINew_SetRegOR( pVBInfo->Part4Port , 0x1F , tempah ) ; /* EnablePart4_1F */
8889 if ( pVBInfo->SetFlag & Win9xDOSMode )
8891 XGI_DisplayOn( HwDeviceExtension, pVBInfo) ;
8895 if ( !( pVBInfo->SetFlag & DisableChA ) )
8897 XGI_VBLongWait( pVBInfo) ;
8898 if ( !( pVBInfo->SetFlag & GatingCRT ) )
8900 XGI_DisableGatingCRT( HwDeviceExtension, pVBInfo ) ;
8901 XGI_DisplayOn( HwDeviceExtension, pVBInfo) ;
8902 XGI_VBLongWait( pVBInfo) ;
8908 if ( pVBInfo->VBInfo & ( SetCRT2ToTV | SetCRT2ToLCD | SetCRT2ToLCDA ) )
8909 XGINew_SetRegOR( pVBInfo->Part1Port , 0x1E , 0x20 ) ; /* enable CRT2 */
8913 tempah = (unsigned char)XGINew_GetReg1(pVBInfo->Part1Port, 0x2E);
8915 XGINew_SetRegOR( pVBInfo->Part1Port , 0x2E , 0x80 ) ; /* BVBDOENABLE = 1 */
8917 XGINew_SetRegAND(pVBInfo->Part1Port,0x00,0x7F);
8918 XGI_DisplayOn( HwDeviceExtension, pVBInfo);
8924 if ( !XGI_EnableChISLCD(pVBInfo) )
8926 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
8928 if ( XGI_BacklightByDrv(pVBInfo) )
8935 if ( pVBInfo->LCDInfo & SetPWDEnable )
8937 XGI_FirePWDEnable(pVBInfo) ;
8941 XGI_SetPanelDelay( 2,pVBInfo ) ;
8943 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
8953 XGI_SetPanelPower( tempah , tempbl , pVBInfo) ;
8964 void XGI_DisableBridge(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
8971 if ( pVBInfo->SetFlag == Win9xDOSMode )
8977 if ( ( !( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) ) || ( XGI_DisableChISLCD(pVBInfo) ) )
8979 if ( !XGI_IsLCDON(pVBInfo) )
8981 if ( pVBInfo->LCDInfo & SetPWDEnable )
8982 XGI_EnablePWD( pVBInfo) ;
8985 pVBInfo->LCDInfo &= ~SetPWDEnable ;
8986 XGI_DisablePWD(pVBInfo) ;
8987 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
8997 XGI_SetPanelPower( tempax , tempbx , pVBInfo) ;
8998 XGI_SetPanelDelay( 3,pVBInfo ) ;
9000 } /* end if(!XGI_IsLCDON(pVBInfo)) */
9006 if ( !( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2toLCDA ) ) || ( XGI_DisableChISLCD(pVBInfo) ) )
9008 if ( !XGI_IsLCDON(pVBInfo) )
9022 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B| VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9025 if ( !( pVBInfo->VBInfo & ( DisableCRT2Display | SetSimuScanMode ) ) )
9027 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
9029 if ( pVBInfo->VBInfo & SetCRT2ToDualEdge )
9032 if ( !( pVBInfo->VBInfo & SetCRT2ToLCDA ) )
9035 if ( pVBInfo->SetFlag & DisableChB )
9038 if ( pVBInfo->SetFlag & DisableChA )
9044 XGINew_SetRegAND( pVBInfo->Part4Port , 0x1F , tempah ) ; /* disable part4_1f */
9046 if ( pVBInfo->VBType & ( VB_XGI302LV | VB_XGI301C ) )
9048 if ( ( ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) ) || ( XGI_DisableChISLCD(pVBInfo) ) || ( XGI_IsLCDON(pVBInfo) ) )
9049 XGINew_SetRegOR( pVBInfo->Part4Port , 0x30 , 0x80 ) ; /* LVDS Driver power down */
9052 if ( ( pVBInfo->SetFlag & DisableChA ) || ( pVBInfo->VBInfo & ( DisableCRT2Display | SetCRT2ToLCDA | SetSimuScanMode ) ) )
9054 if ( pVBInfo->SetFlag & GatingCRT )
9055 XGI_EnableGatingCRT( HwDeviceExtension, pVBInfo ) ;
9056 XGI_DisplayOff( HwDeviceExtension, pVBInfo) ;
9059 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
9061 if ( ( pVBInfo->SetFlag & DisableChA ) || ( pVBInfo->VBInfo & SetCRT2ToLCDA ) )
9062 XGINew_SetRegAND( pVBInfo->Part1Port , 0x1e , 0xdf ) ; /* Power down */
9065 XGINew_SetRegAND( pVBInfo->P3c4 , 0x32 , 0xdf ) ; /* disable TV as primary VGA swap */
9067 if ( ( pVBInfo->VBInfo & ( SetSimuScanMode | SetCRT2ToDualEdge ) ) )
9068 XGINew_SetRegAND(pVBInfo->Part2Port,0x00,0xdf);
9070 if ( ( pVBInfo->SetFlag & DisableChB ) || ( pVBInfo->VBInfo & ( DisableCRT2Display | SetSimuScanMode ) )
9071 || ( ( !( pVBInfo->VBInfo & SetCRT2ToLCDA ) ) && ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToLCD | SetCRT2ToTV ) ) ) )
9072 XGINew_SetRegOR( pVBInfo->Part1Port , 0x00 , 0x80 ) ; /* BScreenOff=1 */
9074 if ( ( pVBInfo->SetFlag & DisableChB ) || ( pVBInfo->VBInfo & ( DisableCRT2Display | SetSimuScanMode ) )
9075 || ( !( pVBInfo->VBInfo & SetCRT2ToLCDA ) ) || ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToLCD | SetCRT2ToTV ) ) )
9077 tempah= XGINew_GetReg1( pVBInfo->Part1Port , 0x00 ) ; /* save Part1 index 0 */
9078 XGINew_SetRegOR( pVBInfo->Part1Port , 0x00 , 0x10 ) ; /* BTDAC = 1, avoid VB reset */
9079 XGINew_SetRegAND( pVBInfo->Part1Port , 0x1E , 0xDF ) ; /* disable CRT2 */
9080 XGINew_SetReg1( pVBInfo->Part1Port , 0x00 , tempah ) ; /* restore Part1 index 0 */
9085 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToTV ) )
9087 XGINew_SetRegOR( pVBInfo->Part1Port , 0x00 , 0x80 ) ; /* BScreenOff=1 */
9088 XGINew_SetRegAND( pVBInfo->Part1Port , 0x1E , 0xDF ) ; /* Disable CRT2 */
9089 XGINew_SetRegAND( pVBInfo->P3c4 , 0x32 , 0xDF ) ; /* Disable TV asPrimary VGA swap */
9092 if ( pVBInfo->VBInfo & ( DisableCRT2Display | SetCRT2ToLCDA | SetSimuScanMode ) )
9093 XGI_DisplayOff( HwDeviceExtension, pVBInfo) ;
9101 if ( !( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) ) || ( XGI_DisableChISLCD(pVBInfo) ) || ( XGI_IsLCDON(pVBInfo) ) )
9103 if ( pVBInfo->LCDInfo & SetPWDEnable )
9105 if ( pVBInfo->LCDInfo & SetPWDEnable )
9106 XGI_BacklightByDrv(pVBInfo) ;
9109 XGI_SetPanelDelay( 4 ,pVBInfo) ;
9110 if ( pVBInfo->VBType & VB_XGI301LV )
9122 XGI_SetPanelPower( tempah , tempbl , pVBInfo) ;
9145 unsigned short XGI_GetTVPtrIndex(struct vb_device_info *pVBInfo)
9149 if ( pVBInfo->TVInfo & SetPALTV )
9151 if ( pVBInfo->TVInfo & SetYPbPrMode1080i )
9153 if ( pVBInfo->TVInfo & SetYPbPrMode525i )
9155 if ( pVBInfo->TVInfo & SetYPbPrMode525p )
9157 if ( pVBInfo->TVInfo & SetYPbPrMode750p )
9159 if ( pVBInfo->TVInfo & TVSimuMode )
9172 void XGI_OEM310Setting(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
9174 if ( pVBInfo->SetFlag & Win9xDOSMode )
9178 XGI_SetDelayComp(pVBInfo) ;
9180 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
9181 XGI_SetLCDCap(pVBInfo) ;
9183 if ( pVBInfo->VBInfo & SetCRT2ToTV )
9186 XGI_SetPhaseIncr(pVBInfo) ;
9187 XGI_SetYFilter( ModeNo , ModeIdIndex,pVBInfo ) ;
9188 XGI_SetAntiFlicker( ModeNo , ModeIdIndex,pVBInfo ) ;
9190 if ( pVBInfo->VBType&VB_XGI301)
9191 XGI_SetEdgeEnhance( ModeNo , ModeIdIndex ,pVBInfo) ;
9202 void XGI_SetDelayComp(struct vb_device_info *pVBInfo)
9210 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9212 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA | SetCRT2ToTV | SetCRT2ToRAMDAC ) )
9217 index = XGI_GetTVPtrIndex(pVBInfo ) ; /* Get TV Delay */
9218 tempbl = pVBInfo->XGI_TVDelayList[ index ] ;
9220 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9221 tempbl = pVBInfo->XGI_TVDelayList2[ index ] ;
9223 if ( pVBInfo->VBInfo & SetCRT2ToDualEdge )
9226 if ( pVBInfo->VBInfo & SetCRT2ToRAMDAC )
9229 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9232 if ( pVBInfo->VBInfo & ( SetCRT2ToLCD | SetCRT2ToLCDA ) )
9234 index = XGI_GetLCDCapPtr(pVBInfo) ; /* Get LCD Delay */
9235 tempbh=pVBInfo->LCDCapList[ index ].LCD_DelayCompensation ;
9237 if ( !( pVBInfo->VBInfo & SetCRT2ToLCDA ) )
9243 tempah = XGINew_GetReg1( pVBInfo->Part1Port , 0x2D ) ;
9245 if ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToLCD | SetCRT2ToTV ) ) /* Channel B */
9251 if ( pVBInfo->VBInfo & SetCRT2ToLCDA ) /* Channel A */
9256 XGINew_SetReg1(pVBInfo->Part1Port,0x2D,tempah);
9259 else if ( pVBInfo->IF_DEF_LVDS == 1 )
9263 if ( pVBInfo->VBInfo & SetCRT2ToLCD )
9265 tempah = pVBInfo->LCDCapList[ XGI_GetLCDCapPtr(pVBInfo) ].LCD_DelayCompensation ; /* / Get LCD Delay */
9268 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2D , 0x0f , tempah ) ;
9280 void XGI_SetLCDCap(struct vb_device_info *pVBInfo)
9284 tempcx = pVBInfo->LCDCapList[ XGI_GetLCDCapPtr(pVBInfo) ].LCD_Capability ;
9286 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9288 if ( pVBInfo->VBType & ( VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9291 XGINew_SetReg1(pVBInfo->Part4Port, 0x24, (unsigned char)(tempcx & 0x1F));
9294 XGINew_SetRegANDOR(pVBInfo->Part4Port, 0x0D,
9299 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9301 if ( pVBInfo->VBInfo & SetCRT2ToLCD )
9302 XGI_SetLCDCap_B( tempcx,pVBInfo ) ;
9303 else if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
9304 XGI_SetLCDCap_A( tempcx,pVBInfo ) ;
9306 if ( pVBInfo->VBType & ( VB_XGI302LV | VB_XGI301C ) )
9309 SetSpectrum( pVBInfo) ;
9313 XGI_SetLCDCap_A( tempcx, pVBInfo ) ;
9323 void XGI_SetLCDCap_A(unsigned short tempcx, struct vb_device_info *pVBInfo)
9327 temp = XGINew_GetReg1( pVBInfo->P3d4 , 0x37 ) ;
9331 XGINew_SetRegANDOR(pVBInfo->Part1Port, 0x19, 0x0F,
9333 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x1A , 0x7F , 0x80 ) ;
9337 XGINew_SetRegANDOR(pVBInfo->Part1Port, 0x19, 0x0F,
9339 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x1A , 0x7F , 0x00 ) ;
9345 XGINew_SetRegANDOR(pVBInfo->Part1Port,0x19, 0x0F,(unsigned short)(0x30|(tempcx&0x00C0)) );
9346 XGINew_SetRegANDOR(pVBInfo->Part1Port,0x1A,0x7F,0x00);
9350 XGINew_SetRegANDOR(pVBInfo->Part1Port,0x19, 0x0F,(unsigned short)(0x20|(tempcx&0x00C0)) ); // Enable Dither
9351 XGINew_SetRegANDOR(pVBInfo->Part1Port,0x1A,0x7F,0x80);
9363 void XGI_SetLCDCap_B(unsigned short tempcx, struct vb_device_info *pVBInfo)
9366 XGINew_SetRegANDOR(pVBInfo->Part2Port, 0x1A, 0xE0,
9369 XGINew_SetRegANDOR(pVBInfo->Part2Port, 0x1A, 0xE0,
9380 void SetSpectrum(struct vb_device_info *pVBInfo)
9384 index = XGI_GetLCDCapPtr(pVBInfo) ;
9386 XGINew_SetRegAND( pVBInfo->Part4Port , 0x30 , 0x8F ) ; /* disable down spectrum D[4] */
9387 XGI_LongWait(pVBInfo) ;
9388 XGINew_SetRegOR( pVBInfo->Part4Port , 0x30 , 0x20 ) ; /* reset spectrum */
9389 XGI_LongWait(pVBInfo) ;
9391 XGINew_SetReg1( pVBInfo->Part4Port , 0x31 , pVBInfo->LCDCapList[ index ].Spectrum_31 ) ;
9392 XGINew_SetReg1( pVBInfo->Part4Port , 0x32 , pVBInfo->LCDCapList[ index ].Spectrum_32 ) ;
9393 XGINew_SetReg1( pVBInfo->Part4Port , 0x33 , pVBInfo->LCDCapList[ index ].Spectrum_33 ) ;
9394 XGINew_SetReg1( pVBInfo->Part4Port , 0x34 , pVBInfo->LCDCapList[ index ].Spectrum_34 ) ;
9395 XGI_LongWait(pVBInfo) ;
9396 XGINew_SetRegOR( pVBInfo->Part4Port , 0x30 , 0x40 ) ; /* enable spectrum */
9407 struct vb_device_info *pVBInfo)
9414 if (pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) )
9417 tempbx = XGI_GetTVPtrIndex(pVBInfo ) ;
9422 index = pVBInfo->SModeIDTable[ ModeIdIndex ].VB_StTVFlickerIndex ;
9426 index = pVBInfo->EModeIDTable[ ModeIdIndex ].VB_ExtTVFlickerIndex ;
9433 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x0A , 0x8F , tempah ) ;
9443 void XGI_SetEdgeEnhance(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
9451 tempbx = XGI_GetTVPtrIndex(pVBInfo ) ;
9456 index = pVBInfo->SModeIDTable[ ModeIdIndex ].VB_StTVEdgeIndex ;
9460 index = pVBInfo->EModeIDTable[ ModeIdIndex ].VB_ExtTVEdgeIndex ;
9467 XGINew_SetRegANDOR( pVBInfo->Part2Port , 0x3A , 0x1F , tempah ) ;
9477 void XGI_SetPhaseIncr(struct vb_device_info *pVBInfo)
9486 XGI_GetTVPtrIndex2( &tempbx , &tempcl , &tempch, pVBInfo ) ; /* bx, cl, ch */
9489 XGINew_SetReg1(pVBInfo->Part2Port, 0x31,
9491 XGINew_SetReg1(pVBInfo->Part2Port, 0x32,
9493 XGINew_SetReg1(pVBInfo->Part2Port, 0x33,
9495 XGINew_SetReg1(pVBInfo->Part2Port, 0x34,
9507 struct vb_device_info *pVBInfo)
9517 XGI_GetTVPtrIndex2( &tempbx , &tempcl , &tempch, pVBInfo ) ; /* bx, cl, ch */
9562 tempal = pVBInfo->SModeIDTable[ ModeIdIndex ].VB_StTVYFilterIndex ;
9564 tempal = pVBInfo->EModeIDTable[ ModeIdIndex ].VB_ExtTVYFilterIndex ;
9573 XGINew_SetReg1( pVBInfo->Part2Port , 0x35 , 0 ) ;
9574 XGINew_SetReg1( pVBInfo->Part2Port , 0x36 , 0 ) ;
9575 XGINew_SetReg1( pVBInfo->Part2Port , 0x37 , 0 ) ;
9576 XGINew_SetReg1( pVBInfo->Part2Port , 0x38 , filterPtr[ index++ ] ) ;
9580 XGINew_SetReg1( pVBInfo->Part2Port , 0x35 , filterPtr[ index++ ] ) ;
9581 XGINew_SetReg1( pVBInfo->Part2Port , 0x36 , filterPtr[ index++ ] ) ;
9582 XGINew_SetReg1( pVBInfo->Part2Port , 0x37 , filterPtr[ index++ ] ) ;
9583 XGINew_SetReg1( pVBInfo->Part2Port , 0x38 , filterPtr[ index++ ] ) ;
9586 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9588 XGINew_SetReg1( pVBInfo->Part2Port , 0x48 , filterPtr[ index++ ] ) ;
9589 XGINew_SetReg1( pVBInfo->Part2Port , 0x49 , filterPtr[ index++ ] ) ;
9590 XGINew_SetReg1( pVBInfo->Part2Port , 0x4A , filterPtr[ index++ ] ) ;
9612 unsigned char *tempch, struct vb_device_info *pVBInfo)
9618 if ( pVBInfo->TVInfo & SetPALTV )
9621 if ( pVBInfo->TVInfo & SetPALMTV )
9624 if ( pVBInfo->TVInfo & SetPALNTV )
9627 if ( pVBInfo->TVInfo & NTSC1024x768 )
9630 if ( pVBInfo->TVInfo & SetPALMTV )
9634 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9636 if ( ( !( pVBInfo->VBInfo & SetInSlaveMode ) ) || ( pVBInfo->TVInfo & TVSimuMode ) )
9643 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9656 struct vb_device_info *pVBInfo)
9663 /* XGINew_SetReg1( pVBInfo->Part1Port , 0x03 , 0x00 ) ; // fix write part1 index 0 BTDRAM bit Bug */
9665 if ( !( pVBInfo->VBInfo & DisableCRT2Display ) )
9667 tempah=XGINew_GetReg1( pVBInfo->Part1Port , 0x00 ) ;
9671 if ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToTV | SetCRT2ToLCD ) )
9676 tempcl = pVBInfo->ModeType ;
9686 if ( pVBInfo->VBInfo & SetInSlaveMode )
9692 if ( pVBInfo->VBInfo & DisableCRT2Display )
9697 XGINew_SetReg1( pVBInfo->Part1Port , 0x00 , tempah ) ;
9698 if ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToTV | SetCRT2ToLCD ) )
9700 tempcl = pVBInfo->ModeType ;
9717 if ( pVBInfo->VBInfo & SetInSlaveMode )
9724 XGINew_SetReg1( pVBInfo->Part1Port , 0x00 , tempah ) ;
9728 if ( pVBInfo->VBInfo & DisableCRT2Display )
9729 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2e , tempbl , tempah ) ;
9735 if ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToTV | SetCRT2ToLCD | SetCRT2ToLCDA ) )
9737 if ( ( pVBInfo->VBInfo & SetCRT2ToLCDA ) && ( !( pVBInfo->VBInfo & SetSimuScanMode ) ) )
9741 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2e , tempbl , tempah ) ;
9745 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
9751 if ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToTV | SetCRT2ToLCD ) )
9756 if ( !( pVBInfo->VBInfo & SetInSlaveMode ) )
9759 if ( !( pVBInfo->VBInfo & SetCRT2ToRAMDAC ) )
9762 if ( !( pVBInfo->VBInfo & SetCRT2ToLCD ) )
9766 if ( !( pVBInfo->VBInfo & SetCRT2ToDualEdge ) )
9768 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2e , tempbl , tempah ) ;
9771 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2e , tempbl , tempah ) ;
9775 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2e , tempbl , tempah ) ;
9778 if ( pVBInfo->VBInfo & ( SetCRT2ToRAMDAC | SetCRT2ToTV | SetCRT2ToLCD | SetCRT2ToLCDA ) )
9781 if ( ( pVBInfo->ModeType == ModeVGA ) && ( !( pVBInfo->VBInfo & SetInSlaveMode ) ) )
9787 if ( pVBInfo->VBInfo & SetCRT2ToTV )
9789 /* if ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) ) ) */
9794 if ( pVBInfo->VBInfo & DriverMode )
9800 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x0D , ~0x0BF , tempah ) ;
9803 if ( pVBInfo->LCDInfo & SetLCDDualLink )
9806 if ( pVBInfo->VBInfo & SetCRT2ToTV )
9808 /* if ( ( !( pVBInfo->VBInfo & SetCRT2ToHiVisionTV ) ) && ( !( pVBInfo->TVInfo & ( SetYPbPrMode525p | SetYPbPrMode750p ) ) ) ) */
9810 if ( pVBInfo->TVInfo & RPLLDIV2XO )
9815 if ( ( pVBInfo->LCDResInfo == Panel1280x1024 ) || ( pVBInfo->LCDResInfo == Panel1280x1024x75 ) )
9818 if ( pVBInfo->LCDResInfo == Panel1280x960 )
9821 XGINew_SetReg1( pVBInfo->Part4Port , 0x0C , tempah ) ;
9824 if ( pVBInfo->VBType & ( VB_XGI301B | VB_XGI302B | VB_XGI301LV | VB_XGI302LV | VB_XGI301C ) )
9829 if ( pVBInfo->VBInfo & SetCRT2ToDualEdge )
9832 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
9836 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x13 , tempbl , tempah ) ;
9839 if ( !( pVBInfo->VBInfo & DisableCRT2Display ) )
9841 if ( pVBInfo->VBInfo & SetCRT2ToDualEdge )
9845 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2c , tempbl , tempah ) ;
9849 if ( !( pVBInfo->VBInfo & DisableCRT2Display ) )
9851 if ( pVBInfo->VBInfo & SetCRT2ToDualEdge )
9854 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x21 , tempbl , tempah ) ;
9859 if ( !( pVBInfo->VBInfo & SetCRT2ToLCDA ) )
9862 if ( !( pVBInfo->VBInfo & SetCRT2ToDualEdge ) )
9866 XGINew_SetRegANDOR( pVBInfo->Part4Port , 0x23 , tempbl , tempah ) ;
9868 if ( pVBInfo->VBType & ( VB_XGI302LV | VB_XGI301C ) )
9870 if ( pVBInfo->LCDInfo & SetLCDDualLink )
9872 XGINew_SetRegOR( pVBInfo->Part4Port , 0x27 , 0x20 ) ;
9873 XGINew_SetRegOR( pVBInfo->Part4Port , 0x34 , 0x10 ) ;
9885 void XGI_CloseCRTC(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
9891 if ( pVBInfo->VBInfo & SetCRT2ToLCDA )
9904 void XGI_OpenCRTC(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
9920 void XGI_GetRAMDAC2DATA(unsigned short ModeNo, unsigned short ModeIdIndex, unsigned short RefreshRateTableIndex, struct vb_device_info *pVBInfo)
9931 pVBInfo->RVBHCMAX = 1 ;
9932 pVBInfo->RVBHCFACT = 1 ;
9936 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
9937 StandTableIndex = XGI_GetModePtr( ModeNo , ModeIdIndex, pVBInfo ) ;
9938 tempax = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 0 ] ;
9939 tempbx = pVBInfo->StandTable[StandTableIndex ].CRTC[ 6 ] ;
9940 temp1 = pVBInfo->StandTable[ StandTableIndex ].CRTC[ 7 ] ;
9944 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
9945 CRT1Index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT1CRTC ;
9947 temp1 = (unsigned short)pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[0];
9948 temp2 = (unsigned short)pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[5];
9950 tempbx = (unsigned short)pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[8];
9951 tempcx = (unsigned short)pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[14] << 8;
9955 temp1 = (unsigned short)pVBInfo->XGINEWUB_CRT1Table[CRT1Index].CR[9];
9970 pVBInfo->VGAHT = tempax ;
9971 pVBInfo->HT = tempax ;
9973 pVBInfo->VGAVT = tempbx ;
9974 pVBInfo->VT = tempbx ;
9985 unsigned short XGI_GetColorDepth(unsigned short ModeNo, unsigned short ModeIdIndex, struct vb_device_info *pVBInfo)
9993 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ;
9997 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ;
10016 void XGI_UnLockCRT2(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
10019 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2f , 0xFF , 0x01 ) ;
10030 void XGI_LockCRT2(struct xgi_hw_device_info *HwDeviceExtension, struct vb_device_info *pVBInfo)
10033 XGINew_SetRegANDOR( pVBInfo->Part1Port , 0x2F , 0xFE , 0x00 ) ;
10045 void XGINew_EnableCRT2(struct vb_device_info *pVBInfo)
10047 XGINew_SetRegANDOR( pVBInfo->P3c4 , 0x1E , 0xFF , 0x20 ) ;
10058 void XGINew_LCD_Wait_Time(unsigned char DelayTime, struct vb_device_info *pVBInfo)
10095 unsigned char XGI_BridgeIsOn(struct vb_device_info *pVBInfo)
10099 if ( pVBInfo->IF_DEF_LVDS == 1 )
10105 flag = XGINew_GetReg1( pVBInfo->Part4Port , 0x00 ) ;
10121 void XGI_LongWait(struct vb_device_info *pVBInfo)
10125 i = XGINew_GetReg1( pVBInfo->P3c4 , 0x1F ) ;
10131 if ( !( XGINew_GetReg2( pVBInfo->P3da ) & 0x08 ) )
10137 if ( ( XGINew_GetReg2( pVBInfo->P3da ) & 0x08 ) )
10150 void XGI_VBLongWait(struct vb_device_info *pVBInfo)
10157 if ( !( pVBInfo->VBInfo & SetCRT2ToTV ) )
10164 tempal = XGINew_GetReg2( pVBInfo->P3da ) ;
10195 XGI_LongWait(pVBInfo) ;
10209 unsigned short XGI_GetVGAHT2(struct vb_device_info *pVBInfo)
10214 tempbx = ( ( pVBInfo->VGAVT - pVBInfo->VGAVDE ) * pVBInfo->RVBHCMAX ) & 0xFFFF ;
10215 tempax = ( pVBInfo->VT - pVBInfo->VDE ) * pVBInfo->RVBHCFACT ;
10216 tempax = ( tempax * pVBInfo->HT ) /tempbx ;
10232 struct vb_device_info *pVBInfo)
10248 modeflag = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ModeFlag ; /* si+St_ResInfo */
10249 resinfo = pVBInfo->SModeIDTable[ ModeIdIndex ].St_ResInfo ;
10250 CRT2Index = pVBInfo->SModeIDTable[ ModeIdIndex ].St_CRT2CRTC ;
10254 modeflag = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_ModeFlag ; /* si+Ext_ResInfo */
10255 resinfo = pVBInfo->EModeIDTable[ ModeIdIndex ].Ext_RESINFO ;
10256 CRT2Index = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRT2CRTC ;
10259 if ( pVBInfo->IF_DEF_LVDS == 0 )
10262 if ( ( ( pVBInfo->VBInfo & SetCRT2ToLCD ) | SetCRT2ToLCDA ) ) /*301b*/
10264 if ( pVBInfo->LCDResInfo != Panel1024x768 )
10275 if ( pVBInfo->VBInfo & SetCRT2ToTV )
10277 if ( pVBInfo->VBInfo & SetCRT2ToHiVisionTV )
10279 if ( pVBInfo->SetFlag & RPLLDIV2XO )
10296 if ( pVBInfo->SetFlag & TVSimuMode )
10316 if ( pVBInfo->VBType & VB_XGI301LV ) /* 301lv */
10318 if ( !( pVBInfo->VBExtInfo == VB_YPbPr1080i ) )
10321 if ( !( pVBInfo->VBExtInfo == VB_YPbPr750p ) )
10324 if ( !( pVBInfo->VBExtInfo == VB_YPbPr525p ) )
10327 if ( !( pVBInfo->SetFlag & RPLLDIV2XO ) )
10336 if ( pVBInfo->VBInfo & SetCRT2ToTV )
10338 if ( pVBInfo->SetFlag & RPLLDIV2XO )
10359 VCLKIndex = (unsigned char)XGINew_GetReg2((pVBInfo->P3ca + 0x02)); /* Port 3cch */
10363 VCLKIndex = pVBInfo->RefIndex[ RefreshRateTableIndex ].Ext_CRTVCLK ; /* di+Ext_CRTVCLK */
10376 if ( pVBInfo->IF_DEF_CH7005 == 1 )
10378 if ( !( pVBInfo->VBInfo & SetCRT2ToLCD ) )
10383 if ( pVBInfo->VBInfo & SetPALTV )
10386 if ( pVBInfo->VBInfo & SetCHTVOverScan )
10392 CHTVVCLKPtr = pVBInfo->CHTVVCLKUNTSC ;
10395 CHTVVCLKPtr = pVBInfo->CHTVVCLKONTSC ;
10398 CHTVVCLKPtr = pVBInfo->CHTVVCLKUPAL ;
10401 CHTVVCLKPtr = pVBInfo->CHTVVCLKOPAL ;
10413 if ( ( pVBInfo->LCDResInfo == Panel800x600 ) || ( pVBInfo->LCDResInfo == Panel320x480 ) )
10415 else if ( ( pVBInfo->LCDResInfo == Panel1024x768 ) || ( pVBInfo->LCDResInfo == Panel1024x768x75 ) )