__s32 disp_pll_init(void) { OSAL_CCMU_SetSrcFreq(AW_SYS_CLK_PLL3, 297000000); OSAL_CCMU_SetSrcFreq(AW_SYS_CLK_PLL7, 297000000); return DIS_SUCCESS; }
__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; }
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; }
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; }