diff options
Diffstat (limited to 'drivers/acpi/pci_bind.c')
| -rw-r--r-- | drivers/acpi/pci_bind.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c index a5a77b78a723..2ef04098cc1d 100644 --- a/drivers/acpi/pci_bind.c +++ b/drivers/acpi/pci_bind.c | |||
| @@ -26,7 +26,9 @@ | |||
| 26 | #include <linux/kernel.h> | 26 | #include <linux/kernel.h> |
| 27 | #include <linux/types.h> | 27 | #include <linux/types.h> |
| 28 | #include <linux/pci.h> | 28 | #include <linux/pci.h> |
| 29 | #include <linux/pci-acpi.h> | ||
| 29 | #include <linux/acpi.h> | 30 | #include <linux/acpi.h> |
| 31 | #include <linux/pm_runtime.h> | ||
| 30 | #include <acpi/acpi_bus.h> | 32 | #include <acpi/acpi_bus.h> |
| 31 | #include <acpi/acpi_drivers.h> | 33 | #include <acpi/acpi_drivers.h> |
| 32 | 34 | ||
| @@ -38,7 +40,13 @@ static int acpi_pci_unbind(struct acpi_device *device) | |||
| 38 | struct pci_dev *dev; | 40 | struct pci_dev *dev; |
| 39 | 41 | ||
| 40 | dev = acpi_get_pci_dev(device->handle); | 42 | dev = acpi_get_pci_dev(device->handle); |
| 41 | if (!dev || !dev->subordinate) | 43 | if (!dev) |
| 44 | goto out; | ||
| 45 | |||
| 46 | device_set_run_wake(&dev->dev, false); | ||
| 47 | pci_acpi_remove_pm_notifier(device); | ||
| 48 | |||
| 49 | if (!dev->subordinate) | ||
| 42 | goto out; | 50 | goto out; |
| 43 | 51 | ||
| 44 | acpi_pci_irq_del_prt(dev->subordinate); | 52 | acpi_pci_irq_del_prt(dev->subordinate); |
| @@ -62,6 +70,10 @@ static int acpi_pci_bind(struct acpi_device *device) | |||
| 62 | if (!dev) | 70 | if (!dev) |
| 63 | return 0; | 71 | return 0; |
| 64 | 72 | ||
| 73 | pci_acpi_add_pm_notifier(device, dev); | ||
| 74 | if (device->wakeup.flags.run_wake) | ||
| 75 | device_set_run_wake(&dev->dev, true); | ||
| 76 | |||
| 65 | /* | 77 | /* |
| 66 | * Install the 'bind' function to facilitate callbacks for | 78 | * Install the 'bind' function to facilitate callbacks for |
| 67 | * children of the P2P bridge. | 79 | * children of the P2P bridge. |
