Beispiel #1
0
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;
}
Beispiel #2
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);
}
Beispiel #3
0
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);
}
Beispiel #4
0
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;
}