Skip to content

Commit

Permalink
xiaomi-begonia: Backport kernel logo centering patches
Browse files Browse the repository at this point in the history
  • Loading branch information
samueldr committed Jun 27, 2020
1 parent dce5534 commit 3557d0c
Show file tree
Hide file tree
Showing 2 changed files with 273 additions and 0 deletions.
272 changes: 272 additions & 0 deletions devices/xiaomi-begonia/kernel/0001-center-logo.patch
@@ -0,0 +1,272 @@
From 909ccff49e48c3c8765e4d9587af3ca40589c8ce Mon Sep 17 00:00:00 2001
From: Peter Rosin <peda@axentia.se>
Date: Mon, 26 Nov 2018 21:57:39 +0000
Subject: [PATCH 1/4] fbdev: fbmem: make fb_show_logo_line return the end
instead of the height

In preparation for allowing centering of the bootup logo, make
fb_show_logo_line return where the next free framebuffer line is,
instead of returning the height of the shown logo.

Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/video/fbdev/core/fbmem.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 138470409f49..064842afcd71 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -527,7 +527,7 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
info->pseudo_palette = saved_pseudo_palette;
kfree(logo_new);
kfree(logo_rotate);
- return logo->height;
+ return image.dy + logo->height;
}


@@ -579,8 +579,8 @@ static int fb_show_extra_logos(struct fb_info *info, int y, int rotate)
unsigned int i;

for (i = 0; i < fb_logo_ex_num; i++)
- y += fb_show_logo_line(info, rotate,
- fb_logo_ex[i].logo, y, fb_logo_ex[i].n);
+ y = fb_show_logo_line(info, rotate,
+ fb_logo_ex[i].logo, y, fb_logo_ex[i].n);

return y;
}
--
2.25.3


From b7e0e37a7ce12414f7fe465f9adb2ae2212998cb Mon Sep 17 00:00:00 2001
From: Peter Rosin <peda@axentia.se>
Date: Mon, 26 Nov 2018 21:57:41 +0000
Subject: [PATCH 2/4] fbdev: fbmem: add config option to center the bootup logo

If there are extra logos (CONFIG_FB_LOGO_EXTRA) the heights of these
extra logos are not considered when centering the first logo vertically.

Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/video/fbdev/core/fbmem.c | 25 ++++++++++++++++++++++++-
drivers/video/logo/Kconfig | 9 +++++++++
2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 064842afcd71..176a61a46e02 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -508,8 +508,25 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
fb_set_logo(info, logo, logo_new, fb_logo.depth);
}

+#ifdef CONFIG_FB_LOGO_CENTER
+ {
+ int xres = info->var.xres;
+ int yres = info->var.yres;
+
+ if (rotate == FB_ROTATE_CW || rotate == FB_ROTATE_CCW) {
+ xres = info->var.yres;
+ yres = info->var.xres;
+ }
+
+ while (n && (n * (logo->width + 8) - 8 > xres))
+ --n;
+ image.dx = (xres - n * (logo->width + 8) - 8) / 2;
+ image.dy = y ?: (yres - logo->height) / 2;
+ }
+#else
image.dx = 0;
image.dy = y;
+#endif
image.width = logo->width;
image.height = logo->height;

@@ -606,6 +623,7 @@ int fb_prepare_logo(struct fb_info *info, int rotate)
{
int depth = fb_get_color_depth(&info->var, &info->fix);
unsigned int yres;
+ int height;

memset(&fb_logo, 0, sizeof(struct logo_data));

@@ -667,7 +685,12 @@ int fb_prepare_logo(struct fb_info *info, int rotate)
}
}

- return fb_prepare_extra_logos(info, fb_logo.logo->height, yres);
+ height = fb_logo.logo->height;
+#ifdef CONFIG_FB_LOGO_CENTER
+ height += (yres - fb_logo.logo->height) / 2;
+#endif
+
+ return fb_prepare_extra_logos(info, height, yres);
}

int fb_show_logo(struct fb_info *info, int rotate)
diff --git a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig
index 0037104d66ac..3f4b5465afbc 100644
--- a/drivers/video/logo/Kconfig
+++ b/drivers/video/logo/Kconfig
@@ -10,6 +10,15 @@ menuconfig LOGO

if LOGO

+config FB_LOGO_CENTER
+ bool "Center the logo"
+ depends on FB=y
+ help
+ When this option is selected, the bootup logo is centered both
+ horizontally and vertically. If more than one logo is displayed
+ due to multiple CPUs, the collected line of logos is centered
+ as a whole.
+
config FB_LOGO_EXTRA
bool
depends on FB=y
--
2.25.3


