forked from rpms/kernel
		
	- runtime_pm_fixups.patch: should fix this on Thinkpads
This commit is contained in:
		
							parent
							
								
									c3cd66f5e3
								
							
						
					
					
						commit
						2df449634d
					
				
							
								
								
									
										16
									
								
								kernel.spec
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								kernel.spec
									
									
									
									
									
								
							| @ -715,6 +715,7 @@ Patch12201: linux-2.6-uvc-autosuspend.patch | ||||
| Patch12202: linux-2.6-qcserial-autosuspend.patch | ||||
| Patch12203: linux-2.6-usb-pci-autosuspend.patch | ||||
| Patch12204: linux-2.6-enable-more-pci-autosuspend.patch | ||||
| Patch12205: runtime_pm_fixups.patch | ||||
| 
 | ||||
| Patch12225: pci-crs-fixes.patch | ||||
| 
 | ||||
| @ -1322,12 +1323,12 @@ ApplyPatch wacom-08-add-support-for-bamboo-pen.patch | ||||
| ApplyPatch wacom-09-disable-bamboo-touchpad-when-pen-is-being-used.patch | ||||
| 
 | ||||
| # Runtime PM | ||||
| # (there's still dragons here, disabled for now... --kyle) | ||||
| #ApplyPatch linux-2.6-bluetooth-autosuspend.patch | ||||
| #ApplyPatch linux-2.6-uvc-autosuspend.patch | ||||
| #ApplyPatch linux-2.6-qcserial-autosuspend.patch | ||||
| #ApplyPatch linux-2.6-usb-pci-autosuspend.patch | ||||
| #ApplyPatch linux-2.6-enable-more-pci-autosuspend.patch | ||||
| ApplyPatch linux-2.6-bluetooth-autosuspend.patch | ||||
| ApplyPatch linux-2.6-uvc-autosuspend.patch | ||||
| ApplyPatch linux-2.6-qcserial-autosuspend.patch | ||||
| ApplyPatch linux-2.6-usb-pci-autosuspend.patch | ||||
| ApplyPatch linux-2.6-enable-more-pci-autosuspend.patch | ||||
| ApplyPatch runtime_pm_fixups.patch | ||||
| 
 | ||||
| # PCI patches to fix problems with _CRS | ||||
| # ( from linux-pci list ) | ||||
| @ -1951,6 +1952,9 @@ fi | ||||
| #                 ||     || | ||||
| 
 | ||||
| %changelog | ||||
| * Wed Oct 20 2010 Matthew Garrett <mjg@redhat.com> 2.6.36-0.42.rc8.git5 | ||||
| - runtime_pm_fixups.patch: should fix this on Thinkpads | ||||
| 
 | ||||
| * Tue Oct 19 2010 Chuck Ebbert <cebbert@redhat.com> 2.6.36-0.41.rc8.git5 | ||||
| - Linux 2.6.36-rc8-git5 | ||||
| - Update PCI _CRS fixes | ||||
|  | ||||
							
								
								
									
										114
									
								
								runtime_pm_fixups.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								runtime_pm_fixups.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | ||||
| Experimental fixes for the interactions between runtime PM and ACPI power | ||||
| resources. Needs some work with upstream. | ||||
| 
 | ||||
| diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
 | ||||
| index 310e3b9..371debe 100644
 | ||||
| --- a/drivers/acpi/bus.c
 | ||||
| +++ b/drivers/acpi/bus.c
 | ||||
| @@ -329,7 +329,8 @@ int acpi_bus_set_power(acpi_handle handle, int state)
 | ||||
