Commit c3146df2 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Len Brown

ACPI: Use syscore_ops instead of sysdev class and sysdev

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: default avatarRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 4d3fbff2
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
* for IRQ management (e.g. start()->_SRS). * for IRQ management (e.g. start()->_SRS).
*/ */
#include <linux/sysdev.h> #include <linux/syscore_ops.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
...@@ -757,14 +757,13 @@ static int acpi_pci_link_resume(struct acpi_pci_link *link) ...@@ -757,14 +757,13 @@ static int acpi_pci_link_resume(struct acpi_pci_link *link)
return 0; return 0;
} }
static int irqrouter_resume(struct sys_device *dev) static void irqrouter_resume(void)
{ {
struct acpi_pci_link *link; struct acpi_pci_link *link;
list_for_each_entry(link, &acpi_link_list, list) { list_for_each_entry(link, &acpi_link_list, list) {
acpi_pci_link_resume(link); acpi_pci_link_resume(link);
} }
return 0;
} }
static int acpi_pci_link_remove(struct acpi_device *device, int type) 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) ...@@ -871,32 +870,19 @@ static int __init acpi_irq_balance_set(char *str)
__setup("acpi_irq_balance", acpi_irq_balance_set); __setup("acpi_irq_balance", acpi_irq_balance_set);
/* FIXME: we will remove this interface after all drivers call pci_disable_device */ static struct syscore_ops irqrouter_syscore_ops = {
static struct sysdev_class irqrouter_sysdev_class = {
.name = "irqrouter",
.resume = irqrouter_resume, .resume = irqrouter_resume,
}; };
static struct sys_device device_irqrouter = { static int __init irqrouter_init_ops(void)
.id = 0,
.cls = &irqrouter_sysdev_class,
};
static int __init irqrouter_init_sysfs(void)
{ {
int error; if (!acpi_disabled && !acpi_noirq)
register_syscore_ops(&irqrouter_syscore_ops);
if (acpi_disabled || acpi_noirq) return 0;
return 0;
error = sysdev_class_register(&irqrouter_sysdev_class);
if (!error)
error = sysdev_register(&device_irqrouter);
return error;
} }
device_initcall(irqrouter_init_sysfs); device_initcall(irqrouter_init_ops);
static int __init acpi_pci_link_init(void) static int __init acpi_pci_link_init(void)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment