#include <linux/slab.h>
 #include <linux/acpi.h>
 #include <linux/perf_event.h>
+#include <linux/platform_device.h>
 #include <asm/mwait.h>
 #include <xen/xen.h>
 
        }
 }
 
-static int acpi_pad_add(struct acpi_device *device)
+static int acpi_pad_probe(struct platform_device *pdev)
 {
+       struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
        acpi_status status;
 
        strcpy(acpi_device_name(device), ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME);
        return 0;
 }
 
-static void acpi_pad_remove(struct acpi_device *device)
+static void acpi_pad_remove(struct platform_device *pdev)
 {
+       struct acpi_device *device = ACPI_COMPANION(&pdev->dev);
+
        mutex_lock(&isolated_cpus_lock);
        acpi_pad_idle_cpus(0);
        mutex_unlock(&isolated_cpus_lock);
 };
 MODULE_DEVICE_TABLE(acpi, pad_device_ids);
 
-static struct acpi_driver acpi_pad_driver = {
-       .name = "processor_aggregator",
-       .class = ACPI_PROCESSOR_AGGREGATOR_CLASS,
-       .ids = pad_device_ids,
-       .ops = {
-               .add = acpi_pad_add,
-               .remove = acpi_pad_remove,
+static struct platform_driver acpi_pad_driver = {
+       .probe = acpi_pad_probe,
+       .remove_new = acpi_pad_remove,
+       .driver = {
+               .name = "processor_aggregator",
+               .acpi_match_table = pad_device_ids,
        },
 };
 
        if (power_saving_mwait_eax == 0)
                return -EINVAL;
 
-       return acpi_bus_register_driver(&acpi_pad_driver);
+       return platform_driver_register(&acpi_pad_driver);
 }
 
 static void __exit acpi_pad_exit(void)
 {
-       acpi_bus_unregister_driver(&acpi_pad_driver);
+       platform_driver_unregister(&acpi_pad_driver);
 }
 
 module_init(acpi_pad_init);