📄 26xx-init.c
字号:
#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_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 | LVDS_PLL_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
RB_WriteByte(RSDS_LVDS_POWER, RsdsLvdsPower),
RB_WriteByte(RSDS_LVDS_DATA_CTRL, RsdsLvdsDataCtrl),
RB_WriteByte(LVDS_PLL_CTRL, LvdsPLLCtrl),
RB_WriteByte(RSDS_LVDS_MISC1_CTRL, RsdsLvdsMisc1Ctrl),
RB_WriteByte(RSDS_LVDS_MISC2_CTRL, RsdsLvdsMisc2Ctrl),
RB_WriteByte(CLOCK_SIGNAL_DELAY, ClockSignalDelay),
RB_WriteByte(RSDS_LVDS_TEST_CTRL, RsdsLvdsTestCtrl),
RB_WriteByte(LVDS_TEST_DATA, 0);
//TCON register programming
RB_WriteByte(TCON_CONTROL1, TConCtrl1),
RB_WriteByte(TCON_CONTROL2, TConCtrl2),
RB_WriteWord(TCON_PANEL_WIDTH, TConPanelWidth),
RB_WriteByte(0x184, 0x0), //reserved register
RB_WriteByte(TCON_SIGNAL_DELAY1, TConSignalDelay1),
RB_WriteByte(TCON_SIGNAL_DELAY2, TConSignalDelay2),
RB_WriteByte(TCON_SIGNAL_POLARITY, TConSignalPolarity),
RB_WriteByte(TCON_SIGNAL_ENABLE, TConSignalEnable),
RB_WriteByte(TCON_BLANKING_MASK, TConBlankingMask),
RB_WriteByte(ROE_ACTIVE_DELAY, TConROEActiveDelay),
RB_WriteWord(TCON_BLANKING_VSTART, TConBlankingVStart),
RB_WriteWord(TCON_BLANKING_VEND, TConBlankingVEnd),
RB_WriteWord(TCON_BLANKING_HOFFSET, TConBlankingHOffset),
RB_WriteWord(LP_HSTART, TConLpHStart),
RB_WriteWord(LP_HEND, TConLpHEnd),
RB_WriteWord(ESP_HSTART, TConESPHStart),
RB_WriteByte(ESP_WIDTH, TConESPWidth),
RB_WriteWord(OSP_HSTART, TConOSPHStart),
RB_WriteByte(OSP_WIDTH, TConOSPWidth),
RB_WriteWord(POL_SWITCH_TIME, TConPolSwitchTime),
RB_WriteWord(ROWCLK_HSTART, TConRowClkHStart),
RB_WriteWord(ROWCLK_HEND, TConRowClkHEnd),
RB_WriteWord(RSP1_VSTART, TConRSP1VStart),
RB_WriteByte(RSP1_WIDTH, TConRSP1Width),
RB_WriteWord(RSP2_VSTART, TConRSP2VStart),
RB_WriteByte(RSP2_WIDTH, TConRSP2Width),
RB_WriteWord(ROE1_HSTART, TConROE1HStart),
RB_WriteWord(ROE1_HEND, TConROE1HEnd),
}
#endif //USE_TCON
#else //not USING_PANEL_ARRAY
gm_WriteRegBlock(PanelCommonBlock);
gm_WriteRegBlock(PanelInitBlock);
#endif
// Move to here for panel check (fix panel array complie error issue). 0401
gmc_PanelDepth = PanelDepth;
if(gmc_PanelDepth == 8)
gm_WriteRegByte(MULT_DITHER_CTRL, (MULT_DITH_TRUNC | MULT_DITH_1FRAME));
else
gm_WriteRegByte(MULT_DITHER_CTRL, MULT_DITH_SPATIAL);
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
#if (BOARD == RD3)
gm_ClearRegBitsByte(RSDS_LVDS_DATA_CTRL, POS_NEG_SWAP); //to toggle data bit
gm_WriteRegByte(LVDS_CLK_DATA, 0x61);
#endif
// initialize registers based on panel array variables. Run time variables
// can not be initialized through gm_WriteRegBlock.
gm_WriteRegByte(DDDS_CONTROL, ( 4 << D_K_DIFF_SHIFT) | (4 <<D_K_MAIN_SHIFT) | (Panel_Spread_Spect_En << SPREAD_SP_EN_SHIFT));
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
gm_DefineRegBlock(PanelCommonBlock)
#ifdef PADDRIVE
RB_WriteByte(TIMING_CONFIG, PanelDClkDelay),
RB_WriteDWord(PADDRIVE, PanelPadDrive),
RB_WriteByte(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
RB_WriteWord(PANEL_PWR_UP_T1, PowerUpPanelTiming),
RB_WriteWord(PANEL_PWR_DN_T1, PowerDownPanelTiming),
RB_WriteByte(OP_ENABLE, POWER_SEQ_EN | DCLK_EN | DCNTL_EN | DDATA_EN),
#ifdef D2PIXWIDE_SHIFT
RB_WriteByte(DISPLAY_CONTROL, PanelTwoPixelPerClk << D2PIXWIDE_SHIFT ),
#endif
RB_WriteWord(DH_TOTAL, PanelMinHTotal),
RB_WriteByte(DH_HS_END, PanelMinHSyncWidth / 4),
RB_WriteWord(DH_BKGND_START, PanelHActiveStart),
RB_WriteWord(DH_BKGND_END, (PanelHActiveStart + PanelWidth - 1)),
RB_WriteWord(DH_ACTIV_START, PanelHActiveStart),
RB_WriteWord(DH_ACTIV_WIDTH, PanelWidth),
RB_WriteWord(SDDS_HTOTAL, PanelMinHTotal - 1),
RB_WriteByte(DV_VS_END, PanelMinVSyncWidth),
RB_WriteWord(DV_BKGND_START, PanelVActiveStart),
RB_WriteWord(DV_ACTIV_START, PanelVActiveStart),
RB_WriteWord(DV_ACTIV_LENGTH, PanelHeight),
RB_WriteWord(DP_FLAGLINE, PanelVActiveStart + PanelHeight),
RB_WriteWord(DV_TOTAL, PanelTypVTotal),
RB_WriteWord(DV_BKGND_END, (PanelVActiveStart + PanelHeight - 1)),
RB_WriteByteEnd(HOST_CONTROL, 0x1c)
#if defined(LVDS_PANEL)
gm_DefineRegBlock(PanelInitBlock)
#if (PanelDepth == 8)
#ifdef LVDS_POWER
RB_WriteByte(LVDS_POWER, TTL_LVDS_SEL | LVDS_BIAS_EN | LVDS_PLL_EN | LVDS_DRIVER_EVEN_EN | Panel_LVDS_BusType | LVDDS_CH3_EN),
#else // phoenix panel controller
#if (BOARD == RD1C_52xx_BD)
// when running on gm52xx, BIT5 is set for LVDS panel
RB_WriteByte(RSDS_LVDS_POWER, BIT5 | LVDS_EN | MLR_BIAS_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN | (Panel_LVDS_BusType << OUTPUT_DRIVE_ODD_EN_SHIFT) | LVDS_CH3_EN),
#else
//RB_WriteByte(RSDS_LVDS_POWER, LVDS_EN | MLR_BIAS_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN | (Panel_LVDS_BusType << OUTPUT_DRIVE_ODD_EN_SHIFT) | LVDS_CH3_EN),
RB_WriteByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN | MLR_BIAS_EN),
#endif
#endif
//RB_WriteByte(LVDS_DIGITAL_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType << DUAL_BUS_EN_SHIFT) | EIGHT_BIT_MODE_SEL),
RB_WriteByte(LVDS_DIGITAL_CTRL, DUAL_BUS_EN | EVEN_ODD_SWAP | POS_NEG_SWAP | EIGHT_BIT_MODE_SEL),
#else
#ifdef LVDS_POWER
RB_WriteByte(LVDS_POWER, TTL_LVDS_SEL | LVDS_BIAS_EN | LVDS_PLL_EN | LVDS_DRIVER_EVEN_EN | Panel_LVDS_BusType),
#else
//RB_WriteByte(RSDS_LVDS_POWER, LVDS_EN | MLR_BIAS_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN (Panel_LVDS_BusType << OUTPUT_DRIVE_ODD_EN_SHIFT)),
RB_WriteByte(RSDS_LVDS_POWER, LVDS_EN | LVDS_CH3_EN | LVDS_PLL_EN | OUTPUT_DRIVE_EVEN_EN | OUTPUT_DRIVE_ODD_EN | MLR_BIAS_EN),
#endif
//RB_WriteByte(LVDS_DIGITAL_CTRL, POS_NEG_SWAP | (Panel_LVDSBus_EvenOddSwap << EVEN_ODD_SWAP_SHIFT) | (Panel_LVDS_BusType <<DUAL_BUS_EN_SHIFT )),
RB_WriteByte(LVDS_DIGITAL_CTRL, DUAL_BUS_EN | EVEN_ODD_SWAP | POS_NEG_SWAP | EIGHT_BIT_MODE_SEL),
#endif //(PanelDepth == 8)
RB_WriteByte(LVDS_CLK_DATA, 0x1e),
//RB_WriteByte(LVDS_PLL_CTRL, 0x30),
RB_WriteByte(LVDS_PLL_CTRL, 0x60),
#ifdef LVDS_MISC_CTRL
RB_WriteByte(LVDS_MISC_CTRL, 0x40),
RB_WriteByte(LVDS_P2S_CTRL0, 0x1e),
RB_WriteByte(LVDS_P2S_CTRL1, 0x08),
#endif //LVDS_MISC_CTRL
RB_WriteByte(LVDS_TEST_CTRL, 0),
RB_WriteByte(LVDS_TEST_DATA, 0),
RB_WriteByte(RSDS_LVDS_MISC1_CTRL, 0x40),
RB_WriteByte(RSDS_LVDS_MISC2_CTRL, 0x0),
RB_WriteByte(CLOCK_SIGNAL_DELAY, 0x0),
RB_WriteByteEnd(HOST_CONTROL, IPFORCE_UPDATE | DPFORCE_UPDATE)
#if 0 // //No TCON function, RSDS panels are always not available for gm2621 , 0128
#elif defined(RSDS_PANEL)
gm_DefineRegBlock(PanelInitBlock)
RB_WriteByte(RSDS_LVDS_POWER, RsdsLvdsPower),
RB_WriteByte(RSDS_LVDS_DATA_CTRL, RsdsLvdsDataCtrl),
RB_WriteByte(LVDS_PLL_CTRL, LvdsPLLCtrl),
RB_WriteByte(RSDS_LVDS_MISC1_CTRL, RsdsLvdsMisc1Ctrl),
RB_WriteByte(RSDS_LVDS_MISC2_CTRL, RsdsLvdsMisc2Ctrl),
RB_WriteByte(CLOCK_SIGNAL_DELAY, ClockSignalDelay),
RB_WriteByte(RSDS_LVDS_TEST_CTRL, RsdsLvdsTestCtrl),
RB_WriteByte(LVDS_CLK_DATA, LvdsClkData),
RB_WriteByte(LVDS_TEST_DATA, 0),
//TCON register programming
RB_WriteByte(TCON_CONTROL1, TConCtrl1),
RB_WriteByte(TCON_CONTROL2, TConCtrl2),
RB_WriteByte(TCON_PANEL_WIDTH_0, TConPanelWidth & 0xff),
RB_WriteByte(TCON_PANEL_WIDTH_1, ((TConPanelWidth & 0xf00) >> 8)),
RB_WriteByte(0x184, 0x0), //reserved register
RB_WriteByte(TCON_SIGNAL_DELAY, TConSignalDelay1),
//RB_WriteByte(TCON_SIGNAL_DELAY2, TConSignalDelay2),
RB_WriteByte(TCON_SIGNAL_POLARITY, TConSignalPolarity),
RB_WriteByte(TCON_SIGNAL_ENABLE, TConSignalEnable),
RB_WriteByte(TCON_BLANKING_MASK, TConBlankingMask),
RB_WriteByte(ROE_ACTIVE_DELAY, TConROEActiveDelay),
RB_WriteByte(TCON_BLANKING_VSTART_0, TConBlankingVStart & 0xff),
RB_WriteByte(TCON_BLANKING_VSTART_1, ((TConBlankingVStart & 0xf00) >> 8)),
RB_WriteByte(TCON_BLANKING_VEND_0, TConBlankingVEnd & 0xff),
RB_WriteByte(TCON_BLANKING_VEND_1, ((TConBlankingVEnd & 0xf00) >> 8)),
RB_WriteByte(TCON_BLANKING_HOFFSET_0, TConBlankingHOffset & 0xff),
RB_WriteByte(TCON_BLANKING_HOFFSET_1, ((TConBlankingHOffset & 0xf00) >> 8)),
RB_WriteByte(LP_HSTART_0, TConLpHStart & 0xff),
RB_WriteByte(LP_HSTART_1, ((TConLpHStart & 0xf00) >> 8)),
RB_WriteByte(LP_HEND_0, TConLpHEnd & 0xff),
RB_WriteByte(LP_HEND_1, ((TConLpHEnd & 0xf00) >> 8)),
RB_WriteByte(ESP_HSTART_0, TConESPHStart & 0xff),
RB_WriteByte(ESP_HSTART_1, ((TConESPHStart & 0xf00) >> 8)),
RB_WriteByte(ESP_WIDTH, TConESPWidth),
RB_WriteByte(OSP_HSTART_0, TConOSPHStart & 0xff),
RB_WriteByte(OSP_HSTART_1, ((TConOSPHStart & 0xf00) >> 8)),
RB_WriteByte(OSP_WIDTH, TConOSPWidth),
RB_WriteByte(POL_SWITCH_TIME_0, TConPolSwitchTime & 0xff),
RB_WriteByte(POL_SWITCH_TIME_1, ((TConPolSwitchTime & 0xf00) >> 8)),
RB_WriteByte(ROWCLK_HSTART_0, TConRowClkHStart & 0xff),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -