diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c
index a5a2346..4ed97a7 100644
--- a/drivers/acpi/acpi_platform.c
+++ b/drivers/acpi/acpi_platform.c
@@ -230,6 +230,44 @@ struct platform_device *acpi_create_platform_device(struct acpi_device *adev)
 	return pdev;
 }
 
+/*
+ * The following ACPI IDs are known to be suitable for representing as
+ * platform devices.
+ */
+static const struct acpi_device_id acpi_platform_device_ids[] = {
+
+	{ }
+};
+
+#define ACPI_PLATFORM_CLASS		"acpi_platform"
+static int __devinit acpi_platform_device_add(struct acpi_device *device)
+{
+	acpi_create_platform_device(device);
+}
+static int acpi_platform_device_remove(struct acpi_device *device, int type)
+{
+	/* TODO: remove that platfrom_device and resource */
+}
+
+static struct acpi_driver acpi_platform_driver = {
+	.name = "acpi_platform",
+	.class = ACPI_PLATFORM_CLASS,
+	.ids = acpi_platform_device_ids,
+	.ops = {
+		.add = acpi_platform_device_add,
+		.remove = acpi_platform_device_remove,
+		},
+};
+
+static int __init acpi_platform_init(void)
+{
+	if (acpi_bus_register_driver(&acpi_platform_driver) < 0)
+		return -ENODEV;
+
+	return 0;
+}
+subsys_initcall(acpi_platform_init);
+
 static acpi_status acpi_platform_match(acpi_handle handle, u32 depth,
 				       void *data, void **return_value)
 {
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index e7afba1..73bfa3d 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -29,15 +29,6 @@ extern struct acpi_device *acpi_root;
 
 static const char *dummy_hid = "device";
 
-/*
- * The following ACPI IDs are known to be suitable for representing as
- * platform devices.
- */
-static const struct acpi_device_id acpi_platform_device_ids[] = {
-
-	{ }
-};
-
 static LIST_HEAD(acpi_device_list);
 static LIST_HEAD(acpi_bus_id_list);
 DEFINE_MUTEX(acpi_device_lock);
@@ -1553,13 +1544,8 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
 	 */
 	device = NULL;
 	acpi_bus_get_device(handle, &device);
-	if (ops->acpi_op_add && !device) {
+	if (ops->acpi_op_add && !device)
 		acpi_add_single_object(&device, handle, type, sta, ops);
-		/* Is the device a known good platform device? */
-		if (device
-		    && !acpi_match_device_ids(device, acpi_platform_device_ids))
-			acpi_create_platform_device(device);
-	}
 
 	if (!device)
 		return AE_CTRL_DEPTH;
