tvafe: fix black border for atv [1/1]

PD#SWPL-3573

Problem:
appear black border after unplug/plug signal

Solution:
reset de when nosignal
restore acd hsync when signal unstable

Verify:
verified by x301

Change-Id: Ia9e2e9dfb326061bd3b9b6f9a02be0d935cdf06f
Signed-off-by: Nian Jing <nian.jing@amlogic.com>
This commit is contained in:
Nian Jing
2018-12-25 16:24:04 +08:00
committed by Jianxin Pan
parent 029980f85f
commit 2afb3d7ce4
4 changed files with 31 additions and 14 deletions

View File

@@ -645,6 +645,17 @@ bool tvafe_is_nosig(struct tvin_frontend_s *fe)
if ((port >= TVIN_PORT_CVBS0) && (port <= TVIN_PORT_CVBS3)) {
ret = tvafe_cvd2_no_sig(&tvafe->cvd2, &devp->mem);
/*fix black side when config atv snow*/
if (ret && (port == TVIN_PORT_CVBS3) &&
(devp->flags & TVAFE_FLAG_DEV_SNOW_FLAG) &&
(tvafe->cvd2.config_fmt == TVIN_SIG_FMT_CVBS_PAL_I) &&
(tvafe->cvd2.info.state != TVAFE_CVD2_STATE_FIND))
tvafe_snow_config_acd();
else if ((tvafe->cvd2.config_fmt == TVIN_SIG_FMT_CVBS_PAL_I) &&
(tvafe->cvd2.info.state == TVAFE_CVD2_STATE_FIND) &&
(port == TVIN_PORT_CVBS3))
tvafe_snow_config_acd_resume();
/* normal sigal & adc reg error, reload source mux */
if (tvafe->cvd2.info.adc_reload_en && !ret)
tvafe_set_source_muxing(port, devp->pinmux);

View File

@@ -1872,15 +1872,15 @@ static void tvafe_cvd2_auto_de(struct tvafe_cvd2_s *cvd2)
W_APB_REG(ACD_REG_2E, tmp);
scene_colorful_old = 0;
if (cvd_dbg_en)
tvafe_pr_info("%s: vlines:%d, de_offset:%d tmp:%x\n",
tvafe_pr_info("%s: lrg vlines:%d, de_offset:%d tmp:%x\n",
__func__, l_ave, lines->de_offset, tmp);
}
} else {
if (lines->de_offset > 0) {
tmp = ((TVAFE_CVD2_PAL_DE_START -
lines->de_offset) << 16) |
lines->de_offset + 1) << 16) |
(288 + TVAFE_CVD2_PAL_DE_START -
lines->de_offset);
lines->de_offset + 1);
W_APB_REG(ACD_REG_2E, tmp);
scene_colorful_old = 0;
if (cvd_dbg_en)
@@ -1994,6 +1994,12 @@ static void tvafe_cvd2_reinit(struct tvafe_cvd2_s *cvd2)
#ifdef TVAFE_SET_CVBS_PGA_EN
tvafe_cvd2_reset_pga();
#endif
/*pali to nosignal,restore default vstart-end after auto de*/
if (cvd2->config_fmt == TVIN_SIG_FMT_CVBS_PAL_I) {
W_APB_REG(ACD_REG_2E, 0x170137);
if (cvd_dbg_en)
pr_info("[tvafe..] %s: reset auto de.\n", __func__);
}
/* init variable */
memset(&cvd2->info, 0, sizeof(struct tvafe_cvd2_info_s));
cvd2->cvd2_init_en = true;
@@ -2320,6 +2326,15 @@ inline void tvafe_cvd2_adj_hs(struct tvafe_cvd2_s *cvd2,
cvd2->info.hs_adj_level = 0;
acd_h = acd_h_back;
}
} else {
/*signal unstable,set default value*/
W_APB_REG(ACD_REG_2D, acd_h_back);
W_APB_BIT(CVD2_ACTIVE_VIDEO_HSTART, cvd_2e,
HACTIVE_START_BIT, HACTIVE_START_WID);
W_APB_BIT(ACD_REG_28, acd_128, 16, 5);
cvd2->info.hs_adj_en = 0;
cvd2->info.hs_adj_level = 0;
acd_h = acd_h_back;
}
}
@@ -2637,7 +2652,6 @@ void tvafe_snow_config_acd(void)
/*0x8e035e is debug test result*/
if (acd_h_config)
W_APB_REG(ACD_REG_2D, acd_h_config);
acd_h = acd_h_back;
}
/*only for pal-i*/
void tvafe_snow_config_acd_resume(void)

View File

@@ -377,8 +377,6 @@ extern void ldim_get_matrix(int *data, int reg_sel);
extern void ldim_set_matrix(int *data, int reg_sel);
extern void tvafe_snow_config(unsigned int onoff);
extern void tvafe_snow_config_clamp(unsigned int onoff);
extern void tvafe_snow_config_acd(void);
extern void tvafe_snow_config_acd_resume(void);
extern void vdin_vf_reg(struct vdin_dev_s *devp);
extern void vdin_vf_unreg(struct vdin_dev_s *devp);
extern void vdin_pause_dec(struct vdin_dev_s *devp);

View File

@@ -332,11 +332,8 @@ void tvin_smr(struct vdin_dev_s *devp)
++sm_p->state_cnt;
#ifdef CONFIG_AMLOGIC_MEDIA_TVIN_AFE
if ((port == TVIN_PORT_CVBS3) &&
(devp->flags & VDIN_FLAG_SNOW_FLAG)) {
(devp->flags & VDIN_FLAG_SNOW_FLAG))
tvafe_snow_config_clamp(1);
/*fix black side when config atv snow*/
tvafe_snow_config_acd();
}
#endif
if (sm_ops->nosig(devp->frontend)) {
sm_p->exit_nosig_cnt = 0;
@@ -475,11 +472,8 @@ void tvin_smr(struct vdin_dev_s *devp)
devp->unstable_flag = true;
#ifdef CONFIG_AMLOGIC_MEDIA_TVIN_AFE
if ((port == TVIN_PORT_CVBS3) &&
(devp->flags & VDIN_FLAG_SNOW_FLAG)) {
(devp->flags & VDIN_FLAG_SNOW_FLAG))
tvafe_snow_config_clamp(0);
/*fix black side when config atv snow*/
tvafe_snow_config_acd_resume();
}
#endif
if (sm_ops->nosig(devp->frontend)) {
nosig = true;