diff mbox

[3/3] pci: Override gpe 0xd on Dell machines

Message ID 1257806687-6608-3-git-send-email-mjg@redhat.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Matthew Garrett Nov. 9, 2009, 10:44 p.m. UTC
None
diff mbox

Patch

diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
index 7fff59c..1606d06 100644
--- a/drivers/pci/pci-acpi.c
+++ b/drivers/pci/pci-acpi.c
@@ -14,6 +14,7 @@ 
 #include <linux/pci-aspm.h>
 #include <acpi/acpi.h>
 #include <acpi/acpi_bus.h>
+#include <linux/dmi.h>
 
 #include <linux/pci-acpi.h>
 #include "pci.h"
@@ -970,12 +971,35 @@  static void __init acpi_pci_install_gpe(u32 gpe_number,
 	}
 }
 
+static int __init acpi_gpe_remove_0xd_method(const struct dmi_system_id *d)
+{
+	acpi_remove_gpe_method(NULL, 0xd);
+	return 0;
+}
+
+static struct dmi_system_id gpe_dmi_table[] __initdata = {
+	/*
+	 * Dells have a broken handler for GPE 0xd. Remove it rather than
+	 * trusting it
+	 */
+	{
+		.callback = acpi_gpe_remove_0xd_method,
+		.ident = "Dell",
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "Dell Inc."),
+		},
+	},
+	{}
+};
+
 static int __init acpi_pci_gpe_fixups(void)
 {
 	struct pci_dev *lpc;
 	struct gpe_fixup *fixups;
 	int i;
 
+	dmi_check_system(gpe_dmi_table);
+
 	lpc = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
 
 	if (!lpc)