diff options
| -rw-r--r-- | drivers/acpi/device_pm.c | 23 | 
1 files changed, 18 insertions, 5 deletions
| diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index e9e8bb24785b..4ab807dc8518 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c @@ -324,14 +324,27 @@ int acpi_bus_update_power(acpi_handle handle, int *state_p)  	if (result)  		return result; -	if (state == ACPI_STATE_UNKNOWN) +	if (state == ACPI_STATE_UNKNOWN) {  		state = ACPI_STATE_D0; - -	result = acpi_device_set_power(device, state); -	if (!result && state_p) +		result = acpi_device_set_power(device, state); +		if (result) +			return result; +	} else { +		if (device->power.flags.power_resources) { +			/* +			 * We don't need to really switch the state, bu we need +			 * to update the power resources' reference counters. +			 */ +			result = acpi_power_transition(device, state); +			if (result) +				return result; +		} +		device->power.state = state; +	} +	if (state_p)  		*state_p = state; -	return result; +	return 0;  }  EXPORT_SYMBOL_GPL(acpi_bus_update_power); | 
