|
@@ -2929,6 +2929,32 @@ static void __devinit disable_igfx_irq(struct pci_dev *dev)
|
|
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq);
|
|
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq);
|
|
|
|
|
|
+/*
|
|
|
+ * The Intel 6 Series/C200 Series chipset's EHCI controllers on many
|
|
|
+ * ASUS motherboards will cause memory corruption or a system crash
|
|
|
+ * if they are in D3 while the system is put into S3 sleep.
|
|
|
+ */
|
|
|
+static void __devinit asus_ehci_no_d3(struct pci_dev *dev)
|
|
|
+{
|
|
|
+ const char *sys_info;
|
|
|
+ static const char good_Asus_board[] = "P8Z68-V";
|
|
|
+
|
|
|
+ if (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP)
|
|
|
+ return;
|
|
|
+ if (dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK)
|
|
|
+ return;
|
|
|
+ sys_info = dmi_get_system_info(DMI_BOARD_NAME);
|
|
|
+ if (sys_info && memcmp(sys_info, good_Asus_board,
|
|
|
+ sizeof(good_Asus_board) - 1) == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ dev_info(&dev->dev, "broken D3 during system sleep on ASUS\n");
|
|
|
+ dev->dev_flags |= PCI_DEV_FLAGS_NO_D3_DURING_SLEEP;
|
|
|
+ device_set_wakeup_capable(&dev->dev, false);
|
|
|
+}
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c26, asus_ehci_no_d3);
|
|
|
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c2d, asus_ehci_no_d3);
|
|
|
+
|
|
|
static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
|
|
|
struct pci_fixup *end)
|
|
|
{
|