@@ -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)