Index: linux-2.6.15/drivers/pcmcia/pxa2xx_mainstone.c
===================================================================
--- linux-2.6.15.orig/drivers/pcmcia/pxa2xx_mainstone.c	2006-01-10 01:39:48.000000000 +0000
+++ linux-2.6.15/drivers/pcmcia/pxa2xx_mainstone.c	2006-01-10 01:44:43.000000000 +0000
@@ -171,27 +171,22 @@
 {
 	int ret;
 
-	mst_pcmcia_device = kzalloc(sizeof(*mst_pcmcia_device), GFP_KERNEL);
+	mst_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
 	if (!mst_pcmcia_device)
 		return -ENOMEM;
-	mst_pcmcia_device->name = "pxa2xx-pcmcia";
+
 	mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops;
 
-	ret = platform_device_register(mst_pcmcia_device);
+	ret = platform_device_add(mst_pcmcia_device);
+
 	if (ret)
-		kfree(mst_pcmcia_device);
+		platform_device_put(mst_pcmcia_device);
 
 	return ret;
 }
 
 static void __exit mst_pcmcia_exit(void)
 {
-	/*
-	 * This call is supposed to free our mst_pcmcia_device.
-	 * Unfortunately platform_device don't have a free method, and
-	 * we can't assume it's free of any reference at this point so we
-	 * can't free it either.
-	 */
 	platform_device_unregister(mst_pcmcia_device);
 }
 
Index: linux-2.6.15/drivers/pcmcia/pxa2xx_sharpsl.c
===================================================================
--- linux-2.6.15.orig/drivers/pcmcia/pxa2xx_sharpsl.c	2006-01-10 01:39:48.000000000 +0000
+++ linux-2.6.15/drivers/pcmcia/pxa2xx_sharpsl.c	2006-01-10 01:44:21.000000000 +0000
@@ -263,30 +263,25 @@
 {
 	int ret;
 
-	sharpsl_pcmcia_ops.nr=platform_scoop_config->num_devs;
-	sharpsl_pcmcia_device = kzalloc(sizeof(*sharpsl_pcmcia_device), GFP_KERNEL);
+	sharpsl_pcmcia_ops.nr = platform_scoop_config->num_devs;
+	sharpsl_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
+
 	if (!sharpsl_pcmcia_device)
 		return -ENOMEM;
 
-	sharpsl_pcmcia_device->name = "pxa2xx-pcmcia";
 	sharpsl_pcmcia_device->dev.platform_data = &sharpsl_pcmcia_ops;
-	sharpsl_pcmcia_device->dev.parent=platform_scoop_config->devs[0].dev;
+	sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev;
+
+	ret = platform_device_add(sharpsl_pcmcia_device);
 
-	ret = platform_device_register(sharpsl_pcmcia_device);
 	if (ret)
-		kfree(sharpsl_pcmcia_device);
+		platform_device_put(sharpsl_pcmcia_device);
 
 	return ret;
 }
 
 static void __exit sharpsl_pcmcia_exit(void)
 {
-	/*
-	 * This call is supposed to free our sharpsl_pcmcia_device.
-	 * Unfortunately platform_device don't have a free method, and
-	 * we can't assume it's free of any reference at this point so we
-	 * can't free it either.
-	 */
 	platform_device_unregister(sharpsl_pcmcia_device);
 }
 

