mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	ACPI, PCI: Move acpi_dev_run_wake() to ACPI core
acpi_dev_run_wake() is a generic function which can be used by other subsystem too. Rename it to acpi_pm_device_run_wake, to be consistent with acpi_pm_device_sleep_wake. Then move it to ACPI core. Acked-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
		
							parent
							
								
									0090def6c3
								
							
						
					
					
						commit
						b24e509885
					
				
					 3 changed files with 43 additions and 37 deletions
				
			
		|  | @ -17,6 +17,7 @@ | |||
| #include <linux/suspend.h> | ||||
| #include <linux/reboot.h> | ||||
| #include <linux/acpi.h> | ||||
| #include <linux/pm_runtime.h> | ||||
| 
 | ||||
| #include <asm/io.h> | ||||
| 
 | ||||
|  | @ -729,6 +730,40 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p) | |||
| #endif /* CONFIG_PM */ | ||||
| 
 | ||||
| #ifdef CONFIG_PM_SLEEP | ||||
| /**
 | ||||
|  * acpi_pm_device_run_wake - Enable/disable wake-up for given device. | ||||
|  * @phys_dev: Device to enable/disable the platform to wake-up the system for. | ||||
|  * @enable: Whether enable or disable the wake-up functionality. | ||||
|  * | ||||
|  * Find the ACPI device object corresponding to @pci_dev and try to | ||||
|  * enable/disable the GPE associated with it. | ||||
|  */ | ||||
| int acpi_pm_device_run_wake(struct device *phys_dev, bool enable) | ||||
| { | ||||
| 	struct acpi_device *dev; | ||||
| 	acpi_handle handle; | ||||
| 
 | ||||
| 	if (!device_run_wake(phys_dev)) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	handle = DEVICE_ACPI_HANDLE(phys_dev); | ||||
| 	if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &dev))) { | ||||
| 		dev_dbg(phys_dev, "ACPI handle has no context in %s!\n", | ||||
| 			__func__); | ||||
| 		return -ENODEV; | ||||
| 	} | ||||
| 
 | ||||
| 	if (enable) { | ||||
| 		acpi_enable_wakeup_device_power(dev, ACPI_STATE_S0); | ||||
| 		acpi_enable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number); | ||||
| 	} else { | ||||
| 		acpi_disable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number); | ||||
| 		acpi_disable_wakeup_device_power(dev); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  *	acpi_pm_device_sleep_wake - enable or disable the system wake-up | ||||
|  *                                  capability of given device | ||||
|  |  | |||
|  | @ -277,40 +277,6 @@ static int acpi_pci_sleep_wake(struct pci_dev *dev, bool enable) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * acpi_dev_run_wake - Enable/disable wake-up for given device. | ||||
|  * @phys_dev: Device to enable/disable the platform to wake-up the system for. | ||||
|  * @enable: Whether enable or disable the wake-up functionality. | ||||
|  * | ||||
|  * Find the ACPI device object corresponding to @pci_dev and try to | ||||
|  * enable/disable the GPE associated with it. | ||||
|  */ | ||||
| static int acpi_dev_run_wake(struct device *phys_dev, bool enable) | ||||
| { | ||||
| 	struct acpi_device *dev; | ||||
| 	acpi_handle handle; | ||||
| 
 | ||||
| 	if (!device_run_wake(phys_dev)) | ||||
| 		return -EINVAL; | ||||
| 
 | ||||
| 	handle = DEVICE_ACPI_HANDLE(phys_dev); | ||||
| 	if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &dev))) { | ||||
| 		dev_dbg(phys_dev, "ACPI handle has no context in %s!\n", | ||||
| 			__func__); | ||||
| 		return -ENODEV; | ||||
| 	} | ||||
| 
 | ||||
| 	if (enable) { | ||||
| 		acpi_enable_wakeup_device_power(dev, ACPI_STATE_S0); | ||||
| 		acpi_enable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number); | ||||
| 	} else { | ||||
| 		acpi_disable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number); | ||||
| 		acpi_disable_wakeup_device_power(dev); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void acpi_pci_propagate_run_wake(struct pci_bus *bus, bool enable) | ||||
| { | ||||
| 	while (bus->parent) { | ||||
|  | @ -318,14 +284,14 @@ static void acpi_pci_propagate_run_wake(struct pci_bus *bus, bool enable) | |||
| 
 | ||||
| 		if (bridge->pme_interrupt) | ||||
| 			return; | ||||
| 		if (!acpi_dev_run_wake(&bridge->dev, enable)) | ||||
| 		if (!acpi_pm_device_run_wake(&bridge->dev, enable)) | ||||
| 			return; | ||||
| 		bus = bus->parent; | ||||
| 	} | ||||
| 
 | ||||
| 	/* We have reached the root bus. */ | ||||
| 	if (bus->bridge) | ||||
| 		acpi_dev_run_wake(bus->bridge, enable); | ||||
| 		acpi_pm_device_run_wake(bus->bridge, enable); | ||||
| } | ||||
| 
 | ||||
| static int acpi_pci_run_wake(struct pci_dev *dev, bool enable) | ||||
|  | @ -333,7 +299,7 @@ static int acpi_pci_run_wake(struct pci_dev *dev, bool enable) | |||
| 	if (dev->pme_interrupt) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	if (!acpi_dev_run_wake(&dev->dev, enable)) | ||||
| 	if (!acpi_pm_device_run_wake(&dev->dev, enable)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	acpi_pci_propagate_run_wake(dev->bus, enable); | ||||
|  |  | |||
|  | @ -394,8 +394,13 @@ static inline int acpi_pm_device_sleep_state(struct device *d, int *p) | |||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_PM_SLEEP | ||||
| int acpi_pm_device_run_wake(struct device *, bool); | ||||
| int acpi_pm_device_sleep_wake(struct device *, bool); | ||||
| #else | ||||
| static inline int acpi_pm_device_run_wake(struct device *dev, bool enable) | ||||
| { | ||||
| 	return -ENODEV; | ||||
| } | ||||
| static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable) | ||||
| { | ||||
| 	return -ENODEV; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Lin Ming
						Lin Ming