コード例 #1
0
ファイル: disp_clk.c プロジェクト: pocketbook/Platform_A13
__s32 disp_pll_init(void)
{
	OSAL_CCMU_SetSrcFreq(AW_SYS_CLK_PLL3, 297000000);	
	OSAL_CCMU_SetSrcFreq(AW_SYS_CLK_PLL7, 297000000);

	return DIS_SUCCESS;
}
コード例 #2
0
__s32 disp_pll_init(void)
{
	OSAL_CCMU_SetSrcFreq(SYS_CLK_PLL3, 297000000);
	OSAL_CCMU_SetSrcFreq(SYS_CLK_PLL7, 297000000);
#if (defined(CONFIG_ARCH_SUN8IW3P1) || defined (CONFIG_ARCH_SUN8IW5P1))
	OSAL_CCMU_SetSrcFreq(SYS_CLK_PLL10,468000000);
#else
	OSAL_CCMU_SetSrcFreq(SYS_CLK_PLL10,702000000);
#endif
	disp_mipipll_init();

	return DIS_SUCCESS;
}
コード例 #3
0
ファイル: disp_clk.c プロジェクト: pocketbook/Platform_A13
static __s32 disp_pll_set(__u32 sel, __s32 videopll_sel, __u32 pll_freq, __u32 tve_freq, __s32 pre_scale, 
					__u32 lcd_clk_div, __u32 hdmi_freq, __u32 pll_2x, __u32 type)
{
	__u32 videopll;
	__hdle h_lcdmclk0, h_lcdmclk1, h_lcdmclk2;
	__s32 pll_2x_req;
	__u32 lcdmclk1_div, lcdmclk2_div, hdmiclk_div;
	
	if(type == DISP_OUTPUT_TYPE_LCD)	//lcd panel
	{		
	    if(videopll_sel == 2)//sata pll, fix to 960M
	    {
	        videopll = AW_SYS_CLK_PLL7X2;
	    }
	    else//video pll0 or video pll1
	    {
    		pll_2x_req = (pll_freq>381000000)?1:0;
    		if(pll_2x_req)
    		{
    		    pll_freq /= 2;
    		}

	        //in 3M unit
	    	pll_freq = (pll_freq + 1500000)/3000000;
			pll_freq = pll_freq * 3000000;

    		videopll = 	(videopll_sel == 0)?AW_SYS_CLK_PLL3:AW_SYS_CLK_PLL7;	
    		OSAL_CCMU_SetSrcFreq(videopll,pll_freq);
    		if(pll_2x_req)
    		{
                videopll = (videopll == AW_SYS_CLK_PLL3)?AW_SYS_CLK_PLL3X2:AW_SYS_CLK_PLL7X2;
    		}
		}
		
		if(gpanel_info[sel].tcon_index == 0)	//tcon0 drive lcd panel
		{
			h_lcdmclk0 = (sel == 0)?h_lcd0ch0mclk0 : h_lcd1ch0mclk0;
			OSAL_CCMU_SetMclkSrc(h_lcdmclk0, videopll);
			TCON0_set_dclk_div(sel,lcd_clk_div);
		}
		else									//tcon1 drive lcd panel
		{
			h_lcdmclk1 = (sel == 0)?h_lcd0ch1mclk1 : h_lcd1ch1mclk1;
			h_lcdmclk2 = (sel == 0)?h_lcd0ch1mclk2 : h_lcd1ch1mclk2;
			OSAL_CCMU_SetMclkSrc(h_lcdmclk2, videopll);
			OSAL_CCMU_SetMclkSrc(h_lcdmclk1, videopll);
			OSAL_CCMU_SetMclkDiv(h_lcdmclk2, lcd_clk_div);
			OSAL_CCMU_SetMclkDiv(h_lcdmclk1, lcd_clk_div);
		}
	}
	else //tv/vga/hdmi
	{	    
	    __u32 pll_freq_used;
	    
		pll_2x_req = pll_2x;
		videopll = 	(videopll_sel == 0)?AW_SYS_CLK_PLL3:AW_SYS_CLK_PLL7;	
		OSAL_CCMU_SetSrcFreq(videopll,pll_freq);	//Set related Video Pll Frequency

		videopll = 	(videopll_sel == 0)?
			   		((pll_2x_req)?AW_SYS_CLK_PLL3X2: AW_SYS_CLK_PLL3):
					((pll_2x_req)?AW_SYS_CLK_PLL7X2: AW_SYS_CLK_PLL7);	

		pll_freq_used = pll_freq * (pll_2x_req + 1);

		lcdmclk2_div = (pll_freq_used + (tve_freq / 2)) / tve_freq;
		lcdmclk1_div = lcdmclk2_div*pre_scale;
		hdmiclk_div = (pll_freq_used + (hdmi_freq / 2)) / hdmi_freq;
		
		h_lcdmclk1 = (sel == 0)?h_lcd0ch1mclk1 : h_lcd1ch1mclk1;
		h_lcdmclk2 = (sel == 0)?h_lcd0ch1mclk2 : h_lcd1ch1mclk2;
		OSAL_CCMU_SetMclkSrc(h_lcdmclk2, videopll);
		OSAL_CCMU_SetMclkSrc(h_lcdmclk1, videopll);
		OSAL_CCMU_SetMclkDiv(h_lcdmclk2, lcdmclk2_div);
		OSAL_CCMU_SetMclkDiv(h_lcdmclk1, lcdmclk1_div);

		if(type == DISP_OUTPUT_TYPE_HDMI && gdisp.screen[sel].hdmi_index == 0)	//hdmi internal mode
		{
			OSAL_CCMU_SetMclkSrc(h_hdmimclk, videopll);
			OSAL_CCMU_SetMclkDiv(h_hdmimclk, hdmiclk_div);

            if(gdisp.init_para.hdmi_set_pll != NULL)
            {
    			if((videopll == AW_SYS_CLK_PLL3X2) || (videopll == AW_SYS_CLK_PLL3))
    			{
    			    gdisp.init_para.hdmi_set_pll(0, pll_freq);
    			}
    			else
    			{
    			    gdisp.init_para.hdmi_set_pll(1, pll_freq);
    			}
			}
			else
			{
			    DE_WRN("gdisp.init_para.hdmi_set_pll is NULL\n");
			}
		}
	}

	return DIS_SUCCESS;
}
コード例 #4
0
static __s32 disp_pll_set(__u32 screen_id, __s32 videopll_sel, __u32 pll_freq, __u32 tve_freq, __s32 pre_scale,
					__u32 lcd_clk_div, __u32 hdmi_freq, __u32 pll_2x, __u32 type)
{
	__u32 videopll;
	__hdle h_lcdmclk0, h_lcdmclk1;
	__s32 pll_2x_req;
	__u32 lcdmclk1_div, hdmiclk_div;

	if(type == DISP_OUTPUT_TYPE_LCD) {
		/* mipi pll */
		if(videopll_sel == 2)	{
			videopll = SYS_CLK_MIPIPLL;
			//pll_freq = ((pll_freq + 12000000)/ 24000000) * 24000000;
			//OSAL_CCMU_SetSrcFreq(AW_SYS_CLK_PLL6, pll_freq);
		}
		/* video pll0 or video pll1 */
		else {
			pll_2x_req = (pll_freq>600000000)?1:0;
			if(pll_2x_req) {
				pll_freq /= 2;
			}

			//in 3M unit
			pll_freq = (pll_freq + 1500000)/3000000;
			pll_freq = pll_freq * 3000000;

			videopll = 	(videopll_sel == 0)?SYS_CLK_PLL3:SYS_CLK_PLL7;
			OSAL_CCMU_SetSrcFreq(videopll,pll_freq);
			if(pll_2x_req) {
			  videopll = (videopll == SYS_CLK_PLL3)?SYS_CLK_PLL3X2:SYS_CLK_PLL7X2;
			}
		}

		if(gpanel_info[screen_id].tcon_index == 0)	{
			h_lcdmclk0 = (screen_id == 0)?h_lcd0ch0mclk0 : h_lcd1ch0mclk0;
			OSAL_CCMU_SetMclkSrc(h_lcdmclk0, videopll);
			tcon0_set_dclk_div(screen_id,lcd_clk_div);
			/* todo?  --dphy clk fix to 297/2M */
			if(gpanel_info[screen_id].lcd_if == LCD_IF_DSI)	{
			  OSAL_CCMU_SetMclkSrc(h_dsimclk_s, videopll);
			  OSAL_CCMU_SetMclkDiv(h_dsimclk_s, 1);
			  OSAL_CCMU_SetMclkSrc(h_dsimclk_p, SYS_CLK_PLL7);
			  OSAL_CCMU_SetMclkDiv(h_dsimclk_p, 1);
			}
		}
		else {
			h_lcdmclk1 = (screen_id == 0)?h_lcd0ch1mclk1 : h_lcd1ch1mclk1;
			OSAL_CCMU_SetMclkSrc(h_lcdmclk1, videopll);
			OSAL_CCMU_SetMclkDiv(h_lcdmclk1, lcd_clk_div);
		}
	}
	/*  tv/vga/hdmi */
	else {
		__u32 pll_freq_used;

		pll_2x_req = pll_2x;
		videopll = 	(videopll_sel == 0)?SYS_CLK_PLL3:SYS_CLK_PLL7;
		OSAL_CCMU_SetSrcFreq(videopll,pll_freq);	//Set related Video Pll Frequency

		videopll = 	(videopll_sel == 0)?
		((pll_2x_req)?SYS_CLK_PLL3X2: SYS_CLK_PLL3):
		((pll_2x_req)?SYS_CLK_PLL7X2: SYS_CLK_PLL7);

		pll_freq_used = pll_freq * (pll_2x_req + 1);

		lcdmclk1_div = (pll_freq_used + (tve_freq / 2)) / tve_freq;
		hdmiclk_div = (pll_freq_used + (hdmi_freq / 2)) / hdmi_freq;

		h_lcdmclk1 = (screen_id == 0)?h_lcd0ch1mclk1 : h_lcd1ch1mclk1;
		OSAL_CCMU_SetMclkSrc(h_lcdmclk1, videopll);
		OSAL_CCMU_SetMclkDiv(h_lcdmclk1, lcdmclk1_div);

		/* hdmi internal mode */
		if(type == DISP_OUTPUT_TYPE_HDMI && gdisp.screen[screen_id].hdmi_index == 0) {
			OSAL_CCMU_SetMclkSrc(h_hdmimclk, videopll);
			OSAL_CCMU_SetMclkDiv(h_hdmimclk, hdmiclk_div);

			if(gdisp.init_para.hdmi_set_pll != NULL) {
				if((videopll == SYS_CLK_PLL3X2) || (videopll == SYS_CLK_PLL3)) {
					gdisp.init_para.hdmi_set_pll(0, pll_freq);
				}	else {
					gdisp.init_para.hdmi_set_pll(1, pll_freq);
				}
			}	else {
				DE_WRN("gdisp.init_para.hdmi_set_pll is NULL\n");
			}
		}
	}

	return DIS_SUCCESS;
}