#define FLAG_CHANGE_ALL 0xffffffff
/* update all core */
static u32 stb_core_setting_update_flag = FLAG_CHANGE_ALL;
+static bool stb_core2_const_flag;
/* 256+(256*4+256*2)*4/8 64bit */
#define STB_DMA_TBL_SIZE (256+(256*4+256*2)*4/8)
p_core2_dm_regs[i]);
set_lut = true;
}
+
+ if (stb_core_setting_update_flag & FLAG_CONST_TC2)
+ set_lut = false;
+
/* core2 metadata program done */
VSYNC_WR_MPEG_REG(DOLBY_CORE2A_REG_START + 3, 1);
u32 graphics_h = 1080;
if (is_dolby_vision_stb_mode()
- && dolby_vision_flags & FLAG_CERTIFICAION) {
+ && (dolby_vision_flags & FLAG_CERTIFICAION)) {
graphics_w = dv_cert_graphic_width;
graphics_h = dv_cert_graphic_height;
}
1,
reset);
}
+
+ if (stb_core_setting_update_flag != FLAG_CHANGE_ALL) {
+ /* when FLAG_CONST_TC2 is set, */
+ /* set the stb_core_setting_update_flag */
+ /* until only meeting the FLAG_CHANGE_TC2 */
+ if (stb_core_setting_update_flag & FLAG_CONST_TC2)
+ stb_core2_const_flag = true;
+ else if (stb_core_setting_update_flag & FLAG_CHANGE_TC2)
+ stb_core2_const_flag = false;
+ }
+
+ /* revert the core2 lut as last corret one when const case */
+ if (stb_core2_const_flag)
+ memcpy(&new_dovi_setting.dm_lut2,
+ &dovi_setting.dm_lut2,
+ sizeof(struct dm_lut_ipcore_s));
+
if (mask & 2)
dolby_core2_set(
24, 256 * 5,
last_dolby_vision_ll_policy =
dolby_vision_ll_policy;
#endif
- stb_core_setting_update_flag = FLAG_CHANGE_ALL;
pr_dolby_dbg("Dolby Vision STB cores turn on\n");
} else if (is_meson_g12a()) {
if (dolby_vision_mask & 4)
last_dolby_vision_ll_policy =
dolby_vision_ll_policy;
#endif
- stb_core_setting_update_flag = FLAG_CHANGE_ALL;
pr_dolby_dbg("Dolby Vision G12a turn on\n");
} else {
VSYNC_WR_MPEG_REG(VPP_DOLBY_CTRL,
last_dolby_vision_ll_policy =
dolby_vision_ll_policy;
#endif
- stb_core_setting_update_flag = FLAG_CHANGE_ALL;
pr_dolby_dbg("Dolby Vision turn on\n");
}
} else {
DOLBY_VISION_LL_DISABLE;
#endif
stb_core_setting_update_flag = FLAG_CHANGE_ALL;
+ stb_core2_const_flag = false;
memset(&dovi_setting, 0, sizeof(dovi_setting));
pr_dolby_dbg("Dolby Vision STB cores turn off\n");
} else if (is_meson_g12a()) {
DOLBY_VISION_LL_DISABLE;
#endif
stb_core_setting_update_flag = FLAG_CHANGE_ALL;
+ stb_core2_const_flag = false;
memset(&dovi_setting, 0, sizeof(dovi_setting));
pr_dolby_dbg("Dolby Vision G12a turn off\n");
} else {
DOLBY_VISION_LL_DISABLE;
#endif
stb_core_setting_update_flag = FLAG_CHANGE_ALL;
+ stb_core2_const_flag = false;
memset(&dovi_setting, 0, sizeof(dovi_setting));
pr_dolby_dbg("Dolby Vision turn off\n");
}
dovi_setting_video_flag = video_frame;
if (debug_dolby & 1) {
if (el_flag)
- pr_dolby_dbg("setting %d->%d(T:%d-%d): flag=%02x,md=%d,comp=%d, frame:%d\n",
+ pr_dolby_dbg("setting %d->%d(T:%d-%d): flag=%x,md=%d,comp=%d, frame:%d\n",
src_format, dst_format,
dolby_vision_target_min,
dolby_vision_target_max[src_format][dst_format],
total_md_size, total_comp_size,
frame_count);
else
- pr_dolby_dbg("setting %d->%d(T:%d-%d): flag=%02x,md=%d, frame:%d\n",
+ pr_dolby_dbg("setting %d->%d(T:%d-%d): flag=%x,md=%d, frame:%d\n",
src_format, dst_format,
dolby_vision_target_min,
dolby_vision_target_max[src_format][dst_format],