Beispiel #1
0
DPI_STATUS DPI_Init_PLL(unsigned int mipi_pll_clk_ref,unsigned int mipi_pll_clk_div1,unsigned int mipi_pll_clk_div2)
{
#if 1
    MIPITX_CFG0_REG con0 = DSI_PHY_REG_DPI->MIPITX_CON0;
    MIPITX_CFG1_REG con1 = DSI_PHY_REG_DPI->MIPITX_CON1;
#ifdef DPI_MIPI_API 
	enable_mipi(MT65XX_MIPI_TX, "DPI");
#endif
    #ifdef BUILD_UBOOT
	OUTREG16(0xc2080858, 0x8000);
	OUTREG16(0xc20a3824, 0x4008);
	MASKREG16(0xc20a380c, 0x000c, 0x0000); //default value is 0x7008, but should be 0x7000
    #else
	OUTREG16(0xf2080858, 0x8000); //??
	OUTREG16(0xf20a3824, 0x4008);
	MASKREG16(0xf20a380c, 0x000c, 0x0000); //default value is 0x7008, but should be 0x7000
    #endif	
	MASKREG16(PLL_SOURCE, 0x0010, 0x0010); //

    con1.RG_PLL_DIV1 = mipi_pll_clk_div1;
    con1.RG_PLL_DIV2 = mipi_pll_clk_div2;

	con0.PLL_CLKR_EN = 1;
	con0.PLL_EN = 1;
	con0.RG_DPI_EN = 1;

    // Set to DSI_PHY_REG
    
    OUTREG32(&DSI_PHY_REG_DPI->MIPITX_CON0, AS_UINT32(&con0));
    OUTREG32(&DSI_PHY_REG_DPI->MIPITX_CON1, AS_UINT32(&con1));
#endif
	return DPI_STATUS_OK;
}
Beispiel #2
0
void DSI_PHY_clk_switch(bool on)
{
	if(on)
	{
#ifdef DSI_MIPI_API
		enable_mipi(MT65XX_MIPI_TX, "DSI");
#endif
		mipitx_con0.PLL_EN=1;
		DSI_PHY_REG->MIPITX_CON0=mipitx_con0;	
	}
	else
	{
		mipitx_con0=DSI_PHY_REG->MIPITX_CON0;
		mipitx_con1=DSI_PHY_REG->MIPITX_CON1;
		mipitx_con3=DSI_PHY_REG->MIPITX_CON3;
		mipitx_con6=DSI_PHY_REG->MIPITX_CON6;
		mipitx_con8=DSI_PHY_REG->MIPITX_CON8;
		mipitx_con9=DSI_PHY_REG->MIPITX_CON9;
#ifdef DSI_MIPI_API 
		disable_mipi(MT65XX_MIPI_TX, "DSI");
#else
		OUTREG32(&DSI_PHY_REG->MIPITX_CON0, 0);
		OUTREG32(&DSI_PHY_REG->MIPITX_CON6, 0);
		OUTREG32(&DSI_PHY_REG->MIPITX_CON9, 0);
#endif
	}	
}
DPI_STATUS DPI_Init_PLL(unsigned int mipi_pll_clk_ref,unsigned int mipi_pll_clk_div1,unsigned int mipi_pll_clk_div2)
{
    unsigned int reg_value = 0;
#if 0
    MIPITX_CFG0_REG con0 = DSI_PHY_REG_DPI->MIPITX_CON0;
    MIPITX_CFG1_REG con1 = DSI_PHY_REG_DPI->MIPITX_CON1;
#ifdef DPI_MIPI_API 
	enable_mipi(MT65XX_MIPI_TX, "DPI");
#endif
    #ifdef BUILD_UBOOT
	OUTREG16(0xc2080858, 0x8000);
	OUTREG16(0xc20a3824, 0x4008);
	MASKREG16(0xc20a380c, 0x000c, 0x0000); //default value is 0x7008, but should be 0x7000
	#else
	OUTREG16(0xf2080858, 0x8000); //??
	OUTREG16(0xf20a3824, 0x4008);
	MASKREG16(0xf20a380c, 0x000c, 0x0000); //default value is 0x7008, but should be 0x7000
	MASKREG16(PLL_SOURCE, 0x0010, 0x0010); //
	#endif
    con1.RG_PLL_DIV1 = mipi_pll_clk_div1;
    con1.RG_PLL_DIV2 = mipi_pll_clk_div2;

	con0.PLL_CLKR_EN = 1;
	con0.PLL_EN = 1;
	con0.RG_DPI_EN = 1;

    // Set to DSI_PHY_REG
    
    OUTREG32(&DSI_PHY_REG_DPI->MIPITX_CON0, AS_UINT32(&con0));
    OUTREG32(&DSI_PHY_REG_DPI->MIPITX_CON1, AS_UINT32(&con1));
#else
//#ifndef BUILD_UBOOT
#if 0
	OUTREG32(DISPSYS_BASE + 0x34, 0x02);//set RDMA0 to DPI
#if 0
	//CG
	OUTREG32(DISPSYS_BASE + 0x104, 0xffffffff);//set CG
	OUTREG32(DISPSYS_BASE + 0x108, 0xffffffff);
	OUTREG32(DISPSYS_BASE + 0x114, 0xffffffff);
	OUTREG32(DISPSYS_BASE + 0x118, 0xffffffff);
#endif
	OUTREG32(DISP_MUTEX_BASE + 0x28, 0x01);//reset mutex
	OUTREG32(DISP_MUTEX_BASE + 0x28, 0);
	
	OUTREG32(DISP_MUTEX_BASE + 0x2c, 0x80); //rdma0 is in the mutex
	OUTREG32(DISP_MUTEX_BASE + 0x30, 0x2);  //dpi0 is the dst

	OUTREG32(DISP_MUTEX_BASE + 0x24, 0x1);  //lock mutex0
	
	OUTREG32(DISP_MUTEX_BASE + 0, 0x1);  //lock mutex0
	// OUTREG32(MUTEX_BASE + 0x4, 0x1);  //lock mutex0

	while((INREG32(DISP_MUTEX_BASE + 0x24)&0x02)!=0x02){} // polling until mutex lock complete
	
	OUTREG32(DISPSYS_BASE + 0xC08, 0x01);//select DPI pin
	OUTREG32(DISPSYS_BASE + 0x60, 0x8);// DPI src clock
	
	//RDMA0 setting
	OUTREG32(RDMA0_BASE + 0x10, 0); //stop rdma0
	
	// width, height and format
	OUTREG32(RDMA0_BASE + 0x14, lcm_params->width);
	OUTREG32(RDMA0_BASE + 0x18, lcm_params->height);
	
	OUTREG32(RDMA0_BASE + 0x24, 0x40);//input format ARGB888
#ifndef BUILD_UBOOT
	OUTREG32(RDMA0_BASE + 0x28, FB_Addr);//input addr
#else
	OUTREG32(RDMA0_BASE + 0x28, mt65xx_get_fb_addr());//input addr
#endif
	OUTREG32(RDMA0_BASE + 0x2C, lcm_params->width*2);//input pitch
	
	OUTREG32(RDMA0_BASE + 0x30, 0x10101010);
	OUTREG32(RDMA0_BASE + 0x40, 0x80f00008);
	
	OUTREG32(RDMA0_BASE + 0x50, 0);
	OUTREG32(RDMA0_BASE + 0x54, 0);
	OUTREG32(RDMA0_BASE + 0x58, 0);
	OUTREG32(RDMA0_BASE + 0x5C, 0);
	OUTREG32(RDMA0_BASE + 0x60, 0);
	OUTREG32(RDMA0_BASE + 0x64, 0);
	OUTREG32(RDMA0_BASE + 0x68, 0);
	OUTREG32(RDMA0_BASE + 0x6C, 0);
	OUTREG32(RDMA0_BASE + 0x70, 0);
	OUTREG32(RDMA0_BASE + 0x74, 0);
	OUTREG32(RDMA0_BASE + 0x78, 0);
	OUTREG32(RDMA0_BASE + 0x7C, 0);
	OUTREG32(RDMA0_BASE + 0x80, 0);
	OUTREG32(RDMA0_BASE + 0x84, 0);
	OUTREG32(RDMA0_BASE + 0x88, 0);
	OUTREG32(RDMA0_BASE + 0x8C, 0);
	
	//start rdma
	OUTREG32(RDMA0_BASE + 0x10, 0x03); //start + memory mode
    
    // dump register
    
    //release mutex0
    // OUTREG32(MUTEX_BASE + 0x24, 0);
    // while((INREG32(MUTEX_BASE + 0x24)&&0x02)!=0){} // polling until mutex lock complete
#endif
#endif
	return DPI_STATUS_OK;
}