⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init301.c

📁 linux-2.4.29操作系统的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*********************************************//*           DETERMINE TVMode flag           *//*********************************************/voidSiS_SetTVMode(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex, PSIS_HW_INFO HwInfo){  UCHAR  *ROMAddr = HwInfo->pjVirtualRomBase;  USHORT temp, temp1, resinfo = 0, romindex = 0;  UCHAR  OutputSelect = *SiS_Pr->pSiS_OutputSelect;  SiS_Pr->SiS_TVMode = 0;  if(!(SiS_Pr->SiS_VBInfo & SetCRT2ToTV)) return;  if(SiS_Pr->UseCustomMode) return;  if(ModeNo > 0x13) {     resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;  }  if(HwInfo->jChipType < SIS_661) {     if(SiS_Pr->SiS_VBInfo & SetPALTV) SiS_Pr->SiS_TVMode |= TVSetPAL;     if(SiS_Pr->SiS_VBType & VB_SISVB) {        temp = 0;        if((HwInfo->jChipType == SIS_630) ||           (HwInfo->jChipType == SIS_730)) {           temp = 0x35;	   romindex = 0xfe;        } else if(HwInfo->jChipType >= SIS_315H) {           temp = 0x38;	   romindex = 0xf3;	   if(HwInfo->jChipType >= SIS_330) romindex = 0x11b;        }        if(temp) {           if(romindex && SiS_Pr->SiS_UseROM && (!(SiS_Pr->SiS_ROMNew))) {	      OutputSelect = ROMAddr[romindex];	      if(!(OutputSelect & EnablePALMN)) {                 SiS_SetRegAND(SiS_Pr->SiS_P3d4,temp,0x3F);	      }	   }	   temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,temp);	   if(SiS_Pr->SiS_TVMode & TVSetPAL) {              if(temp1 & EnablePALM) {		/* 0x40 */                 SiS_Pr->SiS_TVMode |= TVSetPALM;	         SiS_Pr->SiS_TVMode &= ~TVSetPAL;	      } else if(temp1 & EnablePALN) {	/* 0x80 */	         SiS_Pr->SiS_TVMode |= TVSetPALN;              }	   } else {              if(temp1 & EnableNTSCJ) {		/* 0x40 */	         SiS_Pr->SiS_TVMode |= TVSetNTSCJ;  	      }	   }        }	/* Translate HiVision/YPbPr to our new flags */	if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {	   if(SiS_Pr->SiS_YPbPr == YPbPr750p)          SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;	   else if(SiS_Pr->SiS_YPbPr == YPbPr525p)     SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;	   else	if(SiS_Pr->SiS_YPbPr == YPbPrHiVision) SiS_Pr->SiS_TVMode |= TVSetHiVision;	   else					       SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;	   if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetYPbPr525p | TVSetYPbPr525i)) {	      SiS_Pr->SiS_VBInfo &= ~SetCRT2ToHiVision;	      SiS_Pr->SiS_VBInfo |= SetCRT2ToYPbPr525750;	   } else if(SiS_Pr->SiS_TVMode & TVSetHiVision) {	      SiS_Pr->SiS_TVMode |= TVSetPAL;	   }	}     } else if(SiS_Pr->SiS_IF_DEF_CH70xx != 0) {        if(SiS_Pr->SiS_CHOverScan) {           if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {              temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);              if((temp & TVOverScan) || (SiS_Pr->SiS_CHOverScan == 1)) {	         SiS_Pr->SiS_TVMode |= TVSetCHOverScan;              }           } else if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {      	      temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x79);      	      if((temp & 0x80) || (SiS_Pr->SiS_CHOverScan == 1)) {	         SiS_Pr->SiS_TVMode |= TVSetCHOverScan; 	      }	   }           if(SiS_Pr->SiS_CHSOverScan) {              SiS_Pr->SiS_TVMode |= TVSetCHOverScan;           }        }        if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {	   temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x38);     	   if(SiS_Pr->SiS_TVMode & TVSetPAL) {              if(temp & EnablePALM)      SiS_Pr->SiS_TVMode |= TVSetPALM;	      else if(temp & EnablePALN) SiS_Pr->SiS_TVMode |= TVSetPALN;           } else {	      if(temp & EnableNTSCJ) {	         SiS_Pr->SiS_TVMode |= TVSetNTSCJ;  	      }	   }	}     }  } else {  /* 661 and later */     temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);     if(temp1 & 0x01) {        SiS_Pr->SiS_TVMode |= TVSetPAL;	if(temp1 & 0x08) {	   SiS_Pr->SiS_TVMode |= TVSetPALN;	} else if(temp1 & 0x04) {	   if(SiS_Pr->SiS_VBType & VB_SISVB) {	      SiS_Pr->SiS_TVMode &= ~TVSetPAL;	   }	   SiS_Pr->SiS_TVMode |= TVSetPALM;	}     } else {        if(temp1 & 0x02) {	   SiS_Pr->SiS_TVMode |= TVSetNTSCJ;	}     }     if(SiS_Pr->SiS_IF_DEF_CH70xx == 2) {        if(SiS_Pr->SiS_CHOverScan) {           if((temp1 & 0x10) || (SiS_Pr->SiS_CHOverScan == 1)) {	      SiS_Pr->SiS_TVMode |= TVSetCHOverScan;	   }	}     }     if(SiS_Pr->SiS_VBType & VB_SISVB) {        if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {	   temp1 &= 0xe0;	   if(temp1 == 0x00)      SiS_Pr->SiS_TVMode |= TVSetYPbPr525i;	   else if(temp1 == 0x20) SiS_Pr->SiS_TVMode |= TVSetYPbPr525p;	   else if(temp1 == 0x40) SiS_Pr->SiS_TVMode |= TVSetYPbPr750p;	} else if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {	   SiS_Pr->SiS_TVMode |= (TVSetHiVision | TVSetPAL);	}	if(SiS_Pr->SiS_VBInfo & (SetCRT2ToYPbPr525750 | SetCRT2ToHiVision)) {	   if(resinfo == SIS_RI_800x480 || resinfo == SIS_RI_1024x576 || resinfo == SIS_RI_1280x720) {	      SiS_Pr->SiS_TVMode |= TVAspect169;	   } else {	      temp1 = SiS_GetReg(SiS_Pr->SiS_P3d4,0x39);	      if(temp1 & 0x02) {		 if(SiS_Pr->SiS_TVMode & (TVSetYPbPr750p | TVSetHiVision)) {		    SiS_Pr->SiS_TVMode |= TVAspect169;		 } else {		    SiS_Pr->SiS_TVMode |= TVAspect43LB;		 }	      } else {		 SiS_Pr->SiS_TVMode |= TVAspect43;	      }	   }	}     }  }  if(SiS_Pr->SiS_VBInfo & SetCRT2ToSCART) SiS_Pr->SiS_TVMode |= TVSetPAL;  if(SiS_Pr->SiS_VBType & VB_SISVB) {     if(SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) {        SiS_Pr->SiS_TVMode |= TVSetPAL;	SiS_Pr->SiS_TVMode &= ~(TVSetPALM | TVSetPALN | TVSetNTSCJ);     } else if(SiS_Pr->SiS_VBInfo & SetCRT2ToYPbPr525750) {        if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525i | TVSetYPbPr525p | TVSetYPbPr750p)) {	   SiS_Pr->SiS_TVMode &= ~(TVSetPAL | TVSetNTSCJ | TVSetPALM | TVSetPALN);	}     }     if(SiS_Pr->SiS_VBInfo & SetInSlaveMode) {        if(!(SiS_Pr->SiS_VBInfo & SetNotSimuMode)) {           SiS_Pr->SiS_TVMode |= TVSetTVSimuMode;        }     }     if(!(SiS_Pr->SiS_TVMode & TVSetPAL)) {        /* BIOS sets TVNTSC1024 without checking 525p here. Wrong? */        if(!(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr525p | TVSetYPbPr750p))) {           if(resinfo == SIS_RI_1024x768) {              SiS_Pr->SiS_TVMode |= TVSetNTSC1024;	   }        }     }     SiS_Pr->SiS_TVMode |= TVRPLLDIV2XO;     if((SiS_Pr->SiS_VBInfo & SetCRT2ToHiVision) &&        (SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {	SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;     } else if(SiS_Pr->SiS_TVMode & (TVSetYPbPr525p | TVSetYPbPr750p)) {        SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;     } else if(!(SiS_Pr->SiS_VBType & VB_SIS301BLV302BLV)) {        if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {           SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;        }     }  }  SiS_Pr->SiS_VBInfo &= ~SetPALTV;#ifdef TWDEBUG  xf86DrvMsg(0, X_INFO, "(init301: TVMode %x, VBInfo %x)\n", SiS_Pr->SiS_TVMode, SiS_Pr->SiS_VBInfo);#endif }/*********************************************//*               GET LCD INFO                *//*********************************************/static USHORTSiS_GetBIOSLCDResInfo(SiS_Private *SiS_Pr){   USHORT temp = SiS_Pr->SiS_LCDResInfo;   /* Translate my LCDResInfo to BIOS value */   if(temp == Panel_1280x768_2)  temp = Panel_1280x768;   if(temp == Panel_1280x768_3)  temp = Panel_1280x768;   return temp;}static voidSiS_GetLCDInfoBIOS(SiS_Private *SiS_Pr, PSIS_HW_INFO HwInfo){#ifdef SIS315H   UCHAR  *ROMAddr;   USHORT temp;      #ifdef TWDEBUG   xf86DrvMsg(0, X_INFO, "Paneldata driver: [%d %d] [H %d %d] [V %d %d] [C %d 0x%02x 0x%02x]\n",      	SiS_Pr->PanelHT, SiS_Pr->PanelVT, 	SiS_Pr->PanelHRS, SiS_Pr->PanelHRE,	SiS_Pr->PanelVRS, SiS_Pr->PanelVRE, 	SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].CLOCK,	SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_A, 	SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_B);#endif      if((ROMAddr = GetLCDStructPtr661(SiS_Pr, HwInfo))) {      if((temp = SISGETROMW(6)) != SiS_Pr->PanelHT) {         SiS_Pr->SiS_NeedRomModeData = TRUE;	 SiS_Pr->PanelHT  = temp;      }      if((temp = SISGETROMW(8)) != SiS_Pr->PanelVT) {         SiS_Pr->SiS_NeedRomModeData = TRUE;         SiS_Pr->PanelVT  = temp;      }      SiS_Pr->PanelHRS = SISGETROMW(10);      SiS_Pr->PanelHRE = SISGETROMW(12);      SiS_Pr->PanelVRS = SISGETROMW(14);      SiS_Pr->PanelVRE = SISGETROMW(16);      SiS_Pr->PanelVCLKIdx315 = VCLK_CUSTOM_315;      SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].CLOCK =	 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].CLOCK = (USHORT)((UCHAR)ROMAddr[18]);      SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2B =	 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_A = ROMAddr[19];      SiS_Pr->SiS_VCLKData[VCLK_CUSTOM_315].SR2C =	 SiS_Pr->SiS_VBVCLKData[VCLK_CUSTOM_315].Part4_B = ROMAddr[20];	 #ifdef TWDEBUG      xf86DrvMsg(0, X_INFO, "Paneldata BIOS:  [%d %d] [H %d %d] [V %d %d] [C %d 0x%02x 0x%02x]\n",      	SiS_Pr->PanelHT, SiS_Pr->PanelVT, 	SiS_Pr->PanelHRS, SiS_Pr->PanelHRE,	SiS_Pr->PanelVRS, SiS_Pr->PanelVRE, 	SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].CLOCK,	SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_A, 	SiS_Pr->SiS_VBVCLKData[SiS_Pr->PanelVCLKIdx315].Part4_B);#endif	    }#endif}voidSiS_GetLCDResInfo(SiS_Private *SiS_Pr, USHORT ModeNo, USHORT ModeIdIndex,		  PSIS_HW_INFO HwInfo){#ifdef SIS300  UCHAR  *ROMAddr = HwInfo->pjVirtualRomBase;#endif#ifdef SIS315H  UCHAR  *myptr = NULL;#endif    USHORT temp,modeflag,resinfo=0;  const unsigned char SiS300SeriesLCDRes[] =         { 0,  1,  2,  3,  7,  4,  5,  8,	   0,  0, 10,  0,  0,  0,  0, 15 };  SiS_Pr->SiS_LCDResInfo  = 0;  SiS_Pr->SiS_LCDTypeInfo = 0;  SiS_Pr->SiS_LCDInfo     = 0;  SiS_Pr->PanelHRS        = 999; /* HSync start */  SiS_Pr->PanelHRE        = 999; /* HSync end */  SiS_Pr->PanelVRS        = 999; /* VSync start */  SiS_Pr->PanelVRE        = 999; /* VSync end */  SiS_Pr->SiS_NeedRomModeData = FALSE;  if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))) return;  if(ModeNo <= 0x13) {     modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;  } else if(SiS_Pr->UseCustomMode) {     modeflag = SiS_Pr->CModeFlag;  } else {     modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;     resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;  }  temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);  if(!temp) return;  if((HwInfo->jChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {     SiS_Pr->SiS_LCDTypeInfo = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x7c) >> 2;  } else if((HwInfo->jChipType < SIS_315H) || (HwInfo->jChipType >= SIS_661)) {     SiS_Pr->SiS_LCDTypeInfo = temp >> 4;  } else {     SiS_Pr->SiS_LCDTypeInfo = (temp & 0x0F) - 1;  }  temp &= 0x0f;  if(HwInfo->jChipType < SIS_315H) {     /* Translate 300 series LCDRes to 315 series for unified usage */     temp = SiS300SeriesLCDRes[temp];  }  if(HwInfo->jChipType == SIS_550) {     if(temp == Panel310_640x480_2) temp = Panel_640x480_2;     if(temp == Panel310_640x480_3) temp = Panel_640x480_3;  }  if(SiS_Pr->SiS_VBType & VB_SIS301LV302LV) {	/* SiS LVDS */     if(temp == Panel310_1280x768) {        temp = Panel_1280x768_2;#ifdef SIS315H	if((myptr = GetLCDStructPtr661(SiS_Pr, HwInfo))) {	   if((myptr[8] | (myptr[9] << 8)) == 798) temp = Panel_1280x768_3;	}#endif     }  }   SiS_Pr->SiS_LCDResInfo = temp;  if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {     if(SiS_Pr->SiS_CustomT == CUT_BARCO1366) {        SiS_Pr->SiS_LCDResInfo = Panel_Barco1366;     } else if(SiS_Pr->SiS_CustomT == CUT_PANEL848) {        SiS_Pr->SiS_LCDResInfo = Panel_848x480;     }  }  if(SiS_Pr->SiS_VBType & VB_SISVB) {     if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMin301)	SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMin301;  } else {     if(SiS_Pr->SiS_LCDResInfo < SiS_Pr->SiS_PanelMinLVDS)	SiS_Pr->SiS_LCDResInfo = SiS_Pr->SiS_PanelMinLVDS;  }  SiS_Pr->PanelVCLKIdx300 = VCLK65_300;  SiS_Pr->PanelVCLKIdx315 = VCLK108_2_315;  switch(SiS_Pr->SiS_LCDResInfo) {     case Panel_320x480:    SiS_Pr->PanelXRes =  320; SiS_Pr->PanelYRes =  480;     			    SiS_Pr->PanelHT   =  400; SiS_Pr->PanelVT   =  525;			    SiS_Pr->PanelVCLKIdx300 = VCLK28;			    SiS_Pr->PanelVCLKIdx315 = VCLK28;			    break;     case Panel_640x480_2:     case Panel_640x480_3:  SiS_Pr->PanelXRes =  640; SiS_Pr->PanelYRes =  480;     			    SiS_Pr->PanelVRS  =   24; SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx300 = VCLK28;			    SiS_Pr->PanelVCLKIdx315 = VCLK28;			    break;     case Panel_640x480:    SiS_Pr->PanelXRes =  640; SiS_Pr->PanelYRes =  480;     			    			      SiS_Pr->PanelVRE  =    3;			    SiS_Pr->PanelVCLKIdx300 = VCLK28;			    SiS_Pr->PanelVCLKIdx315 = VCLK28;			    break;     case Panel_800x600:    SiS_Pr->PanelXRes =  800; SiS_Pr->PanelYRes =  600;     			    SiS_Pr->PanelHT   = 1056; SiS_Pr->PanelVT   =  628;			    SiS_Pr->PanelHRS  =   40; SiS_Pr->PanelHRE  =  128;			    SiS_Pr->PanelVRS  =    1; SiS_Pr->PanelVRE  =    4;			    SiS_Pr->PanelVCLKIdx300 = VCLK40;			    SiS_Pr->PanelVCLKIdx315 = VCLK40;			    break;     case Panel_1024x600:   SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  600;     			    SiS_Pr->PanelHT   = 1344; SiS_Pr->PanelVT   =  800;			    SiS_Pr->PanelHRS  =   24; SiS_Pr->PanelHRE  =  136;			    SiS_Pr->PanelVRS  =    2 /* 88 */ ; SiS_Pr->PanelVRE  =    6;     			    SiS_Pr->PanelVCLKIdx300 = VCLK65_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK65_315;     			    break;     case Panel_1024x768:   SiS_Pr->PanelXRes = 1024; SiS_Pr->PanelYRes =  768;     			    SiS_Pr->PanelHT   = 1344; SiS_Pr->PanelVT   =  806;			    SiS_Pr->PanelHRS  =   24; SiS_Pr->PanelHRE  =  136;			    SiS_Pr->PanelVRS  =    3; SiS_Pr->PanelVRE  =    6;			    if(HwInfo->jChipType < SIS_315H) {			       SiS_Pr->PanelHRS = 23;			       			      SiS_Pr->PanelVRE  =    5;			    }			    SiS_Pr->PanelVCLKIdx300 = VCLK65_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK65_315;			    SiS_GetLCDInfoBIOS(SiS_Pr, HwInfo);			    break;     case Panel_1152x768:   SiS_Pr->PanelXRes = 1152; SiS_Pr->PanelYRes =  768;     			    SiS_Pr->PanelHT   = 1344; SiS_Pr->PanelVT   =  806;			    SiS_Pr->PanelHRS  =   24;			    SiS_Pr->PanelVRS  =    3; SiS_Pr->PanelVRE  =    6;			    if(HwInfo->jChipType < SIS_315H) {			       SiS_Pr->PanelHRS = 23;			       			      SiS_Pr->PanelVRE  =    5;			    }     			    SiS_Pr->PanelVCLKIdx300 = VCLK65_300;			    SiS_Pr->PanelVCLKIdx315 = VCLK65_315;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -