[PATCH] IP22 console font patch, testing needed.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Could somebody please test this patch to sort out font handling for the
IP22 Newport console driver?  Thanks,

  Ralf

Signed-off-by: Ralf Baechle <ralf@xxxxxxxxxxxxxx>

diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c
index 7fa1afe..a2cb77b 100644
--- a/drivers/video/console/newport_con.c
+++ b/drivers/video/console/newport_con.c
@@ -12,6 +12,7 @@
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
+#include <linux/font.h>
 #include <linux/kd.h>
 #include <linux/selection.h>
 #include <linux/console.h>
@@ -33,7 +34,7 @@
 
 extern unsigned long sgi_gfxaddr;
 
-#define FONT_DATA ((unsigned char *)font_vga_8x16.data)
+static const struct font_desc *default_font;
 
 /* borrowed from fbcon.c */
 #define REFCOUNT(fd)	(((int *)(fd))[-1])
@@ -300,6 +301,10 @@ static const char *newport_startup(void)
 	if (!sgi_gfxaddr)
 		return NULL;
 
+	default_font = find_font("VGA8x16");
+	if (!default_font)
+		return NULL;
+
 	if (!npregs)
 		npregs = (struct newport_regs *)/* ioremap cannot fail */
 			ioremap(sgi_gfxaddr, sizeof(struct newport_regs));
@@ -313,7 +318,7 @@ static const char *newport_startup(void)
 		goto out_unmap;
 
 	for (i = 0; i < MAX_NR_CONSOLES; i++)
-		font_data[i] = FONT_DATA;
+		font_data[i] = (unsigned char *) default_font->data;
 
 	newport_reset();
 	newport_get_revisions();
@@ -522,7 +527,7 @@ static int newport_set_font(int unit, struct console_font *op)
 
 	/* check if font is already used by other console */
 	for (i = 0; i < MAX_NR_CONSOLES; i++) {
-		if (font_data[i] != FONT_DATA
+		if (font_data[i] != default_font->data
 		    && FNTSIZE(font_data[i]) == size
 		    && !memcmp(font_data[i], new_data, size)) {
 			kfree(new_data - FONT_EXTRA_WORDS * sizeof(int));
@@ -534,7 +539,7 @@ static int newport_set_font(int unit, struct console_font *op)
 		}
 	}
 	/* old font is user font */
-	if (font_data[unit] != FONT_DATA) {
+	if (font_data[unit] != default_font->data) {
 		if (--REFCOUNT(font_data[unit]) == 0)
 			kfree(font_data[unit] -
 			      FONT_EXTRA_WORDS * sizeof(int));
@@ -547,11 +552,11 @@ static int newport_set_font(int unit, struct console_font *op)
 
 static int newport_set_def_font(int unit, struct console_font *op)
 {
-	if (font_data[unit] != FONT_DATA) {
+	if (font_data[unit] != default_font->data) {
 		if (--REFCOUNT(font_data[unit]) == 0)
 			kfree(font_data[unit] -
 			      FONT_EXTRA_WORDS * sizeof(int));
-		font_data[unit] = FONT_DATA;
+		font_data[unit] = (unsigned char *) default_font->data;
 	}
 
 	return 0;
@@ -740,7 +745,7 @@ static int __init newport_console_init(void)
 {
 
 	if (!sgi_gfxaddr)
-		return NULL;
+		return 0;
 
 	if (!npregs)
 		npregs = (struct newport_regs *)/* ioremap cannot fail */


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux