Пример #1
0
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 ;
}
Пример #2
0
void sync_event_proc(u32 disp)
{
	//u32 cur_line = 0, start_delay = 0;

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

	/*
	if(disp < 2) {
		//FIXME
		cur_line = disp_al_lcd_get_cur_line(disp);
		start_delay = disp_al_lcd_get_start_delay(disp);
		if(cur_line > start_delay-4) {
			return ;
		}
	}
	*/

#if defined(__LINUX_PLAT__)
	spin_lock_irqsave(&gdisp.screen[disp].flag_lock, flags);
#endif
	if(0 == bsp_disp_cfg_get(disp)) {
		gdisp.screen[disp].have_cfg_reg = true;
#if defined(__LINUX_PLAT__)
	spin_unlock_irqrestore(&gdisp.screen[disp].flag_lock, flags);
#endif
		disp_sync_all(disp);
		gdisp.screen[disp].have_cfg_reg = false;
		if(gdisp.init_para.disp_int_process)
			gdisp.init_para.disp_int_process(disp);
		if(gdisp.screen[disp].vsync_event_en && gdisp.init_para.vsync_event)
			gdisp.init_para.vsync_event(disp);

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

	return ;
}
Пример #3
0
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) {
			return ;
		}
	}

#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
		/* set ready of all mod, todo? */
		disp_sync_all(screen_id);
	} else {
#if defined(__LINUX_PLAT__)
	spin_unlock_irqrestore(&gdisp.screen[screen_id].flag_lock, flags);
#endif
	}

	return ;
}
Пример #4
0
void sync_event_proc(u32 screen_id)
{
	u32 cur_line = 0, start_delay = 0;
#if defined(__LINUX_PLAT__)
	unsigned long flags;
#endif

	bsp_disp_layer_deinterlace_cfg(screen_id);//de-interlace reg-config
	#if defined(__LINUX_PLAT__)
#ifdef CONFIG_DEVFREQ_DRAM_FREQ_IN_VSYNC
	if(bsp_disp_get_output_type(screen_id) == DISP_OUTPUT_TYPE_LCD) {
		struct disp_lcd* lcd = NULL;
		static disp_panel_para info;

		lcd = disp_get_lcd(screen_id);
		if(NULL != lcd) {
			memset(&info, 0, sizeof(disp_panel_para));
			if(lcd->get_panel_info)
				lcd->get_panel_info(lcd, &info);
			if(LCD_IF_EDP == info.lcd_if) {
				gdisp.screen[screen_id].wait_count++;
				wake_up_interruptible(&gdisp.screen[screen_id].wait);
			}
		}
	}
#endif
#endif

#if defined(CONFIG_ARCH_SUN9IW1P1)
	if(screen_id < 2) {
		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 ;
		}
	}
#else
	if(screen_id < 2) {
		if(disp_al_lcd_check_time(screen_id, 200)) {
		fcount_data.skip_count[screen_id] ++;
			return ;
	}
	}
#endif


#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
	}

	if(bsp_disp_get_output_type(screen_id) == DISP_OUTPUT_TYPE_LCD) {
		struct disp_lcd* m_lcd = NULL;
		static disp_panel_para m_info;

		m_lcd = disp_get_lcd(screen_id);
		if(NULL != m_lcd) {
			memset(&m_info, 0, sizeof(disp_panel_para));
			if(m_lcd->get_panel_info)
				m_lcd->get_panel_info(m_lcd, &m_info);
			if(LCD_IF_EDP != m_info.lcd_if) {
				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-1))
					printk("LCD:%d\n", cur_line);
			}
		}
	}

	return ;
}
Пример #5
0
static ssize_t disp_cfg_cnt_show(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	return sprintf(buf, "cfg_cnt=%d\n", bsp_disp_cfg_get(sel));
}