To give callers the option of acting on a errors while removing the pm_domain ops for the device in the ACPI PM domain, let acpi_dev_pm_detach() return an int to provide the error code. Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx> Tested-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> --- drivers/acpi/device_pm.c | 8 +++++++- include/linux/acpi.h | 7 +++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index 67075f8..0d52ce1 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c @@ -1055,6 +1055,8 @@ static struct dev_pm_domain acpi_general_pm_domain = { * * Callers must ensure proper synchronization of this function with power * management callbacks. + * + * Returns 0 on successfully attached PM domain or negative error code. */ int acpi_dev_pm_attach(struct device *dev, bool power_on) { @@ -1087,8 +1089,10 @@ EXPORT_SYMBOL_GPL(acpi_dev_pm_attach); * * Callers must ensure proper synchronization of this function with power * management callbacks. + * + * Returns 0 on successfully detached PM domain or negative error code. */ -void acpi_dev_pm_detach(struct device *dev, bool power_off) +int acpi_dev_pm_detach(struct device *dev, bool power_off) { struct acpi_device *adev = ACPI_COMPANION(dev); @@ -1107,7 +1111,9 @@ void acpi_dev_pm_detach(struct device *dev, bool power_off) acpi_device_wakeup(adev, ACPI_STATE_S0, false); acpi_dev_pm_low_power(dev, adev, ACPI_STATE_S0); } + return 0; } + return -EINVAL; } EXPORT_SYMBOL_GPL(acpi_dev_pm_detach); #endif /* CONFIG_PM */ diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 807cbc4..c83cca5 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -587,7 +587,7 @@ static inline int acpi_subsys_freeze(struct device *dev) { return 0; } #if defined(CONFIG_ACPI) && defined(CONFIG_PM) struct acpi_device *acpi_dev_pm_get_node(struct device *dev); int acpi_dev_pm_attach(struct device *dev, bool power_on); -void acpi_dev_pm_detach(struct device *dev, bool power_off); +int acpi_dev_pm_detach(struct device *dev, bool power_off); #else static inline struct acpi_device *acpi_dev_pm_get_node(struct device *dev) { @@ -597,7 +597,10 @@ static inline int acpi_dev_pm_attach(struct device *dev, bool power_on) { return -ENODEV; } -static inline void acpi_dev_pm_detach(struct device *dev, bool power_off) {} +static inline int acpi_dev_pm_detach(struct device *dev, bool power_off) +{ + return -ENODEV; +} #endif #ifdef CONFIG_ACPI -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html