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

📄 26xx-init.c

📁 GM5621原代码
💻 C
📖 第 1 页 / 共 3 页
字号:
   	#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 + -