diff options
| author | Paul Mackerras <paulus@samba.org> | 2007-05-10 21:08:37 +1000 | 
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2007-05-10 21:08:37 +1000 | 
| commit | 2ecf042ef530dd0943e41d84b6344f507941af3e (patch) | |
| tree | 73100361dd74e3f80f14c7c81ba4675948983f44 /kernel/power/main.c | |
| parent | 32a56ebb24f23da1bbaf24292acf85b6c04526ab (diff) | |
| parent | de5603748af8bf7deac403e6ba92887f8d18e812 (diff) | |
Merge branch 'linux-2.6'
Diffstat (limited to 'kernel/power/main.c')
| -rw-r--r-- | kernel/power/main.c | 42 | 
1 files changed, 16 insertions, 26 deletions
diff --git a/kernel/power/main.c b/kernel/power/main.c index f6dda685e7e..40d56a31245 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -30,7 +30,6 @@  DEFINE_MUTEX(pm_mutex);  struct pm_ops *pm_ops; -suspend_disk_method_t pm_disk_mode = PM_DISK_SHUTDOWN;  /**   *	pm_set_ops - Set the global power method table.  @@ -41,10 +40,6 @@ void pm_set_ops(struct pm_ops * ops)  {  	mutex_lock(&pm_mutex);  	pm_ops = ops; -	if (ops && ops->pm_disk_mode != PM_DISK_INVALID) { -		pm_disk_mode = ops->pm_disk_mode; -	} else -		pm_disk_mode = PM_DISK_SHUTDOWN;  	mutex_unlock(&pm_mutex);  } @@ -184,24 +179,12 @@ static void suspend_finish(suspend_state_t state)  static const char * const pm_states[PM_SUSPEND_MAX] = {  	[PM_SUSPEND_STANDBY]	= "standby",  	[PM_SUSPEND_MEM]	= "mem", -	[PM_SUSPEND_DISK]	= "disk",  };  static inline int valid_state(suspend_state_t state)  { -	/* Suspend-to-disk does not really need low-level support. -	 * It can work with shutdown/reboot if needed. If it isn't -	 * configured, then it cannot be supported. -	 */ -	if (state == PM_SUSPEND_DISK) -#ifdef CONFIG_SOFTWARE_SUSPEND -		return 1; -#else -		return 0; -#endif - -	/* all other states need lowlevel support and need to be -	 * valid to the lowlevel implementation, no valid callback +	/* All states need lowlevel support and need to be valid +	 * to the lowlevel implementation, no valid callback  	 * implies that none are valid. */  	if (!pm_ops || !pm_ops->valid || !pm_ops->valid(state))  		return 0; @@ -229,11 +212,6 @@ static int enter_state(suspend_state_t state)  	if (!mutex_trylock(&pm_mutex))  		return -EBUSY; -	if (state == PM_SUSPEND_DISK) { -		error = pm_suspend_disk(); -		goto Unlock; -	} -  	pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]);  	if ((error = suspend_prepare(state)))  		goto Unlock; @@ -251,7 +229,7 @@ static int enter_state(suspend_state_t state)  /**   *	pm_suspend - Externally visible function for suspending system. - *	@state:		Enumarted value of state to enter. + *	@state:		Enumerated value of state to enter.   *   *	Determine whether or not value is within range, get state    *	structure, and enter (above). @@ -289,7 +267,13 @@ static ssize_t state_show(struct kset *kset, char *buf)  		if (pm_states[i] && valid_state(i))  			s += sprintf(s,"%s ", pm_states[i]);  	} -	s += sprintf(s,"\n"); +#ifdef CONFIG_SOFTWARE_SUSPEND +	s += sprintf(s, "%s\n", "disk"); +#else +	if (s != buf) +		/* convert the last space to a newline */ +		*(s-1) = '\n'; +#endif  	return (s - buf);  } @@ -304,6 +288,12 @@ static ssize_t state_store(struct kset *kset, const char *buf, size_t n)  	p = memchr(buf, '\n', n);  	len = p ? p - buf : n; +	/* First, check if we are requested to hibernate */ +	if (!strncmp(buf, "disk", len)) { +		error = hibernate(); +		return error ? error : n; +	} +  	for (s = &pm_states[state]; state < PM_SUSPEND_MAX; s++, state++) {  		if (*s && !strncmp(buf, *s, len))  			break;  | 
