linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens
@ 2019-06-18 20:34 Takashi Iwai
  2019-06-18 20:34 ` [PATCH RFC 1/3] fonts: Fix coding style Takashi Iwai
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Takashi Iwai @ 2019-06-18 20:34 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: linux-kernel

Hi,

this is an RFC patch for automatically selecting a bigger font for
high resolution monitors if available.  Although we recently got a
16x32 sized font support in the kernel, using it still requires some
extra kernel option.  This patch reduces this and the kernel will pick
up a bigger font.

The logic is simply checking the text screen size.  If it's over a
threshold, the penalty is given to the function that chooses the
default font.

The threshold was chosen so that the normal display up to Full HD
won't be affected.

There are two preliminary patches and they are merely cleanups.  They
can be applied no matter whether to take the last patch or not.


thanks,

Takashi

===

Takashi Iwai (3):
  fonts: Fix coding style
  fonts: Use BUILD_BUG_ON() for checking empty font table
  fonts: Prefer a bigger font for high resolution screens

 lib/fonts/fonts.c | 103 ++++++++++++++++++++++++------------------------------
 1 file changed, 46 insertions(+), 57 deletions(-)

-- 
2.16.4


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH RFC 1/3] fonts: Fix coding style
  2019-06-18 20:34 [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens Takashi Iwai
@ 2019-06-18 20:34 ` Takashi Iwai
  2019-06-18 20:34 ` [PATCH RFC 2/3] fonts: Use BUILD_BUG_ON() for checking empty font table Takashi Iwai
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Takashi Iwai @ 2019-06-18 20:34 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: linux-kernel

Fix indentation, spaces, and move EXPORT_SYMBOL line to the
appropriate place as a preliminary work.  No actual code change.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 lib/fonts/fonts.c | 83 +++++++++++++++++++++++++++----------------------------
 1 file changed, 40 insertions(+), 43 deletions(-)

diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c
index 9969358a7af5..269a829fcbb7 100644
--- a/lib/fonts/fonts.c
+++ b/lib/fonts/fonts.c
@@ -25,51 +25,51 @@
 static const struct font_desc *fonts[] = {
 #ifdef CONFIG_FONT_8x8
 #undef NO_FONTS
-    &font_vga_8x8,
+	&font_vga_8x8,
 #endif
 #ifdef CONFIG_FONT_8x16
 #undef NO_FONTS
-    &font_vga_8x16,
+	&font_vga_8x16,
 #endif
 #ifdef CONFIG_FONT_6x11
 #undef NO_FONTS
-    &font_vga_6x11,
+	&font_vga_6x11,
 #endif
 #ifdef CONFIG_FONT_7x14
 #undef NO_FONTS
-    &font_7x14,
+	&font_7x14,
 #endif
 #ifdef CONFIG_FONT_SUN8x16
 #undef NO_FONTS
-    &font_sun_8x16,
+	&font_sun_8x16,
 #endif
 #ifdef CONFIG_FONT_SUN12x22
 #undef NO_FONTS
-    &font_sun_12x22,
+	&font_sun_12x22,
 #endif
 #ifdef CONFIG_FONT_10x18
 #undef NO_FONTS
-    &font_10x18,
+	&font_10x18,
 #endif
 #ifdef CONFIG_FONT_ACORN_8x8
 #undef NO_FONTS
-    &font_acorn_8x8,
+	&font_acorn_8x8,
 #endif
 #ifdef CONFIG_FONT_PEARL_8x8
 #undef NO_FONTS
-    &font_pearl_8x8,
+	&font_pearl_8x8,
 #endif
 #ifdef CONFIG_FONT_MINI_4x6
 #undef NO_FONTS
-    &font_mini_4x6,
+	&font_mini_4x6,
 #endif
 #ifdef CONFIG_FONT_6x10
 #undef NO_FONTS
-    &font_6x10,
+	&font_6x10,
 #endif
 #ifdef CONFIG_FONT_TER16x32
 #undef NO_FONTS
-    &font_ter_16x32,
+	&font_ter_16x32,
 #endif
 };
 
@@ -90,16 +90,16 @@ static const struct font_desc *fonts[] = {
  *	specified font.
  *
  */
-
 const struct font_desc *find_font(const char *name)
 {
-   unsigned int i;
+	unsigned int i;
 
-   for (i = 0; i < num_fonts; i++)
-      if (!strcmp(fonts[i]->name, name))
-	  return fonts[i];
-   return NULL;
+	for (i = 0; i < num_fonts; i++)
+		if (!strcmp(fonts[i]->name, name))
+			return fonts[i];
+	return NULL;
 }
+EXPORT_SYMBOL(find_font);
 
 
 /**
@@ -116,44 +116,41 @@ const struct font_desc *find_font(const char *name)
  *	chosen font.
  *
  */
-
 const struct font_desc *get_default_font(int xres, int yres, u32 font_w,
 					 u32 font_h)
 {
-    int i, c, cc;
-    const struct font_desc *f, *g;
-
-    g = NULL;
-    cc = -10000;
-    for(i=0; i<num_fonts; i++) {
-	f = fonts[i];
-	c = f->pref;
+	int i, c, cc;
+	const struct font_desc *f, *g;
+
+	g = NULL;
+	cc = -10000;
+	for (i = 0; i < num_fonts; i++) {
+		f = fonts[i];
+		c = f->pref;
 #if defined(__mc68000__)
 #ifdef CONFIG_FONT_PEARL_8x8
-	if (MACH_IS_AMIGA && f->idx == PEARL8x8_IDX)
-	    c = 100;
+		if (MACH_IS_AMIGA && f->idx == PEARL8x8_IDX)
+			c = 100;
 #endif
 #ifdef CONFIG_FONT_6x11
-	if (MACH_IS_MAC && xres < 640 && f->idx == VGA6x11_IDX)
-	    c = 100;
+		if (MACH_IS_MAC && xres < 640 && f->idx == VGA6x11_IDX)
+			c = 100;
 #endif
 #endif
-	if ((yres < 400) == (f->height <= 8))
-	    c += 1000;
+		if ((yres < 400) == (f->height <= 8))
+			c += 1000;
 
-	if ((font_w & (1 << (f->width - 1))) &&
-	    (font_h & (1 << (f->height - 1))))
-	    c += 1000;
+		if ((font_w & (1 << (f->width - 1))) &&
+		    (font_h & (1 << (f->height - 1))))
+			c += 1000;
 
-	if (c > cc) {
-	    cc = c;
-	    g = f;
+		if (c > cc) {
+			cc = c;
+			g = f;
+		}
 	}
-    }
-    return g;
+	return g;
 }
-
-EXPORT_SYMBOL(find_font);
 EXPORT_SYMBOL(get_default_font);
 
 MODULE_AUTHOR("James Simmons <jsimmons@users.sf.net>");
-- 
2.16.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH RFC 2/3] fonts: Use BUILD_BUG_ON() for checking empty font table
  2019-06-18 20:34 [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens Takashi Iwai
  2019-06-18 20:34 ` [PATCH RFC 1/3] fonts: Fix coding style Takashi Iwai
@ 2019-06-18 20:34 ` Takashi Iwai
  2019-06-18 23:05   ` Randy Dunlap
  2019-06-18 20:34 ` [PATCH RFC 3/3] fonts: Prefer a bigger font for high resolution screens Takashi Iwai
  2019-06-20  6:28 ` [PATCH RFC 0/3] Automatically choose " Greg Kroah-Hartman
  3 siblings, 1 reply; 9+ messages in thread
From: Takashi Iwai @ 2019-06-18 20:34 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: linux-kernel

We have a nice macro, and the check of emptiness of the font table can
be done in a simpler way.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 lib/fonts/fonts.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c
index 269a829fcbb7..a8e31e9d6fc5 100644
--- a/lib/fonts/fonts.c
+++ b/lib/fonts/fonts.c
@@ -20,55 +20,41 @@
 #endif
 #include <linux/font.h>
 
-#define NO_FONTS
-
 static const struct font_desc *fonts[] = {
 #ifdef CONFIG_FONT_8x8
-#undef NO_FONTS
 	&font_vga_8x8,
 #endif
 #ifdef CONFIG_FONT_8x16
-#undef NO_FONTS
 	&font_vga_8x16,
 #endif
 #ifdef CONFIG_FONT_6x11
-#undef NO_FONTS
 	&font_vga_6x11,
 #endif
 #ifdef CONFIG_FONT_7x14
-#undef NO_FONTS
 	&font_7x14,
 #endif
 #ifdef CONFIG_FONT_SUN8x16
-#undef NO_FONTS
 	&font_sun_8x16,
 #endif
 #ifdef CONFIG_FONT_SUN12x22
-#undef NO_FONTS
 	&font_sun_12x22,
 #endif
 #ifdef CONFIG_FONT_10x18
-#undef NO_FONTS
 	&font_10x18,
 #endif
 #ifdef CONFIG_FONT_ACORN_8x8
-#undef NO_FONTS
 	&font_acorn_8x8,
 #endif
 #ifdef CONFIG_FONT_PEARL_8x8
-#undef NO_FONTS
 	&font_pearl_8x8,
 #endif
 #ifdef CONFIG_FONT_MINI_4x6
-#undef NO_FONTS
 	&font_mini_4x6,
 #endif
 #ifdef CONFIG_FONT_6x10
-#undef NO_FONTS
 	&font_6x10,
 #endif
 #ifdef CONFIG_FONT_TER16x32
-#undef NO_FONTS
 	&font_ter_16x32,
 #endif
 };
@@ -94,6 +80,7 @@ const struct font_desc *find_font(const char *name)
 {
 	unsigned int i;
 
+	BUILD_BUG_ON(!num_fonts);
 	for (i = 0; i < num_fonts; i++)
 		if (!strcmp(fonts[i]->name, name))
 			return fonts[i];
-- 
2.16.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH RFC 3/3] fonts: Prefer a bigger font for high resolution screens
  2019-06-18 20:34 [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens Takashi Iwai
  2019-06-18 20:34 ` [PATCH RFC 1/3] fonts: Fix coding style Takashi Iwai
  2019-06-18 20:34 ` [PATCH RFC 2/3] fonts: Use BUILD_BUG_ON() for checking empty font table Takashi Iwai
@ 2019-06-18 20:34 ` Takashi Iwai
  2019-06-20  6:28 ` [PATCH RFC 0/3] Automatically choose " Greg Kroah-Hartman
  3 siblings, 0 replies; 9+ messages in thread
From: Takashi Iwai @ 2019-06-18 20:34 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: linux-kernel

Although we may have multiple fonts in kernel, the small 8x16 font is
chosen as default usually unless user specify the boot option.  This
is suboptimal for monitors with high resolutions.

This patch tries to assign a bigger font for such a high resolution by
calculating some penalty value.  This won't change anything for a
standard monitor like Full HD (1920x1080), but for a high res monitor
like UHD 4K, a bigger font like TER16x32 will be chosen once when
enabled in Kconfig.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 lib/fonts/fonts.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c
index a8e31e9d6fc5..e7258d8c252b 100644
--- a/lib/fonts/fonts.c
+++ b/lib/fonts/fonts.c
@@ -106,7 +106,7 @@ EXPORT_SYMBOL(find_font);
 const struct font_desc *get_default_font(int xres, int yres, u32 font_w,
 					 u32 font_h)
 {
-	int i, c, cc;
+	int i, c, cc, res;
 	const struct font_desc *f, *g;
 
 	g = NULL;
@@ -127,6 +127,11 @@ const struct font_desc *get_default_font(int xres, int yres, u32 font_w,
 		if ((yres < 400) == (f->height <= 8))
 			c += 1000;
 
+		/* prefer a bigger font for high resolution */
+		res = (xres / f->width) * (yres / f->height) / 1000;
+		if (res > 20)
+			c += 20 - res;
+
 		if ((font_w & (1 << (f->width - 1))) &&
 		    (font_h & (1 << (f->height - 1))))
 			c += 1000;
-- 
2.16.4


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC 2/3] fonts: Use BUILD_BUG_ON() for checking empty font table
  2019-06-18 20:34 ` [PATCH RFC 2/3] fonts: Use BUILD_BUG_ON() for checking empty font table Takashi Iwai
@ 2019-06-18 23:05   ` Randy Dunlap
  2019-06-19  5:36     ` Takashi Iwai
  0 siblings, 1 reply; 9+ messages in thread
From: Randy Dunlap @ 2019-06-18 23:05 UTC (permalink / raw)
  To: Takashi Iwai, Greg Kroah-Hartman; +Cc: linux-kernel

On 6/18/19 1:34 PM, Takashi Iwai wrote:
> We have a nice macro, and the check of emptiness of the font table can
> be done in a simpler way.
> 
> Signed-off-by: Takashi Iwai <tiwai@suse.de>

Hi,

Looks good to me.
Acked-by: Randy Dunlap <rdunlap@infradead.org>

Also, would you mind adding TER16x32 to Documentation/fb/fbcon.rst, here:
(AFAIK that would be appropriate.)

1. fbcon=font:<name>

	Select the initial font to use. The value 'name' can be any of the
	compiled-in fonts: 10x18, 6x10, 7x14, Acorn8x8, MINI4x6,
	PEARL8x8, ProFont6x11, SUN12x22, SUN8x16, VGA8x16, VGA8x8.

> ---
>  lib/fonts/fonts.c | 15 +--------------
>  1 file changed, 1 insertion(+), 14 deletions(-)

Thanks.
-- 
~Randy

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC 2/3] fonts: Use BUILD_BUG_ON() for checking empty font table
  2019-06-18 23:05   ` Randy Dunlap
@ 2019-06-19  5:36     ` Takashi Iwai
  0 siblings, 0 replies; 9+ messages in thread
From: Takashi Iwai @ 2019-06-19  5:36 UTC (permalink / raw)
  To: Randy Dunlap; +Cc: Greg Kroah-Hartman, linux-kernel

On Wed, 19 Jun 2019 01:05:58 +0200,
Randy Dunlap wrote:
> 
> On 6/18/19 1:34 PM, Takashi Iwai wrote:
> > We have a nice macro, and the check of emptiness of the font table can
> > be done in a simpler way.
> > 
> > Signed-off-by: Takashi Iwai <tiwai@suse.de>
> 
> Hi,
> 
> Looks good to me.
> Acked-by: Randy Dunlap <rdunlap@infradead.org>
> 
> Also, would you mind adding TER16x32 to Documentation/fb/fbcon.rst, here:
> (AFAIK that would be appropriate.)
> 
> 1. fbcon=font:<name>
> 
> 	Select the initial font to use. The value 'name' can be any of the
> 	compiled-in fonts: 10x18, 6x10, 7x14, Acorn8x8, MINI4x6,
> 	PEARL8x8, ProFont6x11, SUN12x22, SUN8x16, VGA8x16, VGA8x8.

OK, will submit another patch.


thanks,

Takashi

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens
  2019-06-18 20:34 [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens Takashi Iwai
                   ` (2 preceding siblings ...)
  2019-06-18 20:34 ` [PATCH RFC 3/3] fonts: Prefer a bigger font for high resolution screens Takashi Iwai
@ 2019-06-20  6:28 ` Greg Kroah-Hartman
  2019-06-20  7:43   ` Takashi Iwai
  3 siblings, 1 reply; 9+ messages in thread
From: Greg Kroah-Hartman @ 2019-06-20  6:28 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: linux-kernel

On Tue, Jun 18, 2019 at 10:34:22PM +0200, Takashi Iwai wrote:
> Hi,
> 
> this is an RFC patch for automatically selecting a bigger font for
> high resolution monitors if available.  Although we recently got a
> 16x32 sized font support in the kernel, using it still requires some
> extra kernel option.  This patch reduces this and the kernel will pick
> up a bigger font.
> 
> The logic is simply checking the text screen size.  If it's over a
> threshold, the penalty is given to the function that chooses the
> default font.
> 
> The threshold was chosen so that the normal display up to Full HD
> won't be affected.
> 
> There are two preliminary patches and they are merely cleanups.  They
> can be applied no matter whether to take the last patch or not.

I applied the first two patches, as they seem sane.

I like the idea of the last one, and have no objections to it.  I can
apply it too if you want and we can see what happens :)

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens
  2019-06-20  6:28 ` [PATCH RFC 0/3] Automatically choose " Greg Kroah-Hartman
@ 2019-06-20  7:43   ` Takashi Iwai
  2019-06-20  8:12     ` Greg Kroah-Hartman
  0 siblings, 1 reply; 9+ messages in thread
From: Takashi Iwai @ 2019-06-20  7:43 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: linux-kernel

On Thu, 20 Jun 2019 08:28:21 +0200,
Greg Kroah-Hartman wrote:
> 
> On Tue, Jun 18, 2019 at 10:34:22PM +0200, Takashi Iwai wrote:
> > Hi,
> > 
> > this is an RFC patch for automatically selecting a bigger font for
> > high resolution monitors if available.  Although we recently got a
> > 16x32 sized font support in the kernel, using it still requires some
> > extra kernel option.  This patch reduces this and the kernel will pick
> > up a bigger font.
> > 
> > The logic is simply checking the text screen size.  If it's over a
> > threshold, the penalty is given to the function that chooses the
> > default font.
> > 
> > The threshold was chosen so that the normal display up to Full HD
> > won't be affected.
> > 
> > There are two preliminary patches and they are merely cleanups.  They
> > can be applied no matter whether to take the last patch or not.
> 
> I applied the first two patches, as they seem sane.

Thanks!

> I like the idea of the last one, and have no objections to it.  I can
> apply it too if you want and we can see what happens :)

OK, then let's go ahead.  We can see what people react if they can
read a kernel crash message without glasses :)


Takashi

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens
  2019-06-20  7:43   ` Takashi Iwai
@ 2019-06-20  8:12     ` Greg Kroah-Hartman
  0 siblings, 0 replies; 9+ messages in thread
From: Greg Kroah-Hartman @ 2019-06-20  8:12 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: linux-kernel

On Thu, Jun 20, 2019 at 09:43:21AM +0200, Takashi Iwai wrote:
> On Thu, 20 Jun 2019 08:28:21 +0200,
> Greg Kroah-Hartman wrote:
> > 
> > On Tue, Jun 18, 2019 at 10:34:22PM +0200, Takashi Iwai wrote:
> > > Hi,
> > > 
> > > this is an RFC patch for automatically selecting a bigger font for
> > > high resolution monitors if available.  Although we recently got a
> > > 16x32 sized font support in the kernel, using it still requires some
> > > extra kernel option.  This patch reduces this and the kernel will pick
> > > up a bigger font.
> > > 
> > > The logic is simply checking the text screen size.  If it's over a
> > > threshold, the penalty is given to the function that chooses the
> > > default font.
> > > 
> > > The threshold was chosen so that the normal display up to Full HD
> > > won't be affected.
> > > 
> > > There are two preliminary patches and they are merely cleanups.  They
> > > can be applied no matter whether to take the last patch or not.
> > 
> > I applied the first two patches, as they seem sane.
> 
> Thanks!
> 
> > I like the idea of the last one, and have no objections to it.  I can
> > apply it too if you want and we can see what happens :)
> 
> OK, then let's go ahead.  We can see what people react if they can
> read a kernel crash message without glasses :)

Now applied, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-06-20  8:12 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-18 20:34 [PATCH RFC 0/3] Automatically choose a bigger font for high resolution screens Takashi Iwai
2019-06-18 20:34 ` [PATCH RFC 1/3] fonts: Fix coding style Takashi Iwai
2019-06-18 20:34 ` [PATCH RFC 2/3] fonts: Use BUILD_BUG_ON() for checking empty font table Takashi Iwai
2019-06-18 23:05   ` Randy Dunlap
2019-06-19  5:36     ` Takashi Iwai
2019-06-18 20:34 ` [PATCH RFC 3/3] fonts: Prefer a bigger font for high resolution screens Takashi Iwai
2019-06-20  6:28 ` [PATCH RFC 0/3] Automatically choose " Greg Kroah-Hartman
2019-06-20  7:43   ` Takashi Iwai
2019-06-20  8:12     ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).