forked from mirrors/linux
		
	PM / sleep / ACPI: Use the ACPI_FADT_LOW_POWER_S0 flag
Modify the ACPI system sleep support setup code to select suspend-to-idle as the default system sleep state if the ACPI_FADT_LOW_POWER_S0 flag is set in the FADT and the default sleep state was not selected from the kernel command line. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Mario Limonciello <mario.limonciello@dell.com>
This commit is contained in:
		
							parent
							
								
									406e79385f
								
							
						
					
					
						commit
						08b98d3291
					
				
					 4 changed files with 15 additions and 3 deletions
				
			
		|  | @ -35,7 +35,9 @@ only one way to cause the system to go into the Suspend-To-RAM state (write | |||
| The default suspend mode (ie. the one to be used without writing anything into | ||||
| /sys/power/mem_sleep) is either "deep" (if Suspend-To-RAM is supported) or | ||||
| "s2idle", but it can be overridden by the value of the "mem_sleep_default" | ||||
| parameter in the kernel command line. | ||||
| parameter in the kernel command line.  On some ACPI-based systems, depending on | ||||
| the information in the FADT, the default may be "s2idle" even if Suspend-To-RAM | ||||
| is supported. | ||||
| 
 | ||||
| The properties of all of the sleep states are described below. | ||||
| 
 | ||||
|  |  | |||
|  | @ -691,6 +691,14 @@ static void acpi_sleep_suspend_setup(void) | |||
| 		if (acpi_sleep_state_supported(i)) | ||||
| 			sleep_states[i] = 1; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Use suspend-to-idle by default if ACPI_FADT_LOW_POWER_S0 is set and | ||||
| 	 * the default suspend mode was not selected from the command line. | ||||
| 	 */ | ||||
| 	if (acpi_gbl_FADT.flags & ACPI_FADT_LOW_POWER_S0 && | ||||
| 	    mem_sleep_default > PM_SUSPEND_MEM) | ||||
| 		mem_sleep_default = PM_SUSPEND_FREEZE; | ||||
| 
 | ||||
| 	suspend_set_ops(old_suspend_ordering ? | ||||
| 		&acpi_suspend_ops_old : &acpi_suspend_ops); | ||||
| 	freeze_set_ops(&acpi_freeze_ops); | ||||
|  |  | |||
|  | @ -194,6 +194,8 @@ struct platform_freeze_ops { | |||
| }; | ||||
| 
 | ||||
| #ifdef CONFIG_SUSPEND | ||||
| extern suspend_state_t mem_sleep_default; | ||||
| 
 | ||||
| /**
 | ||||
|  * suspend_set_ops - set platform dependent suspend operations | ||||
|  * @ops: The new suspend operations to set. | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ static const char * const mem_sleep_labels[] = { | |||
| const char *mem_sleep_states[PM_SUSPEND_MAX]; | ||||
| 
 | ||||
| suspend_state_t mem_sleep_current = PM_SUSPEND_FREEZE; | ||||
| static suspend_state_t mem_sleep_default = PM_SUSPEND_MEM; | ||||
| suspend_state_t mem_sleep_default = PM_SUSPEND_MAX; | ||||
| 
 | ||||
| unsigned int pm_suspend_global_flags; | ||||
| EXPORT_SYMBOL_GPL(pm_suspend_global_flags); | ||||
|  | @ -168,7 +168,7 @@ void suspend_set_ops(const struct platform_suspend_ops *ops) | |||
| 	} | ||||
| 	if (valid_state(PM_SUSPEND_MEM)) { | ||||
| 		mem_sleep_states[PM_SUSPEND_MEM] = mem_sleep_labels[PM_SUSPEND_MEM]; | ||||
| 		if (mem_sleep_default == PM_SUSPEND_MEM) | ||||
| 		if (mem_sleep_default >= PM_SUSPEND_MEM) | ||||
| 			mem_sleep_current = PM_SUSPEND_MEM; | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Rafael J. Wysocki
						Rafael J. Wysocki