__s32 BSP_disp_close(void) { __u32 sel = 0; if (!disp_initialised) return DIS_SUCCESS; for (sel = 0; sel < 2; sel++) { Image_close(sel); if (gdisp.scaler[sel].status & SCALER_USED) Scaler_close(sel); if (gdisp.screen[sel].lcdc_status & LCDC_TCON0_USED) { TCON0_close(sel); LCDC_close(sel); } else if (gdisp.screen[sel].lcdc_status & LCDC_TCON1_USED) { TCON1_close(sel); LCDC_close(sel); } else if (gdisp.screen[sel].status & (TV_ON | VGA_ON)) { TVE_close(sel); } } for (sel = 0; sel < 2; sel++) { gdisp.screen[sel].status &= ~(IMAGE_USED | LCD_ON | TV_ON | VGA_ON | HDMI_ON); gdisp.screen[sel].lcdc_status &= ~(LCDC_TCON0_USED & LCDC_TCON1_USED); } return DIS_SUCCESS; }
__s32 BSP_disp_close(void) { __u32 sel = 0; for(sel = 0; sel<2; sel++) { Image_close(sel); if(gdisp.scaler[sel].status & SCALER_USED) { Scaler_close(sel); } if(gdisp.screen[sel].lcdc_status & LCDC_TCON0_USED) { TCON0_close(sel); LCDC_close(sel); } else if(gdisp.screen[sel].lcdc_status & LCDC_TCON1_USED) { TCON1_close(sel); LCDC_close(sel); } else if(gdisp.screen[sel].status & (TV_ON | VGA_ON)) { TVE_close(sel); } } gdisp.screen[sel].status &= (IMAGE_USED_MASK & LCD_OFF & TV_OFF & VGA_OFF & HDMI_OFF); gdisp.screen[sel].lcdc_status &= (LCDC_TCON0_USED_MASK & LCDC_TCON1_USED_MASK); return DIS_SUCCESS; }
void LCD_vbi_event_proc(__u32 sel, __u32 tcon_index) { __u32 cur_line = 0, start_delay = 0; __u32 i = 0; //add by heyihang.Jan 28, 2013 if(gdisp.screen[sel].vsync_event_en && gdisp.init_para.vsync_event) { gdisp.init_para.vsync_event(sel); } Video_Operation_In_Vblanking(sel, tcon_index); disp_capture_screen_proc(sel); cur_line = LCDC_get_cur_line(sel, tcon_index); start_delay = LCDC_get_start_delay(sel, tcon_index); if(cur_line > start_delay-3) { //DE_INF("cur_line(%d) >= start_delay(%d)-3 in LCD_vbi_event_proc\n", cur_line, start_delay); return ; } if(gdisp.screen[sel].LCD_CPUIF_ISR) { (*gdisp.screen[sel].LCD_CPUIF_ISR)(); } if(gdisp.screen[sel].cache_flag == FALSE )//&& gdisp.screen[sel].cfg_cnt == 0) { for(i=0; i<2; i++) { if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == sel)) { DE_SCAL_Set_Reg_Rdy(i); //DE_SCAL_Reset(i); //DE_SCAL_Start(i); gdisp.scaler[i].b_reg_change = FALSE; } if(gdisp.scaler[i].b_close == TRUE) { Scaler_close(i); gdisp.scaler[i].b_close = FALSE; } } DE_BE_Cfg_Ready(sel); gdisp.screen[sel].have_cfg_reg = TRUE; } #if 0 cur_line = LCDC_get_cur_line(sel, tcon_index); if(cur_line > 5) { DE_INF("%d\n", cur_line); } #endif return ; }
__s32 Scaler_Release(__u32 sel, __bool b_display) { DE_INF("Scaler_Release:%d\n", sel); DE_SCAL_Set_Di_Ctrl(sel, 0, 0, 0, 0); if(b_display == FALSE || BSP_disp_get_output_type(sel)==DISP_OUTPUT_TYPE_NONE) { Scaler_close(sel); } else { gdisp.scaler[sel].b_close = TRUE; } return DIS_SUCCESS; }
__s32 Scaler_Release(__u32 sel, __bool b_display) { DE_SCAL_Set_Di_Ctrl(sel, 0, 0, 0, 0); if(b_display == FALSE) { Scaler_close(sel); } else { gdisp.scaler[sel].b_close = TRUE; } memset(&gdisp.scaler[sel], 0, sizeof(__disp_scaler_t)); gdisp.scaler[sel].bright = 32; gdisp.scaler[sel].contrast = 32; gdisp.scaler[sel].saturation = 32; gdisp.scaler[sel].hue = 32; return DIS_SUCCESS; }
__s32 Scaler_Release(__u32 scaler_index, __bool b_display) { __u32 screen_index = 0xff; __bool b_display_off = TRUE; DE_INF("Scaler_Release:%d\n", scaler_index); DE_SCAL_Set_Di_Ctrl(scaler_index, 0, 0, 0, 0); screen_index = gdisp.scaler[scaler_index].screen_index; if((screen_index != 0xff) && (bsp_disp_get_output_type(screen_index) != DISP_OUTPUT_TYPE_NONE)) { b_display_off = FALSE; } if((b_display == FALSE) || b_display_off) { Scaler_close(scaler_index); } else { gdisp.scaler[scaler_index].b_close = TRUE; } return DIS_SUCCESS; }
void LCD_vbi_event_proc(__u32 sel, __u32 tcon_index) { __u32 cur_line = 0, start_delay = 0; __u32 i = 0; // if(BSP_disp_get_output_type(sel) == DISP_OUTPUT_TYPE_NONE) // return; if(gdisp.screen[sel].vsync_event_en && gdisp.init_para.vsync_event) { gdisp.init_para.vsync_event(sel); } Video_Operation_In_Vblanking(sel, tcon_index); cur_line = LCDC_get_cur_line(sel, tcon_index); start_delay = LCDC_get_start_delay(sel, tcon_index); if(cur_line > start_delay-3) { //DE_INF("cur_line(%d) >= start_delay(%d)-3 in LCD_vbi_event_proc\n", cur_line, start_delay); return ; } IEP_Operation_In_Vblanking(sel, tcon_index); if(gdisp.screen[sel].LCD_CPUIF_ISR) { (*gdisp.screen[sel].LCD_CPUIF_ISR)(); } if(gdisp.screen[sel].cache_flag == FALSE && gdisp.screen[sel].cfg_cnt == 0) { for(i=0; i<2; i++) { if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == sel)) { DE_SCAL_Set_Reg_Rdy(i); //DE_SCAL_Reset(i); //DE_SCAL_Start(i); gdisp.scaler[i].b_reg_change = FALSE; } if(gdisp.scaler[i].b_close == TRUE) { Scaler_close(i); gdisp.scaler[i].b_close = FALSE; } if((gdisp.scaler[i].status & SCALER_USED) && (gdisp.scaler[i].screen_index == sel) && (gdisp.scaler[i].coef_change == TRUE)) { __scal_src_size_t in_size; __scal_out_size_t out_size; __scal_src_type_t in_type; __scal_out_type_t out_type; __scal_scan_mod_t in_scan; __scal_scan_mod_t out_scan; __disp_scaler_t * scaler; scaler = &(gdisp.scaler[i]); in_scan.field = FALSE; in_scan.bottom = FALSE; in_type.fmt= Scaler_sw_para_to_reg(0,scaler->in_fb.format); in_type.mod= Scaler_sw_para_to_reg(1,scaler->in_fb.mode); in_type.ps= Scaler_sw_para_to_reg(2,(__u8)scaler->in_fb.seq); in_type.byte_seq = 0; in_type.sample_method = 0; in_size.src_width = scaler->in_fb.size.width; in_size.src_height = scaler->in_fb.size.height; in_size.x_off = scaler->src_win.x; in_size.y_off = scaler->src_win.y; in_size.scal_width = scaler->src_win.width; in_size.scal_height = scaler->src_win.height; out_scan.field = (gdisp.screen[sel].iep_status & DE_FLICKER_USED)?FALSE: gdisp.screen[sel].b_out_interlace; out_type.byte_seq = scaler->out_fb.seq; out_type.fmt = scaler->out_fb.format; out_size.width = scaler->out_size.width; out_size.height = scaler->out_size.height; //__inf("vint\n"); DE_SCAL_Set_Scaling_Coef(i, &in_scan, &in_size, &in_type, &out_scan, &out_size, &out_type, scaler->smooth_mode); gdisp.scaler[i].coef_change = FALSE; } } DE_BE_Cfg_Ready(sel); gdisp.screen[sel].have_cfg_reg = TRUE; } #if 0 cur_line = LCDC_get_cur_line(sel, tcon_index); if(cur_line > 5) { DE_INF("%d\n", cur_line); } #endif return ; }
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 ; }