Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
xiaomi-begonia: Backport kernel logo centering patches
- Loading branch information
Showing
2 changed files
with
273 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters