Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
8682df25
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8682df25
编写于
2月 15, 2012
作者:
T
Thomas Gleixner
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'fortglx/3.4/rtc' of
git://git.linaro.org/people/jstultz/linux
into timers/core
上级
9b612fa6
41c7f742
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
3 deletion
+27
-3
drivers/rtc/interface.c
drivers/rtc/interface.c
+27
-3
未找到文件。
drivers/rtc/interface.c
浏览文件 @
8682df25
...
...
@@ -73,6 +73,8 @@ int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm)
err
=
-
EINVAL
;
mutex_unlock
(
&
rtc
->
ops_lock
);
/* A timer might have just expired */
schedule_work
(
&
rtc
->
irqwork
);
return
err
;
}
EXPORT_SYMBOL_GPL
(
rtc_set_time
);
...
...
@@ -112,6 +114,8 @@ int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs)
err
=
-
EINVAL
;
mutex_unlock
(
&
rtc
->
ops_lock
);
/* A timer might have just expired */
schedule_work
(
&
rtc
->
irqwork
);
return
err
;
}
...
...
@@ -380,18 +384,27 @@ EXPORT_SYMBOL_GPL(rtc_set_alarm);
int
rtc_initialize_alarm
(
struct
rtc_device
*
rtc
,
struct
rtc_wkalrm
*
alarm
)
{
int
err
;
struct
rtc_time
now
;
err
=
rtc_valid_tm
(
&
alarm
->
time
);
if
(
err
!=
0
)
return
err
;
err
=
rtc_read_time
(
rtc
,
&
now
);
if
(
err
)
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
)
{
/* Alarm has to be enabled & in the futrure for us to enqueue it */
if
(
alarm
->
enabled
&&
(
rtc_tm_to_ktime
(
now
).
tv64
<
rtc
->
aie_timer
.
node
.
expires
.
tv64
))
{
rtc
->
aie_timer
.
enabled
=
1
;
timerqueue_add
(
&
rtc
->
timerqueue
,
&
rtc
->
aie_timer
.
node
);
}
...
...
@@ -763,6 +776,14 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer)
return
0
;
}
static
void
rtc_alarm_disable
(
struct
rtc_device
*
rtc
)
{
if
(
!
rtc
->
ops
||
!
rtc
->
ops
->
alarm_irq_enable
)
return
;
rtc
->
ops
->
alarm_irq_enable
(
rtc
->
dev
.
parent
,
false
);
}
/**
* 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 @@ void rtc_timer_do_work(struct work_struct *work)
err
=
__rtc_set_alarm
(
rtc
,
&
alarm
);
if
(
err
==
-
ETIME
)
goto
again
;
}
}
else
rtc_alarm_disable
(
rtc
);
mutex_unlock
(
&
rtc
->
ops_lock
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录