📄 init301.c
字号:
SiS_SetFlag = SiS_SetFlag | ProgrammingCRT2; RefreshRateTableIndex = SiS_GetRatePtrCRT2 (ROMAddr, CRT1ModeNo, ModeIdIndex); /* Set REFIndex-> for crt1 refreshrate */ index = SiS_GetVCLK2Ptr (ROMAddr, CRT2ModeNo, ModeIdIndex, RefreshRateTableIndex, HwDeviceExtension); temp1 = SiS_VCLKData[index].CLOCK; /* Get VCLK */ temp2 = SiS_GetColorDepth (ROMAddr, CRT2ModeNo, ModeIdIndex);#ifdef CONFIG_FB_SIS_315 index = SiS_Get310DRAMType (ROMAddr);#endif temp3 = SiS_MCLKData[index].CLOCK; /* Get MCLK */ if ((temp * temp1 * temp2) % (16 * temp3) == 0) temp = temp * temp1 * temp2 / (16 * temp3); /* CRT1 Request period * TCLK*BytePerPixel/(MCLK*16) */ else temp = temp * temp1 * temp2 / (16 * temp3) + 1; /* CRT1 Request period * TCLK*BytePerPixel/(MCLK*16) */ if (temp > 0x37) temp = 0x37; SiS_SetRegANDOR (SiS_Part1Port, 0x02, ~0x3F, temp);}voidSiS_GetLVDSDesData (ULONG ROMAddr, USHORT ModeNo, USHORT ModeIdIndex, USHORT RefreshRateTableIndex){ USHORT modeflag; USHORT PanelIndex, ResIndex; SiS_LVDSDesStruct *PanelDesPtr = NULL; if ((SiS_IF_DEF_LVDS == 0) && ((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B))) { /*301b *//*for test */ SiS_GetLVDSDesPtrA (ROMAddr, ModeNo, ModeIdIndex, RefreshRateTableIndex, &PanelIndex, &ResIndex); 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); 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; case 13: PanelDesPtr = SiS_PanelType0d_1; break; case 14: PanelDesPtr = SiS_PanelType0e_1; break; 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, tempal; tempbx = 0; tempbx = SiS_LCDResInfo; tempbx = tempbx - 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;/*301b*/ if (((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B)) && (SiS_VBInfo & SetCRT2ToLCDA)) { SiS_SetRegANDOR (SiS_Part1Port, 0x00, ~0x050, 0x40); 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); if (SiS_IF_DEF_LVDS == 0) { /* ifdef 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) || (SiS_VBType & VB_SIS302B))) { /*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) || (SiS_VBType & VB_SIS302B))) { /*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 { /*LVDS*/ tempah = 0; if (!(SiS_VBInfo & SetInSlaveMode)) { tempah = tempah | 0x02; } SiS_SetRegANDOR (SiS_Part1Port, 0x2e, 0xF0, tempah); } }/*301b*/ if (((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B)) && (!(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) || (SiS_VBType & VB_SIS302B)) { 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) || (SiS_VBType & VB_SIS302B)) && (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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -