diff options
Diffstat (limited to 'drivers/base/power')
| -rw-r--r-- | drivers/base/power/resume.c | 3 | ||||
| -rw-r--r-- | drivers/base/power/shutdown.c | 2 | ||||
| -rw-r--r-- | drivers/base/power/suspend.c | 3 | ||||
| -rw-r--r-- | drivers/base/power/sysfs.c | 24 |
4 files changed, 19 insertions, 13 deletions
diff --git a/drivers/base/power/resume.c b/drivers/base/power/resume.c index 0a7aa07b9a2a..317edbf0feca 100644 --- a/drivers/base/power/resume.c +++ b/drivers/base/power/resume.c | |||
| @@ -9,10 +9,9 @@ | |||
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #include <linux/device.h> | 11 | #include <linux/device.h> |
| 12 | #include "../base.h" | ||
| 12 | #include "power.h" | 13 | #include "power.h" |
| 13 | 14 | ||
| 14 | extern int sysdev_resume(void); | ||
| 15 | |||
| 16 | 15 | ||
| 17 | /** | 16 | /** |
| 18 | * resume_device - Restore state for one device. | 17 | * resume_device - Restore state for one device. |
diff --git a/drivers/base/power/shutdown.c b/drivers/base/power/shutdown.c index c2475f3134ea..8826a5b6673e 100644 --- a/drivers/base/power/shutdown.c +++ b/drivers/base/power/shutdown.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/device.h> | 12 | #include <linux/device.h> |
| 13 | #include <asm/semaphore.h> | 13 | #include <asm/semaphore.h> |
| 14 | 14 | ||
| 15 | #include "../base.h" | ||
| 15 | #include "power.h" | 16 | #include "power.h" |
| 16 | 17 | ||
| 17 | #define to_dev(node) container_of(node, struct device, kobj.entry) | 18 | #define to_dev(node) container_of(node, struct device, kobj.entry) |
| @@ -28,7 +29,6 @@ extern struct subsystem devices_subsys; | |||
| 28 | * they only get one called once when interrupts are disabled. | 29 | * they only get one called once when interrupts are disabled. |
| 29 | */ | 30 | */ |
| 30 | 31 | ||
| 31 | extern int sysdev_shutdown(void); | ||
| 32 | 32 | ||
| 33 | /** | 33 | /** |
| 34 | * device_shutdown - call ->shutdown() on each device to shutdown. | 34 | * device_shutdown - call ->shutdown() on each device to shutdown. |
diff --git a/drivers/base/power/suspend.c b/drivers/base/power/suspend.c index 50501764d050..8660779fb288 100644 --- a/drivers/base/power/suspend.c +++ b/drivers/base/power/suspend.c | |||
| @@ -9,10 +9,9 @@ | |||
| 9 | */ | 9 | */ |
| 10 | 10 | ||
| 11 | #include <linux/device.h> | 11 | #include <linux/device.h> |
| 12 | #include "../base.h" | ||
| 12 | #include "power.h" | 13 | #include "power.h" |
| 13 | 14 | ||
| 14 | extern int sysdev_suspend(pm_message_t state); | ||
| 15 | |||
| 16 | /* | 15 | /* |
| 17 | * The entries in the dpm_active list are in a depth first order, simply | 16 | * The entries in the dpm_active list are in a depth first order, simply |
| 18 | * because children are guaranteed to be discovered after parents, and | 17 | * because children are guaranteed to be discovered after parents, and |
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index f3a0c562bcb5..40d7242a07c1 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c | |||
| @@ -27,22 +27,30 @@ | |||
| 27 | 27 | ||
| 28 | static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf) | 28 | static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf) |
| 29 | { | 29 | { |
| 30 | return sprintf(buf, "%u\n", dev->power.power_state.event); | 30 | if (dev->power.power_state.event) |
| 31 | return sprintf(buf, "2\n"); | ||
| 32 | else | ||
| 33 | return sprintf(buf, "0\n"); | ||
| 31 | } | 34 | } |
| 32 | 35 | ||
| 33 | static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n) | 36 | static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n) |
| 34 | { | 37 | { |
| 35 | pm_message_t state; | 38 | pm_message_t state; |
| 36 | char * rest; | 39 | int error = -EINVAL; |
| 37 | int error = 0; | ||
| 38 | 40 | ||
| 39 | state.event = simple_strtoul(buf, &rest, 10); | 41 | state.event = PM_EVENT_SUSPEND; |
| 40 | if (*rest) | 42 | /* Older apps expected to write "3" here - confused with PCI D3 */ |
| 41 | return -EINVAL; | 43 | if ((n == 1) && !strcmp(buf, "3")) |
| 42 | if (state.event) | ||
| 43 | error = dpm_runtime_suspend(dev, state); | 44 | error = dpm_runtime_suspend(dev, state); |
| 44 | else | 45 | |
| 46 | if ((n == 1) && !strcmp(buf, "2")) | ||
| 47 | error = dpm_runtime_suspend(dev, state); | ||
| 48 | |||
| 49 | if ((n == 1) && !strcmp(buf, "0")) { | ||
| 45 | dpm_runtime_resume(dev); | 50 | dpm_runtime_resume(dev); |
| 51 | error = 0; | ||
| 52 | } | ||
| 53 | |||
| 46 | return error ? error : n; | 54 | return error ? error : n; |
| 47 | } | 55 | } |
| 48 | 56 | ||
