| From cc2893b6af5265baa1d68b17b136cffca9e40cfa Mon Sep 17 00:00:00 2001 |
| From: Matthew Garrett <mjg@redhat.com> |
| Date: Thu, 22 Apr 2010 09:30:51 -0400 |
| Subject: PCI: Ensure we re-enable devices on resume |
| |
| From: Matthew Garrett <mjg@redhat.com> |
| |
| commit cc2893b6af5265baa1d68b17b136cffca9e40cfa upstream. |
| |
| If the firmware puts a device back into D0 state at resume time, we'll |
| update its state in resume_noirq and thus skip the platform resume code. |
| Calling that code twice should be safe and we ought to avoid getting to |
| that point anyway, so remove the check and also allow the platform pci |
| code to be called for D0. |
| |
| Fixes USB not being powered after resume on recent Lenovo machines. |
| |
| Acked-by: Alex Chiang <achiang@canonical.com> |
| Acked-by: Rafael J. Wysocki <rjw@sisk.pl> |
| Signed-off-by: Matthew Garrett <mjg@redhat.com> |
| Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/pci/pci.c | 6 +----- |
| 1 file changed, 1 insertion(+), 5 deletions(-) |
| |
| --- a/drivers/pci/pci.c |
| +++ b/drivers/pci/pci.c |
| @@ -624,7 +624,7 @@ static void __pci_start_power_transition |
| */ |
| int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state) |
| { |
| - return state > PCI_D0 ? |
| + return state >= PCI_D0 ? |
| pci_platform_power_transition(dev, state) : -EINVAL; |
| } |
| EXPORT_SYMBOL_GPL(__pci_complete_power_transition); |
| @@ -661,10 +661,6 @@ int pci_set_power_state(struct pci_dev * |
| */ |
| return 0; |
| |
| - /* Check if we're already there */ |
| - if (dev->current_state == state) |
| - return 0; |
| - |
| __pci_start_power_transition(dev, state); |
| |
| /* This device is quirked not to be put into D3, so |