Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm...
[linux-2.6-microblaze.git] / drivers / acpi / pci_link.c
index a128082..ab764ed 100644 (file)
@@ -53,23 +53,19 @@ ACPI_MODULE_NAME("pci_link");
 #define ACPI_PCI_LINK_FILE_STATUS      "state"
 #define ACPI_PCI_LINK_MAX_POSSIBLE     16
 
-static int acpi_pci_link_add(struct acpi_device *device);
-static int acpi_pci_link_remove(struct acpi_device *device, int type);
+static int acpi_pci_link_add(struct acpi_device *device,
+                            const struct acpi_device_id *not_used);
+static void acpi_pci_link_remove(struct acpi_device *device);
 
 static const struct acpi_device_id link_device_ids[] = {
        {"PNP0C0F", 0},
        {"", 0},
 };
-MODULE_DEVICE_TABLE(acpi, link_device_ids);
 
-static struct acpi_driver acpi_pci_link_driver = {
-       .name = "pci_link",
-       .class = ACPI_PCI_LINK_CLASS,
+static struct acpi_scan_handler pci_link_handler = {
        .ids = link_device_ids,
-       .ops = {
-               .add = acpi_pci_link_add,
-               .remove = acpi_pci_link_remove,
-       },
+       .attach = acpi_pci_link_add,
+       .detach = acpi_pci_link_remove,
 };
 
 /*
@@ -692,7 +688,8 @@ int acpi_pci_link_free_irq(acpi_handle handle)
                                  Driver Interface
    -------------------------------------------------------------------------- */
 
-static int acpi_pci_link_add(struct acpi_device *device)
+static int acpi_pci_link_add(struct acpi_device *device,
+                            const struct acpi_device_id *not_used)
 {
        int result;
        struct acpi_pci_link *link;
@@ -746,7 +743,7 @@ static int acpi_pci_link_add(struct acpi_device *device)
        if (result)
                kfree(link);
 
-       return result;
+       return result < 0 ? result : 1;
 }
 
 static int acpi_pci_link_resume(struct acpi_pci_link *link)
@@ -766,7 +763,7 @@ static void irqrouter_resume(void)
        }
 }
 
-static int acpi_pci_link_remove(struct acpi_device *device, int type)
+static void acpi_pci_link_remove(struct acpi_device *device)
 {
        struct acpi_pci_link *link;
 
@@ -777,7 +774,6 @@ static int acpi_pci_link_remove(struct acpi_device *device, int type)
        mutex_unlock(&acpi_link_lock);
 
        kfree(link);
-       return 0;
 }
 
 /*
@@ -874,20 +870,10 @@ static struct syscore_ops irqrouter_syscore_ops = {
        .resume = irqrouter_resume,
 };
 
-static int __init irqrouter_init_ops(void)
-{
-       if (!acpi_disabled && !acpi_noirq)
-               register_syscore_ops(&irqrouter_syscore_ops);
-
-       return 0;
-}
-
-device_initcall(irqrouter_init_ops);
-
-static int __init acpi_pci_link_init(void)
+void __init acpi_pci_link_init(void)
 {
        if (acpi_noirq)
-               return 0;
+               return;
 
        if (acpi_irq_balance == -1) {
                /* no command line switch: enable balancing in IOAPIC mode */
@@ -896,11 +882,6 @@ static int __init acpi_pci_link_init(void)
                else
                        acpi_irq_balance = 0;
        }
-
-       if (acpi_bus_register_driver(&acpi_pci_link_driver) < 0)
-               return -ENODEV;
-
-       return 0;
+       register_syscore_ops(&irqrouter_syscore_ops);
+       acpi_scan_add_handler(&pci_link_handler);
 }
-
-subsys_initcall(acpi_pci_link_init);