[PATCH] Leave runtime suspended devices off at system resume

From: Todd Poynor
Date: Wed May 26 2004 - 16:45:11 EST


Currently all devices are resumed at system resume time, including any
that were individually powered off ("at runtime") prior to the system
suspend. In certain cases it can be nice to force back on individually
suspended devices, such as the display, but hopefully this policy can be
left up to userspace power managers; the kernel should probably honor
the settings previously made by userspace/drivers. This seems
preferable to requiring a power-conscious system to re-suspend devices
after a system resume; furthermore, for certain platforms (such as
XScale PXA27X) there can be disastrous consequences of powering up
devices when the system is in a state incompatible with operation of the
device.

Suggested patch does this:

(1) At system resume, checks power_state to see if the device was
suspended prior to system suspend, and skips powering on the device if
so.

(2) Does not re-suspend an already-suspended device at system suspend
(using a different method than is currently employed, which reorders the
list, see #3).

(3) Preserves the active/off device list order despite the above changes
to suspend/resume behavior, to avoid dependency problems that tend to
occur when the list is reordered.

--- linux-2.6.6-orig/drivers/base/power/suspend.c 2004-05-10 11:22:58.000000000 -0700
+++ linux-2.6.6-prevstate/drivers/base/power/suspend.c 2004-05-25 19:00:20.803379624 -0700
@@ -39,7 +39,7 @@
{
int error = 0;

- if (dev->bus && dev->bus->suspend)
+ if (dev->bus && dev->bus->suspend && ! dev->power.power_state)
error = dev->bus->suspend(dev,state);

if (!error) {
--- linux-2.6.6-orig/drivers/base/power/resume.c 2004-05-10 11:22:58.000000000 -0700
+++ linux-2.6.6-prevstate/drivers/base/power/resume.c 2004-05-25 18:07:30.978266288 -0700
@@ -35,7 +35,10 @@
struct list_head * entry = dpm_off.next;
struct device * dev = to_device(entry);
list_del_init(entry);
- resume_device(dev);
+
+ if (! dev->power.power_state)
+ resume_device(dev);
+
list_add_tail(entry,&dpm_active);
}
}



--
Todd
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/