From 024fb57a60b20d7258def9e45a4eda6035a550f1 Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Wed, 17 Dec 2008 12:10:05 -0800 Subject: [PATCH] --- yaml --- r: 127387 b: refs/heads/master c: eb9c39d031bbcfd4005bd7e0337c3fd3909c1bf7 h: refs/heads/master i: 127385: cc02883af7af6ce7f698b4d1484db787ce7451ba 127383: 22b6b0e0ac80baf601957d9bfd0fba9853a4bc14 v: v3 --- [refs] | 2 +- trunk/drivers/pci/pci.c | 20 ++++++++++++++++++++ trunk/drivers/pci/pci.h | 1 + trunk/drivers/pci/probe.c | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index d576937fce08..e27cd99da0fb 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 876e501ab25dcd683574a5d3d56d8fe450083ed6 +refs/heads/master: eb9c39d031bbcfd4005bd7e0337c3fd3909c1bf7 diff --git a/trunk/drivers/pci/pci.c b/trunk/drivers/pci/pci.c index 7e9c0f3936dd..1b807330e500 100644 --- a/trunk/drivers/pci/pci.c +++ b/trunk/drivers/pci/pci.c @@ -1285,6 +1285,26 @@ void pci_pm_init(struct pci_dev *dev) } } +/** + * platform_pci_wakeup_init - init platform wakeup if present + * @dev: PCI device + * + * Some devices don't have PCI PM caps but can still generate wakeup + * events through platform methods (like ACPI events). If @dev supports + * platform wakeup events, set the device flag to indicate as much. This + * may be redundant if the device also supports PCI PM caps, but double + * initialization should be safe in that case. + */ +void platform_pci_wakeup_init(struct pci_dev *dev) +{ + if (!platform_pci_can_wakeup(dev)) + return; + + device_set_wakeup_capable(&dev->dev, true); + device_set_wakeup_enable(&dev->dev, false); + platform_pci_sleep_wake(dev, false); +} + /** * pci_add_save_buffer - allocate buffer for saving given capability registers * @dev: the PCI device diff --git a/trunk/drivers/pci/pci.h b/trunk/drivers/pci/pci.h index d1e92d83aa06..65deed8bfc06 100644 --- a/trunk/drivers/pci/pci.h +++ b/trunk/drivers/pci/pci.h @@ -45,6 +45,7 @@ struct pci_platform_pm_ops { extern int pci_set_platform_pm(struct pci_platform_pm_ops *ops); extern void pci_pm_init(struct pci_dev *dev); +extern void platform_pci_wakeup_init(struct pci_dev *dev); extern void pci_allocate_cap_save_buffers(struct pci_dev *dev); extern int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val); diff --git a/trunk/drivers/pci/probe.c b/trunk/drivers/pci/probe.c index 2ee00962734b..303644614eea 100644 --- a/trunk/drivers/pci/probe.c +++ b/trunk/drivers/pci/probe.c @@ -965,6 +965,7 @@ static void pci_init_capabilities(struct pci_dev *dev) /* Power Management */ pci_pm_init(dev); + platform_pci_wakeup_init(dev); /* Vital Product Data */ pci_vpd_pci22_init(dev);