From cd14fc32bdf90ee17b576351a4e976999b29c23e Mon Sep 17 00:00:00 2001 From: Pengcheng Chen Date: Fri, 14 Apr 2017 11:41:11 +0800 Subject: [PATCH] osd: osd logo optimize PD#138714: osd logo optimize 1.move logo module,merge it into osd driver 2.fix remove get_logo_vmode() api caused video.c compile error Change-Id: I8c90c0313fbf5661082627f7a37b3e465ba594da Signed-off-by: Pengcheng Chen --- drivers/amlogic/media/Kconfig | 1 - drivers/amlogic/media/Makefile | 1 - drivers/amlogic/media/logo/Kconfig | 10 - drivers/amlogic/media/logo/Makefile | 4 - drivers/amlogic/media/osd/Kconfig | 2 +- drivers/amlogic/media/osd/Makefile | 2 +- drivers/amlogic/media/osd/osd_fb.c | 111 ++++++---- drivers/amlogic/media/osd/osd_hw.c | 9 +- drivers/amlogic/media/osd/osd_hw.h | 3 + .../media/{logo/logo.c => osd/osd_logo.c} | 202 +++++------------- drivers/amlogic/media/video_sink/video.c | 11 +- 11 files changed, 137 insertions(+), 219 deletions(-) delete mode 100644 drivers/amlogic/media/logo/Kconfig delete mode 100644 drivers/amlogic/media/logo/Makefile rename drivers/amlogic/media/{logo/logo.c => osd/osd_logo.c} (56%) diff --git a/drivers/amlogic/media/Kconfig b/drivers/amlogic/media/Kconfig index 97f1e3d82baa..ea35a8aece73 100644 --- a/drivers/amlogic/media/Kconfig +++ b/drivers/amlogic/media/Kconfig @@ -44,7 +44,6 @@ source "drivers/amlogic/media/video_sink/Kconfig" source "drivers/amlogic/media/vout/Kconfig" source "drivers/amlogic/media/osd/Kconfig" source "drivers/amlogic/media/osd_ext/Kconfig" -source "drivers/amlogic/media/logo/Kconfig" source "drivers/amlogic/media/deinterlace/Kconfig" source "drivers/amlogic/media/vin/Kconfig" source "drivers/amlogic/media/video_processor/Kconfig" diff --git a/drivers/amlogic/media/Makefile b/drivers/amlogic/media/Makefile index 2e081d728d00..e42b2a90bd20 100644 --- a/drivers/amlogic/media/Makefile +++ b/drivers/amlogic/media/Makefile @@ -4,7 +4,6 @@ obj-$(CONFIG_AMLOGIC_MEDIA_DRIVERS) += video_sink/ obj-$(CONFIG_AMLOGIC_VOUT) += vout/ obj-$(CONFIG_AMLOGIC_MEDIA_DRIVERS) += osd/ obj-$(CONFIG_AMLOGIC_MEDIA_DRIVERS) += osd_ext/ -obj-$(CONFIG_AMLOGIC_MEDIA_DRIVERS) += logo/ obj-$(CONFIG_AMLOGIC_MEDIA_DEINTERLACE) += deinterlace/ obj-$(CONFIG_AMLOGIC_MEDIA_VIN) += vin/ obj-$(CONFIG_AMLOGIC_MEDIA_DRIVERS) += video_processor/ \ No newline at end of file diff --git a/drivers/amlogic/media/logo/Kconfig b/drivers/amlogic/media/logo/Kconfig deleted file mode 100644 index 3edd503cd286..000000000000 --- a/drivers/amlogic/media/logo/Kconfig +++ /dev/null @@ -1,10 +0,0 @@ -# -# Amlogic Logo configuration -# -config AMLOGIC_MEDIA_LOGO - bool "Amlogic Logo Module" - default n - depends on AMLOGIC_MEDIA_FB - depends on AMLOGIC_VOUT - help - Select to enable Logo module diff --git a/drivers/amlogic/media/logo/Makefile b/drivers/amlogic/media/logo/Makefile deleted file mode 100644 index c797306b0142..000000000000 --- a/drivers/amlogic/media/logo/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -obj-$(CONFIG_AMLOGIC_MEDIA_LOGO) += logo.o - -ccflags-y += -Idrivers/amlogic/display/ -ccflags-y += -Idrivers/amlogic/media/ \ No newline at end of file diff --git a/drivers/amlogic/media/osd/Kconfig b/drivers/amlogic/media/osd/Kconfig index 93e4d3341840..cd7cf5e3717b 100644 --- a/drivers/amlogic/media/osd/Kconfig +++ b/drivers/amlogic/media/osd/Kconfig @@ -19,7 +19,7 @@ config AMLOGIC_MEDIA_FB It need enable canvas. It need enable vout. -config AMLOGIC_MEDIAFB_OSD_SYNC_FENCE +config AMLOGIC_MEDIA_FB_OSD_SYNC_FENCE bool "OSD SYNC FENCE" default n depends on AMLOGIC_MEDIA_FB diff --git a/drivers/amlogic/media/osd/Makefile b/drivers/amlogic/media/osd/Makefile index 313138692023..ca05027bec52 100644 --- a/drivers/amlogic/media/osd/Makefile +++ b/drivers/amlogic/media/osd/Makefile @@ -1,5 +1,5 @@ obj-$(CONFIG_AMLOGIC_MEDIA_FB) += fb.o -fb-objs = osd_hw.o osd_fb.o osd_debug.o osd_backup.o +fb-objs = osd_hw.o osd_fb.o osd_debug.o osd_backup.o osd_logo.o fb-objs += osd_antiflicker.o osd_clone.o obj-$(CONFIG_AMLOGIC_MEDIA_FB_OSD_VSYNC_RDMA) += osd_rdma.o diff --git a/drivers/amlogic/media/osd/osd_fb.c b/drivers/amlogic/media/osd/osd_fb.c index 5fad73bf977e..7f25586c5a61 100644 --- a/drivers/amlogic/media/osd/osd_fb.c +++ b/drivers/amlogic/media/osd/osd_fb.c @@ -288,6 +288,8 @@ static int early_suspend_flag; static int early_resume_flag; #endif +static struct delayed_work osd_dwork; +static bool fb_map_flag; static int osd_shutdown_flag; unsigned int osd_log_level; @@ -971,7 +973,35 @@ static int osd_open(struct fb_info *info, int arg) fb_index = fbdev->fb_index; fix = &info->fix; var = &info->var; - if (fb_rmem.base == 0) { + /* read fb-reserved memory first */ + if (fb_rmem.base && + (fb_memsize[0] + fb_memsize[1]) <= fb_rmem.size) { + if (!fb_ion_client) + fb_ion_client = meson_ion_client_create(-1, "meson-fb"); + fb_rmem_size[fb_index] = fb_memsize[fb_index]; + if (fb_index == DEV_OSD0) + fb_rmem_paddr[fb_index] = fb_rmem.base; + else if (fb_index == DEV_OSD1) { + if ((OSD_COUNT == 2) && + ((fb_memsize[0] + fb_memsize[1]) <= fb_rmem.size)) { + fb_rmem_paddr[fb_index] = + fb_rmem.base + fb_memsize[0]; + } + } + if ((fb_rmem_paddr[fb_index] > 0) && + (fb_rmem_size[fb_index] > 0)) { + if (fb_map_flag) + fb_rmem_vaddr[fb_index] = + phys_to_virt(fb_rmem_paddr[fb_index]); + else + fb_rmem_vaddr[fb_index] = + ioremap_wc(fb_rmem_paddr[fb_index], + fb_rmem_size[fb_index]); + if (!fb_rmem_vaddr[fb_index]) + osd_log_err("fb[%d] ioremap error", + fb_index); + } + } else { #ifdef CONFIG_AMLOGIC_ION pr_info("use ion buffer for fb memory\n"); if (!fb_ion_client) @@ -1053,26 +1083,6 @@ static int osd_open(struct fb_info *info, int arg) (unsigned long)fb_rmem_size[fb_index] / SZ_1M); } #endif - } else { - fb_rmem_size[fb_index] = fb_memsize[fb_index]; - if (fb_index == DEV_OSD0) - fb_rmem_paddr[fb_index] = fb_rmem.base; - else if (fb_index == DEV_OSD1) { - if ((OSD_COUNT == 2) && - ((fb_memsize[0] + fb_memsize[1]) <= fb_rmem.size)) { - fb_rmem_paddr[fb_index] = - fb_rmem.base + fb_memsize[0]; - } - } - if ((fb_rmem_paddr[fb_index] > 0) && - (fb_rmem_size[fb_index] > 0)) { - fb_rmem_vaddr[fb_index] = - ioremap_wc(fb_rmem_paddr[fb_index], - fb_rmem_size[fb_index]); - if (!fb_rmem_vaddr[fb_index]) - osd_log_err("fb[%d] ioremap error", - fb_index); - } } fbdev->fb_len = fb_rmem_size[fb_index]; fbdev->fb_mem_paddr = fb_rmem_paddr[fb_index]; @@ -1116,6 +1126,7 @@ static int osd_open(struct fb_info *info, int arg) if ((logo_index < 0) || (logo_index != fb_index)) { osd_log_info("---------------clear fb%d memory %p\n", fb_index, fbdev->fb_mem_vaddr); + set_logo_loaded(); memset(fbdev->fb_mem_vaddr, 0x0, fbdev->fb_len); if (fb_index == DEV_OSD0 && osd_get_afbc()) { for (j = 1; j < OSD_MAX_BUF_NUM; j++) { @@ -1277,6 +1288,7 @@ int osd_notify_callback(struct notifier_block *block, unsigned long cmd, break; #endif case VOUT_EVENT_MODE_CHANGE: + set_osd_logo_freescaler(); for (i = 0; i < OSD_COUNT; i++) { fb_dev = gp_fbdev_list[i]; if (fb_dev == NULL) @@ -2358,6 +2370,30 @@ static int osd_pm_resume(struct device *dev) } #endif +static void mem_free_work(struct work_struct *work) +{ + long r = -EINVAL; + unsigned long start_addr; + unsigned long end_addr; + + if (fb_rmem.base && fb_map_flag) { + if (fb_rmem.size >= (fb_memsize[0] + fb_memsize[1])) { + /* logo reserved memory after fb0/fb1 memory, free it*/ + start_addr = fb_rmem.base + + fb_memsize[0] + fb_memsize[1]; + end_addr = fb_rmem.base + fb_rmem.size; + } else { + /* logo reserved only, free it*/ + start_addr = fb_rmem.base; + end_addr = fb_rmem.base + fb_rmem.size; + } + osd_log_info("%s, free memory: addr:%lx\n", + __func__, start_addr); + r = free_reserved_area(__va(start_addr), + __va(end_addr), 0, "fb-memory"); + } +} + static int osd_probe(struct platform_device *pdev) { struct fb_info *fbi = NULL; @@ -2366,8 +2402,6 @@ static int osd_probe(struct platform_device *pdev) struct fb_fix_screeninfo *fix; int index, bpp; struct osd_fb_dev_s *fbdev = NULL; - enum vmode_e current_mode = VMODE_MASK; - enum vmode_e logo_init = 0; const void *prop; int prop_idx = 0; const char *str; @@ -2388,6 +2422,13 @@ static int osd_probe(struct platform_device *pdev) goto failed1; } #endif + /* init osd logo */ + ret = logo_work_init(); + if (ret == 0) + osd_init_hw(1); + else + osd_init_hw(0); + /* get buffer size from dt */ ret = of_property_read_u32_array(pdev->dev.of_node, "mem_size", fb_memsize, 2); @@ -2416,12 +2457,6 @@ static int osd_probe(struct platform_device *pdev) /* get default display mode from dt */ ret = of_property_read_string(pdev->dev.of_node, "display_mode_default", &str); - if (ret) - current_mode = VMODE_MASK; - #ifdef CONFIG_AMLOGIC_TV_OUTPUT - else - current_mode = vmode_name_to_mode(str); - #endif prop = of_get_property(pdev->dev.of_node, "pxp_mode", NULL); if (prop) prop_idx = of_read_ulong(prop, 1); @@ -2434,16 +2469,7 @@ static int osd_probe(struct platform_device *pdev) osd_set_urgent(1, (prop_idx != 0) ? 1 : 0); } - /* if osd_init_hw is not set by logo, set vmode and init osd hw */ - logo_init = osd_get_init_hw_flag(); - if (logo_init == 0) { - if (current_mode < VMODE_MASK) - set_current_vmode(current_mode); - osd_init_hw(0); - } - vinfo = get_current_vinfo(); - osd_log_info("%s vinfo:%p\n", __func__, vinfo); for (index = 0; index < OSD_COUNT; index++) { /* register frame buffer memory */ fbi = framebuffer_alloc(sizeof(struct osd_fb_dev_s), @@ -2544,6 +2570,8 @@ static int osd_probe(struct platform_device *pdev) /* register vout client */ vout_register_client(&osd_notifier_nb); + INIT_DELAYED_WORK(&osd_dwork, mem_free_work); + schedule_delayed_work(&osd_dwork, msecs_to_jiffies(60 * 1000)); osd_log_info("osd probe OK\n"); return 0; @@ -2624,6 +2652,11 @@ exit: static int rmem_fb_device_init(struct reserved_mem *rmem, struct device *dev) { + if (!of_get_flat_dt_prop(rmem->fdt_node, "no-map", NULL)) { + fb_map_flag = true; + osd_log_info("momery mapped[can free]\n"); + } else + fb_map_flag = false; return 0; } @@ -2708,7 +2741,7 @@ static void __exit osd_exit_module(void) platform_driver_unregister(&osd_driver); } -module_init(osd_init_module); +subsys_initcall(osd_init_module); module_exit(osd_exit_module); MODULE_AUTHOR("Platform-BJ "); diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c index 75faf9b05b66..dca7fca42374 100644 --- a/drivers/amlogic/media/osd/osd_hw.c +++ b/drivers/amlogic/media/osd/osd_hw.c @@ -112,7 +112,6 @@ static unsigned int osd_auto_adjust_filter = 1; module_param(osd_auto_adjust_filter, uint, 0664); MODULE_PARM_DESC(osd_auto_adjust_filter, "osd_auto_adjust_filter"); -static int osd_init_hw_flag; static int osd_logo_index = 1; module_param(osd_logo_index, int, 0664); MODULE_PARM_DESC(osd_logo_index, "osd_logo_index"); @@ -3256,7 +3255,7 @@ void osd_init_hw(u32 logo_loaded) osd_hw.free_src_data[OSD2].x_end = 0; osd_hw.free_src_data[OSD2].y_start = 0; osd_hw.free_src_data[OSD2].y_end = 0; - osd_hw.free_scale_mode[OSD1] = 1; + osd_hw.free_scale_mode[OSD1] = 0; osd_hw.free_scale_mode[OSD2] = 1; if (get_cpu_type() == MESON_CPU_MAJOR_ID_GXM) osd_reg_write(VPP_OSD_SC_DUMMY_DATA, 0x002020ff); @@ -3294,7 +3293,6 @@ void osd_init_hw(u32 logo_loaded) osd_rdma_enable(1); #endif - osd_init_hw_flag = 1; } #if defined(CONFIG_AMLOGIC_MEDIA_FB_OSD2_CURSOR) @@ -3502,11 +3500,6 @@ void osd_set_logo_index(int index) osd_logo_index = index; } -int osd_get_init_hw_flag(void) -{ - return osd_init_hw_flag; -} - void osd_get_hw_para(struct hw_para_s **para) { *para = &osd_hw; diff --git a/drivers/amlogic/media/osd/osd_hw.h b/drivers/amlogic/media/osd/osd_hw.h index 2171732f4748..7f198e93123f 100644 --- a/drivers/amlogic/media/osd/osd_hw.h +++ b/drivers/amlogic/media/osd/osd_hw.h @@ -145,4 +145,7 @@ extern void osd_switch_free_scale( u32 next_index, u32 next_enable, u32 next_scale); extern void osd_get_urgent(u32 index, u32 *urgent); extern void osd_set_urgent(u32 index, u32 urgent); +int logo_work_init(void); +void set_logo_loaded(void); +int set_osd_logo_freescaler(void); #endif diff --git a/drivers/amlogic/media/logo/logo.c b/drivers/amlogic/media/osd/osd_logo.c similarity index 56% rename from drivers/amlogic/media/logo/logo.c rename to drivers/amlogic/media/osd/osd_logo.c index 8c7f74a7e10a..0e1a3a0fe014 100644 --- a/drivers/amlogic/media/logo/logo.c +++ b/drivers/amlogic/media/osd/osd_logo.c @@ -1,5 +1,5 @@ /* - * drivers/amlogic/media/logo/logo.c + * drivers/amlogic/media/osd/osd_logo.c * * Copyright (C) 2017 Amlogic, Inc. All rights reserved. * @@ -13,19 +13,23 @@ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * - */ +*/ + /* Linux Headers */ #include #include #include +#include /* Amlogic Headers */ #include #include + /* Local Headers */ -#include +#include "osd_hw.h" +#include "osd_log.h" #undef pr_fmt @@ -36,12 +40,6 @@ #define LOGO_DEBUG 0x1001 #define LOGO_LOADED 0x1002 -static enum vmode_e hdmimode = VMODE_MAX; -static enum vmode_e cvbsmode = VMODE_MAX; -static enum vmode_e last_mode = VMODE_MAX; -static u32 vout_init_vmode = VMODE_INIT_NULL; - -struct delayed_work logo_work; static DEFINE_MUTEX(logo_lock); struct para_pair_s { @@ -49,6 +47,7 @@ struct para_pair_s { int value; }; + static struct para_pair_s logo_args[] = { {"osd0", LOGO_DEV_OSD0}, {"osd1", LOGO_DEV_OSD1}, @@ -56,6 +55,7 @@ static struct para_pair_s logo_args[] = { {"loaded", LOGO_LOADED}, }; + struct logo_info_s { int index; u32 vmode; @@ -68,7 +68,6 @@ struct logo_info_s { .loaded = 0, }; - static int get_value_by_name(char *name, struct para_pair_s *pair, u32 cnt) { u32 i = 0; @@ -84,118 +83,12 @@ static int get_value_by_name(char *name, struct para_pair_s *pair, u32 cnt) return found; } -int set_osd_freescaler(int index, enum vmode_e new_mode) -{ - const struct vinfo_s *vinfo; - - osd_set_free_scale_mode_hw(index, 1); - osd_set_free_scale_enable_hw(index, 0); - - osd_set_free_scale_axis_hw(index, 0, 0, 1919, 1079); - osd_update_disp_axis_hw(index, 0, 1919, 0, 1079, 0, 0, 0); - vinfo = get_current_vinfo(); - if (vinfo) { - pr_info("outputmode changed to %s, reset osd%d scaler\n", - vinfo->name, index); - osd_set_window_axis_hw(index, 0, 0, - (vinfo->width - 1), (vinfo->height - 1)); - } else { - osd_set_window_axis_hw(index, 0, 0, 1919, 1079); - pr_info("error: vinfo is NULL\n"); - } - - if (osd_get_logo_index() != logo_info.index) { - pr_info("logo changed, return"); - return -1; - } - osd_set_free_scale_enable_hw(index, 0x10001); - osd_enable_hw(index, 1); - pr_info("finish"); - return 0; -} - -enum vmode_e get_logo_vmode(void) -{ - return vout_init_vmode; -} -EXPORT_SYMBOL(get_logo_vmode); - -static int set_logo_vmode(enum vmode_e mode) -{ - int ret = 0; - - if (mode == VMODE_INIT_NULL) - return -1; - - vout_init_vmode = mode; - set_current_vmode(mode); - - return ret; -} - -static int refresh_mode_and_logo(bool first) -{ - enum vmode_e cur_mode = VMODE_MAX; - int hdp_state = 0; - -#ifdef AMLOGIC_HDMI_TX - hdp_state = get_hpd_state(); -#endif - - if (!first && osd_get_logo_index() != logo_info.index) - return -1; - - if (hdp_state) - cur_mode = hdmimode; - else - cur_mode = cvbsmode; - - if (first) { - last_mode = get_logo_vmode(); - - if (logo_info.index >= 0) { - osd_set_logo_index(logo_info.index); - /* osd_init_hw(logo_info.loaded); */ - } - } - - if (cur_mode >= VMODE_MAX) /* not box platform */ - return -1; - if (cur_mode != last_mode) { - pr_info("mode chang\n"); - if (logo_info.index >= 0) - osd_enable_hw(logo_info.index, 0); - set_logo_vmode(cur_mode); - pr_info("set vmode: %s\n", - get_current_vinfo()->name); - last_mode = cur_mode; - vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE, &cur_mode); - if (logo_info.index >= 0) - set_osd_freescaler(logo_info.index, cur_mode); - } - - return 0; -} - -void aml_logo_work(struct work_struct *work) -{ - mutex_lock(&logo_lock); - - refresh_mode_and_logo(false); - - mutex_unlock(&logo_lock); - - if (osd_get_logo_index() == logo_info.index) - schedule_delayed_work(&logo_work, 1*HZ/2); - -} - static int logo_info_init(char *para) { u32 count = 0; int value = -1; - count = ARRAY_SIZE(logo_args) / sizeof(logo_args[0]); + count = sizeof(logo_args) / sizeof(logo_args[0]); value = get_value_by_name(para, logo_args, count); if (value >= 0) { switch (value) { @@ -264,45 +157,52 @@ static int __init logo_setup(char *str) } return 0; } -__setup("logo=", logo_setup); -static int __init get_hdmi_mode(char *str) + +int set_osd_logo_freescaler(void) { - hdmimode = get_current_vmode(); - /* hdmimode = vmode_name_to_mode(str); */ - - pr_info("get hdmimode: %s\n", str); - return 1; -} -__setup("hdmimode=", get_hdmi_mode); - -static int __init get_cvbs_mode(char *str) -{ - if (strncmp("480", str, 3) == 0) - cvbsmode = 0;//VMODE_480CVBS;//DEBUG_TMP - else if (strncmp("576", str, 3) == 0) - cvbsmode = 0;//VMODE_576CVBS;//DEBUG_TMP - else if (strncmp("nocvbs", str, 6) == 0) - cvbsmode = hdmimode; - pr_info("get cvbsmode: %s\n", str); - return 1; -} -__setup("cvbsmode=", get_cvbs_mode); - -static int __init logo_init(void) -{ - int ret = 0; - - pr_info("%s\n", __func__); + const struct vinfo_s *vinfo; + u32 index = logo_info.index; if (logo_info.loaded == 0) return 0; + if (osd_get_logo_index() != logo_info.index) { + pr_info("logo changed, return!\n"); + return -1; + } - refresh_mode_and_logo(true); + osd_set_free_scale_mode_hw(index, 1); + osd_set_free_scale_enable_hw(index, 0); - INIT_DELAYED_WORK(&logo_work, aml_logo_work); - schedule_delayed_work(&logo_work, 1*HZ/2); - - return ret; + osd_set_free_scale_axis_hw(index, 0, 0, 1919, 1079); + osd_update_disp_axis_hw(index, 0, 1919, 0, 1079, 0, 0, 0); + vinfo = get_current_vinfo(); + if (vinfo) { + pr_info("outputmode changed to %s, reset osd%d scaler\n", + vinfo->name, index); + osd_set_window_axis_hw(index, 0, 0, + (vinfo->width - 1), (vinfo->height - 1)); + } else { + osd_set_window_axis_hw(index, 0, 0, 1919, 1079); + } + osd_set_free_scale_enable_hw(index, 0x10001); + osd_enable_hw(index, 1); + return 0; +} + + +void set_logo_loaded(void) +{ + logo_info.loaded = 0; +} + +__setup("logo=", logo_setup); + + +int logo_work_init(void) +{ + if (logo_info.loaded == 0) + return -1; + osd_set_logo_index(logo_info.index); + return 0; } -subsys_initcall(logo_init); diff --git a/drivers/amlogic/media/video_sink/video.c b/drivers/amlogic/media/video_sink/video.c index 1d2040cfc7fc..48dea96bfcf0 100644 --- a/drivers/amlogic/media/video_sink/video.c +++ b/drivers/amlogic/media/video_sink/video.c @@ -7810,6 +7810,8 @@ static void do_vpu_delay_work(struct work_struct *work) /*********************************************************/ static int __init video_early_init(void) { + const struct vinfo_s *vinfo; + /* todo: move this to clock tree, enable VPU clock */ #if DEBUG_TMP WRITE_CBUS_REG(HHI_VPU_CLK_CNTL, @@ -7818,8 +7820,11 @@ static int __init video_early_init(void) (3<<9) | (1<<8) | (0)); // fclk_div7/1 = 364M //moved to vpu.c, default config by dts #endif + vinfo = get_current_vinfo(); + if (!vinfo) + return -1; - if (get_logo_vmode() >= VMODE_MAX) { + if (vinfo->mode >= VMODE_MAX) { #if 1 /* MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON6 */ if (is_meson_gxtvbb_cpu()) WRITE_VCBUS_REG_BITS(VPP_OFIFO_SIZE, 0xfff, @@ -7851,7 +7856,7 @@ static int __init video_early_init(void) if (is_meson_gxbb_cpu()) SET_VCBUS_REG_MASK(VPP_MISC, VPP_OUT_SATURATE); - if (get_logo_vmode() >= VMODE_MAX) { + if (vinfo->mode >= VMODE_MAX) { CLEAR_VCBUS_REG_MASK(VPP_VSC_PHASE_CTRL, VPP_PHASECTL_TYPE_INTERLACE); #ifndef CONFIG_FB_AML_TCON @@ -7860,7 +7865,7 @@ static int __init video_early_init(void) WRITE_VCBUS_REG(VPP_HOLD_LINES + cur_dev->vpp_off, 0x08080808); } #ifdef CONFIG_SUPPORT_VIDEO_ON_VPP2 - if (get_logo_vmode() >= VMODE_MAX) { + if (vinfo->mode >= VMODE_MAX) { CLEAR_VCBUS_REG_MASK(VPP2_VSC_PHASE_CTRL, VPP_PHASECTL_TYPE_INTERLACE); #ifndef CONFIG_FB_AML_TCON