summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorTroy Kisky <troy.kisky@boundarydevices.com>2016-09-26 17:53:40 -0700
committerMax Krummenacher <max.krummenacher@toradex.com>2019-02-27 15:56:05 +0100
commit2d0ac35ddfb291101bbea6707c4d44ee63466d12 (patch)
treebdfeb19b893723a327dbb30e84be4521d6e0fbdd /drivers/video
parent8e79e4d7cfc72cb655f3666586ad1f0a5702fd5e (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/video')
-rw-r--r--drivers/video/console/fbcon.c34
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)