* [PATCH] ACPI: suspend: consolidate handling of Sx states.
@ 2007-09-20 17:32 Alexey Starikovskiy
2007-09-20 20:00 ` Rafael J. Wysocki
2007-09-21 0:50 ` Len Brown
0 siblings, 2 replies; 4+ messages in thread
From: Alexey Starikovskiy @ 2007-09-20 17:32 UTC (permalink / raw)
To: lenb, linux-acpi
Recent changes to sleep initialization in ACPI dropped reporting of supported Sx
states above S3. Fix that and also move S5 init into same file as other Sx.
The only functional change is adding printk() for S4 and S5 cases.
Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
---
drivers/acpi/sleep/Makefile | 2 +
drivers/acpi/sleep/main.c | 53 ++++++++++++++++++++++++++---
drivers/acpi/sleep/poweroff.c | 75 -----------------------------------------
3 files changed, 49 insertions(+), 81 deletions(-)
diff --git a/drivers/acpi/sleep/Makefile b/drivers/acpi/sleep/Makefile
index 195a4f6..ba9bd40 100644
--- a/drivers/acpi/sleep/Makefile
+++ b/drivers/acpi/sleep/Makefile
@@ -1,4 +1,4 @@
-obj-y := poweroff.o wakeup.o
+obj-y := wakeup.o
obj-$(CONFIG_ACPI_SLEEP) += main.o
obj-$(CONFIG_ACPI_SLEEP) += proc.o
diff --git a/drivers/acpi/sleep/main.c b/drivers/acpi/sleep/main.c
index c52ade8..638172f 100644
--- a/drivers/acpi/sleep/main.c
+++ b/drivers/acpi/sleep/main.c
@@ -15,6 +15,9 @@
#include <linux/dmi.h>
#include <linux/device.h>
#include <linux/suspend.h>
+
+#include <asm/io.h>
+
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
#include "sleep.h"
@@ -57,6 +60,27 @@ static int acpi_pm_set_target(suspend_state_t pm_state)
return error;
}
+int acpi_sleep_prepare(u32 acpi_state)
+{
+#ifdef CONFIG_ACPI_SLEEP
+ /* do we have a wakeup address for S2 and S3? */
+ if (acpi_state == ACPI_STATE_S3) {
+ if (!acpi_wakeup_address) {
+ return -EFAULT;
+ }
+ acpi_set_firmware_waking_vector((acpi_physical_address)
+ virt_to_phys((void *)
+ acpi_wakeup_address));
+
+ }
+ ACPI_FLUSH_CPU_CACHE();
+ acpi_enable_wakeup_device_prep(acpi_state);
+#endif
+ acpi_gpe_sleep_prepare(acpi_state);
+ acpi_enter_sleep_state_prep(acpi_state);
+ return 0;
+}
+
/**
* acpi_pm_prepare - Do preliminary suspend work.
* @pm_state: ignored
@@ -350,6 +374,20 @@ int acpi_pm_device_sleep_state(struct device *dev, int wake, int *d_min_p)
return d_max;
}
+static void acpi_power_off_prepare(void)
+{
+ /* Prepare to power off the system */
+ acpi_sleep_prepare(ACPI_STATE_S5);
+}
+
+static void acpi_power_off(void)
+{
+ /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
+ printk("%s called\n", __FUNCTION__);
+ local_irq_disable();
+ acpi_enter_sleep_state(ACPI_STATE_S5);
+}
+
int __init acpi_sleep_init(void)
{
acpi_status status;
@@ -363,8 +401,8 @@ int __init acpi_sleep_init(void)
if (acpi_disabled)
return 0;
+printk(KERN_INFO PREFIX "(supports");
#ifdef CONFIG_SUSPEND
- printk(KERN_INFO PREFIX "(supports");
for (i = ACPI_STATE_S0; i < ACPI_STATE_S4; i++) {
status = acpi_get_sleep_type_data(i, &type_a, &type_b);
if (ACPI_SUCCESS(status)) {
@@ -372,7 +410,6 @@ int __init acpi_sleep_init(void)
printk(" S%d", i);
}
}
- printk(")\n");
pm_set_ops(&acpi_pm_ops);
#endif
@@ -382,10 +419,16 @@ int __init acpi_sleep_init(void)
if (ACPI_SUCCESS(status)) {
hibernation_set_ops(&acpi_hibernation_ops);
sleep_states[ACPI_STATE_S4] = 1;
+ printk(" S4");
}
-#else
- sleep_states[ACPI_STATE_S4] = 0;
#endif
-
+ status = acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b);
+ if (ACPI_SUCCESS(status)) {
+ sleep_states[ACPI_STATE_S5] = 1;
+ printk(" S5");
+ pm_power_off_prepare = acpi_power_off_prepare;
+ pm_power_off = acpi_power_off;
+ }
+ printk(")\n");
return 0;
}
diff --git a/drivers/acpi/sleep/poweroff.c b/drivers/acpi/sleep/poweroff.c
deleted file mode 100644
index 39e40d5..0000000
--- a/drivers/acpi/sleep/poweroff.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * poweroff.c - ACPI handler for powering off the system.
- *
- * AKA S5, but it is independent of whether or not the kernel supports
- * any other sleep support in the system.
- *
- * Copyright (c) 2005 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
- *
- * This file is released under the GPLv2.
- */
-
-#include <linux/pm.h>
-#include <linux/init.h>
-#include <acpi/acpi_bus.h>
-#include <linux/sysdev.h>
-#include <asm/io.h>
-#include "sleep.h"
-
-int acpi_sleep_prepare(u32 acpi_state)
-{
-#ifdef CONFIG_ACPI_SLEEP
- /* do we have a wakeup address for S2 and S3? */
- if (acpi_state == ACPI_STATE_S3) {
- if (!acpi_wakeup_address) {
- return -EFAULT;
- }
- acpi_set_firmware_waking_vector((acpi_physical_address)
- virt_to_phys((void *)
- acpi_wakeup_address));
-
- }
- ACPI_FLUSH_CPU_CACHE();
- acpi_enable_wakeup_device_prep(acpi_state);
-#endif
- acpi_gpe_sleep_prepare(acpi_state);
- acpi_enter_sleep_state_prep(acpi_state);
- return 0;
-}
-
-#ifdef CONFIG_PM
-
-static void acpi_power_off_prepare(void)
-{
- /* Prepare to power off the system */
- acpi_sleep_prepare(ACPI_STATE_S5);
-}
-
-static void acpi_power_off(void)
-{
- /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
- printk("%s called\n", __FUNCTION__);
- local_irq_disable();
- /* Some SMP machines only can poweroff in boot CPU */
- acpi_enter_sleep_state(ACPI_STATE_S5);
-}
-
-static int acpi_poweroff_init(void)
-{
- if (!acpi_disabled) {
- u8 type_a, type_b;
- acpi_status status;
-
- status =
- acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b);
- if (ACPI_SUCCESS(status)) {
- pm_power_off_prepare = acpi_power_off_prepare;
- pm_power_off = acpi_power_off;
- }
- }
- return 0;
-}
-
-late_initcall(acpi_poweroff_init);
-
-#endif /* CONFIG_PM */
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] ACPI: suspend: consolidate handling of Sx states.
2007-09-20 17:32 [PATCH] ACPI: suspend: consolidate handling of Sx states Alexey Starikovskiy
@ 2007-09-20 20:00 ` Rafael J. Wysocki
2007-09-20 21:05 ` Rafael J. Wysocki
2007-09-21 0:50 ` Len Brown
1 sibling, 1 reply; 4+ messages in thread
From: Rafael J. Wysocki @ 2007-09-20 20:00 UTC (permalink / raw)
To: Alexey Starikovskiy; +Cc: lenb, linux-acpi
On Thursday, 20 September 2007 19:32, Alexey Starikovskiy wrote:
> Recent changes to sleep initialization in ACPI dropped reporting of supported Sx
> states above S3. Fix that and also move S5 init into same file as other Sx.
Well, that's a result of one of my patches. Thanks for fixing!
> The only functional change is adding printk() for S4 and S5 cases.
>
> Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
> ---
>
> drivers/acpi/sleep/Makefile | 2 +
> drivers/acpi/sleep/main.c | 53 ++++++++++++++++++++++++++---
> drivers/acpi/sleep/poweroff.c | 75 -----------------------------------------
> 3 files changed, 49 insertions(+), 81 deletions(-)
>
> diff --git a/drivers/acpi/sleep/Makefile b/drivers/acpi/sleep/Makefile
> index 195a4f6..ba9bd40 100644
> --- a/drivers/acpi/sleep/Makefile
> +++ b/drivers/acpi/sleep/Makefile
> @@ -1,4 +1,4 @@
> -obj-y := poweroff.o wakeup.o
> +obj-y := wakeup.o
> obj-$(CONFIG_ACPI_SLEEP) += main.o
> obj-$(CONFIG_ACPI_SLEEP) += proc.o
>
> diff --git a/drivers/acpi/sleep/main.c b/drivers/acpi/sleep/main.c
> index c52ade8..638172f 100644
> --- a/drivers/acpi/sleep/main.c
> +++ b/drivers/acpi/sleep/main.c
> @@ -15,6 +15,9 @@
> #include <linux/dmi.h>
> #include <linux/device.h>
> #include <linux/suspend.h>
> +
> +#include <asm/io.h>
> +
> #include <acpi/acpi_bus.h>
> #include <acpi/acpi_drivers.h>
> #include "sleep.h"
> @@ -57,6 +60,27 @@ static int acpi_pm_set_target(suspend_state_t pm_state)
> return error;
> }
>
> +int acpi_sleep_prepare(u32 acpi_state)
> +{
> +#ifdef CONFIG_ACPI_SLEEP
> + /* do we have a wakeup address for S2 and S3? */
> + if (acpi_state == ACPI_STATE_S3) {
> + if (!acpi_wakeup_address) {
> + return -EFAULT;
> + }
> + acpi_set_firmware_waking_vector((acpi_physical_address)
> + virt_to_phys((void *)
> + acpi_wakeup_address));
> +
> + }
> + ACPI_FLUSH_CPU_CACHE();
> + acpi_enable_wakeup_device_prep(acpi_state);
> +#endif
> + acpi_gpe_sleep_prepare(acpi_state);
> + acpi_enter_sleep_state_prep(acpi_state);
> + return 0;
> +}
> +
> /**
> * acpi_pm_prepare - Do preliminary suspend work.
> * @pm_state: ignored
> @@ -350,6 +374,20 @@ int acpi_pm_device_sleep_state(struct device *dev, int wake, int *d_min_p)
> return d_max;
> }
>
> +static void acpi_power_off_prepare(void)
> +{
> + /* Prepare to power off the system */
> + acpi_sleep_prepare(ACPI_STATE_S5);
> +}
> +
> +static void acpi_power_off(void)
> +{
> + /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
> + printk("%s called\n", __FUNCTION__);
> + local_irq_disable();
> + acpi_enter_sleep_state(ACPI_STATE_S5);
> +}
> +
> int __init acpi_sleep_init(void)
> {
> acpi_status status;
> @@ -363,8 +401,8 @@ int __init acpi_sleep_init(void)
> if (acpi_disabled)
> return 0;
>
> +printk(KERN_INFO PREFIX "(supports");
> #ifdef CONFIG_SUSPEND
> - printk(KERN_INFO PREFIX "(supports");
> for (i = ACPI_STATE_S0; i < ACPI_STATE_S4; i++) {
> status = acpi_get_sleep_type_data(i, &type_a, &type_b);
> if (ACPI_SUCCESS(status)) {
> @@ -372,7 +410,6 @@ int __init acpi_sleep_init(void)
> printk(" S%d", i);
> }
> }
> - printk(")\n");
>
> pm_set_ops(&acpi_pm_ops);
> #endif
> @@ -382,10 +419,16 @@ int __init acpi_sleep_init(void)
> if (ACPI_SUCCESS(status)) {
> hibernation_set_ops(&acpi_hibernation_ops);
> sleep_states[ACPI_STATE_S4] = 1;
> + printk(" S4");
> }
> -#else
> - sleep_states[ACPI_STATE_S4] = 0;
> #endif
> -
> + status = acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b);
> + if (ACPI_SUCCESS(status)) {
> + sleep_states[ACPI_STATE_S5] = 1;
> + printk(" S5");
> + pm_power_off_prepare = acpi_power_off_prepare;
> + pm_power_off = acpi_power_off;
> + }
> + printk(")\n");
> return 0;
> }
> diff --git a/drivers/acpi/sleep/poweroff.c b/drivers/acpi/sleep/poweroff.c
> deleted file mode 100644
> index 39e40d5..0000000
> --- a/drivers/acpi/sleep/poweroff.c
> +++ /dev/null
> @@ -1,75 +0,0 @@
> -/*
> - * poweroff.c - ACPI handler for powering off the system.
> - *
> - * AKA S5, but it is independent of whether or not the kernel supports
> - * any other sleep support in the system.
> - *
> - * Copyright (c) 2005 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
> - *
> - * This file is released under the GPLv2.
> - */
> -
> -#include <linux/pm.h>
> -#include <linux/init.h>
> -#include <acpi/acpi_bus.h>
> -#include <linux/sysdev.h>
> -#include <asm/io.h>
> -#include "sleep.h"
> -
> -int acpi_sleep_prepare(u32 acpi_state)
> -{
> -#ifdef CONFIG_ACPI_SLEEP
> - /* do we have a wakeup address for S2 and S3? */
> - if (acpi_state == ACPI_STATE_S3) {
> - if (!acpi_wakeup_address) {
> - return -EFAULT;
> - }
> - acpi_set_firmware_waking_vector((acpi_physical_address)
> - virt_to_phys((void *)
> - acpi_wakeup_address));
> -
> - }
> - ACPI_FLUSH_CPU_CACHE();
> - acpi_enable_wakeup_device_prep(acpi_state);
> -#endif
> - acpi_gpe_sleep_prepare(acpi_state);
> - acpi_enter_sleep_state_prep(acpi_state);
> - return 0;
> -}
> -
> -#ifdef CONFIG_PM
> -
> -static void acpi_power_off_prepare(void)
> -{
> - /* Prepare to power off the system */
> - acpi_sleep_prepare(ACPI_STATE_S5);
> -}
> -
> -static void acpi_power_off(void)
> -{
> - /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
> - printk("%s called\n", __FUNCTION__);
> - local_irq_disable();
> - /* Some SMP machines only can poweroff in boot CPU */
> - acpi_enter_sleep_state(ACPI_STATE_S5);
> -}
> -
> -static int acpi_poweroff_init(void)
> -{
> - if (!acpi_disabled) {
> - u8 type_a, type_b;
> - acpi_status status;
> -
> - status =
> - acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b);
> - if (ACPI_SUCCESS(status)) {
> - pm_power_off_prepare = acpi_power_off_prepare;
> - pm_power_off = acpi_power_off;
> - }
> - }
> - return 0;
> -}
> -
> -late_initcall(acpi_poweroff_init);
> -
> -#endif /* CONFIG_PM */
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
>
--
"Premature optimization is the root of all evil." - Donald Knuth
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ACPI: suspend: consolidate handling of Sx states.
2007-09-20 20:00 ` Rafael J. Wysocki
@ 2007-09-20 21:05 ` Rafael J. Wysocki
0 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2007-09-20 21:05 UTC (permalink / raw)
To: Alexey Starikovskiy; +Cc: lenb, linux-acpi
On Thursday, 20 September 2007 22:00, Rafael J. Wysocki wrote:
> On Thursday, 20 September 2007 19:32, Alexey Starikovskiy wrote:
> > Recent changes to sleep initialization in ACPI dropped reporting of supported Sx
> > states above S3. Fix that and also move S5 init into same file as other Sx.
>
> Well, that's a result of one of my patches. Thanks for fixing!
>
> > The only functional change is adding printk() for S4 and S5 cases.
> >
> > Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
>
> Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
BTW, it clashes with your previous patch:
http://www.sisk.pl/kernel/hibernation_and_suspend/2.6.23-rc7/patches/32-ACPI-Clean-up-GPE-handling-across-suspend_resume-for-wake-up-devices.patch
a bit, so I have fixed it up. Please have a look:
http://www.sisk.pl/kernel/hibernation_and_suspend/2.6.23-rc7/patches/38-ACPI-suspend-consolidate-handling-of-Sx-states.patch
Greetings,
Rafael
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ACPI: suspend: consolidate handling of Sx states.
2007-09-20 17:32 [PATCH] ACPI: suspend: consolidate handling of Sx states Alexey Starikovskiy
2007-09-20 20:00 ` Rafael J. Wysocki
@ 2007-09-21 0:50 ` Len Brown
1 sibling, 0 replies; 4+ messages in thread
From: Len Brown @ 2007-09-21 0:50 UTC (permalink / raw)
To: Alexey Starikovskiy; +Cc: linux-acpi, Rafael Wysocki
Applied.
thanks,
-Len
On Thursday 20 September 2007 13:32, Alexey Starikovskiy wrote:
> Recent changes to sleep initialization in ACPI dropped reporting of supported Sx
> states above S3. Fix that and also move S5 init into same file as other Sx.
> The only functional change is adding printk() for S4 and S5 cases.
>
> Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
> ---
>
> drivers/acpi/sleep/Makefile | 2 +
> drivers/acpi/sleep/main.c | 53 ++++++++++++++++++++++++++---
> drivers/acpi/sleep/poweroff.c | 75 -----------------------------------------
> 3 files changed, 49 insertions(+), 81 deletions(-)
>
> diff --git a/drivers/acpi/sleep/Makefile b/drivers/acpi/sleep/Makefile
> index 195a4f6..ba9bd40 100644
> --- a/drivers/acpi/sleep/Makefile
> +++ b/drivers/acpi/sleep/Makefile
> @@ -1,4 +1,4 @@
> -obj-y := poweroff.o wakeup.o
> +obj-y := wakeup.o
> obj-$(CONFIG_ACPI_SLEEP) += main.o
> obj-$(CONFIG_ACPI_SLEEP) += proc.o
>
> diff --git a/drivers/acpi/sleep/main.c b/drivers/acpi/sleep/main.c
> index c52ade8..638172f 100644
> --- a/drivers/acpi/sleep/main.c
> +++ b/drivers/acpi/sleep/main.c
> @@ -15,6 +15,9 @@
> #include <linux/dmi.h>
> #include <linux/device.h>
> #include <linux/suspend.h>
> +
> +#include <asm/io.h>
> +
> #include <acpi/acpi_bus.h>
> #include <acpi/acpi_drivers.h>
> #include "sleep.h"
> @@ -57,6 +60,27 @@ static int acpi_pm_set_target(suspend_state_t pm_state)
> return error;
> }
>
> +int acpi_sleep_prepare(u32 acpi_state)
> +{
> +#ifdef CONFIG_ACPI_SLEEP
> + /* do we have a wakeup address for S2 and S3? */
> + if (acpi_state == ACPI_STATE_S3) {
> + if (!acpi_wakeup_address) {
> + return -EFAULT;
> + }
> + acpi_set_firmware_waking_vector((acpi_physical_address)
> + virt_to_phys((void *)
> + acpi_wakeup_address));
> +
> + }
> + ACPI_FLUSH_CPU_CACHE();
> + acpi_enable_wakeup_device_prep(acpi_state);
> +#endif
> + acpi_gpe_sleep_prepare(acpi_state);
> + acpi_enter_sleep_state_prep(acpi_state);
> + return 0;
> +}
> +
> /**
> * acpi_pm_prepare - Do preliminary suspend work.
> * @pm_state: ignored
> @@ -350,6 +374,20 @@ int acpi_pm_device_sleep_state(struct device *dev, int wake, int *d_min_p)
> return d_max;
> }
>
> +static void acpi_power_off_prepare(void)
> +{
> + /* Prepare to power off the system */
> + acpi_sleep_prepare(ACPI_STATE_S5);
> +}
> +
> +static void acpi_power_off(void)
> +{
> + /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
> + printk("%s called\n", __FUNCTION__);
> + local_irq_disable();
> + acpi_enter_sleep_state(ACPI_STATE_S5);
> +}
> +
> int __init acpi_sleep_init(void)
> {
> acpi_status status;
> @@ -363,8 +401,8 @@ int __init acpi_sleep_init(void)
> if (acpi_disabled)
> return 0;
>
> +printk(KERN_INFO PREFIX "(supports");
> #ifdef CONFIG_SUSPEND
> - printk(KERN_INFO PREFIX "(supports");
> for (i = ACPI_STATE_S0; i < ACPI_STATE_S4; i++) {
> status = acpi_get_sleep_type_data(i, &type_a, &type_b);
> if (ACPI_SUCCESS(status)) {
> @@ -372,7 +410,6 @@ int __init acpi_sleep_init(void)
> printk(" S%d", i);
> }
> }
> - printk(")\n");
>
> pm_set_ops(&acpi_pm_ops);
> #endif
> @@ -382,10 +419,16 @@ int __init acpi_sleep_init(void)
> if (ACPI_SUCCESS(status)) {
> hibernation_set_ops(&acpi_hibernation_ops);
> sleep_states[ACPI_STATE_S4] = 1;
> + printk(" S4");
> }
> -#else
> - sleep_states[ACPI_STATE_S4] = 0;
> #endif
> -
> + status = acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b);
> + if (ACPI_SUCCESS(status)) {
> + sleep_states[ACPI_STATE_S5] = 1;
> + printk(" S5");
> + pm_power_off_prepare = acpi_power_off_prepare;
> + pm_power_off = acpi_power_off;
> + }
> + printk(")\n");
> return 0;
> }
> diff --git a/drivers/acpi/sleep/poweroff.c b/drivers/acpi/sleep/poweroff.c
> deleted file mode 100644
> index 39e40d5..0000000
> --- a/drivers/acpi/sleep/poweroff.c
> +++ /dev/null
> @@ -1,75 +0,0 @@
> -/*
> - * poweroff.c - ACPI handler for powering off the system.
> - *
> - * AKA S5, but it is independent of whether or not the kernel supports
> - * any other sleep support in the system.
> - *
> - * Copyright (c) 2005 Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
> - *
> - * This file is released under the GPLv2.
> - */
> -
> -#include <linux/pm.h>
> -#include <linux/init.h>
> -#include <acpi/acpi_bus.h>
> -#include <linux/sysdev.h>
> -#include <asm/io.h>
> -#include "sleep.h"
> -
> -int acpi_sleep_prepare(u32 acpi_state)
> -{
> -#ifdef CONFIG_ACPI_SLEEP
> - /* do we have a wakeup address for S2 and S3? */
> - if (acpi_state == ACPI_STATE_S3) {
> - if (!acpi_wakeup_address) {
> - return -EFAULT;
> - }
> - acpi_set_firmware_waking_vector((acpi_physical_address)
> - virt_to_phys((void *)
> - acpi_wakeup_address));
> -
> - }
> - ACPI_FLUSH_CPU_CACHE();
> - acpi_enable_wakeup_device_prep(acpi_state);
> -#endif
> - acpi_gpe_sleep_prepare(acpi_state);
> - acpi_enter_sleep_state_prep(acpi_state);
> - return 0;
> -}
> -
> -#ifdef CONFIG_PM
> -
> -static void acpi_power_off_prepare(void)
> -{
> - /* Prepare to power off the system */
> - acpi_sleep_prepare(ACPI_STATE_S5);
> -}
> -
> -static void acpi_power_off(void)
> -{
> - /* acpi_sleep_prepare(ACPI_STATE_S5) should have already been called */
> - printk("%s called\n", __FUNCTION__);
> - local_irq_disable();
> - /* Some SMP machines only can poweroff in boot CPU */
> - acpi_enter_sleep_state(ACPI_STATE_S5);
> -}
> -
> -static int acpi_poweroff_init(void)
> -{
> - if (!acpi_disabled) {
> - u8 type_a, type_b;
> - acpi_status status;
> -
> - status =
> - acpi_get_sleep_type_data(ACPI_STATE_S5, &type_a, &type_b);
> - if (ACPI_SUCCESS(status)) {
> - pm_power_off_prepare = acpi_power_off_prepare;
> - pm_power_off = acpi_power_off;
> - }
> - }
> - return 0;
> -}
> -
> -late_initcall(acpi_poweroff_init);
> -
> -#endif /* CONFIG_PM */
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-09-21 0:50 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-20 17:32 [PATCH] ACPI: suspend: consolidate handling of Sx states Alexey Starikovskiy
2007-09-20 20:00 ` Rafael J. Wysocki
2007-09-20 21:05 ` Rafael J. Wysocki
2007-09-21 0:50 ` Len Brown
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).