diff -urNp linux-2.6.20-rc5/arch/arm/mach-s3c2410/mach-smdk2413.c linux-2.6.20-rc5-smdk2413pm/arch/arm/mach-s3c2410/mach-smdk2413.c
--- linux-2.6.20-rc5/arch/arm/mach-s3c2410/mach-smdk2413.c	2007-01-16 09:42:26.000000000 +0000
+++ linux-2.6.20-rc5-smdk2413pm/arch/arm/mach-s3c2410/mach-smdk2413.c	2007-01-24 01:28:02.000000000 +0000
@@ -44,6 +44,7 @@
 #include "clock.h"
 #include "devs.h"
 #include "cpu.h"
+#include "pm.h"
 
 #include "common-smdk.h"
 
@@ -108,9 +109,44 @@ static void __init smdk2413_map_io(void)
 	s3c24xx_set_board(&smdk2413_board);
 }
 
+#ifdef CONFIG_PM
+
+static int smdk2412_suspend(struct sys_device *dev, pm_message_t state)
+{
+	__raw_writel(0x06252004, S3C2412_GSTATUS2);
+	__raw_writel(virt_to_phys(s3c2410_cpu_resume), S3C2412_GSTATUS3);
+
+	return 0;
+}
+
+static int smdk2412_resume(struct sys_device *dev)
+{
+	__raw_writel(0x0, S3C2412_GSTATUS2);
+	__raw_writel(0x0, S3C2412_GSTATUS3);
+
+	return 0;
+}
+#else
+#define smdk2412_suspend NULL
+#define smdk2412_resume NULL
+#endif
+
+struct sysdev_class smdk2412_sysclass = {
+	set_kset_name("smdk2412"),
+	.suspend	= smdk2412_suspend,
+	.resume		= smdk2412_resume,
+};
+
+static struct sys_device smdk2412_sysdev = {
+	.cls		= &smdk2412_sysclass,
+};
+
 static void __init smdk2413_machine_init(void)
 {
 	smdk_machine_init();
+
+	sysdev_class_register(&smdk2412_sysclass);
+	sysdev_register(&smdk2412_sysdev);
 }
 
 MACHINE_START(S3C2413, "S3C2413")

