示例#1
0
s32 disp_init_tv(disp_bsp_init_para * para)  //call by disp_display
{

	s32   val;
	s32  type;

	type = disp_sys_script_get_item("tv_para", "tv_used", &val, 1);
	if(1 == type)
		g_tv_used = val;
	if(g_tv_used ) {
		__u32 num_screens;
		__u32 disp;
		struct disp_device* p_tv;
		struct disp_device_private_data* p_tvp;

		DE_WRN("[boot]disp_init_tv\n");
#if defined(__LINUX_PLAT__)
		spin_lock_init(&g_tv_data_lock);
#endif
		DE_WRN("[DISP_TV] disp_init_tv enter g_tv_used\n");
		num_screens = bsp_disp_feat_get_num_screens();
		g_ptv_devices = (struct disp_device *)disp_sys_malloc(sizeof(struct disp_device) * num_screens);
		if(NULL == g_ptv_devices) {
			DE_WRN("malloc memory fail!\n");
			return DIS_FAIL;
		}

		g_ptv_private = (struct disp_device_private_data *)disp_sys_malloc(sizeof(struct disp_device_private_data) * num_screens);
		if(NULL == g_ptv_private) {
			DE_WRN("malloc memory fail!\n");
			return DIS_FAIL;
		}

		for(disp=0; disp<num_screens; disp++) {
			p_tv = &g_ptv_devices[disp];
			p_tvp = &g_ptv_private[disp];

			if(!bsp_disp_feat_is_supported_output_types(disp, DISP_OUTPUT_TYPE_TV)) { //modify 1
			    DE_WRN("screen %d do not support TV TYPE!\n", disp);
			    continue;
			}

			p_tv->disp = disp;
			sprintf(p_tv->name, "tv%d", disp);
			p_tv->type = DISP_OUTPUT_TYPE_TV;
			p_tvp->tv_mode = DISP_TV_MOD_PAL;						//modifyed
			p_tvp->irq_no = para->irq_no[DISP_MOD_LCD0 + disp];			//modify
			p_tvp->clk = "tcon1";
			p_tvp->clk_parent = "pll_video0";

			p_tv->set_manager = disp_device_set_manager;
			p_tv->unset_manager = disp_device_unset_manager;
			p_tv->get_resolution = disp_device_get_resolution;
			p_tv->get_timings = disp_device_get_timings;

			p_tv->init =  disp_tv_init;
			p_tv->exit =  disp_tv_exit;
			p_tv->set_tv_func = disp_tv_set_func;
			p_tv->enable = disp_tv_enable;
			p_tv->disable = disp_tv_disable;
			p_tv->is_enabled = disp_tv_is_enabled;
			p_tv->set_mode = disp_tv_set_mode;
			p_tv->get_mode = disp_tv_get_mode;
			p_tv->check_support_mode = disp_tv_check_support_mode;
			p_tv->get_input_csc = disp_tv_get_input_csc;
			p_tv->detect = disp_tv_detect;
			p_tv->suspend = disp_tv_suspend;
			p_tv->resume = disp_tv_resume;
			p_tv->init(p_tv);
			if(bsp_disp_feat_is_supported_output_types(disp, DISP_OUTPUT_TYPE_TV))
				disp_device_register(p_tv);
			DE_WRN("[BOOOT_DISP_TV] disp tv device_registered\n");
		}


	}
	return 0;
}
示例#2
0
struct disp_device* disp_vdevice_register(disp_vdevice_init_data *data)
{
	struct disp_device *vdevice;
	struct disp_vdevice_private_data *vdevicep;

	vdevice = (struct disp_device *)disp_sys_malloc(sizeof(struct disp_device));
	if(NULL == vdevice) {
			DE_WRN("malloc memory fail!\n");
			return NULL;
	}
	vdevicep = (struct disp_vdevice_private_data *)disp_sys_malloc(sizeof(struct disp_vdevice_private_data));
	if(NULL == vdevicep) {
			DE_WRN("malloc memory fail!\n");
			disp_sys_free(vdevice);
			return NULL;
	}
#if defined(__LINUX_PLAT__)
	mutex_init(&vdevicep->mlock);
#endif

	memset(vdevice, 0, sizeof(struct disp_device));
	memcpy(&vdevice->name, data->name, 32);
	vdevice->disp = data->disp;
	vdevice->fix_timing = data->fix_timing;
	vdevice->type = data->type;
	memcpy(&vdevicep->func, &data->func, sizeof(disp_device_func));

	vdevicep->irq_no = gdisp.init_para.irq_no[DISP_MOD_LCD0 + vdevice->disp];
	switch(vdevice->disp) {
	case 0:
		vdevicep->clk = DE_LCD_CLK0;
		break;
	case 1:
		vdevicep->clk = DE_LCD_CLK1;//TCON clk
		break;
	default:
		vdevicep->clk = DE_LCD_CLK0;
	}
	vdevicep->clk_parent = DE_LCD_CLK_SRC;

