mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 20:07:46 +09:00
osd: call osd_update_enable if needed [2/2]
PD#SWPL-2580 Problem: The vd1 postblend bit in vpp misc is overwriten. Solution: osd: call osd_update_enable if needed Verify: verify by p212 Change-Id: I438848dc843ea370d65dc3c6b4befb32d1f2b5f8 Signed-off-by: pengcheng chen <pengcheng.chen@amlogic.com>
This commit is contained in:
committed by
Luan Yuan
parent
4faea6a205
commit
f42d2df084
@@ -361,6 +361,12 @@ enum viu_type {
|
||||
VIU2,
|
||||
};
|
||||
|
||||
enum render_cmd_type {
|
||||
LAYER_SYNC,
|
||||
BLANK_CMD,
|
||||
PAGE_FLIP,
|
||||
};
|
||||
|
||||
struct pandata_s {
|
||||
s32 x_start;
|
||||
s32 x_end;
|
||||
@@ -465,7 +471,8 @@ struct layer_fence_map_s {
|
||||
struct osd_layers_fence_map_s {
|
||||
struct list_head list;
|
||||
int out_fd;
|
||||
unsigned char hdr_mode;
|
||||
unsigned char hdr_mode;
|
||||
unsigned char cmd;
|
||||
struct display_flip_info_s disp_info;
|
||||
struct layer_fence_map_s layer_map[HW_OSD_COUNT];
|
||||
};
|
||||
|
||||
@@ -1051,6 +1051,7 @@ static int sync_render_layers_fence(u32 index, u32 yres,
|
||||
in_fence_fd = request->in_fen_fd;
|
||||
mutex_lock(&post_fence_list_lock);
|
||||
fence_map = &map_layers;
|
||||
fence_map->cmd = LAYER_SYNC;
|
||||
fence_map->layer_map[index].fb_index = index;
|
||||
/* layer_map[index].enable will update if have blank ioctl */
|
||||
fence_map->layer_map[index].enable = 1;
|
||||
@@ -1257,19 +1258,15 @@ void osd_set_enable_hw(u32 index, u32 enable)
|
||||
if (osd_hw.hwc_enable) {
|
||||
if (index > OSD_MAX)
|
||||
return;
|
||||
if (osd_hw.osd_meson_dev.osd_ver < OSD_HIGH_ONE)
|
||||
osd_enable_hw(index, enable);
|
||||
else {
|
||||
/* Todo: */
|
||||
#ifdef CONFIG_AMLOGIC_MEDIA_FB_OSD_SYNC_FENCE
|
||||
mutex_lock(&post_fence_list_lock);
|
||||
map_layers.layer_map[index].fb_index = index;
|
||||
map_layers.layer_map[index].enable = enable;
|
||||
map_layers.cmd = BLANK_CMD;
|
||||
mutex_unlock(&post_fence_list_lock);
|
||||
osd_log_dbg("osd_set_enable_hw: osd%d,enable=%d\n",
|
||||
index, enable);
|
||||
#endif
|
||||
}
|
||||
} else
|
||||
osd_enable_hw(index, enable);
|
||||
}
|
||||
@@ -4240,6 +4237,8 @@ static void osd_pan_display_layers_fence(
|
||||
struct layer_fence_map_s *layer_map = NULL;
|
||||
struct vinfo_s *vinfo;
|
||||
|
||||
if (osd_hw.osd_meson_dev.osd_ver <= OSD_NORMAL)
|
||||
osd_count = 1;
|
||||
vinfo = get_current_vinfo();
|
||||
if (vinfo && (strcmp(vinfo->name, "invalid") &&
|
||||
strcmp(vinfo->name, "null"))) {
|
||||
@@ -4262,7 +4261,8 @@ static void osd_pan_display_layers_fence(
|
||||
continue;
|
||||
}
|
||||
/* wait in fence */
|
||||
if (timeline_created && layer_map->enable) {
|
||||
if (timeline_created && layer_map->enable
|
||||
&& (fence_map->cmd == LAYER_SYNC)) {
|
||||
ret = osd_wait_buf_ready_combine(layer_map);
|
||||
if (ret < 0)
|
||||
osd_log_dbg("fence wait ret %d\n", ret);
|
||||
@@ -7652,6 +7652,7 @@ static void osd_setting_old_hwc(void)
|
||||
{
|
||||
int index = OSD1;
|
||||
bool freescale_update = false;
|
||||
static u32 osd_enable;
|
||||
|
||||
spin_lock_irqsave(&osd_lock, lock_flags);
|
||||
osd_hw.reg[OSD_COLOR_MODE].update_func(index);
|
||||
@@ -7670,10 +7671,13 @@ static void osd_setting_old_hwc(void)
|
||||
}
|
||||
osd_update_window_axis = false;
|
||||
}
|
||||
if (!osd_hw.osd_display_debug
|
||||
&& (suspend_flag == false))
|
||||
if (osd_enable != osd_hw.enable[index]
|
||||
&& (!osd_hw.osd_display_debug)
|
||||
&& (suspend_flag == false)) {
|
||||
osd_hw.reg[OSD_ENABLE]
|
||||
.update_func(index);
|
||||
osd_enable = osd_hw.enable[index];
|
||||
}
|
||||
spin_unlock_irqrestore(&osd_lock, lock_flags);
|
||||
osd_wait_vsync_hw();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user