mirror of
https://github.com/NixOS/mobile-nixos.git
synced 2024-12-24 00:12:13 +03:00
273 lines
8.1 KiB
Diff
273 lines
8.1 KiB
Diff
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
|
|
|