mirror of
https://github.com/hardkernel/linux.git
synced 2026-04-03 11:43:03 +09:00
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:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user