	vdevice->set_manager = disp_device_set_manager;
	vdevice->unset_manager = disp_device_unset_manager;
	vdevice->get_resolution = disp_device_get_resolution;
	vdevice->get_timings = disp_device_get_timings;
	vdevice->is_interlace = disp_device_is_interlace;

	vdevice->init = disp_vdevice_init;
	vdevice->exit = disp_vdevice_exit;

	vdevice->enable = disp_vdevice_enable;
	vdevice->sw_enable = disp_vdevice_sw_enable;
	vdevice->disable = disp_vdevice_disable;
	vdevice->is_enabled = disp_vdevice_is_enabled;
	vdevice->set_mode = disp_vdevice_set_mode;
	vdevice->get_mode = disp_vdevice_get_mode;
	vdevice->check_support_mode = disp_vdevice_check_support_mode;
	vdevice->get_input_csc = disp_vdevice_get_input_csc;
	vdevice->get_input_color_range = disp_vdevice_get_input_color_range;
	vdevice->suspend = disp_vdevice_suspend;
	vdevice->resume = disp_vdevice_resume;
	vdevice->detect = disp_vdevice_detect;

	vdevice->priv_data = (void*)vdevicep;
	vdevice->init(vdevice);
	disp_device_register(vdevice);
	if(gdisp.init_para.start_process)
		gdisp.init_para.start_process();

	return vdevice;
}
示例#3
0
s32 disp_init_hdmi(disp_bsp_init_para * para)
{
	s32 ret;
	s32 value;
	//get sysconfig hdmi_used
	ret = disp_sys_script_get_item("hdmi_para", "hdmi_used", &value, 1);
	if(ret == 1)
		hdmi_used = value;

	if(hdmi_used) {
		u32 num_screens;
		u32 disp;
		struct disp_device* hdmi;
		struct disp_device_private_data* hdmip;

		DE_INF("disp_init_hdmi\n");
#if defined(__LINUX_PLAT__)
		spin_lock_init(&hdmi_data_lock);
#endif

		num_screens = bsp_disp_feat_get_num_screens();
		hdmis = (struct disp_device *)disp_sys_malloc(sizeof(struct disp_device) * num_screens);
		if(NULL == hdmis) {
			DE_WRN("malloc memory fail!\n");
			return DIS_FAIL;
		}

		hdmi_private = (struct disp_device_private_data *)disp_sys_malloc(sizeof(struct disp_device_private_data) * num_screens);
		if(NULL == hdmi_private) {
			DE_WRN("malloc memory fail!\n");
			return DIS_FAIL;
		}

		for(disp=0; disp<num_screens; disp++) {
			hdmi = &hdmis[disp];
			hdmip = &hdmi_private[disp];

			if(!bsp_disp_feat_is_supported_output_types(disp, DISP_OUTPUT_TYPE_HDMI)) {
			    continue;
			}

			hdmi->disp = disp;
			sprintf(hdmi->name, "hdmi%d", disp);
			hdmi->type = DISP_OUTPUT_TYPE_HDMI;
			hdmip->mode = DISP_TV_MOD_720P_50HZ;
			hdmip->irq_no = para->irq_no[DISP_MOD_LCD0 + disp];
			switch(disp) {
			case 0:
				hdmip->clk = DE_LCD_CLK0;
				break;
			case 1:
				hdmip->clk = DE_LCD_CLK1;//TCON clk
				break;
			default:
				hdmip->clk = DE_LCD_CLK0;
			}
			hdmip->clk_parent = DE_HDMI_CLK_SRC;

			hdmi->set_manager = disp_device_set_manager;
			hdmi->unset_manager = disp_device_unset_manager;
			hdmi->get_resolution = disp_device_get_resolution;
			hdmi->get_timings = disp_device_get_timings;
			hdmi->is_interlace = disp_device_is_interlace;

			hdmi->init = disp_hdmi_init;
			hdmi->exit = disp_hdmi_exit;

			hdmi->set_func = disp_hdmi_set_func;
			hdmi->enable = disp_hdmi_enable;
			hdmi->disable = disp_hdmi_disable;
			hdmi->is_enabled = disp_hdmi_is_enabled;
			hdmi->set_mode = disp_hdmi_set_mode;
			hdmi->get_mode = disp_hdmi_get_mode;
			hdmi->check_support_mode = disp_hdmi_check_support_mode;
			hdmi->get_input_csc = disp_hdmi_get_input_csc;
			hdmi->get_input_color_range = disp_hdmi_get_input_color_range;
			hdmi->suspend = disp_hdmi_suspend;
			hdmi->resume = disp_hdmi_resume;
			hdmi->detect = disp_hdmi_detect;

			if(bsp_disp_feat_is_supported_output_types(disp, DISP_OUTPUT_TYPE_HDMI)) {
				hdmi->init(hdmi);
				disp_device_register(hdmi);
			}
		}
	}
	return 0;
}