Testing suspend and resume support in device drivers
	(C) 2007 Rafael J. Wysocki <rjw@sisk.pl>, GPL

1. Preparing the test system

Unfortunately, to effectively test the support for the system-wide suspend and
resume transitions in a driver, it is necessary to suspend and resume a fully
functional system with this driver loaded.  Moreover, that should be done
several times, preferably several times in a row, and separately for the suspend
to disk (STD) and the suspend to RAM (STR) transitions, because each of these
cases involves different ordering of operations and different interactions with
the machine's BIOS.

Of course, for this purpose the test system has to be known to suspend and
resume without the driver being tested.  Thus, if possible, you should first
resolve all suspend/resume-related problems in the test system before you start
testing the new driver.  Please see Documentation/power/basic-pm-debugging.txt
for more information about the debugging of suspend/resume functionality.

2. Testing the driver

Once you have resolved the suspend/resume-related problems with your test system
without the new driver, you are ready to test it:

a) Build the driver as a module, load it and try the STD in the test mode (see:
Documents/power/basic-pm-debugging.txt, 1a)).

b) Load the driver and attempt to suspend to disk in the "reboot", "shutdown"
and "platform" modes (see: Documents/power/basic-pm-debugging.txt, 1).

c) Compile the driver directly into the kernel and try the STD in the test mode.

d) Attempt to suspend to disk with the driver compiled directly into the kernel
in the "reboot", "shutdown" and "platform" modes.

e) Attempt to suspend to RAM using the s2ram tool with the driver loaded (see:
Documents/power/basic-pm-debugging.txt, 2).  As far as the STR tests are
concerned, it should not matter whether or not the driver is built as a module.

Each of the above tests should be repeated several times and the STD tests
should be mixed with the STR tests.  If any of them fails, the driver cannot be
regarded as suspend/resume-safe.
