]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/acpi/sleep/main.c
PM: Rework struct hibernation_ops
[mv-sheeva.git] / drivers / acpi / sleep / main.c
index 5055acf2163c6d4e55fec3f68871c90ec6c41c1d..f20b0ab9ef54c6db548e0ea3296f88da42d26f21 100644 (file)
@@ -50,7 +50,7 @@ int acpi_sleep_prepare(u32 acpi_state)
 }
 
 #ifdef CONFIG_SUSPEND
-static struct pm_ops acpi_pm_ops;
+static struct platform_suspend_ops acpi_pm_ops;
 
 extern void do_suspend_lowlevel(void);
 
@@ -85,13 +85,12 @@ static int acpi_pm_set_target(suspend_state_t pm_state)
 
 /**
  *     acpi_pm_prepare - Do preliminary suspend work.
- *     @pm_state: ignored
  *
  *     If necessary, set the firmware waking vector and do arch-specific
  *     nastiness to get the wakeup code to the waking vector.
  */
 
-static int acpi_pm_prepare(suspend_state_t pm_state)
+static int acpi_pm_prepare(void)
 {
        int error = acpi_sleep_prepare(acpi_target_sleep_state);
 
@@ -160,13 +159,12 @@ static int acpi_pm_enter(suspend_state_t pm_state)
 
 /**
  *     acpi_pm_finish - Finish up suspend sequence.
- *     @pm_state: ignored
  *
  *     This is called after we wake back up (or if entering the sleep state
  *     failed). 
  */
 
-static int acpi_pm_finish(suspend_state_t pm_state)
+static void acpi_pm_finish(void)
 {
        u32 acpi_state = acpi_target_sleep_state;
 
@@ -184,7 +182,6 @@ static int acpi_pm_finish(suspend_state_t pm_state)
                init_8259A(0);
        }
 #endif
-       return 0;
 }
 
 static int acpi_pm_state_valid(suspend_state_t pm_state)
@@ -203,7 +200,7 @@ static int acpi_pm_state_valid(suspend_state_t pm_state)
        }
 }
 
-static struct pm_ops acpi_pm_ops = {
+static struct platform_suspend_ops acpi_pm_ops = {
        .valid = acpi_pm_state_valid,
        .set_target = acpi_pm_set_target,
        .prepare = acpi_pm_prepare,
@@ -233,6 +230,12 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
 #endif /* CONFIG_SUSPEND */
 
 #ifdef CONFIG_HIBERNATION
+static int acpi_hibernation_start(void)
+{
+       acpi_target_sleep_state = ACPI_STATE_S4;
+       return 0;
+}
+
 static int acpi_hibernation_prepare(void)
 {
        return acpi_sleep_prepare(ACPI_STATE_S4);
@@ -261,6 +264,8 @@ static void acpi_hibernation_finish(void)
 
        /* reset firmware waking vector */
        acpi_set_firmware_waking_vector((acpi_physical_address) 0);
+
+       acpi_target_sleep_state = ACPI_STATE_S0;
 }
 
 static int acpi_hibernation_pre_restore(void)
@@ -278,9 +283,11 @@ static void acpi_hibernation_restore_cleanup(void)
 }
 
 static struct hibernation_ops acpi_hibernation_ops = {
+       .start = acpi_hibernation_start,
+       .pre_snapshot = acpi_hibernation_prepare,
+       .finish = acpi_hibernation_finish,
        .prepare = acpi_hibernation_prepare,
        .enter = acpi_hibernation_enter,
-       .finish = acpi_hibernation_finish,
        .pre_restore = acpi_hibernation_pre_restore,
        .restore_cleanup = acpi_hibernation_restore_cleanup,
 };
@@ -417,7 +424,7 @@ int __init acpi_sleep_init(void)
                }
        }
 
-       pm_set_ops(&acpi_pm_ops);
+       suspend_set_ops(&acpi_pm_ops);
 #endif
 
 #ifdef CONFIG_HIBERNATION