Merge branch 'fortglx/39/tip/timers/rtc' of git://git.linaro.org/people/jstultz/linux into timers/urgent
This commit is contained in:
commit
92f73a62a1
5 changed files with 31 additions and 3 deletions
|
@ -171,7 +171,7 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
|
||||||
err = __rtc_read_alarm(rtc, &alrm);
|
err = __rtc_read_alarm(rtc, &alrm);
|
||||||
|
|
||||||
if (!err && !rtc_valid_tm(&alrm.time))
|
if (!err && !rtc_valid_tm(&alrm.time))
|
||||||
rtc_set_alarm(rtc, &alrm);
|
rtc_initialize_alarm(rtc, &alrm);
|
||||||
|
|
||||||
strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
|
strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
|
||||||
dev_set_name(&rtc->dev, "rtc%d", id);
|
dev_set_name(&rtc->dev, "rtc%d", id);
|
||||||
|
|
|
@ -375,6 +375,32 @@ int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rtc_set_alarm);
|
EXPORT_SYMBOL_GPL(rtc_set_alarm);
|
||||||
|
|
||||||
|
/* Called once per device from rtc_device_register */
|
||||||
|
int rtc_initialize_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = rtc_valid_tm(&alarm->time);
|
||||||
|
if (err != 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = mutex_lock_interruptible(&rtc->ops_lock);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time);
|
||||||
|
rtc->aie_timer.period = ktime_set(0, 0);
|
||||||
|
if (alarm->enabled) {
|
||||||
|
rtc->aie_timer.enabled = 1;
|
||||||
|
timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node);
|
||||||
|
}
|
||||||
|
mutex_unlock(&rtc->ops_lock);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(rtc_initialize_alarm);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int rtc_alarm_irq_enable(struct rtc_device *rtc, unsigned int enabled)
|
int rtc_alarm_irq_enable(struct rtc_device *rtc, unsigned int enabled)
|
||||||
{
|
{
|
||||||
int err = mutex_lock_interruptible(&rtc->ops_lock);
|
int err = mutex_lock_interruptible(&rtc->ops_lock);
|
||||||
|
|
|
@ -250,6 +250,8 @@ static int bfin_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
|
||||||
bfin_rtc_int_set_alarm(rtc);
|
bfin_rtc_int_set_alarm(rtc);
|
||||||
else
|
else
|
||||||
bfin_rtc_int_clear(~(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY));
|
bfin_rtc_int_clear(~(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bfin_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
static int bfin_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
||||||
|
|
|
@ -336,7 +336,6 @@ static void s3c_rtc_release(struct device *dev)
|
||||||
|
|
||||||
/* do not clear AIE here, it may be needed for wake */
|
/* do not clear AIE here, it may be needed for wake */
|
||||||
|
|
||||||
s3c_rtc_setpie(dev, 0);
|
|
||||||
free_irq(s3c_rtc_alarmno, rtc_dev);
|
free_irq(s3c_rtc_alarmno, rtc_dev);
|
||||||
free_irq(s3c_rtc_tickno, rtc_dev);
|
free_irq(s3c_rtc_tickno, rtc_dev);
|
||||||
}
|
}
|
||||||
|
@ -408,7 +407,6 @@ static int __devexit s3c_rtc_remove(struct platform_device *dev)
|
||||||
platform_set_drvdata(dev, NULL);
|
platform_set_drvdata(dev, NULL);
|
||||||
rtc_device_unregister(rtc);
|
rtc_device_unregister(rtc);
|
||||||
|
|
||||||
s3c_rtc_setpie(&dev->dev, 0);
|
|
||||||
s3c_rtc_setaie(&dev->dev, 0);
|
s3c_rtc_setaie(&dev->dev, 0);
|
||||||
|
|
||||||
clk_disable(rtc_clk);
|
clk_disable(rtc_clk);
|
||||||
|
|
|
@ -228,6 +228,8 @@ extern int rtc_read_alarm(struct rtc_device *rtc,
|
||||||
struct rtc_wkalrm *alrm);
|
struct rtc_wkalrm *alrm);
|
||||||
extern int rtc_set_alarm(struct rtc_device *rtc,
|
extern int rtc_set_alarm(struct rtc_device *rtc,
|
||||||
struct rtc_wkalrm *alrm);
|
struct rtc_wkalrm *alrm);
|
||||||
|
extern int rtc_initialize_alarm(struct rtc_device *rtc,
|
||||||
|
struct rtc_wkalrm *alrm);
|
||||||
extern void rtc_update_irq(struct rtc_device *rtc,
|
extern void rtc_update_irq(struct rtc_device *rtc,
|
||||||
unsigned long num, unsigned long events);
|
unsigned long num, unsigned long events);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue