diff options
Diffstat (limited to 'arch/x86/platform/olpc/olpc-xo1-sci.c')
| -rw-r--r-- | arch/x86/platform/olpc/olpc-xo1-sci.c | 17 | 
1 files changed, 15 insertions, 2 deletions
diff --git a/arch/x86/platform/olpc/olpc-xo1-sci.c b/arch/x86/platform/olpc/olpc-xo1-sci.c index 4b93ff46cec..04b8c73659c 100644 --- a/arch/x86/platform/olpc/olpc-xo1-sci.c +++ b/arch/x86/platform/olpc/olpc-xo1-sci.c @@ -236,6 +236,18 @@ static irqreturn_t xo1_sci_intr(int irq, void *dev_id)  		pm_wakeup_event(&power_button_idev->dev, 0);  	} +	if ((sts & (CS5536_RTC_FLAG | CS5536_WAK_FLAG)) == +			(CS5536_RTC_FLAG | CS5536_WAK_FLAG)) { +		/* When the system is woken by the RTC alarm, report the +		 * event on the rtc device. */ +		struct device *rtc = bus_find_device_by_name( +			&platform_bus_type, NULL, "rtc_cmos"); +		if (rtc) { +			pm_wakeup_event(rtc, 0); +			put_device(rtc); +		} +	} +  	if (gpe & CS5536_GPIOM7_PME_FLAG) { /* EC GPIO */  		cs5535_gpio_set(OLPC_GPIO_ECSCI, GPIO_NEGATIVE_EDGE_STS);  		schedule_work(&sci_work); @@ -326,9 +338,10 @@ static int __devinit setup_sci_interrupt(struct platform_device *pdev)  		outb(lo, CS5536_PIC_INT_SEL2);  	} -	/* Enable SCI from power button, and clear pending interrupts */ +	/* Enable interesting SCI events, and clear pending interrupts */  	sts = inl(acpi_base + CS5536_PM1_STS); -	outl((CS5536_PM_PWRBTN << 16) | 0xffff, acpi_base + CS5536_PM1_STS); +	outl(((CS5536_PM_PWRBTN | CS5536_PM_RTC) << 16) | 0xffff, +	     acpi_base + CS5536_PM1_STS);  	r = request_irq(sci_irq, xo1_sci_intr, 0, DRV_NAME, pdev);  	if (r)  |