diff options
author | Troy Kisky <troy.kisky@boundarydevices.com> | 2016-09-26 17:53:40 -0700 |
---|---|---|
committer | Max Krummenacher <max.krummenacher@toradex.com> | 2019-02-27 15:56:05 +0100 |
commit | 2d0ac35ddfb291101bbea6707c4d44ee63466d12 (patch) | |
tree | bdfeb19b893723a327dbb30e84be4521d6e0fbdd /drivers | |
parent | 8e79e4d7cfc72cb655f3666586ad1f0a5702fd5e (diff) |
fbcon: fix showing of logo for hdmi
Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
(cherry picked from commit fec124e94eb25b97772907c1cf863a66556c0e3f)
Related to #47541
Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/video/console/fbcon.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 478b577ccab2..885ce361a75c 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -68,6 +68,7 @@ #include <linux/kd.h> #include <linux/slab.h> #include <linux/fb.h> +#include <linux/linux_logo.h> #include <linux/vt_kern.h> #include <linux/selection.h> #include <linux/font.h> @@ -551,6 +552,27 @@ static int do_fbcon_takeover(int show_logo) return err; } +static void update_logo_shown(struct vc_data *vc) +{ +#ifdef CONFIG_LOGO + if (!logo_lines || (fg_console != vc->vc_num)) + return; + + if (fb_logos_freed()) { + logo_shown = FBCON_LOGO_CANSHOW; + return; + } + + if (logo_lines > vc->vc_bottom) { + logo_shown = FBCON_LOGO_CANSHOW; + pr_info("fbcon_init: boot-logo may be bigger than screen.\n"); + } else if (logo_shown != FBCON_LOGO_DONTSHOW) { + logo_shown = FBCON_LOGO_DRAW; + vc->vc_top = logo_lines; + } +#endif +} + #ifdef MODULE static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, int cols, int rows, int new_cols, int new_rows) @@ -632,15 +654,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info, vc->vc_pos += logo_lines * vc->vc_size_row; kfree(save); } - - if (logo_lines > vc->vc_bottom) { - logo_shown = FBCON_LOGO_CANSHOW; - printk(KERN_INFO - "fbcon_init: disable boot-logo (boot-logo bigger than screen).\n"); - } else if (logo_shown != FBCON_LOGO_DONTSHOW) { - logo_shown = FBCON_LOGO_DRAW; - vc->vc_top = logo_lines; - } + update_logo_shown(vc); } #endif /* MODULE */ @@ -2187,8 +2201,8 @@ static int fbcon_switch(struct vc_data *vc) if (conp2->vc_top == logo_lines && conp2->vc_bottom == conp2->vc_rows) conp2->vc_top = 0; - logo_shown = FBCON_LOGO_CANSHOW; } + update_logo_shown(vc); prev_console = ops->currcon; if (prev_console != -1) |