bool _s5p_tv_if_init_vm_reg(void) { u8 i = 0; s5p_tv_vmx_err merr = 0; s5p_tv_status *st = &s5ptv_status; s5p_tv_o_mode out_mode = st->tvout_param.out_mode; s5p_tv_disp_mode disp_mode = st->tvout_param.disp_mode; bool cr_en = st->bg_dither.cr_dither_en; bool cb_en = st->bg_dither.cr_dither_en; bool y_en = st->bg_dither.cr_dither_en; s5p_vmx_burst_mode burst = st->grp_burst; s5p_endian_type endian = st->grp_endian; merr = __s5p_vm_init_status_reg(burst,endian); if (merr != VMIXER_NO_ERROR) { return false; } merr = __s5p_vm_init_display_mode(disp_mode,out_mode); if (merr != VMIXER_NO_ERROR) { return false; } __s5p_vm_init_bg_dither_enable(cr_en,cb_en,y_en); for(i = VMIXER_BG_COLOR_0; i <= VMIXER_BG_COLOR_2; i++) { merr = __s5p_vm_init_bg_color(i, st->bg_color[i].color_y, st->bg_color[i].color_cb, st->bg_color[i].color_cr); if (merr != VMIXER_NO_ERROR) return false; } switch (out_mode) { case TVOUT_OUTPUT_COMPOSITE: case TVOUT_OUTPUT_SVIDEO: case TVOUT_OUTPUT_COMPONENT_YPBPR_INERLACED: case TVOUT_OUTPUT_COMPONENT_YPBPR_PROGRESSIVE: case TVOUT_OUTPUT_COMPONENT_RGB_PROGRESSIVE: __s5p_vm_init_csc_coef_default(VMIXER_CSC_RGB_TO_YUV601_FR); break; case TVOUT_OUTPUT_HDMI_RGB: case TVOUT_OUTPUT_HDMI: case TVOUT_OUTPUT_DVI: switch (disp_mode) { case TVOUT_NTSC_M : case TVOUT_PAL_BDGHI: case TVOUT_PAL_M: case TVOUT_PAL_N: case TVOUT_PAL_NC: case TVOUT_PAL_60: case TVOUT_NTSC_443: break; case TVOUT_480P_60_16_9: case TVOUT_480P_60_4_3: #ifdef CONFIG_CPU_S5PV210 // SPMOON_TEST case TVOUT_480P_59: #endif case TVOUT_576P_50_16_9: case TVOUT_576P_50_4_3: __s5p_vm_init_csc_coef_default(VMIXER_CSC_RGB_TO_YUV601_FR); break; case TVOUT_720P_60: case TVOUT_720P_50: #ifdef CONFIG_CPU_S5PV210 // SPMOON_TEST case TVOUT_720P_59: case TVOUT_1080I_60: case TVOUT_1080I_59: case TVOUT_1080I_50: case TVOUT_1080P_60: case TVOUT_1080P_30: case TVOUT_1080P_59: case TVOUT_1080P_50: #endif __s5p_vm_init_csc_coef_default(VMIXER_CSC_RGB_TO_YUV709_FR); break; } break; default: TVOUTIFPRINTK("invalid tvout_param.out_mode parameter(%d)\n\r", out_mode); return false; break; } __s5p_vm_start(); return true; }
bool _s5p_grp_start(enum s5p_tv_vmx_layer vm_layer) { enum s5p_tv_vmx_err merr; struct s5p_tv_status *st = &s5ptv_status; if (!(st->grp_layer_enable[0] || st->grp_layer_enable[1])) { merr = __s5p_vm_init_status_reg(st->grp_burst, st->grp_endian); if (merr != VMIXER_NO_ERROR) return false; } #ifdef CONFIG_CPU_S5PC100 merr = __s5p_vm_init_layer(vm_layer, true, s5ptv_overlay[vm_layer].win_blending, s5ptv_overlay[vm_layer].win.global_alpha, s5ptv_overlay[vm_layer].priority, s5ptv_overlay[vm_layer].fb.fmt.pixelformat, s5ptv_overlay[vm_layer].blank_change, s5ptv_overlay[vm_layer].pixel_blending, s5ptv_overlay[vm_layer].pre_mul, s5ptv_overlay[vm_layer].blank_color, s5ptv_overlay[vm_layer].base_addr, s5ptv_overlay[vm_layer].fb.fmt.bytesperline, s5ptv_overlay[vm_layer].win.w.width, s5ptv_overlay[vm_layer].win.w.height, s5ptv_overlay[vm_layer].win.w.left, s5ptv_overlay[vm_layer].win.w.top, s5ptv_overlay[vm_layer].dst_rect.left, s5ptv_overlay[vm_layer].dst_rect.top); #endif #ifdef CONFIG_CPU_S5PV210 merr = __s5p_vm_init_layer(s5ptv_status.tvout_param.disp_mode, vm_layer, true, s5ptv_overlay[vm_layer].win_blending, s5ptv_overlay[vm_layer].win.global_alpha, s5ptv_overlay[vm_layer].priority, s5ptv_overlay[vm_layer].fb.fmt.pixelformat, s5ptv_overlay[vm_layer].blank_change, s5ptv_overlay[vm_layer].pixel_blending, s5ptv_overlay[vm_layer].pre_mul, s5ptv_overlay[vm_layer].blank_color, s5ptv_overlay[vm_layer].base_addr, s5ptv_overlay[vm_layer].fb.fmt.bytesperline, s5ptv_overlay[vm_layer].win.w.width, s5ptv_overlay[vm_layer].win.w.height, s5ptv_overlay[vm_layer].win.w.left, s5ptv_overlay[vm_layer].win.w.top, s5ptv_overlay[vm_layer].dst_rect.left, s5ptv_overlay[vm_layer].dst_rect.top, s5ptv_overlay[vm_layer].dst_rect.width, s5ptv_overlay[vm_layer].dst_rect.height); #endif if (merr != VMIXER_NO_ERROR) { GRPPRINTK("can't initialize layer(%d)\n\r", merr); return false; } __s5p_vm_start(); st->grp_layer_enable[vm_layer] = true; GRPPRINTK("()\n\r"); return true; }