dv: fix the flickered problem [1/1]

PD#SWPL-1207

Problem:
fix the filckered problem when playing transition
video in sdr tv

Solution:
when dv core2 don't run, the reset can't be executed

Verify:
r321

Change-Id: I719325f1722589e02a40d46442258b0d1e3feb17
Signed-off-by: Yi Zhou <yi.zhou@amlogic.com>
This commit is contained in:
Yi Zhou
2018-11-27 10:31:16 +08:00
committed by Dongjin Kim
parent 196b041455
commit 9a4581386b
3 changed files with 29 additions and 6 deletions

View File

@@ -292,6 +292,10 @@ MODULE_PARM_DESC(dolby_vision_graphic_min, "\n dolby_vision_graphic_min\n");
module_param(dolby_vision_graphic_max, uint, 0664);
MODULE_PARM_DESC(dolby_vision_graphic_max, "\n dolby_vision_graphic_max\n");
/*these two parameters form OSD*/
static unsigned int osd_graphic_width = 1920;
static unsigned int osd_graphic_height = 1080;
static unsigned int dv_cert_graphic_width = 1920;
static unsigned int dv_cert_graphic_height = 1080;
module_param(dv_cert_graphic_width, uint, 0664);
@@ -1763,8 +1767,7 @@ static int dolby_core2_set(
VSYNC_WR_MPEG_REG(DOLBY_CORE2A_CLKGATE_CTRL, 0);
VSYNC_WR_MPEG_REG(DOLBY_CORE2A_SWAP_CTRL0, 0);
if (is_meson_gxm() ||
is_meson_g12() || reset) {
if (is_meson_gxm() || is_meson_g12() || reset) {
VSYNC_WR_MPEG_REG(DOLBY_CORE2A_SWAP_CTRL1,
((hsize + g_htotal_add) << 16)
| (vsize + g_vtotal_add + g_vsize_add));
@@ -2058,6 +2061,13 @@ static int dolby_core3_set(
return 0;
}
void update_graphic_width_height(unsigned int width,
unsigned int height)
{
osd_graphic_width = width;
osd_graphic_height = height;
}
static void apply_stb_core_settings(
int enable, unsigned int mask,
bool reset, u32 frame_size, u8 pps_state)
@@ -2070,15 +2080,15 @@ static void apply_stb_core_settings(
#else
u32 core1_dm_count = 24;
#endif
u32 graphics_w = 1920;
u32 graphics_h = 1080;
u32 graphics_w = osd_graphic_width;
u32 graphics_h = osd_graphic_height;
if (is_dolby_vision_stb_mode()
&& (dolby_vision_flags & FLAG_CERTIFICAION)) {
graphics_w = dv_cert_graphic_width;
graphics_h = dv_cert_graphic_height;
}
if (is_meson_txlx_package_962E()
if (is_meson_txlx_stbmode()
|| force_stb_mode) {
if ((vinfo->width >= 1920) &&
(vinfo->height >= 1080) &&
@@ -2096,7 +2106,7 @@ static void apply_stb_core_settings(
g_vpotch = 0x20;
}
if (mask & 1) {
if (is_meson_txlx_package_962E()
if (is_meson_txlx_stbmode()
|| force_stb_mode) {
stb_dolby_core1_set(
27, 173, 256 * 5,

View File

@@ -53,6 +53,10 @@
#ifdef CONFIG_AMLOGIC_MEDIA_VIDEO
#include <linux/amlogic/media/video_sink/video.h>
#endif
#ifdef CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_DOLBYVISION
#include <linux/amlogic/media/amdolbyvision/dolby_vision.h>
#endif
/* Local Headers */
#include "osd_canvas.h"
#include "osd_prot.h"
@@ -7862,6 +7866,10 @@ static void osd_basic_update_disp_geometry(u32 index)
VSYNCOSD_WR_MPEG_REG(
DOLBY_CORE2A_SWAP_CTRL2,
(buffer_w << 16) | (buffer_h + 0));
#ifdef CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_DOLBYVISION
update_graphic_width_height(buffer_w, buffer_h);
#endif
}
data32 = VSYNCOSD_RD_MPEG_REG(osd_reg->osd_ctrl_stat);
data32 &= ~0x1ff008;//0x1ff00e;
@@ -7986,6 +7994,9 @@ static void osd1_basic_update_disp_geometry(void)
VSYNCOSD_WR_MPEG_REG(
DOLBY_CORE2A_SWAP_CTRL2,
(buffer_w << 16) | (buffer_h + 0));
#ifdef CONFIG_AMLOGIC_MEDIA_ENHANCEMENT_DOLBYVISION
update_graphic_width_height(buffer_w, buffer_h);
#endif
}
if (osd_hw.osd_afbcd[OSD1].enable &&
!osd_afbc_dec_enable &&

View File

@@ -51,5 +51,7 @@ extern int enable_rgb_to_yuv_matrix_for_dvll(
int32_t on, uint32_t *coeff_orig, uint32_t bits);
extern bool is_dovi_frame(struct vframe_s *vf);
extern void update_graphic_width_height(unsigned int width,
unsigned int height);
#endif