diff -ur linux-2.4.21/kernel/suspend/common.h linux-2.4.21-bootsplash/kernel/suspend/common.h
--- linux-2.4.21/kernel/suspend/common.h	2003-08-05 13:34:55.000000000 +0900
+++ linux-2.4.21-bootsplash/kernel/suspend/common.h	2003-08-05 13:32:55.000000000 +0900
@@ -136,11 +136,6 @@
 	int param2;
 	int param3;
 	int param4;
-	int progress0;
-	int progress1;
-	int progress2;
-	int progress3;
-	int progress4;
 	kdev_t kdevs[MAX_SWAPFILES];
 	struct rangechain block_chain[MAX_SWAPFILES];
 };
diff -ur linux-2.4.21/kernel/suspend/io.c linux-2.4.21-bootsplash/kernel/suspend/io.c
--- linux-2.4.21/kernel/suspend/io.c	2003-08-05 13:34:55.000000000 +0900
+++ linux-2.4.21-bootsplash/kernel/suspend/io.c	2003-08-05 11:06:25.000000000 +0900
@@ -57,13 +57,6 @@
 	sh->param2 = swsusp_debug_state;
 #endif
 	sh->param3 = console_loglevel;
-#if defined(CONFIG_FBCON_SPLASHSCREEN)
-	sh->progress0 = fb_splash_progress[0];
-	sh->progress1 = fb_splash_progress[1];
-	sh->progress2 = fb_splash_progress[2];
-	sh->progress3 = fb_splash_progress[3];
-	sh->progress4 = fb_splash_progress[4];
-#endif
 
 	/* Save kdevs so we can handle multiple swap files on resume */
 	for (i = 0; i < MAX_SWAPFILES; i++)
@@ -831,13 +824,6 @@
 #endif
 	if (!swsusp_lvl_used)
 		console_loglevel = diskpage.pointer->sh.param3;
-#if defined(CONFIG_FBCON_SPLASHSCREEN)
-	fb_splash_progress[0] = diskpage.pointer->sh.progress0;
-	fb_splash_progress[1] = diskpage.pointer->sh.progress1;
-	fb_splash_progress[2] = diskpage.pointer->sh.progress2;
-	fb_splash_progress[3] = diskpage.pointer->sh.progress3;
-	fb_splash_progress[4] = diskpage.pointer->sh.progress4;
-#endif
 	suspend_task = current->pid;
 
 	/*
diff -ur linux-2.4.21/kernel/suspend/ui.c linux-2.4.21-bootsplash/kernel/suspend/ui.c
--- linux-2.4.21/kernel/suspend/ui.c	2003-08-05 13:34:55.000000000 +0900
+++ linux-2.4.21-bootsplash/kernel/suspend/ui.c	2003-08-05 13:44:28.000000000 +0900
@@ -49,7 +49,7 @@
 		return ((p->splash_data->splash_state & 1) == 1);
 	return 0;
 }
-int bar_granularity_limit = 0; /* 0 = no limit */
+int bar_granularity_limit = 256;
 #endif
 
 void abort_suspend(const char *fmt, ...)
