diff --git a/drivers/media/di_multi/deinterlace.c b/drivers/media/di_multi/deinterlace.c index e8b1e5a34..40defa280 100644 --- a/drivers/media/di_multi/deinterlace.c +++ b/drivers/media/di_multi/deinterlace.c @@ -5709,9 +5709,10 @@ unsigned char dim_pre_de_buf_config(unsigned int channel) jiffies_to_msecs(jiffies_64 - vframe->ready_jiffies64)); -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (DIM_IS_IC_TXHD2) { - ppre->di_nrwr_mif.nr_wr_mif_8bit = -1; + if (pch->record_10bit_flag && pch->record_8bit_flag) + ppre->di_nrwr_mif.nr_wr_mif_8bit = -1; if (!dimp_get(edi_mp_force_422_8bit)) { if (pch->record_10bit_flag) { pch->switch_index = pch->cur_index; @@ -7672,7 +7673,7 @@ static void dimpst_fill_outvf(struct vframe_s *vfm, unsigned int ch; struct di_ch_s *pch; bool ext_buf = false; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 unsigned int ori_vfm_bitdepth; #endif @@ -7778,7 +7779,7 @@ static void dimpst_fill_outvf(struct vframe_s *vfm, BITDEPTH_U8 | BITDEPTH_V8); } -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 ori_vfm_bitdepth = vfm->bitdepth; if (di_buf->bit_8_flag == 1) { dim_print("bitdepth: 0x%x\n", vfm->bitdepth); @@ -8135,7 +8136,7 @@ int dim_post_process(void *arg, unsigned int zoom_start_x_lines, } if (dip_itf_is_ins(pch) && dim_dbg_new_int(2)) dim_dbg_buffer2(di_buf->c.buffer, 7); -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (DIM_IS_IC_TXHD2) { ppost->di_buf2_mif.bit8_flag = ppre->di_nrwr_mif.nr_wr_mif_8bit; dim_print("di_nrwr_mif.nr_wr_mif_8bit:%d\n", ppre->di_nrwr_mif.nr_wr_mif_8bit); @@ -8877,7 +8878,7 @@ int dim_post_process(void *arg, unsigned int zoom_start_x_lines, } /* */ } else { -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (DIM_IS_IC_TXHD2) { ppost->di_buf0_mif.bit8_flag = ppre->di_chan2_mif.bit8_flag; ppost->di_buf1_mif.bit8_flag = ppre->di_mem_mif.bit8_flag; @@ -8948,7 +8949,7 @@ int dim_post_process(void *arg, unsigned int zoom_start_x_lines, dim_print("0x%px:\n", acfg->buf_o->vframe); } } else { -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (DIM_IS_IC_TXHD2) { ppost->di_buf0_mif.bit8_flag = ppre->di_chan2_mif.bit8_flag; ppost->di_buf1_mif.bit8_flag = ppre->di_mem_mif.bit8_flag; @@ -9650,7 +9651,7 @@ static void set_pulldown_mode(struct di_buf_s *di_buf, unsigned int channel) if (pre_buf_p) { di_buf->pd_config.global_mode = pre_buf_p->pd_config.global_mode; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (DIM_IS_IC_TXHD2) { if (ppre->di_nrwr_mif.nr_wr_mif_8bit == 1 || ppre->di_nrwr_mif.nr_wr_mif_8bit == 0) { @@ -10930,7 +10931,7 @@ void di_unreg_variable(unsigned int channel) pch->self_trig_need = 0; pch->rsc_bypass.d32 = 0; pch->sts_keep = 0; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 pch->record_10bit_flag = 0; pch->record_8bit_flag = 0; #endif diff --git a/drivers/media/di_multi/deinterlace.h b/drivers/media/di_multi/deinterlace.h index 84446fa92..a111d7df1 100644 --- a/drivers/media/di_multi/deinterlace.h +++ b/drivers/media/di_multi/deinterlace.h @@ -49,6 +49,9 @@ ************************************************/ #define DIM_HAVE_HDR (1) +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#define CONFIG_AMLOGIC_MEDIA_THERMAL1 (1) +#endif /************************************************ * function:decontour use detect border * char aml_ldim_get_bbd_state(void) in @@ -382,7 +385,7 @@ struct di_buf_s { bool hf_irq; bool dw_have; bool flg_dummy; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 bool bit_8_flag; #endif }; diff --git a/drivers/media/di_multi/deinterlace_hw.c b/drivers/media/di_multi/deinterlace_hw.c index 6670380ef..bab3d99b4 100644 --- a/drivers/media/di_multi/deinterlace_hw.c +++ b/drivers/media/di_multi/deinterlace_hw.c @@ -1755,7 +1755,7 @@ static void set_di_mem_mif(struct DI_MIF_S *mif, int urgent, int hold_line) unsigned int chroma0_rpt_loop_end; unsigned int chroma0_rpt_loop_pat; unsigned int reset_on_gofield; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 unsigned int bit_mode_val; #endif @@ -1793,7 +1793,7 @@ static void set_di_mem_mif(struct DI_MIF_S *mif, int urgent, int hold_line) chroma0_rpt_loop_pat = 0x00; } -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 bit_mode_val = mif->bit_mode; if (mif->bit8_flag == 1) mif->bit_mode = 0; @@ -2251,7 +2251,7 @@ static void set_di_chan2_mif(struct DI_MIF_S *mif, int urgent, int hold_line) unsigned int chroma0_rpt_loop_end; unsigned int chroma0_rpt_loop_pat; unsigned int reset_on_gofield; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 unsigned int bit_mode_val; #endif @@ -2301,7 +2301,7 @@ static void set_di_chan2_mif(struct DI_MIF_S *mif, int urgent, int hold_line) } #endif demux_mode = mif->video_mode; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 bit_mode_val = mif->video_mode; dim_print("mif->bit8_flag:%d %d\n", mif->bit8_flag, mif->video_mode); if (mif->bit8_flag == 1) @@ -2890,7 +2890,7 @@ void dimh_post_switch_buffer(struct DI_MIF_S *di_buf0_mif, bool mc_enable, int vskip_cnt) { int ei_only, buf1_en; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 unsigned int bit_val[3] = {3, 3, 3}; #endif @@ -2935,7 +2935,7 @@ void dimh_post_switch_buffer(struct DI_MIF_S *di_buf0_mif, di_mtnprd_mif->canvas_num, 16, 8); /* current field mtn canvas index.*/ } -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (DIM_IS_IC_TXHD2) { /** ** post mif bitdepth follow nr mif change frame by frame @@ -3257,7 +3257,7 @@ void dimh_enable_di_post_2(struct DI_MIF_S *di_buf0_mif, di_diwr_mif->bit_mode); } else { dimh_pst_mif_set(di_diwr_mif, urgent, di_ddr_en); -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (di_buf2_mif->bit8_flag == 1 || di_buf2_mif->bit8_flag == 2) { di_buf2_mif->bit_mode = 0; di_diwr_mif->bit_mode = 0; @@ -3287,7 +3287,7 @@ void dimh_enable_di_post_2(struct DI_MIF_S *di_buf0_mif, (urgent << 16) | (2 << 26) | (di_ddr_en << 30)); -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (di_buf2_mif->bit8_flag == 1 || di_buf2_mif->bit8_flag == 2) { di_buf2_mif->bit_mode = 0; di_diwr_mif->bit_mode = 0; @@ -5206,7 +5206,7 @@ static void dimh_wrmif_set(struct DI_SIM_MIF_S *cfg_mif, { const unsigned int *reg; unsigned int ctr; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 unsigned int bit_mode_val; #endif @@ -5218,7 +5218,7 @@ static void dimh_wrmif_set(struct DI_SIM_MIF_S *cfg_mif, if (!cfg_mif->ddr_en) return; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 if (DIM_IS_IC_TXHD2) { bit_mode_val = cfg_mif->bit_mode; if (cfg_mif->nr_wr_mif_8bit == 1 || diff --git a/drivers/media/di_multi/deinterlace_hw.h b/drivers/media/di_multi/deinterlace_hw.h index ef86fdf3c..7b77e926d 100644 --- a/drivers/media/di_multi/deinterlace_hw.h +++ b/drivers/media/di_multi/deinterlace_hw.h @@ -327,9 +327,7 @@ struct DI_MIF_S { /**/ enum DI_MIF0_ID mif_index; /* */ char *name; -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL unsigned int bit8_flag; -#endif }; struct DI_SIM_MIF_S { @@ -383,10 +381,8 @@ struct DI_SIM_MIF_S { unsigned short blend_en; //20220126 unsigned short vecrd_offset; //20220126 enum DI_MIFS_ID mif_index; /* */ -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL - unsigned int nr_wr_mif_8bit :3; + unsigned int nr_wr_mif_8bit; bool di_wr_bit8_flag; -#endif }; struct DI_MC_MIF_s { diff --git a/drivers/media/di_multi/di_data_l.h b/drivers/media/di_multi/di_data_l.h index fbe67acd0..6077c9200 100644 --- a/drivers/media/di_multi/di_data_l.h +++ b/drivers/media/di_multi/di_data_l.h @@ -178,8 +178,9 @@ enum EDI_CFG_TOP_IDX { EDI_CFG_EN_PRE_LINK, EDI_CFG_AFBCE_LOSS_EN, EDI_CFG_TB, -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 EDI_CFG_TEMP_CONTROL, + EDI_CFG_422_8bit, #endif EDI_CFG_PRE_NUB, EDI_CFG_END, @@ -1088,9 +1089,7 @@ enum EDI_MP_UI_T { edi_mp_blend_mode, edi_mp_tb_dump, edi_mp_prelink_hold_line, -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL edi_mp_force_422_8bit, -#endif EDI_MP_SUB_DI_E, /**************************************/ EDI_MP_SUB_NR_B, @@ -2093,7 +2092,7 @@ struct di_ch_s { bool en_tb; // unsigned char tb_owner; // bool tb_busy;// -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 bool record_8bit_flag; bool record_10bit_flag; unsigned int cur_index; diff --git a/drivers/media/di_multi/di_prc.c b/drivers/media/di_multi/di_prc.c index e87a3d425..edaae258e 100644 --- a/drivers/media/di_multi/di_prc.c +++ b/drivers/media/di_multi/di_prc.c @@ -299,11 +299,15 @@ const struct di_cfg_ctr_s di_cfg_top_ctr[K_DI_CFG_NUB] = { EDI_CFG_TB, 0, K_DI_CFG_T_FLG_DTS}, -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 [EDI_CFG_TEMP_CONTROL] = {"temp_control", EDI_CFG_TEMP_CONTROL, 0, K_DI_CFG_T_FLG_DTS}, + [EDI_CFG_422_8bit] = {"422_8bit", + EDI_CFG_422_8bit, + 0, + K_DI_CFG_T_FLG_DTS}, #endif [EDI_CFG_PRE_NUB] = {"pre_nub", /* 0:not config pre nub;*/ @@ -484,6 +488,13 @@ void di_cfg_top_dts(void) cfgs(TB, 0); } +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 + if (cfgg(422_8bit)) + dimp_set(edi_mp_force_422_8bit, 1); + else + dimp_set(edi_mp_force_422_8bit, 0); +#endif + #ifdef TMP_EN_PLINK //disable p-only: if (cfgg(PONLY_MODE)) { @@ -937,10 +948,8 @@ const struct di_mp_uit_s di_mp_ui_top[] = { edi_mp_tb_dump, 0},//1400 [edi_mp_prelink_hold_line] = {"pre_hold_line:ushort:8", edi_mp_prelink_hold_line, 8}, -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL [edi_mp_force_422_8bit] = {"force_422_8bit:8", edi_mp_force_422_8bit, -1}, -#endif [EDI_MP_SUB_DI_E] = {"di end-------", EDI_MP_SUB_DI_E, 0}, /**************************************/ @@ -3041,7 +3050,8 @@ static enum EDPST_MODE dim_cnt_mode(struct di_ch_s *pch) if (dim_cfg_nv21()) { mode = EDPST_MODE_NV21_8BIT; } else { - if (dimp_get(edi_mp_nr10bit_support)) { + if (dimp_get(edi_mp_nr10bit_support) && + dimp_get(edi_mp_force_422_8bit) != 1) { if (dimp_get(edi_mp_full_422_pack)) mode = EDPST_MODE_422_10BIT_PACK; else @@ -3221,7 +3231,7 @@ void dip_init_value_reg(unsigned int ch, struct vframe_s *vframe) dimp_set(edi_mp_prog_proc_config, 0x23); dimp_set(edi_mp_use_2_interlace_buff, 1); } -#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL +#ifdef CONFIG_AMLOGIC_MEDIA_THERMAL1 pch->record_10bit_flag = 1; pch->record_8bit_flag = 1; #endif