diff --git a/drivers/media/di_mini/deinterlace.c b/drivers/media/di_mini/deinterlace.c index 365a175e4..1292fdeff 100644 --- a/drivers/media/di_mini/deinterlace.c +++ b/drivers/media/di_mini/deinterlace.c @@ -4051,9 +4051,6 @@ void dim_pre_de_process(unsigned int channel) dimh_txl_patch_prog(ppre->cur_prog_flag, ppre->field_count_for_cont, dimp_get(edi_mp_mcpre_en)); - /****************value from pq****************/ - if (IS_IC(dil_get_cpuver_flag(), S4) && cfgg(SUB_V)) - DIM_DI_WR(DI_NR_CTRL2, 0x3f3f4040); if (ppre->di_wr_buf->en_hf && ppre->di_wr_buf->hf_adr && di_hf_size_check(&ppre->di_nrwr_mif) && @@ -6767,8 +6764,10 @@ unsigned char dim_pre_de_buf_config(unsigned int channel) return 24; } - if (!ppre->is_disable_nr) + if (!ppre->is_disable_nr) { + di_s1a_load_pq(); di_load_pq_table(); + } if (is_meson_tl1_cpu() && ppre->comb_mode && diff --git a/drivers/media/di_mini/deinterlace_hw.c b/drivers/media/di_mini/deinterlace_hw.c index 49e290f2a..2ff0435b2 100644 --- a/drivers/media/di_mini/deinterlace_hw.c +++ b/drivers/media/di_mini/deinterlace_hw.c @@ -4807,6 +4807,38 @@ static bool pq_save_db(unsigned int addr, unsigned int val, unsigned int mask) return ret; } +void di_s1a_load_pq(void) +{ + if (!(DIM_IS_IC(S4) && cfgg(SUB_V))) + return; + if (dimp_get(edi_mp_pq_load_dbg) == 1) + return; + + /* + * s1a remove pq server + * driver no need load pq table + * driver write dead Registers controlled by pq + * reg value from pq team + */ + + DIM_RDMA_WR(DI_EI_CTRL0, 0xFF0100); + DIM_RDMA_WR(DI_EI_CTRL1, 0x5A0A0F2D); + DIM_RDMA_WR(DI_EI_CTRL2, 0x50A0A5A); + DIM_RDMA_WR(DI_NR_CTRL0, 0x0); + DIM_RDMA_WR(DI_NR_CTRL1, 0xBF3F1010); + DIM_RDMA_WR(DI_NR_CTRL2, 0x3F3F4040); + DIM_RDMA_WR(DI_EI_CTRL4, 0x151B3084); + DIM_RDMA_WR(DI_EI_CTRL5, 0x5273204F); + DIM_RDMA_WR(DI_EI_CTRL6, 0x50231C15); + DIM_RDMA_WR(DI_EI_CTRL7, 0x2FB56650); + DIM_RDMA_WR(DI_EI_CTRL8, 0x230019A4); + DIM_RDMA_WR(DI_EI_CTRL9, 0x7CB9BB33); + DIM_RDMA_WR(DI_EI_CTRL10, 0x842C6A9); + DIM_RDMA_WR(DI_EI_CTRL11, 0x486AB07A); + DIM_RDMA_WR(DI_EI_CTRL12, 0xAB0F250C); + DIM_RDMA_WR(DI_EI_CTRL13, 0xF021414); +} + void dimh_load_regs(struct di_pq_parm_s *di_pq_ptr) { unsigned int i = 0, j = 0, addr = 0, value = 0, mask = 0, len; diff --git a/drivers/media/di_mini/deinterlace_hw.h b/drivers/media/di_mini/deinterlace_hw.h index 30631b0fe..b5f5251a3 100644 --- a/drivers/media/di_mini/deinterlace_hw.h +++ b/drivers/media/di_mini/deinterlace_hw.h @@ -660,6 +660,7 @@ void dimh_calc_lmv_base_mcinfo(unsigned int vf_height, void dimh_init_field_mode(unsigned short height); void dim_film_mode_win_config(unsigned int width, unsigned int height); void dimh_pulldown_vof_win_config(struct pulldown_detected_s *wins); +void di_s1a_load_pq(void); void dimh_load_regs(struct di_pq_parm_s *di_pq_ptr); void dim_pre_frame_reset_g12(unsigned char madi_en, unsigned char mcdi_en); void dim_pre_frame_reset(void);