📄 init301.c
字号:
switch (PanelIndex) { case 0: PanelDesPtr = LVDS1024x768Des_1; break; case 1: PanelDesPtr = LVDS1280x1024Des_1; break; case 2: PanelDesPtr = LVDS1280x960Des_1; break; case 3: PanelDesPtr = LVDS1024x768Des_2; break; case 4: PanelDesPtr = LVDS1280x1024Des_2; break; case 5: PanelDesPtr = LVDS1280x960Des_2; break; } } else { SiS_GetLVDSDesPtr(ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex, &PanelIndex,&ResIndex);#ifdef LINUX_KERNEL if (PanelIndex < 32) /* >=32 = TV */ printk(KERN_INFO "sisfb: LVDS-LCD panel type %d (Resindex %d)\n", PanelIndex, ResIndex);#endif switch (PanelIndex) { case 0: PanelDesPtr = SiS_PanelType00_1; break; case 1: PanelDesPtr = SiS_PanelType01_1; break; case 2: PanelDesPtr = SiS_PanelType02_1; break; case 3: PanelDesPtr = SiS_PanelType03_1; break; case 4: PanelDesPtr = SiS_PanelType04_1; break; case 5: PanelDesPtr = SiS_PanelType05_1; break; case 6: PanelDesPtr = SiS_PanelType06_1; break; case 7: PanelDesPtr = SiS_PanelType07_1; break; case 8: PanelDesPtr = SiS_PanelType08_1; break; case 9: PanelDesPtr = SiS_PanelType09_1; break; case 10: PanelDesPtr = SiS_PanelType0a_1; break; case 11: PanelDesPtr = SiS_PanelType0b_1; break; case 12: PanelDesPtr = SiS_PanelType0c_1; break; /* TW: Clevo 2202 */ case 13: PanelDesPtr = SiS_PanelType0d_1; break; case 14: PanelDesPtr = SiS_PanelType0e_1; break; /* TW: Uniwill N271S2 */ case 15: PanelDesPtr = SiS_PanelType0f_1; break; case 16: PanelDesPtr = SiS_PanelType00_2; break; case 17: PanelDesPtr = SiS_PanelType01_2; break; case 18: PanelDesPtr = SiS_PanelType02_2; break; case 19: PanelDesPtr = SiS_PanelType03_2; break; case 20: PanelDesPtr = SiS_PanelType04_2; break; case 21: PanelDesPtr = SiS_PanelType05_2; break; case 22: PanelDesPtr = SiS_PanelType06_2; break; case 23: PanelDesPtr = SiS_PanelType07_2; break; case 24: PanelDesPtr = SiS_PanelType08_2; break; case 25: PanelDesPtr = SiS_PanelType09_2; break; case 26: PanelDesPtr = SiS_PanelType0a_2; break; case 27: PanelDesPtr = SiS_PanelType0b_2; break; case 28: PanelDesPtr = SiS_PanelType0c_2; break; case 29: PanelDesPtr = SiS_PanelType0d_2; break; case 30: PanelDesPtr = SiS_PanelType0e_2; break; case 31: PanelDesPtr = SiS_PanelType0f_2; break; case 32: PanelDesPtr = SiS_CHTVUNTSCDesData; break; case 33: PanelDesPtr = SiS_CHTVONTSCDesData; break; case 34: PanelDesPtr = SiS_CHTVUPALDesData; break; case 35: PanelDesPtr = SiS_CHTVOPALDesData; break; } } SiS_LCDHDES = (PanelDesPtr+ResIndex)->LCDHDES; SiS_LCDVDES = (PanelDesPtr+ResIndex)->LCDVDES; if(SiS_LCDInfo&LCDNonExpanding){ if(SiS_LCDResInfo>=Panel1024x768){ if(ModeNo<=0x13){ modeflag = SiS_SModeIDTable[ModeIdIndex].St_ModeFlag; if(!(modeflag&HalfDCLK)) { SiS_LCDHDES=320; } } } } return;}voidSiS_GetLVDSDesPtr(ULONG ROMAddr,USHORT ModeNo,USHORT ModeIdIndex, USHORT RefreshRateTableIndex,USHORT *PanelIndex, USHORT *ResIndex){ USHORT tempbx,tempal; tempbx=0; if(SiS_IF_DEF_CH7005==1) { if(!(SiS_VBInfo&SetCRT2ToLCD)) { tempbx=32; if(SiS_VBInfo&SetPALTV) tempbx=tempbx+2; if(SiS_VBInfo&SetCHTVOverScan) tempbx=tempbx+1; } } if(SiS_VBInfo&SetCRT2ToLCD) { tempbx=SiS_LCDTypeInfo; if(SiS_LCDInfo&LCDNonExpanding){ tempbx=tempbx+16; } } if(ModeNo<=0x13){ tempal = SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC; }else{ tempal = SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC; } tempal=tempal&0x1F; *PanelIndex=tempbx; *ResIndex=tempal;}/*301b*/voidSiS_GetLVDSDesPtrA(ULONG ROMAddr,USHORT ModeNo,USHORT ModeIdIndex, USHORT RefreshRateTableIndex,USHORT *PanelIndex, USHORT *ResIndex){ USHORT tempbx=0,tempal; tempbx=SiS_LCDResInfo-Panel1024x768; if(SiS_LCDInfo&LCDNonExpanding){ tempbx=tempbx+3; } if(ModeNo<=0x13){ tempal = SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC; } else { tempal = SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC; } tempal=tempal&0x1F; *PanelIndex=tempbx; *ResIndex=tempal;}/*end 301b*/voidSiS_SetCRT2ModeRegs(USHORT BaseAddr,USHORT ModeNo, PSIS_HW_DEVICE_INFO HwDeviceExtension){ USHORT i,j; USHORT tempcl,tempah; SiS_SetReg1(SiS_Part1Port,0x03,0x00); /*fix write part1 index 0 BTDRAM bit Bug*/ /*301b*/ if( (SiS_VBType&(VB_SIS301B|VB_SIS302B|VB_SIS301LV|VB_SIS302LV)) && (SiS_VBInfo&SetCRT2ToLCDA) ) { /* TW: 1. for 301B/302B/301LV/302LV (on some of which * IF_DEF_LVDS seems to be 1 as well) */ SiS_SetRegANDOR(SiS_Part1Port,0x00,~0x050,0x40); /* FUNCTION CONTROL */ SiS_SetRegAND(SiS_Part1Port,0x2E,0xF7); SiS_SetRegANDOR(SiS_Part1Port,0x13,0xFB,0x04); SiS_SetRegANDOR(SiS_Part1Port,0x2c,0xCF,0x30); SiS_SetRegANDOR(SiS_Part4Port,0x21,0x3F,0xC0); SiS_SetRegANDOR(SiS_Part4Port,0x23,0x7F,0x00); /*end 301b*/ } else { for(i=0,j=4;i<3;i++,j++) SiS_SetReg1(SiS_Part1Port,j,0); tempcl=SiS_ModeType; if(HwDeviceExtension->jChipType < SIS_315H) { /* ---- 300 series ---- */ if(ModeNo>0x13){ tempcl=tempcl-ModeVGA; if((tempcl>0)||(tempcl==0)){ tempah=((0x010>>tempcl)|0x080); } } else { tempah=0x080; } if(SiS_VBInfo&SetInSlaveMode){ tempah=(tempah^0x0A0); } } else { /* ---- 310 series ---- */ if(ModeNo>0x13) { tempcl=tempcl-ModeVGA; if((tempcl>0)||(tempcl==0)){ tempah=(0x008>>tempcl); if (tempah==0) tempah=1; tempah |= 0x040; } } else { tempah=0x040; } if(SiS_VBInfo&SetInSlaveMode){ tempah=(tempah^0x050); } } if(SiS_VBInfo&CRT2DisplayFlag){ tempah=0; } SiS_SetReg1(SiS_Part1Port,0x00,tempah); /* FUNCTION CONTROL */ if(SiS_IF_DEF_LVDS==0) { /* ifdef 301*/ /* TW: 2. for 301 */ tempah=0x01; if(!(SiS_VBInfo&SetInSlaveMode)) { tempah=(tempah|0x02); } if(!(SiS_VBInfo&SetCRT2ToRAMDAC)) { tempah=(tempah^0x05); if(!(SiS_VBInfo&SetCRT2ToLCD)) { tempah=(tempah^0x01); } } tempcl=tempah; /* 05/03/01 ynlai for TV display bug */ if(HwDeviceExtension->jChipType < SIS_315H) { /* 300 series */ tempah=(tempah<<5)&0xFF; if(SiS_VBInfo&CRT2DisplayFlag){ tempah=0; } SiS_SetReg1(SiS_Part1Port,0x01,tempah); tempah=tempah>>5; } else { /* 310 series */ if(SiS_VBInfo&CRT2DisplayFlag){ tempah=0; } tempah = (SiS_GetReg1(SiS_Part1Port,0x2E)&0xF8)|tempah; SiS_SetReg1(SiS_Part1Port,0x2E,tempah); tempah=tempcl; } if((SiS_ModeType==ModeVGA)&&(!(SiS_VBInfo&SetInSlaveMode))){ tempah=tempah|0x010; } if(SiS_LCDResInfo==Panel1024x768) tempah=tempah|0x080; if((SiS_LCDResInfo==Panel1280x1024)||(SiS_LCDResInfo==Panel1280x960)){ tempah=tempah|0x080; } if(SiS_VBInfo&SetCRT2ToTV){ if(SiS_VBInfo&SetInSlaveMode){ if(SiS_VBType&(VB_SIS301B|VB_SIS302B|VB_SIS301LV|VB_SIS302LV)) { /*301b*/ if(SiS_SetFlag&TVSimuMode) tempah=tempah|0x020; } else tempah=tempah|0x020; } } SiS_SetRegANDOR(SiS_Part4Port,0x0D,~0x0BF,tempah); tempah=0; if(SiS_VBInfo&SetCRT2ToTV) { if(SiS_VBInfo&SetInSlaveMode) { if(SiS_VBType&(VB_SIS301B|VB_SIS302B|VB_SIS301LV|VB_SIS302LV)) { /*301b*/ { SiS_SetFlag=SiS_SetFlag|RPLLDIV2XO; tempah=tempah|0x40; } } else { if(!(SiS_SetFlag&TVSimuMode)) { if(!(SiS_VBInfo&SetCRT2ToHiVisionTV)) { SiS_SetFlag=SiS_SetFlag|RPLLDIV2XO; tempah=tempah|0x40; } } } } else { SiS_SetFlag=SiS_SetFlag|RPLLDIV2XO; tempah=tempah|0x40; } } if(SiS_LCDResInfo==Panel1280x1024) tempah=tempah|0x80; if(SiS_LCDResInfo==Panel1280x960) tempah=tempah|0x80; SiS_SetReg1(SiS_Part4Port,0x0C,tempah); } else { /* TW: 3. for LVDS, _not_ 301B/302B/301LV/302LV */ tempah=0; if((!(SiS_VBInfo&SetInSlaveMode)) && (ModeNo!=0x2e)&&(ModeNo!=0x30)&&(ModeNo!=0x38)&&(ModeNo!=0x3A)) { tempah=tempah|0x02; } SiS_SetRegANDOR(SiS_Part1Port,0x2e,0xF0,tempah); /* <------------------- */ } } /*301b*/ if( (SiS_VBType&(VB_SIS301B|VB_SIS302B|VB_SIS301LV|VB_SIS302LV)) && (!(SiS_VBInfo&SetCRT2ToLCDA))){ if(SiS_IsDualEdge(BaseAddr)) SiS_SetRegANDOR(SiS_Part1Port,0x13,0xFB,0x00); else SiS_SetRegANDOR(SiS_Part1Port,0x13,0xFF,0x00); if(SiS_IsDualEdge(BaseAddr)) SiS_SetRegANDOR(SiS_Part1Port,0x2c,0xCF,0x00); else SiS_SetRegANDOR(SiS_Part1Port,0x2c,0xFF,0x00); if(SiS_IsDualEdge(BaseAddr)) SiS_SetRegANDOR(SiS_Part4Port,0x21,0x3F,0x00); else SiS_SetRegANDOR(SiS_Part4Port,0x21,0xFF,0x00); if(SiS_IsDualEdge(BaseAddr)) SiS_SetRegANDOR(SiS_Part4Port,0x23,0xFF,0x80); else SiS_SetRegANDOR(SiS_Part4Port,0x23,0xFF,0x00); } /*end 301b*/}voidSiS_GetCRT2Data(ULONG ROMAddr,USHORT ModeNo,USHORT ModeIdIndex, USHORT RefreshRateTableIndex){ if(SiS_IF_DEF_LVDS==0) { /* 301 */ if(SiS_VBType&(VB_SIS301B|VB_SIS302B|VB_SIS301LV|VB_SIS302LV)) { if(SiS_VBInfo&SetCRT2ToLCDA) SiS_GetCRT2DataLVDS(ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex); else SiS_GetCRT2Data301(ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex); } else SiS_GetCRT2Data301(ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex); return; } else { /* LVDS */ SiS_GetCRT2DataLVDS(ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex); return; }}voidSiS_GetCRT2DataLVDS(ULONG ROMAddr,USHORT ModeNo,USHORT ModeIdIndex, USHORT RefreshRateTableIndex){ USHORT tempax,tempbx; USHORT CRT2Index,ResIndex; SiS_LVDSDataStruct *LVDSData=NULL; SiS_GetCRT2ResInfo(ROMAddr,ModeNo,ModeIdIndex); /*301b*/ if((SiS_VBType&(VB_SIS301B|VB_SIS302B|VB_SIS301LV|VB_SIS302LV)) && (SiS_VBInfo&SetCRT2ToLCDA)) { SiS_GetCRT2PtrA(ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex, &CRT2Index,&ResIndex); switch (CRT2Index) { case 0: LVDSData=SiS_LVDS1024x768Data_1; break; case 1: LVDSData=SiS_LVDS1280x1024Data_1; break; case 2: LVDSData=SiS_LVDS1280x1024Data_1; break; /* case 2: LVDSData=SiS_LVDS1280x960Data_1; break;*/ case 3: LVDSData=SiS_LVDS1024x768Data_2; break; case 4: LVDSData=SiS_LVDS1280x1024Data_2; break; case 5: LVDSData=SiS_LVDS1280x1024Data_2; break; /* case 5: LVDSData=SiS_LVDS1280x960Data_2; break; */ } } else { SiS_GetCRT2Ptr(ROMAddr,ModeNo,ModeIdIndex,RefreshRateTableIndex,&CRT2Index,&ResIndex); switch (CRT2Index) { case 0: LVDSData=SiS_LVDS800x600Data_1; break; case 1: LVDSData=SiS_LVDS1024x768Data_1; break; case 2: LVDSData=SiS_LVDS1280x1024Data_1; break; case 3: LVDSData=SiS_LVDS800x600Data_2; break; case 4: LVDSData=SiS_LVDS1024x768Data_2; break; case 5: LVDSData=SiS_LVDS1280x1024Data_2; break; case 6: LVDSData=SiS_LVDS640x480Data_1; break; case 7: LVDSData=SiS_CHTVUNTSCData; break; case 8: LVDSData=SiS_CHTVONTSCData; break; case 9: LVDSData=SiS_CHTVUPALData; break; case 10: LVDSData=SiS_CHTVOPALData; break; case 11: LVDSData=SiS_LVDS320x480Data_1; break; } } SiS_VGAHT = (LVDSData+ResIndex)->VGAHT; SiS_VGAVT = (LVDSData+ResIndex)->VGAVT; SiS_HT = (LVDSData+ResIndex)->LCDHT; SiS_VT = (LVDSData+ResIndex)->LCDVT; /*301b*/ /* TW: I have NOT added LVDS check here */ if( (SiS_IF_DEF_LVDS==0) && (SiS_VBType&(VB_SIS301B|VB_SIS302B|VB_SIS301LV|VB_SIS302LV))) {/*for test*/ if(!(SiS_LCDInfo&LCDNonExpanding)){ if(SiS_LCDResInfo==Panel1024x768){ tempax=1024; tempbx=768; } else { tempax=1280; tempbx=1024; } SiS_HDE=tempax; SiS_VDE=tempbx; } } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -