mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
hdmirx: improve the snow noise issue during timing switching
PD#166184: hdmirx: improve the snow noise issue during timing switching Change-Id: If143d418758f3b0d4895a7ecab87cebe98d8c457 Signed-off-by: Lei Yang <lei.yang@amlogic.com>
This commit is contained in:
@@ -119,7 +119,7 @@ bool en_4096_2_3840;
|
||||
int en_4k_2_2k;
|
||||
int en_4k_timing = 1;
|
||||
bool hdmi_cec_en;
|
||||
int skip_frame_cnt = 1;
|
||||
int vdin_drop_frame_cnt = 1;
|
||||
/* suspend_pddq_sel:
|
||||
* 0: keep phy on when suspend(don't need phy init when
|
||||
* resume), it doesn't work now because phy VDDIO_3.3V
|
||||
@@ -811,7 +811,7 @@ void hdmirx_get_sig_property(struct tvin_frontend_s *fe,
|
||||
hdmirx_set_timing_info(prop);
|
||||
hdmirx_get_hdr_info(prop);
|
||||
hdmirx_get_vsi_info(prop);
|
||||
prop->skip_vf_num = skip_frame_cnt;
|
||||
prop->skip_vf_num = vdin_drop_frame_cnt;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
//#include "hdmi_rx_edid.h"
|
||||
|
||||
|
||||
#define RX_VER0 "ver.2018-05-11"
|
||||
#define RX_VER0 "ver.2018-05-17"
|
||||
/*
|
||||
*
|
||||
*
|
||||
@@ -393,6 +393,7 @@ extern struct device *hdmirx_dev;
|
||||
extern struct rx_s rx;
|
||||
extern struct reg_map reg_maps[MAP_ADDR_MODULE_NUM];
|
||||
extern void rx_tasklet_handler(unsigned long arg);
|
||||
extern void skip_frame(unsigned int cnt);
|
||||
|
||||
|
||||
/* reg */
|
||||
@@ -421,7 +422,7 @@ extern bool en_4096_2_3840;
|
||||
extern int en_4k_2_2k;
|
||||
extern bool hdmi_cec_en;
|
||||
extern int hdmi_yuv444_enable;
|
||||
extern int skip_frame_cnt;
|
||||
extern int vdin_drop_frame_cnt;
|
||||
/* debug */
|
||||
extern bool hdcp_enable;
|
||||
extern int log_level;
|
||||
|
||||
@@ -184,7 +184,7 @@ static int stable_check_lvl = 0x7df;
|
||||
* Compared with other brands TV, delay 1.5S to avoid this noise.
|
||||
*/
|
||||
static int edid_update_delay = 150;
|
||||
|
||||
int skip_frame_cnt = 1;
|
||||
static bool hdcp22_reauth_enable;
|
||||
unsigned int edid_update_flag;
|
||||
static bool hdcp22_stop_auth_enable;
|
||||
@@ -291,6 +291,7 @@ static int hdmi_rx_ctrl_irq_handler(void)
|
||||
|
||||
if (intr_hdcp22 != 0) {
|
||||
hdmirx_wr_dwc(DWC_HDMI2_ICLR, intr_hdcp22);
|
||||
skip_frame(skip_frame_cnt);
|
||||
if (log_level & HDCP_LOG)
|
||||
rx_pr("intr=%#x\n", intr_hdcp22);
|
||||
switch (intr_hdcp22) {
|
||||
@@ -1503,6 +1504,8 @@ int rx_set_global_variable(const char *buf, int size)
|
||||
return pr_var(new_hdr_lum, index);
|
||||
if (set_pr_var(tmpbuf, skip_frame_cnt, value, &index, ret))
|
||||
return pr_var(skip_frame_cnt, index);
|
||||
if (set_pr_var(tmpbuf, vdin_drop_frame_cnt, value, &index, ret))
|
||||
return pr_var(vdin_drop_frame_cnt, index);
|
||||
#ifndef USE_NEW_FSM_METHODE
|
||||
if (set_pr_var(tmpbuf, enable_hpd_reset, value, &index, ret))
|
||||
return pr_var(enable_hpd_reset, index);
|
||||
@@ -1608,6 +1611,7 @@ void rx_get_global_variable(const char *buf)
|
||||
pr_var(port_map, i++);
|
||||
pr_var(new_hdr_lum, i++);
|
||||
pr_var(skip_frame_cnt, i++);
|
||||
pr_var(vdin_drop_frame_cnt, i++);
|
||||
#ifndef USE_NEW_FSM_METHODE
|
||||
pr_var(enable_hpd_reset, i++);
|
||||
pr_var(sig_unstable_reset_hpd_max, i++);
|
||||
@@ -1618,12 +1622,13 @@ void rx_get_global_variable(const char *buf)
|
||||
pr_var(hdcp_none_wait_max, i++);
|
||||
}
|
||||
|
||||
void skip_frame(void)
|
||||
void skip_frame(unsigned int cnt)
|
||||
{
|
||||
if (rx.state == FSM_SIG_READY)
|
||||
if (rx.state == FSM_SIG_READY) {
|
||||
rx.skip = (1000 * 100 / rx.pre.frame_rate / 10) + 1;
|
||||
if (log_level & VIDEO_LOG)
|
||||
rx_pr("rx.skip = %d\n", rx.skip);
|
||||
rx.skip = cnt * rx.skip;
|
||||
}
|
||||
rx_pr("rx.skip = %d", rx.skip);
|
||||
}
|
||||
|
||||
/***********************
|
||||
@@ -1963,7 +1968,7 @@ void rx_main_state_machine(void)
|
||||
/* video info change */
|
||||
if ((!is_tmds_valid()) ||
|
||||
(!rx_is_timing_stable())) {
|
||||
skip_frame();
|
||||
skip_frame(skip_frame_cnt);
|
||||
if (++sig_unready_cnt >= sig_unready_max) {
|
||||
/*sig_lost_lock_cnt = 0;*/
|
||||
rx.unready_timestamp = rx.timestamp;
|
||||
@@ -2266,7 +2271,7 @@ void rx_main_state_machine(void)
|
||||
/* video info change */
|
||||
if ((is_tmds_valid() == false) ||
|
||||
(rx_is_timing_stable() == false)) {
|
||||
skip_frame();
|
||||
skip_frame(skip_frame_cnt);
|
||||
if (++sig_unready_cnt >= sig_unready_max) {
|
||||
/*sig_lost_lock_cnt = 0;*/
|
||||
sig_unready_cnt = 0;
|
||||
|
||||
@@ -1312,6 +1312,9 @@ irqreturn_t vdin_isr(int irq, void *dev_id)
|
||||
pre_prop->vdin_hdr_Flag = prop->vdin_hdr_Flag;
|
||||
pre_prop->color_fmt_range = prop->color_fmt_range;
|
||||
pre_prop->dest_cfmt = prop->dest_cfmt;
|
||||
ignore_frames = 0;
|
||||
vdin_drop_cnt++;
|
||||
goto irq_handled;
|
||||
}
|
||||
/* change cutwindow */
|
||||
if ((devp->cutwindow_cfg != 0) && (devp->auto_cutwindow_en == 1)) {
|
||||
|
||||
Reference in New Issue
Block a user