ACPI: Use syscore_ops instead of sysdev class and sysdev
authorRafael J. Wysocki <rjw@sisk.pl>
Sat, 12 Mar 2011 21:16:51 +0000 (22:16 +0100)
committerLen Brown <len.brown@intel.com>
Fri, 18 Mar 2011 22:22:21 +0000 (18:22 -0400)
ACPI uses a sysdev class and a sysdev for executing
irqrouter_resume() before turning on interrupts on the boot CPU.
However, since irqrouter_resume() ignores its argument, the entire
mechanism may be replaced with a struct syscore_ops object which
is considerably simpler.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/acpi/pci_link.c

index 9ff80a7e9f6ada0aef1c57bea5e3f6b142037de5..4a29763b8eb454b28c59c9257c893ac0fadc5599 100644 (file)
@@ -29,7 +29,7 @@
  *        for IRQ management (e.g. start()->_SRS).
  */
 
-#include <linux/sysdev.h>
+#include <linux/syscore_ops.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -757,14 +757,13 @@ static int acpi_pci_link_resume(struct acpi_pci_link *link)
        return 0;
 }
 
-static int irqrouter_resume(struct sys_device *dev)
+static void irqrouter_resume(void)
 {
        struct acpi_pci_link *link;
 
        list_for_each_entry(link, &acpi_link_list, list) {
                acpi_pci_link_resume(link);
        }
-       return 0;
 }
 
 static int acpi_pci_link_remove(struct acpi_device *device, int type)
@@ -871,32 +870,19 @@ static int __init acpi_irq_balance_set(char *str)
 
 __setup("acpi_irq_balance", acpi_irq_balance_set);
 
-/* FIXME: we will remove this interface after all drivers call pci_disable_device */
-static struct sysdev_class irqrouter_sysdev_class = {
-       .name = "irqrouter",
+static struct syscore_ops irqrouter_syscore_ops = {
        .resume = irqrouter_resume,
 };
 
-static struct sys_device device_irqrouter = {
-       .id = 0,
-       .cls = &irqrouter_sysdev_class,
-};
-
-static int __init irqrouter_init_sysfs(void)
+static int __init irqrouter_init_ops(void)
 {
-       int error;
+       if (!acpi_disabled && !acpi_noirq)
+               register_syscore_ops(&irqrouter_syscore_ops);
 
-       if (acpi_disabled || acpi_noirq)
-               return 0;
-
-       error = sysdev_class_register(&irqrouter_sysdev_class);
-       if (!error)
-               error = sysdev_register(&device_irqrouter);
-
-       return error;
+       return 0;
 }
 
-device_initcall(irqrouter_init_sysfs);
+device_initcall(irqrouter_init_ops);
 
 static int __init acpi_pci_link_init(void)
 {