📄 57xx-init.c
字号:
// PARAMETERS : none
// RETURN :
//******************************************************************
static void _near InitPanelParameters(void)
{
gmc_PanelWidth = PanelWidth;
gmc_PanelHeight = PanelHeight;
gmc_PanelVActiveStart = PanelVActiveStart;
gmc_PanelVActiveEnd = PanelVActiveEnd;
#if USING_PANEL_ARRAY
#ifdef PADDRIVE
gm_WriteRegByte(TIMING_CONFIG, PanelDClkDelay);
gm_WriteRegDWord(PADDRIVE, PanelPadDrive);
gm_WriteRegByte(DP_POLARITY, (Panel_Invert_DVS << DVS_INV_SHIFT) | (Panel_Invert_DHS << DHS_INV_SHIFT) | (Panel_Invert_DCLK << DCLK_INV_SHIFT) | (Panel_Invert_DEN << DEN_INV_SHIFT));
#endif
// Set up Display Registers
// program panel power up/down register first before program OP_ENABLE register for powr up.
// otherwise, there is the screen flashing problem
gm_WriteRegWord(PANEL_PWR_UP_T1, PowerUpPanelTiming);
gm_WriteRegWord(PANEL_PWR_DN_T1, PowerDownPanelTiming);
#ifdef PHOENIX_U
// gm_WriteRegByte(OP_ENABLE, POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2),
gm_WriteRegByte(OP_ENABLE, DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2),
#else
gm_WriteRegByte(OP_ENABLE, POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN);
#endif
#ifdef D2PIXWIDE_SHIFT
gm_WriteRegByte(DISPLAY_CONTROL, PanelTwoPixelPerClk << D2PIXWIDE_SHIFT );
#endif
gm_WriteRegWord(DH_TOTAL, PanelMinHTotal);
gm_WriteRegByte(DH_HS_END, PanelMinHSyncWidth / 4);
gm_WriteRegWord(DH_BKGND_START, PanelHActiveStart);
gm_WriteRegWord(DH_BKGND_END, (PanelHActiveStart + PanelWidth - 1));
gm_WriteRegWord(DH_ACTIV_START, PanelHActiveStart);
gm_WriteRegWord(DH_ACTIV_WIDTH, PanelWidth);
gm_WriteRegWord(SDDS_HTOTAL, PanelMinHTotal - 1);
gm_WriteRegByte(DV_VS_END, PanelMinVSyncWidth);
gm_WriteRegWord(DV_BKGND_START, PanelVActiveStart);
gm_WriteRegWord(DV_ACTIV_START, PanelVActiveStart);
gm_WriteRegWord(DV_ACTIV_LENGTH, PanelHeight);
gm_WriteRegWord(DP_FLAGLINE, PanelVActiveStart + PanelHeight);
gm_WriteRegWord(DV_TOTAL, PanelTypVTotal);
gm_WriteRegWord(DV_BKGND_END, (PanelVActiveStart + PanelHeight - 1));
gm_WriteRegByte(HOST_CONTROL, 0x1c);
/********************************************************************/
/* Initialize: LVDS */
/********************************************************************/
if(LVDS_PANEL)
{
if(PanelDepth == 8)
{
// gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_PLL_EN |OUTPUT_DRIVE_ODD_EN |OUTPUT_DRIVE_EVEN_EN | Panel_LVDS_BusType | LVDS_CH3_EN);
gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN |OUTPUT_DRIVE_ODD_EN |OUTPUT_DRIVE_EVEN_EN | Panel_LVDS_BusType | LVDS_CH3_EN);
gm_WriteRegByte(RSDS_LVDS_DATA_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType << DUAL_BUS_EN_SHIFT) | EIGHT_BIT_MODE_SEL);
}
else
{
gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | OUTPUT_DRIVE_ODD_EN |OUTPUT_DRIVE_EVEN_EN | Panel_LVDS_BusType);
gm_WriteRegByte(RSDS_LVDS_DATA_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType <<DUAL_BUS_EN_SHIFT ));
}
gm_WriteRegByte(LVDS_CLK_DATA, 0x1e);
gm_WriteRegByte(LVDS_PLL_CTRL, 0x60); //0x30 0401
#ifdef LVDS_MISC_CTRL
gm_WriteRegByte(LVDS_MISC_CTRL, 0x40);
gm_WriteRegByte(LVDS_P2S_CTRL0, 0x1e);
gm_WriteRegByte(LVDS_P2S_CTRL1, 0x08);
#endif
gm_WriteRegByte(LVDS_TEST_CTRL, 0);
gm_WriteRegByte(LVDS_TEST_DATA, 0);
gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL, 0x40);
gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL, 0x0);
gm_WriteRegByte(CLOCK_SIGNAL_DELAY, 0x0);
}
#if USE_TCON
else
{// RSDS
gm_WriteRegByte(RSDS_LVDS_POWER, RsdsLvdsPower);
gm_WriteRegByte(RSDS_LVDS_DATA_CTRL, RsdsLvdsDataCtrl);
gm_WriteRegByte(LVDS_PLL_CTRL, LvdsPLLCtrl);
gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL, RsdsLvdsMisc1Ctrl);
gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL, RsdsLvdsMisc2Ctrl);
gm_WriteRegByte(CLOCK_SIGNAL_DELAY, ClockSignalDelay);
gm_WriteRegByte(RSDS_LVDS_TEST_CTRL, RsdsLvdsTestCtrl);
gm_WriteRegByte(LVDS_TEST_DATA, 0);
//TCON register programming
gm_WriteRegByte(TCON_CONTROL1, TConCtrl1);
gm_WriteRegByte(TCON_CONTROL2, TConCtrl2);
gm_WriteRegWord(TCON_PANEL_WIDTH_0, TConPanelWidth);
gm_WriteRegByte(0x184, 0x0), //reserved register
gm_WriteRegByte(TCON_SIGNAL_DELAY, TConSignalDelay1);
gm_WriteRegByte(TCON_SIGNAL_POLARITY, TConSignalPolarity);
gm_WriteRegByte(TCON_SIGNAL_ENABLE, TConSignalEnable);
gm_WriteRegByte(TCON_BLANKING_MASK, TConBlankingMask);
gm_WriteRegByte(ROE_ACTIVE_DELAY, TConROEActiveDelay);
gm_WriteRegWord(TCON_BLANKING_VSTART_0, TConBlankingVStart);
gm_WriteRegWord(TCON_BLANKING_VEND_0, TConBlankingVEnd);
gm_WriteRegWord(TCON_BLANKING_HOFFSET_0, TConBlankingHOffset);
gm_WriteRegWord(LP_HSTART_0, TConLpHStart);
gm_WriteRegWord(LP_HEND_0, TConLpHEnd);
gm_WriteRegWord(ESP_HSTART_0, TConESPHStart);
gm_WriteRegByte(ESP_WIDTH, TConESPWidth);
gm_WriteRegWord(OSP_HSTART_0, TConOSPHStart);
gm_WriteRegByte(OSP_WIDTH, TConOSPWidth);
gm_WriteRegWord(POL_SWITCH_TIME_0, TConPolSwitchTime);
gm_WriteRegWord(ROWCLK_HSTART_0, TConRowClkHStart);
gm_WriteRegWord(ROWCLK_HEND_0, TConRowClkHEnd);
gm_WriteRegWord(RSP1_VSTART_0, TConRSP1VStart);
gm_WriteRegByte(RSP1_WIDTH, TConRSP1Width);
// gm_WriteRegWord(RSP2_VSTART, TConRSP2VStart);
// gm_WriteRegByte(RSP2_WIDTH, TConRSP2Width);
gm_WriteRegWord(ROE1_HSTART_0, TConROE1HStart);
gm_WriteRegWord(ROE1_HEND_0, TConROE1HEnd);
}
#endif //USE_TCON
#else //not USING_PANEL_ARRAY
Write_PanelCommonBlock();
Write_PanelInitBlock();
#endif
#if USE_TTL_PANEL
gm_WriteRegByte(TEST_CTRL_0, PANEL_DATA_TTL_EN | SINGLE_CH_TTL_EN);
#endif // USE_TTL_PANEL
gm_WriteRegByte(HOST_CONTROL, IPFORCE_UPDATE | DPFORCE_UPDATE);
// check the panel parameters and give compile error if necessary
#if USING_PANEL_ARRAY
if((PanelHActiveStart+PanelWidth+PanelMinHSyncFrontPorch) > PanelMinHTotal)
{
msg("WARNING : Panel Horizontal Total value is too small!, %d", PanelMinHTotal);
msg("B_PanelIndex %d", B_PanelIndex);
msg("PanelHActiveStart, %d", PanelHActiveStart);
msg("PanelWidth, %d", PanelWidth);
msg("PanelMinHSyncFrontPorch, %d", PanelMinHSyncFrontPorch);
gm_Delay100ms(100);
}
if((PanelVActiveStart+PanelHeight+PanelMinVSyncFrontPorch) > PanelMinVTotal)
{
msg("WARNING : Panel Vertical Total value is too small!, %d", PanelMinVTotal);
msg("B_PanelIndex %d", B_PanelIndex);
msg("PanelHActiveStart, %d", PanelVActiveStart);
msg("PanelWidth, %d", PanelHeight);
msg("PanelMinHSyncFrontPorch, %d", PanelMinVSyncFrontPorch);
gm_Delay100ms(100);
}
#else
#if ((PanelHActiveStart+PanelWidth+PanelMinHSyncFrontPorch) > PanelMinHTotal)
#error ( WARNING : Panel Horizontal Total value is too small!)
#endif
#if ((PanelVActiveStart+PanelHeight+PanelMinVSyncFrontPorch) > PanelMinVTotal)
#error ( WARNING : Panel Vertical Total value is too small!)
#endif
#endif // USING_PANEL_ARRAY
// initialize registers based on panel array variables. Run time variables
// can not be initialized through gm_WriteRegBlock.
#if IA_Phase
gm_WriteRegByte(DDDS_CONTROL, ( 4 << D_K_DIFF_SHIFT) | (4 <<D_K_MAIN_SHIFT) | (Panel_Spread_Spect_En << SPREAD_SP_EN_SHIFT));
#else
gm_WriteRegByte(DDDS_CONTROL, ( 1 << D_K_DIFF_SHIFT) | (7 <<D_K_MAIN_SHIFT) | (Panel_Spread_Spect_En << SPREAD_SP_EN_SHIFT));
#endif
gm_WriteRegByte(DDDS_ESM_CTRL, PanelSpreadSpectrumCtrl);
//DDDS_INIT start ddds
gm_WriteRegByte(DDDS_INIT,1);
}
//******************************************************************
// STRUCTURE : PanelInitBlocks
// USAGE : Describes required initial register cotent
// DESCRIPTION : -Initializes panel controller
//******************************************************************
#if !USING_PANEL_ARRAY // Fix panel array complie error issue. 0401
static void _near Write_PanelCommonBlock(void)
{
#ifdef PADDRIVE
gm_WriteRegByte(TIMING_CONFIG, PanelDClkDelay);
gm_WriteRegDWord(PADDRIVE, PanelPadDrive);
gm_WriteRegByte(DP_POLARITY, (Panel_Invert_DVS << DVS_INV_SHIFT) | (Panel_Invert_DHS << DHS_INV_SHIFT) | (Panel_Invert_DCLK << DCLK_INV_SHIFT) | (Panel_Invert_DEN << DEN_INV_SHIFT));
#endif //PADDRIVE
// Set up Display Registers
// program panel power up/down register first before program OP_ENABLE register for powr up.
// otherwise, there is the screen flashing problem
gm_WriteRegWord(PANEL_PWR_UP_T1, PowerUpPanelTiming);
gm_WriteRegWord(PANEL_PWR_DN_T1, PowerDownPanelTiming);
#ifdef PHOENIX_U
// gm_WriteRegByte(OP_ENABLE, POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2);
gm_WriteRegByte(OP_ENABLE, DCLK_EN | DCNTL_EN | DDATA_EN | POWER_SEQ_TICK_DIV2);
#else
gm_WriteRegByte(OP_ENABLE, POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN);
#endif
#ifdef D2PIXWIDE_SHIFT
gm_WriteRegByte(DISPLAY_CONTROL, PanelTwoPixelPerClk << D2PIXWIDE_SHIFT );
#endif
gm_WriteRegWord(DH_TOTAL, PanelMinHTotal);
gm_WriteRegByte(DH_HS_END, PanelMinHSyncWidth / 4);
gm_WriteRegWord(DH_BKGND_START, PanelHActiveStart);
gm_WriteRegWord(DH_BKGND_END, (PanelHActiveStart + PanelWidth - 1));
gm_WriteRegWord(DH_ACTIV_START, PanelHActiveStart);
gm_WriteRegWord(DH_ACTIV_WIDTH, PanelWidth);
gm_WriteRegWord(SDDS_HTOTAL, PanelMinHTotal - 1);
gm_WriteRegByte(DV_VS_END, PanelMinVSyncWidth);
gm_WriteRegWord(DV_BKGND_START, PanelVActiveStart);
gm_WriteRegWord(DV_ACTIV_START, PanelVActiveStart);
gm_WriteRegWord(DV_ACTIV_LENGTH, PanelHeight);
// Louis 1110
gm_WriteRegWord(DP_FLAGLINE, PanelVActiveStart + PanelHeight);
//gm_WriteRegWord(DP_FLAGLINE, PanelVActiveStart + PanelHeight - Alt_DispLines);
gm_WriteRegWord(DV_TOTAL, PanelTypVTotal);
gm_WriteRegWord(DV_BKGND_END, (PanelVActiveStart + PanelHeight - 1));
gm_WriteRegByte(HOST_CONTROL, 0x1c);
}
#if defined(LVDS_PANEL)
static void _near Write_PanelInitBlock(void)
{
#if (PanelDepth == 8)
//gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN | MLR_BIAS_EN);
gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN );
#if Panel_LVDSBus_EvenOddSwap
gm_WriteRegByte(LVDS_DIGITAL_CTRL, DUAL_BUS_EN | EVEN_ODD_SWAP | POS_NEG_SWAP | EIGHT_BIT_MODE_SEL);
#else
gm_WriteRegByte(LVDS_DIGITAL_CTRL, POS_NEG_SWAP | EIGHT_BIT_MODE_SEL);
#endif
#else
//gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | MLR_BIAS_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN (Panel_LVDS_BusType << OUTPUT_DRIVE_ODD_EN_SHIFT));
gm_WriteRegByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN);
//gm_WriteRegByte(LVDS_DIGITAL_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType <<DUAL_BUS_EN_SHIFT ));
gm_WriteRegByte(LVDS_DIGITAL_CTRL, DUAL_BUS_EN | EVEN_ODD_SWAP | POS_NEG_SWAP | EIGHT_BIT_MODE_SEL);
#endif //(PanelDepth == 8)
#if LVDS_DATA_CLK_INVERT
gm_WriteRegByte(LVDS_DIGITAL_CTRL, 0x2B);
gm_WriteRegByte(LVDS_CLK_DATA, 0x1E);
#else
gm_WriteRegByte(LVDS_DIGITAL_CTRL, 0x23);
gm_WriteRegByte(LVDS_CLK_DATA, 0x61);
#endif
gm_WriteRegByte(LVDS_PLL_CTRL, 0x60);
#ifdef LVDS_MISC_CTRL
gm_WriteRegByte(LVDS_MISC_CTRL, 0x40);
gm_WriteRegByte(LVDS_P2S_CTRL0, 0x1e);
gm_WriteRegByte(LVDS_P2S_CTRL1, 0x08);
#endif //LVDS_MISC_CTRL
gm_WriteRegByte(LVDS_TEST_CTRL, 0);
gm_WriteRegByte(LVDS_TEST_DATA, 0);
gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL, 0xC1); //0x40),
gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL, 0x0);
gm_WriteRegByte(CLOCK_SIGNAL_DELAY, 0x0);
// gm_WriteRegByte(RSDS_LVDS_DATA_CTRL, DUAL_BUS_EN | POS_NEG_SWAP | LSB_MSB_SWAP);//TL060726 added
gm_WriteRegByte(HOST_CONTROL, IPFORCE_UPDATE | DPFORCE_UPDATE);
}
#elif defined(RSDS_PANEL)
static void _near Write_PanelInitBlock(void)
{
gm_WriteRegByte(RSDS_LVDS_POWER, RsdsLvdsPower);
gm_WriteRegByte(RSDS_LVDS_DATA_CTRL, DUAL_BUS_EN | POS_NEG_SWAP | LSB_MSB_SWAP);
gm_WriteRegByte(LVDS_PLL_CTRL, LvdsPLLCtrl);
gm_WriteRegByte(RSDS_LVDS_MISC1_CTRL, RsdsLvdsMisc1Ctrl);
gm_WriteRegByte(RSDS_LVDS_MISC2_CTRL, RsdsLvdsMisc2Ctrl);
gm_WriteRegByte(CLOCK_SIGNAL_DELAY, ClockSignalDelay);
gm_WriteRegByte(RSDS_LVDS_TEST_CTRL, RsdsLvdsTestCtrl);
gm_WriteRegByte(LVDS_CLK_DATA, LvdsClkData);
gm_WriteRegByte(LVDS_TEST_DATA, 0);
//TCON register programming
gm_WriteRegByte(TCON_CONTROL1, TConCtrl1);
gm_WriteRegByte(TCON_CONTROL2, TConCtrl2);
gm_WriteRegByte(TCON_PANEL_WIDTH_0, TConPanelWidth & 0xff);
gm_WriteRegByte(TCON_PANEL_WIDTH_1, ((TConPanelWidth & 0xf00) >> 8));
//RB_WriteByte(0x184, 0x0), //reserved register
gm_WriteRegByte(TCON_SIGNAL_DELAY, TConSignalDelay1);
//gm_WriteRegByte(TCON_SIGNAL_DELAY2, TConSignalDelay2);
gm_WriteRegByte(TCON_SIGNAL_POLARITY, TConSignalPolarity);
gm_WriteRegByte(TCON_SIGNAL_ENABLE, TConSignalEnable);
gm_WriteRegByte(TCON_BLANKING_MASK, TConBlankingMask);
gm_WriteRegByte(ROE_ACTIVE_DELAY, TConROEActiveDelay);
gm_WriteRegByte(TCON_BLANKING_VSTART_0, TConBlankingVStart & 0xff);
gm_WriteRegByte(TCON_BLANKING_VSTART_1, ((TConBlankingVStart & 0xf00) >> 8));
gm_WriteRegByte(TCON_BLANKING_VEND_0, TConBlankingVEnd & 0xff);
gm_WriteRegByte(TCON_BLANKING_VEND_1, ((TConBlankingVEnd & 0xf00) >> 8));
gm_WriteRegByte(TCON_BLANKING_HOFFSET_0, TConBlankingHOffset & 0xff);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -