From 63128f9fe9afddde4f3dadd253d66d8b48294d55 Mon Sep 17 00:00:00 2001 From: pengcheng chen Date: Mon, 5 Nov 2018 16:59:10 +0800 Subject: [PATCH] osd: uboot logo scaler down in 4k issue [1/1] PD#163001 Problem: uboot logo scaler down in 4k Solution: uboot logo size adjust when vout changed before first page flip command Verify: verified in u200 board Change-Id: Ic23e695fe716811eaf3faa62069c808a03c26f9d Signed-off-by: pengcheng chen --- drivers/amlogic/media/osd/osd_fb.c | 17 ++++++++--------- drivers/amlogic/media/osd/osd_hw.c | 8 ++++++++ drivers/amlogic/media/osd/osd_hw.h | 1 + drivers/amlogic/media/osd/osd_logo.c | 4 ++++ 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/amlogic/media/osd/osd_fb.c b/drivers/amlogic/media/osd/osd_fb.c index 2b0c977..cb1e33e 100644 --- a/drivers/amlogic/media/osd/osd_fb.c +++ b/drivers/amlogic/media/osd/osd_fb.c @@ -1410,7 +1410,6 @@ static int malloc_osd_memory(struct fb_info *info) (osd_meson_dev.cpu_id >= __MESON_CPU_MAJOR_ID_G12A)) { osd_log_info("---------------clear fb%d memory %p\n", fb_index, fbdev->fb_mem_vaddr); - set_logo_loaded(); if (fbdev->fb_mem_vaddr) memset(fbdev->fb_mem_vaddr, 0x0, fbdev->fb_len); if (osd_meson_dev.afbc_type && osd_get_afbc(fb_index)) { @@ -1442,7 +1441,6 @@ static int malloc_osd_memory(struct fb_info *info) static int osd_open(struct fb_info *info, int arg) { u32 fb_index; - int logo_index; struct osd_fb_dev_s *fbdev; struct fb_fix_screeninfo *fix = NULL; int ret = 0; @@ -1490,13 +1488,14 @@ static int osd_open(struct fb_info *info, int arg) if (!fb_ion_client) fb_ion_client = meson_ion_client_create(-1, "meson-fb"); } - logo_index = osd_get_logo_index(); - /* clear osd buffer if not logo layer */ - if (((logo_index < 0) || (logo_index != fb_index)) || - (osd_meson_dev.cpu_id == __MESON_CPU_MAJOR_ID_AXG) || - (osd_meson_dev.cpu_id >= __MESON_CPU_MAJOR_ID_G12A)) { - osd_log_info("set logo loaded\n"); - set_logo_loaded(); + if (get_logo_loaded()) { + u32 logo_index; + + logo_index = osd_get_logo_index(); + if (logo_index < 0) { + osd_log_info("set logo loaded\n"); + set_logo_loaded(); + } } return 0; } diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c index 762a151..09ea121 100644 --- a/drivers/amlogic/media/osd/osd_hw.c +++ b/drivers/amlogic/media/osd/osd_hw.c @@ -1166,7 +1166,15 @@ int osd_sync_do_hwc(struct do_hwc_cmd_s *hwc_cmd) osd_hw.out_fence_fd = -1; mutex_unlock(&post_fence_list_lock); kthread_queue_work(&buffer_toggle_worker, &buffer_toggle_work); + if (get_logo_loaded()) { + int logo_index; + logo_index = osd_get_logo_index(); + if (logo_index < 0) { + osd_log_info("set logo loaded\n"); + set_logo_loaded(); + } + } osd_log_dbg("osd_sync_do_hwc :out_fence_fd=%d\n", out_fence_fd); return out_fence_fd; diff --git a/drivers/amlogic/media/osd/osd_hw.h b/drivers/amlogic/media/osd/osd_hw.h index 3c578c3..753d2c6 100644 --- a/drivers/amlogic/media/osd/osd_hw.h +++ b/drivers/amlogic/media/osd/osd_hw.h @@ -170,6 +170,7 @@ void osd_update_vsync_hit(void); void osd_hw_reset(void); void osd_mali_afbc_start(void); int logo_work_init(void); +int get_logo_loaded(void); void set_logo_loaded(void); int set_osd_logo_freescaler(void); void osd_get_display_debug(u32 *osd_display_debug_enable); diff --git a/drivers/amlogic/media/osd/osd_logo.c b/drivers/amlogic/media/osd/osd_logo.c index 3bff38c..c48d644 100644 --- a/drivers/amlogic/media/osd/osd_logo.c +++ b/drivers/amlogic/media/osd/osd_logo.c @@ -250,6 +250,10 @@ int set_osd_logo_freescaler(void) return 0; } +int get_logo_loaded(void) +{ + return logo_info.loaded; +} void set_logo_loaded(void) { -- 2.7.4