diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-12 21:17:41 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-12 21:17:41 -0700 |
commit | d3745f46e32d86de188cf378f923b7a2ed5274f9 (patch) | |
tree | b6ad64cbd41644de503a15ce3669e00ec602db8f /drivers/pci/pci.c | |
parent | 70d002bccac5e107fafb95e83fcb7fc010a88695 (diff) | |
parent | ffadcc2ff42ecedf71ea67d9051ff028927aed08 (diff) | |
download | linux-d3745f46e32d86de188cf378f923b7a2ed5274f9.tar.bz2 |
Merge commit master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6 of HEAD
* HEAD:
[PATCH] PCI: PCIE power management quirk
[PATCH] PCI: add PCI Express AER register definitions to pci_regs.h
[PATCH] PCI: Clear abnormal poweroff flag on VIA southbridges, fix resume
[PATCH] PCI: poper prototype for arch/i386/pci/pcbios.c:pcibios_sort()
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r-- | drivers/pci/pci.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index cf57d7de3765..9f79dd6d51ab 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -19,6 +19,7 @@ #include <asm/dma.h> /* isa_dma_bridge_buggy */ #include "pci.h" +unsigned int pci_pm_d3_delay = 10; /** * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children @@ -313,6 +314,14 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state) } else if (dev->current_state == state) return 0; /* we're already there */ + /* + * If the device or the parent bridge can't support PCI PM, ignore + * the request if we're doing anything besides putting it into D0 + * (which would only happen on boot). + */ + if ((state == PCI_D1 || state == PCI_D2) && pci_no_d1d2(dev)) + return 0; + /* find PCI PM capability in list */ pm = pci_find_capability(dev, PCI_CAP_ID_PM); @@ -363,7 +372,7 @@ pci_set_power_state(struct pci_dev *dev, pci_power_t state) /* Mandatory power management transition delays */ /* see PCI PM 1.1 5.6.1 table 18 */ if (state == PCI_D3hot || dev->current_state == PCI_D3hot) - msleep(10); + msleep(pci_pm_d3_delay); else if (state == PCI_D2 || dev->current_state == PCI_D2) udelay(200); |