]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/pci/pci-acpi.c
sfc: Export boot configuration in EEPROM through ethtool
[linux-2.6-omap-h63xx.git] / drivers / pci / pci-acpi.c
index 6bc0d8c870afe1bbc283b873af42abc9388bebac..89a2f0fa10f91d79b216bc78da9d19eb0fbd3941 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/module.h>
+#include <linux/pci-aspm.h>
 #include <acpi/acpi.h>
 #include <acpi/acnamesp.h>
 #include <acpi/acresrc.h>
@@ -299,10 +300,30 @@ static int acpi_pci_set_power_state(struct pci_dev *dev, pci_power_t state)
        return error;
 }
 
+static bool acpi_pci_can_wakeup(struct pci_dev *dev)
+{
+       acpi_handle handle = DEVICE_ACPI_HANDLE(&dev->dev);
+
+       return handle ? acpi_bus_can_wakeup(handle) : false;
+}
+
+static int acpi_pci_sleep_wake(struct pci_dev *dev, bool enable)
+{
+       int error = acpi_pm_device_sleep_wake(&dev->dev, enable);
+
+       if (!error)
+               dev_printk(KERN_INFO, &dev->dev,
+                               "wake-up capability %s by ACPI\n",
+                               enable ? "enabled" : "disabled");
+       return error;
+}
+
 static struct pci_platform_pm_ops acpi_pci_platform_pm = {
        .is_manageable = acpi_pci_power_manageable,
        .set_state = acpi_pci_set_power_state,
        .choose_state = acpi_pci_choose_state,
+       .can_wakeup = acpi_pci_can_wakeup,
+       .sleep_wake = acpi_pci_sleep_wake,
 };
 
 /* ACPI bus type */
@@ -352,6 +373,12 @@ static int __init acpi_pci_init(void)
                printk(KERN_INFO"ACPI FADT declares the system doesn't support MSI, so disable it\n");
                pci_no_msi();
        }
+
+       if (acpi_gbl_FADT.boot_flags & BAF_PCIE_ASPM_CONTROL) {
+               printk(KERN_INFO"ACPI FADT declares the system doesn't support PCIe ASPM, so disable it\n");
+               pcie_no_aspm();
+       }
+
        ret = register_acpi_bus_type(&acpi_pci_bus);
        if (ret)
                return 0;