mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +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)) {
|
if ((port >= TVIN_PORT_CVBS0) && (port <= TVIN_PORT_CVBS3)) {
|
||||||
ret = tvafe_cvd2_no_sig(&tvafe->cvd2, &devp->mem);
|
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 */
|
/* normal sigal & adc reg error, reload source mux */
|
||||||
if (tvafe->cvd2.info.adc_reload_en && !ret)
|
if (tvafe->cvd2.info.adc_reload_en && !ret)
|
||||||
tvafe_set_source_muxing(port, devp->pinmux);
|
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);
|
W_APB_REG(ACD_REG_2E, tmp);
|
||||||
scene_colorful_old = 0;
|
scene_colorful_old = 0;
|
||||||
if (cvd_dbg_en)
|
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);
|
__func__, l_ave, lines->de_offset, tmp);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (lines->de_offset > 0) {
|
if (lines->de_offset > 0) {
|
||||||
tmp = ((TVAFE_CVD2_PAL_DE_START -
|
tmp = ((TVAFE_CVD2_PAL_DE_START -
|
||||||
lines->de_offset) << 16) |
|
lines->de_offset + 1) << 16) |
|
||||||
(288 + TVAFE_CVD2_PAL_DE_START -
|
(288 + TVAFE_CVD2_PAL_DE_START -
|
||||||
lines->de_offset);
|
lines->de_offset + 1);
|
||||||
W_APB_REG(ACD_REG_2E, tmp);
|
W_APB_REG(ACD_REG_2E, tmp);
|
||||||
scene_colorful_old = 0;
|
scene_colorful_old = 0;
|
||||||
if (cvd_dbg_en)
|
if (cvd_dbg_en)
|
||||||
@@ -1994,6 +1994,12 @@ static void tvafe_cvd2_reinit(struct tvafe_cvd2_s *cvd2)
|
|||||||
#ifdef TVAFE_SET_CVBS_PGA_EN
|
#ifdef TVAFE_SET_CVBS_PGA_EN
|
||||||
tvafe_cvd2_reset_pga();
|
tvafe_cvd2_reset_pga();
|
||||||
#endif
|
#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 */
|
/* init variable */
|
||||||
memset(&cvd2->info, 0, sizeof(struct tvafe_cvd2_info_s));
|
memset(&cvd2->info, 0, sizeof(struct tvafe_cvd2_info_s));
|
||||||
cvd2->cvd2_init_en = true;
|
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;
|
cvd2->info.hs_adj_level = 0;
|
||||||
acd_h = acd_h_back;
|
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*/
|
/*0x8e035e is debug test result*/
|
||||||
if (acd_h_config)
|
if (acd_h_config)
|
||||||
W_APB_REG(ACD_REG_2D, acd_h_config);
|
W_APB_REG(ACD_REG_2D, acd_h_config);
|
||||||
acd_h = acd_h_back;
|
|
||||||
}
|
}
|
||||||
/*only for pal-i*/
|
/*only for pal-i*/
|
||||||
void tvafe_snow_config_acd_resume(void)
|
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 ldim_set_matrix(int *data, int reg_sel);
|
||||||
extern void tvafe_snow_config(unsigned int onoff);
|
extern void tvafe_snow_config(unsigned int onoff);
|
||||||
extern void tvafe_snow_config_clamp(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_reg(struct vdin_dev_s *devp);
|
||||||
extern void vdin_vf_unreg(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);
|
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;
|
++sm_p->state_cnt;
|
||||||
#ifdef CONFIG_AMLOGIC_MEDIA_TVIN_AFE
|
#ifdef CONFIG_AMLOGIC_MEDIA_TVIN_AFE
|
||||||
if ((port == TVIN_PORT_CVBS3) &&
|
if ((port == TVIN_PORT_CVBS3) &&
|
||||||
(devp->flags & VDIN_FLAG_SNOW_FLAG)) {
|
(devp->flags & VDIN_FLAG_SNOW_FLAG))
|
||||||
tvafe_snow_config_clamp(1);
|
tvafe_snow_config_clamp(1);
|
||||||
/*fix black side when config atv snow*/
|
|
||||||
tvafe_snow_config_acd();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
if (sm_ops->nosig(devp->frontend)) {
|
if (sm_ops->nosig(devp->frontend)) {
|
||||||
sm_p->exit_nosig_cnt = 0;
|
sm_p->exit_nosig_cnt = 0;
|
||||||
@@ -475,11 +472,8 @@ void tvin_smr(struct vdin_dev_s *devp)
|
|||||||
devp->unstable_flag = true;
|
devp->unstable_flag = true;
|
||||||
#ifdef CONFIG_AMLOGIC_MEDIA_TVIN_AFE
|
#ifdef CONFIG_AMLOGIC_MEDIA_TVIN_AFE
|
||||||
if ((port == TVIN_PORT_CVBS3) &&
|
if ((port == TVIN_PORT_CVBS3) &&
|
||||||
(devp->flags & VDIN_FLAG_SNOW_FLAG)) {
|
(devp->flags & VDIN_FLAG_SNOW_FLAG))
|
||||||
tvafe_snow_config_clamp(0);
|
tvafe_snow_config_clamp(0);
|
||||||
/*fix black side when config atv snow*/
|
|
||||||
tvafe_snow_config_acd_resume();
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
if (sm_ops->nosig(devp->frontend)) {
|
if (sm_ops->nosig(devp->frontend)) {
|
||||||
nosig = true;
|
nosig = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user