mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 15:27:29 +00:00
Merge branch 'at91/defconfig' into next/cleanup
This commit is contained in:
commit
02735a29d8
603 changed files with 6716 additions and 4642 deletions
|
@ -63,7 +63,7 @@ static int rtc_suspend(struct device *dev, pm_message_t mesg)
|
|||
*/
|
||||
delta = timespec_sub(old_system, old_rtc);
|
||||
delta_delta = timespec_sub(delta, old_delta);
|
||||
if (abs(delta_delta.tv_sec) >= 2) {
|
||||
if (delta_delta.tv_sec < -2 || delta_delta.tv_sec >= 2) {
|
||||
/*
|
||||
* if delta_delta is too large, assume time correction
|
||||
* has occured and set old_delta to the current delta.
|
||||
|
@ -97,9 +97,8 @@ static int rtc_resume(struct device *dev)
|
|||
rtc_tm_to_time(&tm, &new_rtc.tv_sec);
|
||||
new_rtc.tv_nsec = 0;
|
||||
|
||||
if (new_rtc.tv_sec <= old_rtc.tv_sec) {
|
||||
if (new_rtc.tv_sec < old_rtc.tv_sec)
|
||||
pr_debug("%s: time travel!\n", dev_name(&rtc->dev));
|
||||
if (new_rtc.tv_sec < old_rtc.tv_sec) {
|
||||
pr_debug("%s: time travel!\n", dev_name(&rtc->dev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -116,7 +115,8 @@ static int rtc_resume(struct device *dev)
|
|||
sleep_time = timespec_sub(sleep_time,
|
||||
timespec_sub(new_system, old_system));
|
||||
|
||||
timekeeping_inject_sleeptime(&sleep_time);
|
||||
if (sleep_time.tv_sec >= 0)
|
||||
timekeeping_inject_sleeptime(&sleep_time);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -319,6 +319,20 @@ int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(rtc_read_alarm);
|
||||
|
||||
static int ___rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
||||
{
|
||||
int err;
|
||||
|
||||
if (!rtc->ops)
|
||||
err = -ENODEV;
|
||||
else if (!rtc->ops->set_alarm)
|
||||
err = -EINVAL;
|
||||
else
|
||||
err = rtc->ops->set_alarm(rtc->dev.parent, alarm);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
||||
{
|
||||
struct rtc_time tm;
|
||||
|
@ -342,14 +356,7 @@ static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
|||
* over right here, before we set the alarm.
|
||||
*/
|
||||
|
||||
if (!rtc->ops)
|
||||
err = -ENODEV;
|
||||
else if (!rtc->ops->set_alarm)
|
||||
err = -EINVAL;
|
||||
else
|
||||
err = rtc->ops->set_alarm(rtc->dev.parent, alarm);
|
||||
|
||||
return err;
|
||||
return ___rtc_set_alarm(rtc, alarm);
|
||||
}
|
||||
|
||||
int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
|
||||
|
@ -763,6 +770,20 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void rtc_alarm_disable(struct rtc_device *rtc)
|
||||
{
|
||||
struct rtc_wkalrm alarm;
|
||||
struct rtc_time tm;
|
||||
|
||||
__rtc_read_time(rtc, &tm);
|
||||
|
||||
alarm.time = rtc_ktime_to_tm(ktime_add(rtc_tm_to_ktime(tm),
|
||||
ktime_set(300, 0)));
|
||||
alarm.enabled = 0;
|
||||
|
||||
___rtc_set_alarm(rtc, &alarm);
|
||||
}
|
||||
|
||||
/**
|
||||
* rtc_timer_remove - Removes a rtc_timer from the rtc_device timerqueue
|
||||
* @rtc rtc device
|
||||
|
@ -784,8 +805,10 @@ static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer)
|
|||
struct rtc_wkalrm alarm;
|
||||
int err;
|
||||
next = timerqueue_getnext(&rtc->timerqueue);
|
||||
if (!next)
|
||||
if (!next) {
|
||||
rtc_alarm_disable(rtc);
|
||||
return;
|
||||
}
|
||||
alarm.time = rtc_ktime_to_tm(next->expires);
|
||||
alarm.enabled = 1;
|
||||
err = __rtc_set_alarm(rtc, &alarm);
|
||||
|
@ -847,7 +870,8 @@ again:
|
|||
err = __rtc_set_alarm(rtc, &alarm);
|
||||
if (err == -ETIME)
|
||||
goto again;
|
||||
}
|
||||
} else
|
||||
rtc_alarm_disable(rtc);
|
||||
|
||||
mutex_unlock(&rtc->ops_lock);
|
||||
}
|
||||
|
|
|
@ -202,7 +202,6 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
|
|||
void __iomem *base = s3c_rtc_base;
|
||||
int year = tm->tm_year - 100;
|
||||
|
||||
clk_enable(rtc_clk);
|
||||
pr_debug("set time %04d.%02d.%02d %02d:%02d:%02d\n",
|
||||
1900 + tm->tm_year, tm->tm_mon, tm->tm_mday,
|
||||
tm->tm_hour, tm->tm_min, tm->tm_sec);
|
||||
|
@ -214,6 +213,7 @@ static int s3c_rtc_settime(struct device *dev, struct rtc_time *tm)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
clk_enable(rtc_clk);
|
||||
writeb(bin2bcd(tm->tm_sec), base + S3C2410_RTCSEC);
|
||||
writeb(bin2bcd(tm->tm_min), base + S3C2410_RTCMIN);
|
||||
writeb(bin2bcd(tm->tm_hour), base + S3C2410_RTCHOUR);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue