mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
vdin: fix black screen caused by vdin_check_vs
PD#160716: vdin: fix black screen caused by vdin_check_vs 1.add vdin msrclk in dts 2.remove vdin_check_vf Change-Id: Ie0a63821f2eea85cf8f67202b067e4f2b491066c Signed-off-by: Bencheng Jing <bencheng.jing@amlogic.com>
This commit is contained in:
@@ -483,9 +483,9 @@
|
||||
cma_size = <190>;
|
||||
interrupts = <0 83 1>;
|
||||
rdma-irq = <2>;
|
||||
//clocks = <&clock CLK_FPLL_DIV5>,
|
||||
// <&clock CLK_VDIN_MEAS_CLK>;
|
||||
//clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
clocks = <&clkc CLKID_FCLK_DIV5>,
|
||||
<&clkc CLKID_VDIN_MEAS_COMP>;
|
||||
clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
vdin_id = <0>;
|
||||
/* vdin write mem color depth support:
|
||||
* bit0:support 8bit
|
||||
@@ -506,9 +506,9 @@
|
||||
flag_cma = <0>;/*1:share with codec_mm;0:cma alone*/
|
||||
interrupts = <0 85 1>;
|
||||
rdma-irq = <4>;
|
||||
//clocks = <&clock CLK_FPLL_DIV5>,
|
||||
// <&clock CLK_VDIN_MEAS_CLK>;
|
||||
//clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
clocks = <&clkc CLKID_FCLK_DIV5>,
|
||||
<&clkc CLKID_VDIN_MEAS_COMP>;
|
||||
clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
vdin_id = <1>;
|
||||
/* vdin write mem color depth support:
|
||||
* bit0:support 8bit
|
||||
|
||||
@@ -484,9 +484,9 @@
|
||||
cma_size = <190>;
|
||||
interrupts = <0 83 1>;
|
||||
rdma-irq = <2>;
|
||||
//clocks = <&clock CLK_FPLL_DIV5>,
|
||||
// <&clock CLK_VDIN_MEAS_CLK>;
|
||||
//clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
clocks = <&clkc CLKID_FCLK_DIV5>,
|
||||
<&clkc CLKID_VDIN_MEAS_COMP>;
|
||||
clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
vdin_id = <0>;
|
||||
/* vdin write mem color depth support:
|
||||
* bit0:support 8bit
|
||||
@@ -507,9 +507,9 @@
|
||||
flag_cma = <0>;/*1:share with codec_mm;0:cma alone*/
|
||||
interrupts = <0 85 1>;
|
||||
rdma-irq = <4>;
|
||||
//clocks = <&clock CLK_FPLL_DIV5>,
|
||||
// <&clock CLK_VDIN_MEAS_CLK>;
|
||||
//clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
clocks = <&clkc CLKID_FCLK_DIV5>,
|
||||
<&clkc CLKID_VDIN_MEAS_COMP>;
|
||||
clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
vdin_id = <1>;
|
||||
/* vdin write mem color depth support:
|
||||
* bit0:support 8bit
|
||||
|
||||
@@ -484,9 +484,9 @@
|
||||
cma_size = <190>;
|
||||
interrupts = <0 83 1>;
|
||||
rdma-irq = <2>;
|
||||
//clocks = <&clock CLK_FPLL_DIV5>,
|
||||
// <&clock CLK_VDIN_MEAS_CLK>;
|
||||
//clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
clocks = <&clkc CLKID_FCLK_DIV5>,
|
||||
<&clkc CLKID_VDIN_MEAS_COMP>;
|
||||
clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
vdin_id = <0>;
|
||||
/* vdin write mem color depth support:
|
||||
* bit0:support 8bit
|
||||
@@ -507,9 +507,9 @@
|
||||
flag_cma = <0>;/*1:share with codec_mm;0:cma alone*/
|
||||
interrupts = <0 85 1>;
|
||||
rdma-irq = <4>;
|
||||
//clocks = <&clock CLK_FPLL_DIV5>,
|
||||
// <&clock CLK_VDIN_MEAS_CLK>;
|
||||
//clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
clocks = <&clkc CLKID_FCLK_DIV5>,
|
||||
<&clkc CLKID_VDIN_MEAS_COMP>;
|
||||
clock-names = "fclk_div5", "cts_vdin_meas_clk";
|
||||
vdin_id = <1>;
|
||||
/* vdin write mem color depth support:
|
||||
* bit0:support 8bit
|
||||
|
||||
@@ -145,16 +145,6 @@ static unsigned int vpu_reg_27af = 0x3;
|
||||
#define VDIN_PIXELCLK_4K_30HZ 248832000
|
||||
#define VDIN_PIXELCLK_4K_60HZ 497664000
|
||||
|
||||
|
||||
/* check hcnt/vcnt after N*vs. */
|
||||
#define VDIN_WAIT_VALID_VS 2
|
||||
/* ignore n*vs which have wrong data. */
|
||||
#define VDIN_IGNORE_VS_CNT 20
|
||||
/* the diff value between normal/bad data */
|
||||
#define VDIN_MEAS_HSCNT_DIFF 0x50
|
||||
/* the diff value between normal/bad data */
|
||||
#define VDIN_MEAS_VSCNT_DIFF 0x50
|
||||
|
||||
#if 0/*ndef VDIN_DEBUG*/
|
||||
#undef pr_info
|
||||
#define pr_info(fmt, ...)
|
||||
@@ -2743,40 +2733,6 @@ bool vdin_write_done_check(unsigned int offset, struct vdin_dev_s *devp)
|
||||
}
|
||||
|
||||
#endif
|
||||
/* check invalid vs to avoid screen flicker */
|
||||
bool vdin_check_vs(struct vdin_dev_s *devp)
|
||||
{
|
||||
bool ret = false;
|
||||
unsigned int dh = 0, dv = 0;
|
||||
|
||||
/* check vs after n*vs avoid unstable signal after TVIN_IOC_START_DEC*/
|
||||
if (devp->vs_cnt_valid++ >= VDIN_WAIT_VALID_VS)
|
||||
devp->vs_cnt_valid = VDIN_WAIT_VALID_VS;
|
||||
|
||||
/* check hcnt64/cycle to find format changed */
|
||||
if (devp->hcnt64 < devp->hcnt64_tag)
|
||||
dh = devp->hcnt64_tag - devp->hcnt64;
|
||||
else
|
||||
dh = devp->hcnt64 - devp->hcnt64_tag;
|
||||
if (devp->cycle < devp->cycle_tag)
|
||||
dv = devp->cycle_tag - devp->cycle;
|
||||
else
|
||||
dv = devp->cycle - devp->cycle_tag;
|
||||
if ((dh > VDIN_MEAS_HSCNT_DIFF) || (dv > VDIN_MEAS_VSCNT_DIFF)) {
|
||||
devp->hcnt64_tag = devp->hcnt64;
|
||||
devp->cycle_tag = devp->cycle;
|
||||
if (devp->vs_cnt_valid >= VDIN_WAIT_VALID_VS)
|
||||
devp->vs_cnt_ignore = VDIN_IGNORE_VS_CNT;
|
||||
}
|
||||
|
||||
/* Do not send data of format changed to video buffer */
|
||||
if (devp->vs_cnt_ignore) {
|
||||
devp->vs_cnt_ignore--;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
/*
|
||||
cycle = delta_stamp = ((1/fps)/(1/msr_clk))*(vsync_span+1)
|
||||
msr_clk/fps unit is HZ
|
||||
|
||||
@@ -150,7 +150,6 @@ extern void vdin_set_matrixs(struct vdin_dev_s *devp, unsigned char no,
|
||||
extern bool vdin_check_cycle(struct vdin_dev_s *devp);
|
||||
extern bool vdin_write_done_check(unsigned int offset,
|
||||
struct vdin_dev_s *devp);
|
||||
extern bool vdin_check_vs(struct vdin_dev_s *devp);
|
||||
extern void vdin_calculate_duration(struct vdin_dev_s *devp);
|
||||
extern void vdin_wr_reverse(unsigned int offset, bool hreverse,
|
||||
bool vreverse);
|
||||
|
||||
@@ -499,11 +499,7 @@ void vdin_start_dec(struct vdin_dev_s *devp)
|
||||
/* devp->stamp_valid = false; */
|
||||
devp->stamp = 0;
|
||||
devp->cycle = 0;
|
||||
devp->cycle_tag = 0;
|
||||
devp->hcnt64 = 0;
|
||||
devp->hcnt64_tag = 0;
|
||||
devp->vs_cnt_valid = 0;
|
||||
devp->vs_cnt_ignore = 0;
|
||||
|
||||
memset(&devp->parm.histgram[0], 0, sizeof(unsigned short) * 64);
|
||||
|
||||
@@ -1253,16 +1249,6 @@ irqreturn_t vdin_isr(int irq, void *dev_id)
|
||||
|
||||
devp->hcnt64 = vdin_get_meas_hcnt64(offset);
|
||||
|
||||
/* ignore invalid vs base on the continuous fields
|
||||
* different cnt to void screen flicker
|
||||
*/
|
||||
if (vdin_check_vs(devp) &&
|
||||
(!(isr_flag & VDIN_BYPASS_VSYNC_CHECK))
|
||||
&& (!(devp->flags & VDIN_FLAG_SNOW_FLAG))) {
|
||||
devp->vdin_irq_flag = 5;
|
||||
vdin_drop_cnt++;
|
||||
goto irq_handled;
|
||||
}
|
||||
sm_ops = devp->frontend->sm_ops;
|
||||
|
||||
last_field_type = devp->curr_field_type;
|
||||
@@ -2435,7 +2421,6 @@ static int vdin_drv_probe(struct platform_device *pdev)
|
||||
} else {
|
||||
clk_set_parent(vdevp->msr_clk, clk);
|
||||
vdevp->msr_clk_val = clk_get_rate(vdevp->msr_clk);
|
||||
clk_put(vdevp->msr_clk);
|
||||
pr_info("%s: vdin msr clock is %d MHZ\n", __func__,
|
||||
vdevp->msr_clk_val/1000000);
|
||||
}
|
||||
@@ -2462,7 +2447,6 @@ static int vdin_drv_probe(struct platform_device *pdev)
|
||||
if (!IS_ERR(vdevp->msr_clk)) {
|
||||
vdevp->msr_clk_val =
|
||||
clk_get_rate(vdevp->msr_clk);
|
||||
clk_put(vdevp->msr_clk);
|
||||
pr_info("%s: vdin[%d] clock is %d MHZ\n",
|
||||
__func__, vdevp->index,
|
||||
vdevp->msr_clk_val/1000000);
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
/*values of vdin isr bypass check flag */
|
||||
#define VDIN_BYPASS_STOP_CHECK 0x00000001
|
||||
#define VDIN_BYPASS_CYC_CHECK 0x00000002
|
||||
#define VDIN_BYPASS_VSYNC_CHECK 0x00000004
|
||||
#define VDIN_BYPASS_VGA_CHECK 0x00000008
|
||||
#define VDIN_CANVAS_MAX_CNT 9
|
||||
|
||||
@@ -218,16 +217,12 @@ struct vdin_dev_s {
|
||||
char irq_name[12];
|
||||
/* address offset(vdin0/vdin1/...) */
|
||||
unsigned int addr_offset;
|
||||
unsigned int vs_cnt_valid;
|
||||
unsigned int vs_cnt_ignore;
|
||||
|
||||
unsigned int unstable_flag;
|
||||
unsigned int abnormal_cnt;
|
||||
unsigned int stamp;
|
||||
unsigned int hcnt64;
|
||||
unsigned int cycle;
|
||||
unsigned int hcnt64_tag;
|
||||
unsigned int cycle_tag;
|
||||
unsigned int start_time;/* ms vdin start time */
|
||||
int rdma_handle;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user