diff --git a/drivers/media/vin/tvin/vdin/vdin_ctl.c b/drivers/media/vin/tvin/vdin/vdin_ctl.c index cd993d12e..3eae4b70c 100644 --- a/drivers/media/vin/tvin/vdin/vdin_ctl.c +++ b/drivers/media/vin/tvin/vdin/vdin_ctl.c @@ -587,8 +587,7 @@ void vdin_get_format_convert(struct vdin_dev_s *devp) case TVIN_YUV444: if (IS_HDMI_SRC(port) && scan_mod == TVIN_SCAN_MODE_PROGRESSIVE && !manual_md) { - if (devp->vdin_pc_mode || (devp->game_mode && - (devp->vdin_function_sel & VDIN_AUTO_DST_FMT)) || + if (devp->vdin_pc_mode || devp->game_mode || devp->vdin_function_sel & VDIN_FORCE_444_NOT_CONVERT) format_convert = VDIN_FORMAT_CONVERT_YUV_YUV444; else @@ -619,8 +618,7 @@ void vdin_get_format_convert(struct vdin_dev_s *devp) case TVIN_RGB444: if (IS_HDMI_SRC(port) && scan_mod == TVIN_SCAN_MODE_PROGRESSIVE && !manual_md) { - if (devp->vdin_pc_mode || (devp->game_mode && - (devp->vdin_function_sel & VDIN_AUTO_DST_FMT)) || + if (devp->vdin_pc_mode || devp->game_mode || devp->vdin_function_sel & VDIN_FORCE_444_NOT_CONVERT) format_convert = VDIN_FORMAT_CONVERT_RGB_YUV444; else diff --git a/drivers/media/vin/tvin/vdin/vdin_debug.c b/drivers/media/vin/tvin/vdin/vdin_debug.c index e6eb9930e..1f34b3592 100644 --- a/drivers/media/vin/tvin/vdin/vdin_debug.c +++ b/drivers/media/vin/tvin/vdin/vdin_debug.c @@ -5017,6 +5017,14 @@ start_chk: devp->debug.reg_addr = temp; pr_info("vdin%d,reg_addr = %#x\n", devp->index, devp->debug.reg_addr); + } else if (!strcmp(parm[0], "bypass_game_dyn_fmt")) { + if (parm[1] && (kstrtouint(parm[1], 0, &temp) == 0)) { + if (temp) + devp->debug.bypass_game_dyn_fmt = true; + else + devp->debug.bypass_game_dyn_fmt = false; + pr_info("bypass_game_dyn_fmt:%d\n", devp->debug.bypass_game_dyn_fmt); + } } #endif else if (!strcmp(parm[0], "state")) { diff --git a/drivers/media/vin/tvin/vdin/vdin_drv.c b/drivers/media/vin/tvin/vdin/vdin_drv.c index 67e346d17..adf9298ee 100644 --- a/drivers/media/vin/tvin/vdin/vdin_drv.c +++ b/drivers/media/vin/tvin/vdin/vdin_drv.c @@ -717,7 +717,7 @@ static inline void vdin_game_mode_dynamic_check(struct vdin_dev_s *devp) void vdin_game_mode_reconfig(struct vdin_dev_s *devp) { - if (!(devp->vdin_function_sel & VDIN_AUTO_DST_FMT)) + if (devp->debug.bypass_game_dyn_fmt) return; /* 444 in:game on,output 444,game off,output 422 */ @@ -741,7 +741,7 @@ void vdin_game_mode_reconfig(struct vdin_dev_s *devp) void vdin_dyn_fmt(struct vdin_dev_s *devp) { - if (!(devp->vdin_function_sel & VDIN_AUTO_DST_FMT)) + if (devp->debug.bypass_game_dyn_fmt) return; if (!vdin_is_444_input(devp->prop.color_format)) { diff --git a/drivers/media/vin/tvin/vdin/vdin_drv.h b/drivers/media/vin/tvin/vdin/vdin_drv.h index 6e37245a5..ac4bb416b 100644 --- a/drivers/media/vin/tvin/vdin/vdin_drv.h +++ b/drivers/media/vin/tvin/vdin/vdin_drv.h @@ -353,7 +353,6 @@ struct match_data_s { #define VDIN_MEM_MEMSET_EN BIT(23) #define VDIN_CROP_SEL BIT(24) //0-vdin cut win;1-vdin set src_crop in vf #define VDIN_AFD_DISABLE BIT(25) //0-enable AFD;1-disable AFD -#define VDIN_AUTO_DST_FMT BIT(26) /* vdin_function_sel control bits end */ @@ -739,6 +738,7 @@ struct vdin_debug_s { unsigned int ignore_vdin_ioctl; unsigned int force_disp_mode; unsigned int reg_addr; + bool bypass_game_dyn_fmt; }; struct vdin_dv_s {