aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pnp/pnpacpi
diff options
context:
space:
mode:
authorKrzysztof Oledzki <olel@ans.pl>2007-10-17 02:31:08 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-17 11:43:04 -0400
commit9cd8047b463f213c294f756119ac353312e7a152 (patch)
tree2e5440895a254d631b2a24fcf61e48ec9fe4707c /drivers/pnp/pnpacpi
parent7ef36390fabe2168fe31f245e49eb4e5f3762622 (diff)
Fix very high interrupt rate for IRQ8 (rtc) unless pnpacpi=off
Workaround for broken systems with BIOS that makes RTC interrupt level triggered and/or active low. See http://bugzilla.kernel.org/show_bug.cgi?id=5243 Based on the patch from Shaohua Li <shaohua.li@intel.com> Signed-off-by: Krzysztof Piotr Oledzki <ole@ans.pl> Cc: "Li, Shaohua" <shaohua.li@intel.com> Cc: Bjorn Helgaas <bjorn.helgaas@hp.com> Cc: Andi Kleen <ak@suse.de> Cc: Adam Belay <ambx1@neo.rr.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/pnp/pnpacpi')
-rw-r--r--drivers/pnp/pnpacpi/rsparser.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c
index 0e3b8d0ff06b..cd0a204d96d1 100644
--- a/drivers/pnp/pnpacpi/rsparser.c
+++ b/drivers/pnp/pnpacpi/rsparser.c
@@ -85,6 +85,16 @@ static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res,
85 if (i >= PNP_MAX_IRQ) 85 if (i >= PNP_MAX_IRQ)
86 return; 86 return;
87 87
88#ifdef CONFIG_X86
89 if (gsi < 16 && (triggering != ACPI_EDGE_SENSITIVE ||
90 polarity != ACPI_ACTIVE_HIGH)) {
91 pnp_warn("BIOS BUG: legacy PNP IRQ %d should be edge trigger, "
92 "active high", gsi);
93 triggering = ACPI_EDGE_SENSITIVE;
94 polarity = ACPI_ACTIVE_HIGH;
95 }
96#endif
97
88 res->irq_resource[i].flags = IORESOURCE_IRQ; // Also clears _UNSET flag 98 res->irq_resource[i].flags = IORESOURCE_IRQ; // Also clears _UNSET flag
89 res->irq_resource[i].flags |= irq_flags(triggering, polarity); 99 res->irq_resource[i].flags |= irq_flags(triggering, polarity);
90 irq = acpi_register_gsi(gsi, triggering, polarity); 100 irq = acpi_register_gsi(gsi, triggering, polarity);