[PATCH][Karmic] SRU: pci: Ensure we re-enable devices on resume

Tim Gardner tim.gardner at canonical.com
Tue Apr 27 09:51:20 UTC 2010


On 04/27/2010 04:27 AM, Alex Chiang wrote:
> BugLink: http://bugs.launchpad.net/bugs/566149
>
> SRU justification:
> The original patch which added the check in pci_set_power_state was a
> minor thinko, and prevented platform resume code from running. This patch
> removes the incorrect check, allowing platform resume code to run, thus
> re-enabling devices such as USB ports.
>
> Backport of upstream commit:
>
> commit cc2893b6af5265baa1d68b17b136cffca9e40cfa
> Author: Matthew Garrett<mjg at redhat.com>
> Date:   Thu Apr 22 09:30:51 2010 -0400
>
>      PCI: Ensure we re-enable devices on resume
>
>      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 at canonical.com>
>      Acked-by: Rafael J. Wysocki<rjw at sisk.pl>
>      Signed-off-by: Matthew Garrett<mjg at redhat.com>
>      Signed-off-by: Jesse Barnes<jbarnes at virtuousgeek.org>
>
> Signed-off-by: Alex Chiang<achiang at canonical.com>
> ---
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index e5f3f1c..579dcf5 100644
> --- a/drivers/pci/pci.c
> +++ b/drivers/pci/pci.c
> @@ -591,7 +591,7 @@ static void __pci_start_power_transition(struct pci_dev *dev, pci_power_t state)
>    */
>   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);
> @@ -628,10 +628,6 @@ int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
>   		 */
>   		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
>

This looks like it is also appropriate for Lucid as well as 
stable at kernel.org, right?

Acked-by: Tim Gardner <tim.gardner at canonical.com>

rtg
-- 
Tim Gardner tim.gardner at canonical.com




More information about the kernel-team mailing list