Index: linux-2.6.17/arch/arm/common/sharpsl_pm.c
===================================================================
--- linux-2.6.17.orig/arch/arm/common/sharpsl_pm.c	2006-06-18 14:15:37.000000000 +0100
+++ linux-2.6.17/arch/arm/common/sharpsl_pm.c	2006-06-18 14:15:38.000000000 +0100
@@ -13,6 +13,7 @@
  */
 
 #undef DEBUG
+#define DEBUG 1
 
 #include <linux/module.h>
 #include <linux/timer.h>
@@ -499,6 +500,10 @@
 	return 0;
 }
 
+static struct {
+	u32 ffier, fflcr, ffmcr, ffspr, ffisr, ffdll, ffdlh;
+} sys_ctx;
+
 static void corgi_goto_sleep(unsigned long alarm_time, unsigned int alarm_enable, suspend_state_t state)
 {
 	dev_dbg(sharpsl_pm.dev, "Time is: %08x\n",RCNR);
@@ -532,8 +537,29 @@
 		RTAR = 0;
 	}
 
+	sys_ctx.ffier = FFIER;
+	sys_ctx.fflcr = FFLCR;
+	sys_ctx.ffmcr = FFMCR;
+	sys_ctx.ffspr = FFSPR;
+	sys_ctx.ffisr = FFISR;
+	FFLCR |= 0x80;
+	sys_ctx.ffdll = FFDLL;
+	sys_ctx.ffdlh = FFDLH;
+	FFLCR &= 0xef;
+
 	pxa_pm_enter(state);
 
+	FFMCR = sys_ctx.ffmcr;
+	FFSPR = sys_ctx.ffspr;
+	FFLCR = sys_ctx.fflcr;
+	FFLCR |= 0x80;
+	FFDLH = sys_ctx.ffdlh;
+	FFDLL = sys_ctx.ffdll;
+	FFLCR = sys_ctx.fflcr;
+	FFISR = sys_ctx.ffisr;
+	FFLCR = 0x07;
+	FFIER = sys_ctx.ffier;
+
 	sharpsl_pm.machinfo->postsuspend();
 
 	dev_dbg(sharpsl_pm.dev, "Corgi woken up from suspend: %08x\n",PEDR);
Index: linux-2.6.17/drivers/serial/pxa.c
===================================================================
--- linux-2.6.17.orig/drivers/serial/pxa.c	2006-06-18 02:49:35.000000000 +0100
+++ linux-2.6.17/drivers/serial/pxa.c	2006-06-18 14:15:38.000000000 +0100
@@ -793,8 +793,8 @@
 {
         struct uart_pxa_port *sport = platform_get_drvdata(dev);
 
-        if (sport)
-                uart_suspend_port(&serial_pxa_reg, &sport->port);
+//        if (sport)
+//                uart_suspend_port(&serial_pxa_reg, &sport->port);
 
         return 0;
 }
@@ -803,8 +803,8 @@
 {
         struct uart_pxa_port *sport = platform_get_drvdata(dev);
 
-        if (sport)
-                uart_resume_port(&serial_pxa_reg, &sport->port);
+//        if (sport)
+//                uart_resume_port(&serial_pxa_reg, &sport->port);
 
         return 0;
 }

