Commit 57deb526 authored by Alessandro Zummo's avatar Alessandro Zummo Committed by Linus Torvalds

RTC: add periodic irq support to rtc-cmos

Adds support for periodic irq enabling in rtc-cmos.  This could be used by
the ALSA driver and is already being tested with the zaptel ztdummy module.
Signed-off-by: default avatarAlessandro Zummo <a.zummo@towertech.it>
Cc: David Brownell <david-b@pacbell.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c7d51402
...@@ -235,7 +235,7 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t) ...@@ -235,7 +235,7 @@ static int cmos_set_alarm(struct device *dev, struct rtc_wkalrm *t)
return 0; return 0;
} }
static int cmos_set_freq(struct device *dev, int freq) static int cmos_irq_set_freq(struct device *dev, int freq)
{ {
struct cmos_rtc *cmos = dev_get_drvdata(dev); struct cmos_rtc *cmos = dev_get_drvdata(dev);
int f; int f;
...@@ -259,6 +259,34 @@ static int cmos_set_freq(struct device *dev, int freq) ...@@ -259,6 +259,34 @@ static int cmos_set_freq(struct device *dev, int freq)
return 0; return 0;
} }
static int cmos_irq_set_state(struct device *dev, int enabled)
{
struct cmos_rtc *cmos = dev_get_drvdata(dev);
unsigned char rtc_control, rtc_intr;
unsigned long flags;
if (!is_valid_irq(cmos->irq))
return -ENXIO;
spin_lock_irqsave(&rtc_lock, flags);
rtc_control = CMOS_READ(RTC_CONTROL);
if (enabled)
rtc_control |= RTC_PIE;
else
rtc_control &= ~RTC_PIE;
CMOS_WRITE(rtc_control, RTC_CONTROL);
rtc_intr = CMOS_READ(RTC_INTR_FLAGS);
rtc_intr &= (rtc_control & RTC_IRQMASK) | RTC_IRQF;
if (is_intr(rtc_intr))
rtc_update_irq(cmos->rtc, 1, rtc_intr);
spin_unlock_irqrestore(&rtc_lock, flags);
return 0;
}
#if defined(CONFIG_RTC_INTF_DEV) || defined(CONFIG_RTC_INTF_DEV_MODULE) #if defined(CONFIG_RTC_INTF_DEV) || defined(CONFIG_RTC_INTF_DEV_MODULE)
static int static int
...@@ -360,7 +388,8 @@ static const struct rtc_class_ops cmos_rtc_ops = { ...@@ -360,7 +388,8 @@ static const struct rtc_class_ops cmos_rtc_ops = {
.read_alarm = cmos_read_alarm, .read_alarm = cmos_read_alarm,
.set_alarm = cmos_set_alarm, .set_alarm = cmos_set_alarm,
.proc = cmos_procfs, .proc = cmos_procfs,
.irq_set_freq = cmos_set_freq, .irq_set_freq = cmos_irq_set_freq,
.irq_set_state = cmos_irq_set_state,
}; };
/*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment