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

📄 init301.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 5 页
字号:
	    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)) {	 if(resinfo == SIS_RI_1024x768) {	    if(SiS_Pr->SiS_TVMode & TVSetYPbPr525p) {	       SiS_Pr->SiS_TVMode |= TVSet525p1024;	    } else if(!(SiS_Pr->SiS_TVMode & (TVSetHiVision | TVSetYPbPr750p))) {	       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_SIS30xBLV)) {	 if(SiS_Pr->SiS_TVMode & TVSetTVSimuMode) {	    SiS_Pr->SiS_TVMode &= ~TVRPLLDIV2XO;	 }      }   }   SiS_Pr->SiS_VBInfo &= ~SetPALTV;#ifdef SIS_XORG_XF86#ifdef TWDEBUG   xf86DrvMsg(0, X_INFO, "(init301: TVMode %x, VBInfo %x)\n", SiS_Pr->SiS_TVMode, SiS_Pr->SiS_VBInfo);#endif#endif}/*********************************************//*               GET LCD INFO                *//*********************************************/static unsigned shortSiS_GetBIOSLCDResInfo(struct SiS_Private *SiS_Pr){   unsigned short temp = SiS_Pr->SiS_LCDResInfo;   /* Translate my LCDResInfo to BIOS value */   switch(temp) {   case Panel_1280x768_2: temp = Panel_1280x768;    break;   case Panel_1280x800_2: temp = Panel_1280x800;    break;   case Panel_1280x854:   temp = Panel661_1280x854; break;   }   return temp;}static voidSiS_GetLCDInfoBIOS(struct SiS_Private *SiS_Pr){#ifdef SIS315H   unsigned char  *ROMAddr;   unsigned short temp;#ifdef SIS_XORG_XF86#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#endif   if((ROMAddr = GetLCDStructPtr661(SiS_Pr))) {      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 = (unsigned short)((unsigned char)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 SIS_XORG_XF86#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   }#endif}static voidSiS_CheckScaling(struct SiS_Private *SiS_Pr, unsigned short resinfo,			const unsigned char *nonscalingmodes){   int i = 0;   while(nonscalingmodes[i] != 0xff) {      if(nonscalingmodes[i++] == resinfo) {	 if((SiS_Pr->SiS_VBInfo & SetCRT2ToLCD) ||	    (SiS_Pr->UsePanelScaler == -1)) {	    SiS_Pr->SiS_LCDInfo |= DontExpandLCD;	 }	 break;      }   }}voidSiS_GetLCDResInfo(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short ModeIdIndex){  unsigned short temp,modeflag,resinfo=0,modexres=0,modeyres=0;  BOOLEAN panelcanscale = FALSE;#ifdef SIS300  unsigned char *ROMAddr = SiS_Pr->VirtualRomBase;  static const unsigned char SiS300SeriesLCDRes[] =          { 0,  1,  2,  3,  7,  4,  5,  8,	    0,  0, 10,  0,  0,  0,  0, 15 };#endif#ifdef SIS315H  unsigned char   *myptr = NULL;#endif  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;  /* Alternative 1600x1200@60 timing for 1600x1200 LCDA */  SiS_Pr->Alternate1600x1200 = FALSE;  if(!(SiS_Pr->SiS_VBInfo & (SetCRT2ToLCD | SetCRT2ToLCDA))) return;  modeflag = SiS_GetModeFlag(SiS_Pr, ModeNo, ModeIdIndex);  if((ModeNo > 0x13) && (!SiS_Pr->UseCustomMode)) {     resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;     modexres = SiS_Pr->SiS_ModeResInfo[resinfo].HTotal;     modeyres = SiS_Pr->SiS_ModeResInfo[resinfo].VTotal;  }  temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x36);  /* For broken BIOSes: Assume 1024x768 */  if(temp == 0) temp = 0x02;  if((SiS_Pr->ChipType >= SIS_661) || (SiS_Pr->SiS_ROMNew)) {     SiS_Pr->SiS_LCDTypeInfo = (SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x7c) >> 2;  } else if((SiS_Pr->ChipType < SIS_315H) || (SiS_Pr->ChipType >= SIS_661)) {     SiS_Pr->SiS_LCDTypeInfo = temp >> 4;  } else {     SiS_Pr->SiS_LCDTypeInfo = (temp & 0x0F) - 1;  }  temp &= 0x0f;#ifdef SIS300  if(SiS_Pr->ChipType < SIS_315H) {     /* Very old BIOSes only know 7 sizes (NetVista 2179, 1.01g) */     if(SiS_Pr->SiS_VBType & VB_SIS301) {        if(temp < 0x0f) temp &= 0x07;     }     /* Translate 300 series LCDRes to 315 series for unified usage */     temp = SiS300SeriesLCDRes[temp];  }#endif  /* Translate to our internal types */#ifdef SIS315H  if(SiS_Pr->ChipType == SIS_550) {     if     (temp == Panel310_1152x768)  temp = Panel_320x240_2; /* Verified working */     else if(temp == Panel310_320x240_2) temp = Panel_320x240_2;     else if(temp == Panel310_320x240_3) temp = Panel_320x240_3;  } else if(SiS_Pr->ChipType >= SIS_661) {     if(temp == Panel661_1280x854)       temp = Panel_1280x854;  }#endif  if(SiS_Pr->SiS_VBType & VB_SISLVDS) {		/* SiS LVDS */     if(temp == Panel310_1280x768) {        temp = Panel_1280x768_2;     }     if(SiS_Pr->SiS_ROMNew) {	if(temp == Panel661_1280x800) {	   temp = Panel_1280x800_2;	}     }  }  SiS_Pr->SiS_LCDResInfo = temp;#ifdef SIS300  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;     } else if(SiS_Pr->SiS_CustomT == CUT_PANEL856) {	SiS_Pr->SiS_LCDResInfo = Panel_856x480;     }  }#endif  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;  }  temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x37);  SiS_Pr->SiS_LCDInfo = temp & ~0x000e;  /* Need temp below! */  /* These must/can't scale no matter what */  switch(SiS_Pr->SiS_LCDResInfo) {  case Panel_320x240_1:  case Panel_320x240_2:  case Panel_320x240_3:  case Panel_1280x960:      SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;      break;  case Panel_640x480:      SiS_Pr->SiS_LCDInfo |= DontExpandLCD;  }  panelcanscale = (SiS_Pr->SiS_LCDInfo & DontExpandLCD) ? TRUE : FALSE;  if(!SiS_Pr->UsePanelScaler)          SiS_Pr->SiS_LCDInfo &= ~DontExpandLCD;  else if(SiS_Pr->UsePanelScaler == 1) SiS_Pr->SiS_LCDInfo |= DontExpandLCD;  /* Dual link, Pass 1:1 BIOS default, etc. */#ifdef SIS315H  if(SiS_Pr->ChipType >= SIS_661) {     if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {	if(temp & 0x08) SiS_Pr->SiS_LCDInfo |= LCDPass11;     }     if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {	if(SiS_Pr->SiS_ROMNew) {	   if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;	} else if((myptr = GetLCDStructPtr661(SiS_Pr))) {	   if(myptr[2] & 0x01) SiS_Pr->SiS_LCDInfo |= LCDDualLink;	}     }  } else if(SiS_Pr->ChipType >= SIS_315H) {     if(SiS_Pr->SiS_LCDInfo & DontExpandLCD) {	if(SiS_GetReg(SiS_Pr->SiS_P3d4,0x39) & 0x01) SiS_Pr->SiS_LCDInfo |= LCDPass11;     }     if((SiS_Pr->SiS_ROMNew) && (!(SiS_Pr->PanelSelfDetected))) {	SiS_Pr->SiS_LCDInfo &= ~(LCDRGB18Bit);	temp = SiS_GetReg(SiS_Pr->SiS_P3d4,0x35);	if(temp & 0x01) SiS_Pr->SiS_LCDInfo |= LCDRGB18Bit;	if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {	   if(temp & 0x02) SiS_Pr->SiS_LCDInfo |= LCDDualLink;	}     } else if(!(SiS_Pr->SiS_ROMNew)) {	if(SiS_Pr->SiS_VBType & VB_SISDUALLINK) {	   if((SiS_Pr->SiS_CustomT == CUT_CLEVO1024) &&	      (SiS_Pr->SiS_LCDResInfo == Panel_1024x768)) {	      SiS_Pr->SiS_LCDInfo |= LCDDualLink;	   }	   if((SiS_Pr->SiS_LCDResInfo == Panel_1280x1024) ||	      (SiS_Pr->SiS_LCDResInfo == Panel_1400x1050) ||	      (SiS_Pr->SiS_LCDResInfo == Panel_1600x1200) ||	      (SiS_Pr->SiS_LCDResInfo == Panel_1680x1050)) {	      SiS_Pr->SiS_LCDInfo |= LCDDualLink;	   }	}     }  }#endif  /* Pass 1:1 */  if((SiS_Pr->SiS_IF_DEF_LVDS == 1) || (SiS_Pr->SiS_VBType & VB_NoLCD)) {     /* Always center screen on LVDS (if scaling is disabled) */     SiS_Pr->SiS_LCDInfo &= ~LCDPass11;

⌨️ 快捷键说明

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