|  				goto end; | ||||
|  			} | ||||
|  		} | ||||
| -		if (device->power.flags.power_resources) {
 | ||||
| +		if (device->power.flags.power_resources &&
 | ||||
| +		    !device->wakeup.run_wake_count) {
 | ||||
|  			result = acpi_power_transition(device, state); | ||||
|  			if (result) | ||||
|  				goto end; | ||||
| diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c
 | ||||
| index 8b3cc6a..b013174 100644
 | ||||
| --- a/drivers/acpi/pci_bind.c
 | ||||
| +++ b/drivers/acpi/pci_bind.c
 | ||||
| @@ -33,6 +33,8 @@
 | ||||
|  #include <acpi/acpi_bus.h> | ||||
|  #include <acpi/acpi_drivers.h> | ||||
|   | ||||
| +#include "internal.h"
 | ||||
| +
 | ||||
|  #define _COMPONENT		ACPI_PCI_COMPONENT | ||||
|  ACPI_MODULE_NAME("pci_bind"); | ||||
|   | ||||
| @@ -173,6 +175,8 @@ static int acpi_pci_bind(struct acpi_device *device)
 | ||||
|  		device->ops.unbind = acpi_pci_unbind; | ||||
|  	} | ||||
|   | ||||
| +	acpi_power_transition(device, acpi_power_get_inferred_state(device));
 | ||||
| +
 | ||||
|  	/* | ||||
|  	 * Evaluate and parse _PRT, if exists.  This code allows parsing of | ||||
|  	 * _PRT objects within the scope of non-bridge devices.  Note that | ||||
| diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
 | ||||
| index 844c155..8a42ddf 100644
 | ||||
| --- a/drivers/acpi/power.c
 | ||||
| +++ b/drivers/acpi/power.c
 | ||||
| @@ -394,7 +394,7 @@ int acpi_enable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
 | ||||
|   *    State Wake) for the device, if present | ||||
|   * 2. Shutdown down the power resources | ||||
|   */ | ||||
| -int acpi_disable_wakeup_device_power(struct acpi_device *dev)
 | ||||
| +int acpi_disable_wakeup_device_power(struct acpi_device *dev, int sleep_state)
 | ||||
|  { | ||||
|  	int i, err = 0; | ||||
|   | ||||
| @@ -417,6 +417,9 @@ int acpi_disable_wakeup_device_power(struct acpi_device *dev)
 | ||||
|  	if (err) | ||||
|  		goto out; | ||||
|   | ||||
| +	if (sleep_state == ACPI_STATE_S0)
 | ||||
| +		goto out;
 | ||||
| +
 | ||||
|  	/* Close power resource */ | ||||
|  	for (i = 0; i < dev->wakeup.resources.count; i++) { | ||||
|  		int ret = acpi_power_off_device( | ||||
| diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
 | ||||
| index 2c5cd02..6bf016b 100644
 | ||||
| --- a/drivers/acpi/sleep.c
 | ||||
| +++ b/drivers/acpi/sleep.c
 | ||||
| @@ -670,7 +670,7 @@ int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
 | ||||
|   | ||||
|  	error = enable ? | ||||
|  		acpi_enable_wakeup_device_power(adev, acpi_target_sleep_state) : | ||||
| -		acpi_disable_wakeup_device_power(adev);
 | ||||
| +		acpi_disable_wakeup_device_power(adev, acpi_target_sleep_state);
 | ||||
|  	if (!error) | ||||
|  		dev_info(dev, "wake-up capability %s by ACPI\n", | ||||
|  				enable ? "enabled" : "disabled"); | ||||
| diff --git a/drivers/acpi/wakeup.c b/drivers/acpi/wakeup.c
 | ||||
| index f62a50c..ff48a54 100644
 | ||||
| --- a/drivers/acpi/wakeup.c
 | ||||
| +++ b/drivers/acpi/wakeup.c
 | ||||
| @@ -71,7 +71,7 @@ void acpi_disable_wakeup_devices(u8 sleep_state)
 | ||||
|  				ACPI_GPE_DISABLE); | ||||
|   | ||||
|  		if (dev->wakeup.state.enabled) | ||||
| -			acpi_disable_wakeup_device_power(dev);
 | ||||
| +			acpi_disable_wakeup_device_power(dev, sleep_state);
 | ||||
|  	} | ||||
|  } | ||||
|   | ||||
| diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
 | ||||
| index 24e19c5..cd99494 100644
 | ||||
| --- a/drivers/pci/pci-acpi.c
 | ||||
| +++ b/drivers/pci/pci-acpi.c
 | ||||
| @@ -302,7 +302,7 @@ static int acpi_dev_run_wake(struct device *phys_dev, bool enable)
 | ||||
|  		if (!--dev->wakeup.run_wake_count) { | ||||
|  			acpi_disable_gpe(dev->wakeup.gpe_device, | ||||
|  					 dev->wakeup.gpe_number); | ||||
| -			acpi_disable_wakeup_device_power(dev);
 | ||||
| +			acpi_disable_wakeup_device_power(dev, ACPI_STATE_S0);
 | ||||
|  		} | ||||
|  	} else { | ||||
|  		error = -EALREADY; | ||||
| diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
 | ||||
| index 4de84ce..284f43c 100644
 | ||||
| --- a/include/acpi/acpi_bus.h
 | ||||
| +++ b/include/acpi/acpi_bus.h
 | ||||
| @@ -387,7 +387,7 @@ struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);
 | ||||
|  #define DEVICE_ACPI_HANDLE(dev) ((acpi_handle)((dev)->archdata.acpi_handle)) | ||||
|   | ||||
|  int acpi_enable_wakeup_device_power(struct acpi_device *dev, int state); | ||||
| -int acpi_disable_wakeup_device_power(struct acpi_device *dev);
 | ||||
| +int acpi_disable_wakeup_device_power(struct acpi_device *dev, int state);
 | ||||
|   | ||||
|  #ifdef CONFIG_PM_SLEEP | ||||
|  int acpi_pm_device_sleep_state(struct device *, int *); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user