static s32 vdevice_clk_config(struct disp_device *vdevice) { struct disp_vdevice_private_data *vdevicep = disp_vdevice_get_priv(vdevice); disp_panel_para *para; struct lcd_clk_info clk_info; unsigned long pll_rate, lcd_rate, dclk_rate;//hz unsigned long pll_rate_set, lcd_rate_set, dclk_rate_set;//hz if(!vdevice || !vdevicep) { DE_WRN("null hdl!\n"); return DIS_FAIL; } memset(&clk_info, 0, sizeof(struct lcd_clk_info)); para = (disp_panel_para*)disp_sys_malloc(sizeof(disp_panel_para)); dclk_rate = vdevicep->video_info->pixel_clk * (vdevicep->video_info->pixel_repeat + 1); para->lcd_if = vdevicep->intf.intf; para->lcd_dclk_freq = dclk_rate; disp_al_lcd_get_clk_info(vdevice->disp, &clk_info, para); disp_sys_free((void*)para); clk_info.tcon_div = 8;//fixme lcd_rate = dclk_rate * clk_info.tcon_div; pll_rate = lcd_rate * clk_info.lcd_div; disp_sys_clk_set_rate(vdevicep->clk_parent, pll_rate); pll_rate_set = disp_sys_clk_get_rate(vdevicep->clk_parent); lcd_rate_set = pll_rate_set / clk_info.lcd_div; disp_sys_clk_set_rate(vdevicep->clk, lcd_rate_set); lcd_rate_set = disp_sys_clk_get_rate(vdevicep->clk); dclk_rate_set = lcd_rate_set / clk_info.tcon_div; if(dclk_rate_set != dclk_rate) DE_WRN("pclk=%ld, cur=%ld\n", dclk_rate, dclk_rate_set); return 0; }
static s32 tv_clk_config(struct disp_device* ptv) { struct disp_device_private_data *ptvp = disp_tv_get_priv(ptv); if(!ptv || !ptvp) { DE_WRN("tv init null hdl!\n"); return DIS_FAIL; } return disp_sys_clk_set_rate(ptvp->clk, ptv->timings.pixel_clk); }
static void tve_clk_config(u32 sel, u32 tv_mode) { #if 0 int index = 0; char clk[20] = {0}; disp_video_timings *pinfo; if(SCREEN_COUNT <= sel) sel = sel-1; pinfo = video_timing; sprintf(clk, "tve%d", sel); index = tv_get_video_info(tv_mode); //modify tv_mode #endif disp_sys_clk_set_rate("tve", 216000000); }
static s32 hdmi_clk_config(struct disp_device *hdmi) { struct disp_device_private_data *hdmip = disp_hdmi_get_priv(hdmi); unsigned long rate = 0; if(!hdmi || !hdmip) { DE_WRN("hdmi clk init null hdl!\n"); return DIS_FAIL; } rate = hdmip->video_info->pixel_clk * (hdmip->video_info->pixel_repeat + 1); disp_sys_clk_set_rate(hdmip->clk, rate); return 0; }