bool _s5p_vlayer_set_dest_size(unsigned long buf_in) { u32 s_w = 0; u32 s_h = 0; u32 d_w = 0; u32 d_h = 0; bool ipc = false; s5p_img_size *size = (s5p_img_size *)buf_in; s5p_tv_vp_err verr; s5ptv_status.vl_basic_param.dest_width = size->img_width; s5ptv_status.vl_basic_param.dest_height = size->img_height; _s5p_vlayer_calc_inner_values(); s_w = s5ptv_status.vl_src_width; s_h = s5ptv_status.vl_src_height; d_w = s5ptv_status.vl_dest_width; d_h = s5ptv_status.vl_dest_height; ipc = s5ptv_status.vl2d_ipc; if (_s5p_vlayer_wait_previous_update()) return false; __s5p_vp_set_src_dest_size(s_w, s_h, d_w, d_h, ipc); verr = __s5p_vp_update(); if (verr != VPROC_NO_ERROR) return false; return true; }
bool _s5p_vlayer_set_dest_position(unsigned long buf_in) { u32 d_ox = 0; u32 d_oy = 0; s5p_img_offset *offset = (s5p_img_offset *)buf_in; s5p_tv_vp_err verr; s5ptv_status.vl_basic_param.dest_offset_x = offset->offset_x; s5ptv_status.vl_basic_param.dest_offset_y = offset->offset_y; _s5p_vlayer_calc_inner_values(); d_ox = s5ptv_status.vl_dest_offset_x; d_oy = s5ptv_status.vl_dest_offset_y; if (_s5p_vlayer_wait_previous_update()) return false; __s5p_vp_set_dest_position(d_ox, d_oy); verr = __s5p_vp_update(); if (verr != VPROC_NO_ERROR) return false; return true; }
bool _s5p_vlayer_set_src_position(unsigned long buf_in) { struct s5p_img_offset *offset = (struct s5p_img_offset *)buf_in; enum s5p_tv_vp_err verr; s5ptv_status.vl_basic_param.src_offset_x = offset->offset_x; s5ptv_status.vl_basic_param.src_offset_y = offset->offset_y; _s5p_vlayer_calc_inner_values(); if (_s5p_vlayer_wait_previous_update()) return false; __s5p_vp_set_src_position(s5ptv_status.vl_src_offset_x, s5ptv_status.vl_src_x_fact_step, s5ptv_status.vl_src_offset_y); verr = __s5p_vp_update(); if (verr != VPROC_NO_ERROR) return false; return true; }
bool _s5p_vlayer_set_bottom_address(unsigned long buf_in) { u32 t_y_addr = 0; u32 t_c_addr = 0; u32 b_y_addr = 0; u32 b_c_addr = 0; u32 img_width = s5ptv_status.vl_basic_param.img_width; struct s5p_video_img_address *addr = (struct s5p_video_img_address *)buf_in; enum s5p_tv_vp_err verr; enum s5p_vp_src_color s_color = s5ptv_status.src_color; if (s_color == VPROC_SRC_COLOR_NV12IW) { s5ptv_status.vl_basic_param.top_y_address = addr->y_address - img_width; s5ptv_status.vl_basic_param.top_c_address = addr->c_address - img_width; } _s5p_vlayer_calc_inner_values(); t_y_addr = s5ptv_status.vl_top_y_address; t_c_addr = s5ptv_status.vl_top_c_address; b_y_addr = s5ptv_status.vl_bottom_y_address; b_c_addr = s5ptv_status.vl_bottom_c_address; if (_s5p_vlayer_wait_previous_update()) return false; verr = __s5p_vp_set_bottom_field_address(b_y_addr, b_c_addr); if (verr != VPROC_NO_ERROR) return false; if (s5ptv_status.src_color == VPROC_SRC_COLOR_NV12IW) { verr = __s5p_vp_set_top_field_address(t_y_addr, t_c_addr); if (verr != VPROC_NO_ERROR) return false; } verr = __s5p_vp_update(); if (verr != VPROC_NO_ERROR) return false; return true; }
bool _s5p_vlayer_set_top_address(unsigned long buf_in) { u32 t_y_addr = 0; u32 t_c_addr = 0; u32 b_y_addr = 0; u32 b_c_addr = 0; struct s5p_video_img_address *addr = (struct s5p_video_img_address *)buf_in; enum s5p_tv_vp_err verr; s5ptv_status.vl_basic_param.top_y_address = addr->y_address; s5ptv_status.vl_basic_param.top_c_address = addr->c_address; _s5p_vlayer_calc_inner_values(); t_y_addr = s5ptv_status.vl_top_y_address; t_c_addr = s5ptv_status.vl_top_c_address; b_y_addr = s5ptv_status.vl_bottom_y_address; b_c_addr = s5ptv_status.vl_bottom_c_address; if (_s5p_vlayer_wait_previous_update()) return false; verr = __s5p_vp_set_top_field_address(t_y_addr, t_c_addr); if (verr != VPROC_NO_ERROR) return false; if (check_input_mode(s5ptv_status.src_color) == INTERLACED) { __s5p_vp_set_field_id(s5ptv_status.field_id); verr = __s5p_vp_set_bottom_field_address(b_y_addr, b_c_addr); if (verr != VPROC_NO_ERROR) return false; } verr = __s5p_vp_update(); if (verr != VPROC_NO_ERROR) return false; return true; }
bool _s5p_vlayer_init_param(unsigned long buf_in) { s5p_tv_status *st = &s5ptv_status; bool i_mode, o_mode; /* 0 for interlaced, 1 for progressive */ switch (st->tvout_param.disp_mode) { case TVOUT_480P_60_16_9: case TVOUT_480P_60_4_3: case TVOUT_576P_50_16_9: case TVOUT_576P_50_4_3: #ifdef CONFIG_CPU_S5PV210 case TVOUT_480P_59: st->vl_csc_type = VPROC_CSC_SD_HD; break; case TVOUT_1080I_50: case TVOUT_1080I_60: case TVOUT_1080P_50: case TVOUT_1080P_30: case TVOUT_1080P_60: case TVOUT_720P_59: case TVOUT_1080I_59: case TVOUT_1080P_59: #endif case TVOUT_720P_50: case TVOUT_720P_60: st->vl_csc_type = VPROC_CSC_HD_SD; break; default: break; } st->vl_csc_control.csc_en = false; i_mode = check_input_mode(st->src_color); o_mode = check_output_mode(st->tvout_param.disp_mode, st->tvout_param.out_mode); /* check o_mode */ if (i_mode == INTERLACED) { /* i to i : line skip 1, ipc 0, auto toggle 0 */ if (o_mode == INTERLACED) { st->vl_op_mode.line_skip = true; st->vl2d_ipc = false; st->vl_op_mode.toggle_id = false; } else { /* i to p : line skip 1, ipc 1, auto toggle 0 */ st->vl_op_mode.line_skip = true; st->vl2d_ipc = true; st->vl_op_mode.toggle_id = false; } } else { /* p to i : line skip 1, ipc 0, auto toggle 0 */ if (o_mode == INTERLACED) { st->vl_op_mode.line_skip = true; st->vl2d_ipc = false; st->vl_op_mode.toggle_id = false; } else { /* p to p : line skip 0, ipc 0, auto toggle 0 */ st->vl_op_mode.line_skip = false; st->vl2d_ipc = false; st->vl_op_mode.toggle_id = false; } } st->vl_op_mode.mem_mode = ((st->src_color == VPROC_SRC_COLOR_NV12) || st->src_color == VPROC_SRC_COLOR_NV12IW) ? VPROC_LINEAR_MODE : VPROC_2D_TILE_MODE; /* st->vl_op_mode.chroma_exp = (pro) ? VPROC_USING_C_TOP : VPROC_USING_C_TOP_BOTTOM; */ st->vl_op_mode.chroma_exp = 0; /* use only top y addr */ _s5p_vlayer_calc_inner_values(); if (st->vl_mode) { VLAYERPRINTK("(ERR) : Default values are already updated\n\r"); return true; } /* Initialize Video Layer Parameters to Default Values */ st->vl_src_x_fact_step = 0; st->field_id = VPROC_TOP_FIELD; st->vl_rate = VPROC_PIXEL_PER_RATE_1_1; st->vl_poly_filter_default = true; st->vl_bypass_post_process = false; st->vl_saturation = 0x80; st->vl_sharpness.th_noise = 0; st->vl_sharpness.sharpness = VPROC_SHARPNESS_NO; st->us_vl_brightness = 0x00; st->vl_contrast = 0x80; st->vl_bright_offset = 0x00; st->vl_csc_control.sub_y_offset_en = false; st->vl_csc_coef_default = true; st->vl_bc_control[0].eq_num = VProc_LINE_EQ_7 + 1; st->vl_bc_control[1].eq_num = VProc_LINE_EQ_7 + 1; st->vl_bc_control[2].eq_num = VProc_LINE_EQ_7 + 1; st->vl_bc_control[3].eq_num = VProc_LINE_EQ_7 + 1; st->vl_bc_control[4].eq_num = VProc_LINE_EQ_7 + 1; st->vl_bc_control[5].eq_num = VProc_LINE_EQ_7 + 1; st->vl_bc_control[6].eq_num = VProc_LINE_EQ_7 + 1; st->vl_bc_control[7].eq_num = VProc_LINE_EQ_7 + 1; st->vl_mode = true; return true; }