aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhao Yakui <yakui.zhao@intel.com>2008-05-13 23:32:59 -0400
committerLen Brown <len.brown@intel.com>2008-06-11 19:13:45 -0400
commite1094bfa26e5e94af2fea79e004614dbce42b008 (patch)
treeb9a610ca0a45b5bf7d3cbc73e6923225b16d7436
parent28ffb5d3e0b563be5a9639c3a2b42f1a9430454f (diff)
ACPI: Disable Fixed_RTC event when installing RTC handler
The Fixed_RTC event should be disabled when installing RTC handler. Only when RTC alarm is set will it be enabled again. If it is not disabled, maybe some machines will be powered on automatically after the system is shutdown even when the RTC alarm is not set. http://bugzilla.kernel.org/show_bug.cgi?id=10010 Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Signed-off-by: Zhang Rui <rui.zhang@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/acpi/glue.c6
-rw-r--r--drivers/acpi/sleep/proc.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/drivers/acpi/glue.c b/drivers/acpi/glue.c
index 06f8634fe58b..2808dc60fd67 100644
--- a/drivers/acpi/glue.c
+++ b/drivers/acpi/glue.c
@@ -272,6 +272,12 @@ static u32 rtc_handler(void *context)
272static inline void rtc_wake_setup(void) 272static inline void rtc_wake_setup(void)
273{ 273{
274 acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, NULL); 274 acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, NULL);
275 /*
276 * After the RTC handler is installed, the Fixed_RTC event should
277 * be disabled. Only when the RTC alarm is set will it be enabled.
278 */
279 acpi_clear_event(ACPI_EVENT_RTC);
280 acpi_disable_event(ACPI_EVENT_RTC, 0);
275} 281}
276 282
277static void rtc_wake_on(struct device *dev) 283static void rtc_wake_on(struct device *dev)
diff --git a/drivers/acpi/sleep/proc.c b/drivers/acpi/sleep/proc.c
index 8a5fe8710513..224c57c03381 100644
--- a/drivers/acpi/sleep/proc.c
+++ b/drivers/acpi/sleep/proc.c
@@ -495,6 +495,12 @@ static int __init acpi_sleep_proc_init(void)
495 acpi_root_dir, &acpi_system_alarm_fops); 495 acpi_root_dir, &acpi_system_alarm_fops);
496 496
497 acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, NULL); 497 acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, NULL);
498 /*
499 * Disable the RTC event after installing RTC handler.
500 * Only when RTC alarm is set will it be enabled.
501 */
502 acpi_clear_event(ACPI_EVENT_RTC);
503 acpi_disable_event(ACPI_EVENT_RTC, 0);
498#endif /* HAVE_ACPI_LEGACY_ALARM */ 504#endif /* HAVE_ACPI_LEGACY_ALARM */
499 505
500 /* 'wakeup device' [R/W] */ 506 /* 'wakeup device' [R/W] */