diff options
Diffstat (limited to 'drivers/rtc/rtc-omap.c')
| -rw-r--r-- | drivers/rtc/rtc-omap.c | 28 | 
1 files changed, 19 insertions, 9 deletions
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index e72b523c79a..b4dbf3a319b 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c @@ -143,8 +143,6 @@ omap_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)  	u8 reg;  	switch (cmd) { -	case RTC_AIE_OFF: -	case RTC_AIE_ON:  	case RTC_UIE_OFF:  	case RTC_UIE_ON:  		break; @@ -156,13 +154,6 @@ omap_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)  	rtc_wait_not_busy();  	reg = rtc_read(OMAP_RTC_INTERRUPTS_REG);  	switch (cmd) { -	/* AIE = Alarm Interrupt Enable */ -	case RTC_AIE_OFF: -		reg &= ~OMAP_RTC_INTERRUPTS_IT_ALARM; -		break; -	case RTC_AIE_ON: -		reg |= OMAP_RTC_INTERRUPTS_IT_ALARM; -		break;  	/* UIE = Update Interrupt Enable (1/second) */  	case RTC_UIE_OFF:  		reg &= ~OMAP_RTC_INTERRUPTS_IT_TIMER; @@ -182,6 +173,24 @@ omap_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)  #define	omap_rtc_ioctl	NULL  #endif +static int omap_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) +{ +	u8 reg; + +	local_irq_disable(); +	rtc_wait_not_busy(); +	reg = rtc_read(OMAP_RTC_INTERRUPTS_REG); +	if (enabled) +		reg |= OMAP_RTC_INTERRUPTS_IT_ALARM; +	else +		reg &= ~OMAP_RTC_INTERRUPTS_IT_ALARM; +	rtc_wait_not_busy(); +	rtc_write(reg, OMAP_RTC_INTERRUPTS_REG); +	local_irq_enable(); + +	return 0; +} +  /* this hardware doesn't support "don't care" alarm fields */  static int tm2bcd(struct rtc_time *tm)  { @@ -309,6 +318,7 @@ static struct rtc_class_ops omap_rtc_ops = {  	.set_time	= omap_rtc_set_time,  	.read_alarm	= omap_rtc_read_alarm,  	.set_alarm	= omap_rtc_set_alarm, +	.alarm_irq_enable = omap_rtc_alarm_irq_enable,  };  static int omap_rtc_alarm;  |