summaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@evo.osdl.org>2005-08-01 21:37:54 +0200
committerLinus Torvalds <torvalds@evo.osdl.org>2005-08-01 21:37:54 +0200
commit697a2d63a3844caaa2b6565ab7f3d69086af94d4 (patch)
tree4ebfef965b37d4a7c56425521a26c960649594de /drivers/acpi
parentFix get_user_pages() race for write access (diff)
downloadlinux-697a2d63a3844caaa2b6565ab7f3d69086af94d4.tar.xz
linux-697a2d63a3844caaa2b6565ab7f3d69086af94d4.zip
Revert ACPI interrupt resume changes
If there are devices that use interrupts over a suspend event, ACPI must restore the PCI interrupt links on resume. Anything else breaks any device that hasn't been converted to the new (dubious) PM rules. Drivers that need the irq free/re-aquire sequence can be done one by one independently of this one.
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/pci_link.c38
1 files changed, 18 insertions, 20 deletions
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
index 6a29610edc11..d9a9b86ecb28 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -776,15 +776,25 @@ end:
}
static int
-irqrouter_suspend(
- struct sys_device *dev,
- u32 state)
+acpi_pci_link_resume(
+ struct acpi_pci_link *link)
+{
+ ACPI_FUNCTION_TRACE("acpi_pci_link_resume");
+
+ if (link->refcnt && link->irq.active && link->irq.initialized)
+ return_VALUE(acpi_pci_link_set(link, link->irq.active));
+ else
+ return_VALUE(0);
+}
+
+static int
+irqrouter_resume(
+ struct sys_device *dev)
{
struct list_head *node = NULL;
struct acpi_pci_link *link = NULL;
- int ret = 0;
- ACPI_FUNCTION_TRACE("irqrouter_suspend");
+ ACPI_FUNCTION_TRACE("irqrouter_resume");
list_for_each(node, &acpi_link.entries) {
link = list_entry(node, struct acpi_pci_link, node);
@@ -793,21 +803,9 @@ irqrouter_suspend(
"Invalid link context\n"));
continue;
}
- if (link->irq.initialized && link->refcnt != 0
- /* We ignore legacy IDE device irq */
- && link->irq.active != 14 && link->irq.active !=15) {
- printk(KERN_WARNING PREFIX
- "%d drivers with interrupt %d neglected to call"
- " pci_disable_device at .suspend\n",
- link->refcnt,
- link->irq.active);
- printk(KERN_WARNING PREFIX
- "Fix the driver, or rmmod before suspend\n");
- link->refcnt = 0;
- ret = -EINVAL;
- }
+ acpi_pci_link_resume(link);
}
- return_VALUE(ret);
+ return_VALUE(0);
}
@@ -922,7 +920,7 @@ __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 = {
set_kset_name("irqrouter"),
- .suspend = irqrouter_suspend,
+ .resume = irqrouter_resume,
};