Commit c2c21e9bb17549e8add4ff76931bcec2e2d3ad48

Authored by Daniel Drake
Committed by Ingo Molnar
1 parent d2aa37411b

x86/olpc/xo1/sci: Report RTC wakeup events

When the system is woken due to a RTC event, report the wakeup
event on the relevant rtc device (if it can be found).

Signed-off-by: Daniel Drake <dsd@laptop.org>
Cc: dilinger@queued.net
Cc: pgf@laptop.org
Link: http://lkml.kernel.org/r/20120418223402.D73249D401E@zog.reactivated.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>

Showing 2 changed files with 16 additions and 2 deletions Side-by-side Diff

arch/x86/platform/olpc/olpc-xo1-sci.c
... ... @@ -236,6 +236,18 @@
236 236 pm_wakeup_event(&power_button_idev->dev, 0);
237 237 }
238 238  
  239 + if ((sts & (CS5536_RTC_FLAG | CS5536_WAK_FLAG)) ==
  240 + (CS5536_RTC_FLAG | CS5536_WAK_FLAG)) {
  241 + /* When the system is woken by the RTC alarm, report the
  242 + * event on the rtc device. */
  243 + struct device *rtc = bus_find_device_by_name(
  244 + &platform_bus_type, NULL, "rtc_cmos");
  245 + if (rtc) {
  246 + pm_wakeup_event(rtc, 0);
  247 + put_device(rtc);
  248 + }
  249 + }
  250 +
239 251 if (gpe & CS5536_GPIOM7_PME_FLAG) { /* EC GPIO */
240 252 cs5535_gpio_set(OLPC_GPIO_ECSCI, GPIO_NEGATIVE_EDGE_STS);
241 253 schedule_work(&sci_work);
242 254  
... ... @@ -326,9 +338,10 @@
326 338 outb(lo, CS5536_PIC_INT_SEL2);
327 339 }
328 340  
329   - /* Enable SCI from power button, and clear pending interrupts */
  341 + /* Enable interesting SCI events, and clear pending interrupts */
330 342 sts = inl(acpi_base + CS5536_PM1_STS);
331   - outl((CS5536_PM_PWRBTN << 16) | 0xffff, acpi_base + CS5536_PM1_STS);
  343 + outl(((CS5536_PM_PWRBTN | CS5536_PM_RTC) << 16) | 0xffff,
  344 + acpi_base + CS5536_PM1_STS);
332 345  
333 346 r = request_irq(sci_irq, xo1_sci_intr, 0, DRV_NAME, pdev);
334 347 if (r)
include/linux/cs5535.h
... ... @@ -95,6 +95,7 @@
95 95  
96 96 /* CS5536_PM1_STS bits */
97 97 #define CS5536_WAK_FLAG (1 << 15)
  98 +#define CS5536_RTC_FLAG (1 << 10)
98 99 #define CS5536_PWRBTN_FLAG (1 << 8)
99 100  
100 101 /* CS5536_PM1_EN bits */