|
@@ -129,20 +129,20 @@ static int __init has_wakealarm(struct device *dev, const void *data)
|
|
|
* at startup time. They're normally disabled, for faster boot and because
|
|
|
* we can't know which states really work on this particular system.
|
|
|
*/
|
|
|
-static suspend_state_t test_state __initdata = PM_SUSPEND_ON;
|
|
|
+static const char *test_state_label __initdata;
|
|
|
|
|
|
static char warn_bad_state[] __initdata =
|
|
|
KERN_WARNING "PM: can't test '%s' suspend state\n";
|
|
|
|
|
|
static int __init setup_test_suspend(char *value)
|
|
|
{
|
|
|
- suspend_state_t i;
|
|
|
+ int i;
|
|
|
|
|
|
/* "=mem" ==> "mem" */
|
|
|
value++;
|
|
|
- for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++)
|
|
|
- if (!strcmp(pm_states[i], value)) {
|
|
|
- test_state = i;
|
|
|
+ for (i = 0; pm_labels[i]; i++)
|
|
|
+ if (!strcmp(pm_labels[i], value)) {
|
|
|
+ test_state_label = pm_labels[i];
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -158,13 +158,21 @@ static int __init test_suspend(void)
|
|
|
|
|
|
struct rtc_device *rtc = NULL;
|
|
|
struct device *dev;
|
|
|
+ suspend_state_t test_state;
|
|
|
|
|
|
/* PM is initialized by now; is that state testable? */
|
|
|
- if (test_state == PM_SUSPEND_ON)
|
|
|
- goto done;
|
|
|
- if (!pm_states[test_state]) {
|
|
|
- printk(warn_bad_state, pm_states[test_state]);
|
|
|
- goto done;
|
|
|
+ if (!test_state_label)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ for (test_state = PM_SUSPEND_MIN; test_state < PM_SUSPEND_MAX; test_state++) {
|
|
|
+ const char *state_label = pm_states[test_state];
|
|
|
+
|
|
|
+ if (state_label && !strcmp(test_state_label, state_label))
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (test_state == PM_SUSPEND_MAX) {
|
|
|
+ printk(warn_bad_state, test_state_label);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/* RTCs have initialized by now too ... can we use one? */
|
|
@@ -173,13 +181,12 @@ static int __init test_suspend(void)
|
|
|
rtc = rtc_class_open(dev_name(dev));
|
|
|
if (!rtc) {
|
|
|
printk(warn_no_rtc);
|
|
|
- goto done;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/* go for it */
|
|
|
test_wakealarm(rtc, test_state);
|
|
|
rtc_class_close(rtc);
|
|
|
-done:
|
|
|
return 0;
|
|
|
}
|
|
|
late_initcall(test_suspend);
|