From df4d2a871da9f23eb57559cbd7778c7a6d0d76b8 Mon Sep 17 00:00:00 2001
From: Peter Rosin <peda@axentia.se>
Date: Mon, 7 Jan 2019 08:35:26 +0100
Subject: [PATCH 3/4] fbdev: fbmem: convert CONFIG_FB_LOGO_CENTER into a cmd
line option

A command line option is much more flexible than a config option and
the supporting code is small. Gets rid of #ifdefs in the code too...

Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Peter Rosin <peda@axentia.se>
---
drivers/video/fbdev/core/fbmem.c | 19 ++++++++++---------
drivers/video/logo/Kconfig | 9 ---------
include/linux/fb.h | 1 +
3 files changed, 11 insertions(+), 18 deletions(-)

diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 176a61a46e02..0fc6f30e9fde 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -53,6 +53,9 @@ EXPORT_SYMBOL(registered_fb);
int num_registered_fb __read_mostly;
EXPORT_SYMBOL(num_registered_fb);

+bool fb_center_logo __read_mostly;
+EXPORT_SYMBOL(fb_center_logo);
+
static struct fb_info *get_fb_info(unsigned int idx)
{
struct fb_info *fb_info;
@@ -508,8 +511,7 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
fb_set_logo(info, logo, logo_new, fb_logo.depth);
}

-#ifdef CONFIG_FB_LOGO_CENTER
- {
+ if (fb_center_logo) {
int xres = info->var.xres;
int yres = info->var.yres;

@@ -522,11 +524,11 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
--n;
image.dx = (xres - n * (logo->width + 8) - 8) / 2;
image.dy = y ?: (yres - logo->height) / 2;
+ } else {
+ image.dx = 0;
+ image.dy = y;
}
-#else
- image.dx = 0;
- image.dy = y;
-#endif
+
image.width = logo->width;
image.height = logo->height;

@@ -686,9 +688,8 @@ int fb_prepare_logo(struct fb_info *info, int rotate)
}

height = fb_logo.logo->height;
-#ifdef CONFIG_FB_LOGO_CENTER
- height += (yres - fb_logo.logo->height) / 2;
-#endif
+ if (fb_center_logo)
+ height += (yres - fb_logo.logo->height) / 2;

return fb_prepare_extra_logos(info, height, yres);
}
diff --git a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig
index 3f4b5465afbc..0037104d66ac 100644
--- a/drivers/video/logo/Kconfig
+++ b/drivers/video/logo/Kconfig
@@ -10,15 +10,6 @@ menuconfig LOGO

if LOGO

-config FB_LOGO_CENTER
- bool "Center the logo"
- depends on FB=y
- help
- When this option is selected, the bootup logo is centered both
- horizontally and vertically. If more than one logo is displayed
- due to multiple CPUs, the collected line of logos is centered
- as a whole.
-
config FB_LOGO_EXTRA
bool
depends on FB=y
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 74063db2b193..d34433e08114 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -642,6 +642,7 @@ extern int fb_new_modelist(struct fb_info *info);

extern struct fb_info *registered_fb[FB_MAX];
extern int num_registered_fb;
+extern bool fb_center_logo;
extern struct class *fb_class;

extern int lock_fb_info(struct fb_info *info);
--
2.25.3


From a4cfd195dc2bbcad6d0fbab07cea8072b1eda69c Mon Sep 17 00:00:00 2001
From: Peter Rosin <peda@axentia.se>
Date: Tue, 27 Aug 2019 11:09:26 +0000
Subject: [PATCH 4/4] fbdev: fbmem: avoid exporting fb_center_logo

The variable is only ever used from fbcon.c which is linked into the
same module. Therefore, the export is not needed.

Signed-off-by: Peter Rosin <peda@axentia.se>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Matthew Wilcox <willy@infradead.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190827110854.12574-4-peda@axentia.se
(cherry picked from commit ab1c4c5e9d111a867964f4a67d9ab4a564d16b90)
---
drivers/video/fbdev/core/fbmem.c | 1 -
1 file changed, 1 deletion(-)

diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 0fc6f30e9fde..e169973e7f1d 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -54,7 +54,6 @@ int num_registered_fb __read_mostly;
EXPORT_SYMBOL(num_registered_fb);

bool fb_center_logo __read_mostly;
-EXPORT_SYMBOL(fb_center_logo);

static struct fb_info *get_fb_info(unsigned int idx)
{
--
2.25.3

1 change: 1 addition & 0 deletions devices/xiaomi-begonia/kernel/default.nix
Expand Up @@ -66,6 +66,7 @@ in
patches = [
./0001-mtkfb-Default-to-RGB-order.patch
./0001-fix-teei-mediatek.patch
./0001-center-logo.patch
./0003-arch-arm64-Add-config-option-to-fix-bootloader-cmdli.patch
];

Expand Down

0 comments on commit 3557d0c

Please sign in to comment.