diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-07-18 07:53:06 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-07-18 07:53:06 -0400 |
commit | 61eab000f3536f080eab43fd5eed3fd817ded76e (patch) | |
tree | d1448b3b90c5650b522c8d13d8bdd7bd65a5cf52 /drivers/pci | |
parent | 68e67f40b7343383517c3f951b4b8db7626406bc (diff) | |
parent | 4e01ec636e64707d202a1ca21a47bbc6d53085b7 (diff) |
Merge branch 'topic/hda' into for-next
This is a large chunk merge for 3.6 HD-audio things
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/pci.c | 5 | ||||
-rw-r--r-- | drivers/pci/quirks.c | 26 |
2 files changed, 31 insertions, 0 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 447e83472c01..77cb54a65cde 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1744,6 +1744,11 @@ int pci_prepare_to_sleep(struct pci_dev *dev) | |||
1744 | if (target_state == PCI_POWER_ERROR) | 1744 | if (target_state == PCI_POWER_ERROR) |
1745 | return -EIO; | 1745 | return -EIO; |
1746 | 1746 | ||
1747 | /* Some devices mustn't be in D3 during system sleep */ | ||
1748 | if (target_state == PCI_D3hot && | ||
1749 | (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP)) | ||
1750 | return 0; | ||
1751 | |||
1747 | pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev)); | 1752 | pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev)); |
1748 | 1753 | ||
1749 | error = pci_set_power_state(dev, target_state); | 1754 | error = pci_set_power_state(dev, target_state); |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 2a7521677541..194b243a2817 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -2929,6 +2929,32 @@ static void __devinit disable_igfx_irq(struct pci_dev *dev) | |||
2929 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); | 2929 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x0102, disable_igfx_irq); |
2930 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); | 2930 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x010a, disable_igfx_irq); |
2931 | 2931 | ||
2932 | /* | ||
2933 | * The Intel 6 Series/C200 Series chipset's EHCI controllers on many | ||
2934 | * ASUS motherboards will cause memory corruption or a system crash | ||
2935 | * if they are in D3 while the system is put into S3 sleep. | ||
2936 | */ | ||
2937 | static void __devinit asus_ehci_no_d3(struct pci_dev *dev) | ||
2938 | { | ||
2939 | const char *sys_info; | ||
2940 | static const char good_Asus_board[] = "P8Z68-V"; | ||
2941 | |||
2942 | if (dev->dev_flags & PCI_DEV_FLAGS_NO_D3_DURING_SLEEP) | ||
2943 | return; | ||
2944 | if (dev->subsystem_vendor != PCI_VENDOR_ID_ASUSTEK) | ||
2945 | return; | ||
2946 | sys_info = dmi_get_system_info(DMI_BOARD_NAME); | ||
2947 | if (sys_info && memcmp(sys_info, good_Asus_board, | ||
2948 | sizeof(good_Asus_board) - 1) == 0) | ||
2949 | return; | ||
2950 | |||
2951 | dev_info(&dev->dev, "broken D3 during system sleep on ASUS\n"); | ||
2952 | dev->dev_flags |= PCI_DEV_FLAGS_NO_D3_DURING_SLEEP; | ||
2953 | device_set_wakeup_capable(&dev->dev, false); | ||
2954 | } | ||
2955 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c26, asus_ehci_no_d3); | ||
2956 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x1c2d, asus_ehci_no_d3); | ||
2957 | |||
2932 | static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, | 2958 | static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, |
2933 | struct pci_fixup *end) | 2959 | struct pci_fixup *end) |
2934 | { | 2960 | { |