Index: linux-2.6.24/arch/arm/mach-s3c2440/mach-g500.c
===================================================================
--- linux-2.6.24.orig/arch/arm/mach-s3c2440/mach-g500.c	2008-02-15 18:25:25.000000000 +0100
+++ linux-2.6.24/arch/arm/mach-s3c2440/mach-g500.c	2008-02-15 18:25:51.000000000 +0100
@@ -28,8 +28,10 @@
 
 #include <asm/arch/regs-lcd.h>
 #include <asm/arch/regs-irq.h>
+#include <asm/arch/regs-gpio.h>
 #include <asm/arch/fb.h>
 #include <asm/arch/ts.h>
+#include <asm/arch/mmc.h>
 
 #include <asm/plat-s3c/regs-serial.h>
 #include <asm/plat-s3c/nand.h>
@@ -42,6 +44,8 @@
 #include <linux/mtd/nand.h>
 #include <linux/mtd/partitions.h>
 #include <linux/mtd/mtd.h>
+#include <linux/mmc/mmc.h>
+#include <linux/mmc/host.h>
 
 static struct map_desc g500_iodesc[] __initdata = {
 	/* nothing */
@@ -167,6 +171,18 @@
 	.oversampling_shift = 3,
 };
 
+static void s3c2410_mmc_def_setpower(unsigned int to)
+{
+	s3c2410_gpio_cfgpin(S3C2410_GPA17, S3C2410_GPIO_OUTPUT);
+	s3c2410_gpio_setpin(S3C2410_GPA17, to);
+}
+
+static struct s3c24xx_mmc_platdata g500_mmc_cfg = {
+	.gpio_detect  = S3C2410_GPF6,
+	.set_power  = s3c2410_mmc_def_setpower,
+	.ocr_avail  = MMC_VDD_32_33,
+};
+
 static struct platform_device *g500_devices[] __initdata = {
 	&s3c_device_rtc,
 	&s3c_device_usb,
@@ -177,6 +193,7 @@
 	&s3c_device_nand,
 	&s3c_device_usbgadget,
 	&s3c_device_ts,
+	&s3c_device_sdi,
 };
 
 static void __init g500_map_io(void)
@@ -193,6 +210,7 @@
 
 	s3c24xx_fb_set_platdata(&g500_fb_info);
 	set_s3c2410ts_info(&g500_ts_cfg);
+	s3c_device_sdi.dev.platform_data = &g500_mmc_cfg;
 
 	s3c2410_pm_init();
 