@@ -248,10 +248,7 @@
 #if defined(CONFIG_FBCON_SPLASHSCREEN)
 	if (SPLASH_IS_ON(suspend_console)) {
 		/* proc interface ensures bar_granularity_limit >= 0 */
-		if (bar_granularity_limit)
-			barwidth = MIN(fb_splash_progress[2], bar_granularity_limit);
-		else
-			barwidth = fb_splash_progress[2];
+		barwidth = bar_granularity_limit;
 	} else 
 #endif
 	{
diff -ur linux-2.4.21/drivers/video/Makefile linux-2.4.21-bootsplash/drivers/video/Makefile
--- linux-2.4.21/drivers/video/Makefile	2003-08-05 13:39:50.000000000 +0900
+++ linux-2.4.21-bootsplash/drivers/video/Makefile	2003-08-04 17:31:17.000000000 +0900
@@ -15,7 +15,8 @@
 		  fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \
 		  fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \
 		  fbcon-cfb8.o fbcon-splash16.o fbcon-mac.o fbcon-mfb.o \
-		  cyber2000fb.o sa1100fb.o fbcon-hga.o fbgen.o
+		  cyber2000fb.o sa1100fb.o fbcon-hga.o fbgen.o \
+		  fbcon-progress.o
 
 # Each configuration option enables a list of files.
 
@@ -155,6 +156,7 @@
 obj-$(CONFIG_FBCON_SPLASHSCREEN)  += fbcon-splash.o
 obj-$(CONFIG_FBCON_SPLASHSCREEN)  += fbcon-splash16.o
 obj-$(CONFIG_FBCON_SPLASHSCREEN)  += fbcon-jpegdec.o
+obj-$(CONFIG_FBCON_SPLASHSCREEN)  += fbcon-progress.o
 
 include $(TOPDIR)/Rules.make
 
diff -ur linux-2.4.21/drivers/video/fbcon-splash.c linux-2.4.21-bootsplash/drivers/video/fbcon-splash.c
--- linux-2.4.21/drivers/video/fbcon-splash.c	2003-08-05 13:39:50.000000000 +0900
+++ linux-2.4.21-bootsplash/drivers/video/fbcon-splash.c	2003-08-05 11:25:00.000000000 +0900
@@ -645,6 +645,28 @@
 	return 0;
 }
 
+void splash_update(int consolenr, int pe)
+{
+	struct display *p;
+
+	p = &fb_display[consolenr];
+	if (p->splash_data && p->splash_data->splash_percent != pe) {
+		p->splash_data->splash_percent = pe;
+		if (fg_console != p->conp->vc_num || !p->splash_data->splash_state)
+		    return;
+		if (!p->splash_data->splash_overpaintok || p->splash_data->splash_percent == 65536) {
+			if (splash_hasinter(p->splash_data->splash_boxes, p->splash_data->splash_boxcount))
+				splash_status(p);
+			else
+				splash_prepare(p);
+		} else {
+			if (p->splash_data->splash_silentjpeg && p->splash_data->splash_dosilent && p->splash_data->oldscreen_base)
+				boxit(p->splash_data->oldscreen_base, p->next_line, p->splash_data->splash_sboxes, p->splash_data->splash_sboxcount, p->splash_data->splash_percent, 1);
+			boxit(p->screen_base, p->next_line, p->splash_data->splash_boxes, p->splash_data->splash_boxcount, p->splash_data->splash_percent, 1);
+		}
+	}
+}
+
 
 #ifdef CONFIG_PROC_FS
 #include <linux/proc_fs.h>
@@ -756,21 +778,7 @@
 		if (*buffer == 'h')
 			pe = 65535 - pe;
 		pe += pe > 32767;
-		if (p->splash_data && p->splash_data->splash_percent != pe) {
-			p->splash_data->splash_percent = pe;
-			if (fg_console != p->conp->vc_num || !p->splash_data->splash_state)
-			    return count;
-			if (!p->splash_data->splash_overpaintok || p->splash_data->splash_percent == 65536) {
-				if (splash_hasinter(p->splash_data->splash_boxes, p->splash_data->splash_boxcount))
-					splash_status(p);
-				else
-					splash_prepare(p);
-			} else {
-				if (p->splash_data->splash_silentjpeg && p->splash_data->splash_dosilent && p->splash_data->oldscreen_base)
-					boxit(p->splash_data->oldscreen_base, p->next_line, p->splash_data->splash_sboxes, p->splash_data->splash_sboxcount, p->splash_data->splash_percent, 1);
-				boxit(p->screen_base, p->next_line, p->splash_data->splash_boxes, p->splash_data->splash_boxcount, p->splash_data->splash_percent, 1);
-			}
-		}
+		splash_update(0, pe);
 		return count;
 	}
 	if (!strncmp(buffer,"silent\n",7) || !strncmp(buffer,"verbose\n",8)) {
