diff options
Diffstat (limited to 'drivers/acpi/sleep.c')
| -rw-r--r-- | drivers/acpi/sleep.c | 32 | 
1 files changed, 15 insertions, 17 deletions
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index b718806657cd..c40fb2e81bbc 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c @@ -71,6 +71,17 @@ static int acpi_sleep_prepare(u32 acpi_state)  	return 0;  } +static bool acpi_sleep_state_supported(u8 sleep_state) +{ +	acpi_status status; +	u8 type_a, type_b; + +	status = acpi_get_sleep_type_data(sleep_state, &type_a, &type_b); +	return ACPI_SUCCESS(status) && (!acpi_gbl_reduced_hardware +		|| (acpi_gbl_FADT.sleep_control.address +			&& acpi_gbl_FADT.sleep_status.address)); +} +  #ifdef CONFIG_ACPI_SLEEP  static u32 acpi_target_sleep_state = ACPI_STATE_S0; @@ -604,15 +615,9 @@ static void acpi_sleep_suspend_setup(void)  {  	int i; -	for (i = ACPI_STATE_S1; i < ACPI_STATE_S4; i++) { -		acpi_status status; -		u8 type_a, type_b; - -		status = acpi_get_sleep_type_data(i, &type_a, &type_b); -		if (ACPI_SUCCESS(status)) { +	for (i = ACPI_STATE_S1; i < ACPI_STATE_S4; i++) +		if (acpi_sleep_state_supported(i))  			sleep_states[i] = 1; -		} -	}  	suspend_set_ops(old_suspend_ordering ?  		&acpi_suspend_ops_old : &acpi_suspend_ops); @@ -740,11 +745,7 @@ static const struct platform_hibernation_ops acpi_hibernation_ops_old = {  static void acpi_sleep_hibernate_setup(void)  { -	acpi_status status; -	u8 type_a, type_b; - -	status = acpi_get_sleep_type_data(ACPI_STATE_S4, &type_a, &type_b); -	if (ACPI_FAILURE(status)) +	if (!acpi_sleep_state_supported(ACPI_STATE_S4))  		return;  	hibernation_set_ops(old_suspend_ordering ? @@ -793,8 +794,6 @@ static void acpi_power_off(void)  int __init acpi_sleep_init(void)  { -	acpi_status status; -	u8 type_a, type_b;  	char supported[ACPI_S_STATE_COUNT * 3 + 1];  	char *pos = supported;  	int i; @@ -806,8 +805,7 @@ int __init acpi_sleep_init(void)  	acpi_sleep_suspend_setup();  	acpi_sleep_hibernate_setup(); -	status = acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b); -	if (ACPI_SUCCESS(status)) { +	if (acpi_sleep_state_supported(ACPI_STATE_S5)) {  		sleep_states[ACPI_STATE_S5] = 1;  		pm_power_off_prepare = acpi_power_off_prepare;  		pm_power_off = acpi_power_off;  |