Exemple #1
0
__s32 Scaler_Request(__u32 scaler_index)
{
	__s32 ret = DIS_NO_RES;
	__u32 num_scalers;
	__u32 i;

	num_scalers = bsp_disp_feat_get_num_scalers();

	DE_INF("Scaler_Request,%d\n", scaler_index);

	for(i=0; i<num_scalers; i++) {
		if(((scaler_index == i) || (scaler_index == 0xff))
		    && (!(gdisp.scaler[i].status & SCALER_USED)))	{
			ret = i;
			Scaler_open(ret);
			gdisp.scaler[ret].b_close = FALSE;
			gdisp.scaler[ret].status |= SCALER_USED;
			break;
		}	else if(((scaler_index == i) || (scaler_index == 0xff))
		    && (gdisp.scaler[i].b_close == TRUE))	{
			ret = 0;
			gdisp.scaler[ret].b_close = FALSE;
			gdisp.scaler[ret].status |= SCALER_USED;
			break;
		}
	}

	return ret;
}
Exemple #2
0
__s32 disp_video_exit()
{
	__u32 num_screen;
	__u32 num_scalers;
	__u32 scaler_id;

	num_screen = bsp_disp_feat_get_num_screens();
	num_scalers = bsp_disp_feat_get_num_scalers();
#ifdef __LINUX_OSAL__
	for(scaler_id=0; scaler_id<num_scalers; scaler_id++) {
		if(maf_flag_mem[scaler_id][0]) {
			kfree(maf_flag_mem[scaler_id][0]);
		}
		if(maf_flag_mem[scaler_id][1]) {
			kfree(maf_flag_mem[scaler_id][1]);
		}
	}

#else
	for(scaler_id=0; scaler_id<num_scalers; scaler_id++) {
		if(maf_flag_mem[scaler_id][0]) {
			OSAL_PhyFree(maf_flag_mem[scaler_id][0], maf_flag_mem_len);
		}
		if(maf_flag_mem[scaler_id][1]) {
			OSAL_PhyFree(maf_flag_mem[scaler_id][1], maf_flag_mem_len);
		}
	}

#endif
	memset(g_video,0,sizeof(g_video));

	return DIS_SUCCESS;
}
void sync_event_proc(u32 screen_id)
{
	u32 cur_line = 0, start_delay = 0;
	u32 num_scalers;

#if defined(__LINUX_PLAT__)
	unsigned long flags;
#endif

	if(screen_id < 2) {
		num_scalers = bsp_disp_feat_get_num_scalers();

		cur_line = disp_al_lcd_get_cur_line(screen_id);
		start_delay = disp_al_lcd_get_start_delay(screen_id);
		if(cur_line > start_delay-4) {
			fcount_data.skip_count[screen_id] ++;
			return ;
		}
	}

	//fps proc
	fps_data[screen_id].counter++;
	if(fps_data[screen_id].counter == 100) {
		fps_data[screen_id].counter = 0;
		fps_data[screen_id].last_time = fps_data[screen_id].current_time;
		fps_data[screen_id].current_time = jiffies;
	}

	//capture sync event
	if(bsp_disp_capture_screen_finished(screen_id) == 1)
		gdisp.init_para.capture_event(screen_id);

#if defined(__LINUX_PLAT__)
	spin_lock_irqsave(&gdisp.screen[screen_id].flag_lock, flags);
#endif
	if(0 == bsp_disp_cfg_get(screen_id)) {
		gdisp.screen[screen_id].have_cfg_reg = true;
#if defined(__LINUX_PLAT__)
	spin_unlock_irqrestore(&gdisp.screen[screen_id].flag_lock, flags);
#endif
		disp_sync_all(screen_id);

	} else {
#if defined(__LINUX_PLAT__)
	spin_unlock_irqrestore(&gdisp.screen[screen_id].flag_lock, flags);
#endif
	}

	return ;
}
Exemple #4
0
__s32 Disp_set_out_interlace(__u32 screen_id)
{
	__u32 i;
	__bool b_cvbs_out = 0;
	__u32 num_scalers;

	num_scalers = bsp_disp_feat_get_num_scalers();

	if(gdisp.screen[screen_id].output_type==DISP_OUTPUT_TYPE_TV
	    && (gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_PAL || gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_PAL_M
	    ||	gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_PAL_NC || gdisp.screen[screen_id].tv_mode==DISP_TV_MOD_NTSC)) {
		b_cvbs_out = 1;
	}

	gdisp.screen[screen_id].de_flicker_status |= DE_FLICKER_REQUIRED;

	bsp_disp_cfg_start(screen_id);

	/* when output device is cvbs */
	if((gdisp.screen[screen_id].de_flicker_status & DE_FLICKER_REQUIRED) && b_cvbs_out)	{
		DE_BE_deflicker_enable(screen_id, TRUE);
		for(i=0; i<num_scalers; i++) {
			if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == screen_id))	{
				Scaler_Set_Outitl(i, FALSE);
				gdisp.scaler[i].b_reg_change = TRUE;
			}
		}
		gdisp.screen[screen_id].de_flicker_status |= DE_FLICKER_USED;
	}	else {
		DE_BE_deflicker_enable(screen_id, FALSE);
		for(i=0; i<num_scalers; i++) {
			if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == screen_id))	{
				Scaler_Set_Outitl(i, gdisp.screen[screen_id].b_out_interlace);
				gdisp.scaler[i].b_reg_change = TRUE;
			}
		}
		gdisp.screen[screen_id].de_flicker_status &= DE_FLICKER_USED_MASK;
	}
	DE_BE_Set_Outitl_enable(screen_id, gdisp.screen[screen_id].b_out_interlace);

	bsp_disp_cfg_finish(screen_id);

	return DIS_SUCCESS;
}
Exemple #5
0
s32 bsp_disp_exit(u32 mode)
{
	u32 num_screens;
	u32 screen_id;
	u32 num_scalers;
	u32 scaler_id;
	struct disp_lcd *lcd;
	struct disp_manager *manager;

	num_screens = bsp_disp_feat_get_num_screens();
	num_scalers = bsp_disp_feat_get_num_scalers();

	if(mode == DISP_EXIT_MODE_CLEAN_ALL) {
		/* close all mod and unregister all irq */
		for(scaler_id = 0; scaler_id < num_scalers; scaler_id++) {
			scaler_close(scaler_id);
		}
		scaler_exit();

		for(screen_id = 0; screen_id < num_screens; screen_id++) {
			lcd = disp_get_lcd(screen_id);
			manager = disp_get_layer_manager(screen_id);

			manager->exit(manager);
			lcd->exit(lcd);
		}
	}	else if(mode == DISP_EXIT_MODE_CLEAN_PARTLY) {
		/* unregister all irq */
//		OSAL_InterruptDisable(AW_IRQ_DEBE0);
//		OSAL_UnRegISR(AW_IRQ_DEBE0, manager_event_proc, (void*)0);
		OSAL_InterruptDisable(AW_IRQ_LCD0);
		OSAL_UnRegISR(AW_IRQ_LCD0, disp_lcd_event_proc, (void*)0);

//		OSAL_InterruptDisable(AW_IRQ_DEBE1);
//		OSAL_UnRegISR(AW_IRQ_DEBE1, manager_event_proc, (void*)0);
		OSAL_InterruptDisable(AW_IRQ_LCD1);
		OSAL_UnRegISR(AW_IRQ_LCD1, disp_lcd_event_proc, (void*)0);
	}

	return DIS_SUCCESS;
}
Exemple #6
0
__s32 disp_video_init()
{
	__u32 num_screens;
	__u32 num_scalers;
	__u32 scaler_id;

	num_screens = bsp_disp_feat_get_num_screens();
	num_scalers = bsp_disp_feat_get_num_scalers();
	memset(g_video,0,sizeof(g_video));
#ifdef __LINUX_OSAL__
	for(scaler_id=0; scaler_id<num_scalers; scaler_id++) {
		if((bsp_disp_feat_get_layer_feats(scaler_id, DISP_LAYER_WORK_MODE_SCALER, scaler_id)
				    & DISP_LAYER_FEAT_DE_INTERLACE))
			bsp_disp_lcd_delay_ms(10);
			maf_flag_mem[scaler_id][0] = (void*)__pa((char __iomem *)kmalloc(maf_flag_mem_len, GFP_KERNEL |  __GFP_ZERO));
			maf_flag_mem[scaler_id][1] = (void*)__pa((char __iomem *)kmalloc(maf_flag_mem_len, GFP_KERNEL |  __GFP_ZERO));
			DE_INF("maf_flag_mem[%d][%d]=0x%8x, maf_flag_mem[%d][%d]=0x%8x\n",scaler_id, 0,
				(unsigned int)maf_flag_mem[scaler_id][0], scaler_id, 1, (unsigned int)maf_flag_mem[scaler_id][1]);
			if((maf_flag_mem[scaler_id][0] == NULL) || (maf_flag_mem[scaler_id][1] == NULL)) {
				DE_WRN("maf memory[%d] request fail\n", scaler_id);
			}
	}
#else
	for(scaler_id=0; scaler_id<num_scalers; scaler_id++) {
		if((bsp_disp_feat_get_layer_feats(scaler_id, DISP_LAYER_WORK_MODE_SCALER, scaler_id)
			    & DISP_LAYER_FEAT_DE_INTERLACE))
			maf_flag_mem[scaler_id][0] = OSAL_PhyAlloc(maf_flag_mem_len);
			maf_flag_mem[scaler_id][1] = OSAL_PhyAlloc(maf_flag_mem_len);
			DE_INF("maf_flag_mem[%d][%d]=0x%8x, maf_flag_mem[%d][%d]=0x%8x\n",scaler_id, 0,
				(unsigned int)maf_flag_mem[scaler_id][0], scaler_id, 1, (unsigned int)maf_flag_mem[scaler_id][1]);
			if((maf_flag_mem[scaler_id][0] == NULL) || (maf_flag_mem[scaler_id][1] == NULL)) {
				DE_WRN("maf memory[%d] request fail\n", scaler_id);
			}
	}
#endif
	for(scaler_id=0; scaler_id<num_scalers; scaler_id++) {
		dit_mode_default[scaler_id] = DIT_MODE_MAF;
	}

	return DIS_SUCCESS;
}
void LCD_vbi_event_proc(__u32 screen_id, __u32 tcon_index)
{
	__u32 cur_line = 0, start_delay = 0;
	__u32 i = 0;
	__u32 num_scalers;
#ifdef __LINUX_OSAL__
	unsigned long flags;
#endif
	num_scalers = bsp_disp_feat_get_num_scalers();

	disp_vint_checkin(screen_id);
	disp_lcd_set_fps(screen_id);

	Video_Operation_In_Vblanking(screen_id, tcon_index);
	disp_capture_screen_proc(screen_id);

	cur_line = TCON_get_cur_line(screen_id, tcon_index);
	start_delay = TCON_get_start_delay(screen_id, tcon_index);
	if(cur_line > start_delay-4) {
		//DE_INF("int:%d,%d\n", cur_line,start_delay);
		/* return while not  trigger mode  */
		if(gpanel_info[screen_id].lcd_fresh_mode == 0) {
			return ;
		}
	}

#ifdef __LINUX_OSAL__
	spin_lock_irqsave(&gdisp.screen[screen_id].flag_lock, flags);
#endif
	if(gdisp.screen[screen_id].cache_flag == FALSE && gdisp.screen[screen_id].cfg_cnt == 0) {
		gdisp.screen[screen_id].have_cfg_reg = TRUE;
#ifdef __LINUX_OSAL__
	spin_unlock_irqrestore(&gdisp.screen[screen_id].flag_lock, flags);
#endif
		DE_BE_Cfg_Ready(screen_id);
		IEP_CMU_Operation_In_Vblanking(screen_id);
		for(i=0; i<num_scalers; i++) {
			if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == screen_id))	{
				__u32 hid;

				if(gdisp.scaler[i].b_close == TRUE) {
					Scaler_close(i);
					gdisp.scaler[i].b_close = FALSE;
				}	else {
					hid = gdisp.scaler[i].layer_id;
					DE_SCAL_Set_Reg_Rdy(i);
					//DE_SCAL_Reset(i);
					//DE_SCAL_Start(i);
					disp_deu_set_frame_info(screen_id, IDTOHAND(hid));
					disp_deu_output_select(screen_id, IDTOHAND(hid), screen_id);
					IEP_Deu_Operation_In_Vblanking(i);
				}
				gdisp.scaler[i].b_reg_change = FALSE;
			}
		}

		if(DISP_OUTPUT_TYPE_LCD == bsp_disp_get_output_type(screen_id)) {
			IEP_Drc_Operation_In_Vblanking(screen_id);
		}

		if(gdisp.init_para.take_effect) {
			gdisp.init_para.take_effect(screen_id);
		}
	} else {
#ifdef __LINUX_OSAL__
	spin_unlock_irqrestore(&gdisp.screen[screen_id].flag_lock, flags);
#endif
	}

#if 0
	cur_line = LCDC_get_cur_line(screen_id, tcon_index);

	if(cur_line > 5) {
		DE_INF("%d\n", cur_line);
	}
#endif

	return ;
}