[PATCH] Fix Userspace interface breakage in power/state
authorPavel Machek <pavel@suse.cz>
Sun, 22 Jan 2006 21:38:52 +0000 (22:38 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 6 Feb 2006 20:17:17 +0000 (12:17 -0800)
Prevent passing invalid values down to the drivers.

Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/base/power/sysfs.c

index f3a0c56..40d7242 100644 (file)
 
 static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf)
 {
-       return sprintf(buf, "%u\n", dev->power.power_state.event);
+       if (dev->power.power_state.event)
+               return sprintf(buf, "2\n");
+       else
+               return sprintf(buf, "0\n");
 }
 
 static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n)
 {
        pm_message_t state;
-       char * rest;
-       int error = 0;
+       int error = -EINVAL;
 
-       state.event = simple_strtoul(buf, &rest, 10);
-       if (*rest)
-               return -EINVAL;
-       if (state.event)
+       state.event = PM_EVENT_SUSPEND;
+       /* Older apps expected to write "3" here - confused with PCI D3 */
+       if ((n == 1) && !strcmp(buf, "3"))
                error = dpm_runtime_suspend(dev, state);
-       else
+
+       if ((n == 1) && !strcmp(buf, "2"))
+               error = dpm_runtime_suspend(dev, state);
+
+       if ((n == 1) && !strcmp(buf, "0")) {
                dpm_runtime_resume(dev);
+               error = 0;
+       }
+
        return error ? error : n;
 }