Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 54777
b: refs/heads/master
c: f5f72b4
h: refs/heads/master
i:
  54775: 7b6fdac
v: v3
  • Loading branch information
David Brownell authored and Linus Torvalds committed May 8, 2007
1 parent 17bf73e commit d4362e2
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 4 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 87ac84f42a7a580d0dd72ae31d6a5eb4bfe04c6d
refs/heads/master: f5f72b46c349fefcfd4421b2213c6ffb324c5e56
37 changes: 36 additions & 1 deletion trunk/drivers/acpi/glue.c
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,35 @@ arch_initcall(init_acpi_device_notify);

#if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE)

#ifdef CONFIG_PM
static u32 rtc_handler(void *context)
{
acpi_clear_event(ACPI_EVENT_RTC);
acpi_disable_event(ACPI_EVENT_RTC, 0);
return ACPI_INTERRUPT_HANDLED;
}

static inline void rtc_wake_setup(void)
{
acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, NULL);
}

static void rtc_wake_on(struct device *dev)
{
acpi_clear_event(ACPI_EVENT_RTC);
acpi_enable_event(ACPI_EVENT_RTC, 0);
}

static void rtc_wake_off(struct device *dev)
{
acpi_disable_event(ACPI_EVENT_RTC, 0);
}
#else
#define rtc_wake_setup() do{}while(0)
#define rtc_wake_on NULL
#define rtc_wake_off NULL
#endif

/* Every ACPI platform has a mc146818 compatible "cmos rtc". Here we find
* its device node and pass extra config data. This helps its driver use
* capabilities that the now-obsolete mc146818 didn't have, and informs it
Expand Down Expand Up @@ -283,11 +312,17 @@ static int __init acpi_rtc_init(void)
struct device *dev = get_rtc_dev();

if (dev) {
rtc_wake_setup();
rtc_info.wake_on = rtc_wake_on;
rtc_info.wake_off = rtc_wake_off;

rtc_info.rtc_day_alarm = acpi_gbl_FADT.day_alarm;
rtc_info.rtc_mon_alarm = acpi_gbl_FADT.month_alarm;
rtc_info.rtc_century = acpi_gbl_FADT.century;

/* NOTE: acpi_gbl_FADT->rtcs4 is NOT currently useful */
/* NOTE: S4_RTC_WAKE is NOT currently useful to Linux */
if (acpi_gbl_FADT.flags & ACPI_FADT_S4_RTC_WAKE)
printk("ACPI: RTC can wake from S4\n");

dev->platform_data = &rtc_info;

Expand Down
19 changes: 17 additions & 2 deletions trunk/drivers/acpi/sleep/proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@ acpi_system_write_sleep(struct file *file,
}
#endif /* CONFIG_ACPI_SLEEP_PROC_SLEEP */

#if defined(CONFIG_RTC_DRV_CMOS) || defined(CONFIG_RTC_DRV_CMOS_MODULE)
/* use /sys/class/rtc/rtcX/wakealarm instead; it's not ACPI-specific */
#else
#define HAVE_ACPI_LEGACY_ALARM
#endif

#ifdef HAVE_ACPI_LEGACY_ALARM

static int acpi_system_alarm_seq_show(struct seq_file *seq, void *offset)
{
u32 sec, min, hr;
Expand Down Expand Up @@ -341,6 +349,8 @@ acpi_system_write_alarm(struct file *file,
end:
return_VALUE(result ? result : count);
}
#endif /* HAVE_ACPI_LEGACY_ALARM */


extern struct list_head acpi_wakeup_device_list;
extern spinlock_t acpi_device_lock;
Expand Down Expand Up @@ -464,6 +474,7 @@ static const struct file_operations acpi_system_sleep_fops = {
};
#endif /* CONFIG_ACPI_SLEEP_PROC_SLEEP */

#ifdef HAVE_ACPI_LEGACY_ALARM
static const struct file_operations acpi_system_alarm_fops = {
.open = acpi_system_alarm_open_fs,
.read = seq_read,
Expand All @@ -479,8 +490,9 @@ static u32 rtc_handler(void *context)

return ACPI_INTERRUPT_HANDLED;
}
#endif /* HAVE_ACPI_LEGACY_ALARM */

static int acpi_sleep_proc_init(void)
static int __init acpi_sleep_proc_init(void)
{
struct proc_dir_entry *entry = NULL;

Expand All @@ -496,21 +508,24 @@ static int acpi_sleep_proc_init(void)
entry->proc_fops = &acpi_system_sleep_fops;
#endif

#ifdef HAVE_ACPI_LEGACY_ALARM
/* 'alarm' [R/W] */
entry =
create_proc_entry("alarm", S_IFREG | S_IRUGO | S_IWUSR,
acpi_root_dir);
if (entry)
entry->proc_fops = &acpi_system_alarm_fops;

acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, NULL);
#endif /* HAVE_ACPI_LEGACY_ALARM */

/* 'wakeup device' [R/W] */
entry =
create_proc_entry("wakeup", S_IFREG | S_IRUGO | S_IWUSR,
acpi_root_dir);
if (entry)
entry->proc_fops = &acpi_system_wakeup_device_fops;

acpi_install_fixed_event_handler(ACPI_EVENT_RTC, rtc_handler, NULL);
return 0;
}

Expand Down

0 comments on commit d4362e2

Please sign in to comment.