Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
bfc4a589
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
bfc4a589
编写于
2月 13, 2013
作者:
G
Grant Likely
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-next' from
git://sources.calxeda.com/kernel/linux.git
Signed-off-by:
N
Grant Likely
<
grant.likely@secretlab.ca
>
上级
09495dda
1421954b
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
60 addition
and
48 deletion
+60
-48
Documentation/devicetree/bindings/mmc/exynos-dw-mshc.txt
Documentation/devicetree/bindings/mmc/exynos-dw-mshc.txt
+1
-1
arch/sparc/kernel/prom_common.c
arch/sparc/kernel/prom_common.c
+2
-2
drivers/of/base.c
drivers/of/base.c
+56
-44
include/linux/of.h
include/linux/of.h
+1
-1
未找到文件。
Documentation/devicetree/bindings/mmc/exynos-dw-mshc.txt
浏览文件 @
bfc4a589
...
...
@@ -4,7 +4,7 @@
The Synopsis designware mobile storage host controller is used to interface
a SoC with storage medium such as eMMC or SD/MMC cards. This file documents
differences between the core Synopsis dw mshc controller properties described
by syn
po
sis-dw-mshc.txt and the properties used by the Samsung Exynos specific
by syn
op
sis-dw-mshc.txt and the properties used by the Samsung Exynos specific
extensions to the Synopsis Designware Mobile Storage Host Controller.
Required Properties:
...
...
arch/sparc/kernel/prom_common.c
浏览文件 @
bfc4a589
...
...
@@ -64,7 +64,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
err
=
-
ENODEV
;
mutex_lock
(
&
of_set_property_mutex
);
write
_lock
(
&
devtree_lock
);
raw_spin
_lock
(
&
devtree_lock
);
prevp
=
&
dp
->
properties
;
while
(
*
prevp
)
{
struct
property
*
prop
=
*
prevp
;
...
...
@@ -91,7 +91,7 @@ int of_set_property(struct device_node *dp, const char *name, void *val, int len
}
prevp
=
&
(
*
prevp
)
->
next
;
}
write
_unlock
(
&
devtree_lock
);
raw_spin
_unlock
(
&
devtree_lock
);
mutex_unlock
(
&
of_set_property_mutex
);
/* XXX Upate procfs if necessary... */
...
...
drivers/of/base.c
浏览文件 @
bfc4a589
...
...
@@ -38,7 +38,7 @@ DEFINE_MUTEX(of_aliases_mutex);
/* use when traversing tree through the allnext, child, sibling,
* or parent members of struct device_node.
*/
DEFINE_R
W
LOCK
(
devtree_lock
);
DEFINE_R
AW_SPIN
LOCK
(
devtree_lock
);
int
of_n_addr_cells
(
struct
device_node
*
np
)
{
...
...
@@ -171,10 +171,11 @@ struct property *of_find_property(const struct device_node *np,
int
*
lenp
)
{
struct
property
*
pp
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
pp
=
__of_find_property
(
np
,
name
,
lenp
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
pp
;
}
...
...
@@ -192,13 +193,13 @@ struct device_node *of_find_all_nodes(struct device_node *prev)
{
struct
device_node
*
np
;
r
ead
_lock
(
&
devtree_lock
);
r
aw_spin
_lock
(
&
devtree_lock
);
np
=
prev
?
prev
->
allnext
:
of_allnodes
;
for
(;
np
!=
NULL
;
np
=
np
->
allnext
)
if
(
of_node_get
(
np
))
break
;
of_node_put
(
prev
);
r
ead
_unlock
(
&
devtree_lock
);
r
aw_spin
_unlock
(
&
devtree_lock
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_all_nodes
);
...
...
@@ -257,11 +258,12 @@ static int __of_device_is_compatible(const struct device_node *device,
int
of_device_is_compatible
(
const
struct
device_node
*
device
,
const
char
*
compat
)
{
unsigned
long
flags
;
int
res
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
res
=
__of_device_is_compatible
(
device
,
compat
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
res
;
}
EXPORT_SYMBOL
(
of_device_is_compatible
);
...
...
@@ -323,13 +325,14 @@ EXPORT_SYMBOL(of_device_is_available);
struct
device_node
*
of_get_parent
(
const
struct
device_node
*
node
)
{
struct
device_node
*
np
;
unsigned
long
flags
;
if
(
!
node
)
return
NULL
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
np
=
of_node_get
(
node
->
parent
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
np
;
}
EXPORT_SYMBOL
(
of_get_parent
);
...
...
@@ -348,14 +351,15 @@ EXPORT_SYMBOL(of_get_parent);
struct
device_node
*
of_get_next_parent
(
struct
device_node
*
node
)
{
struct
device_node
*
parent
;
unsigned
long
flags
;
if
(
!
node
)
return
NULL
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
parent
=
of_node_get
(
node
->
parent
);
of_node_put
(
node
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
parent
;
}
...
...
@@ -371,14 +375,15 @@ struct device_node *of_get_next_child(const struct device_node *node,
struct
device_node
*
prev
)
{
struct
device_node
*
next
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
next
=
prev
?
prev
->
sibling
:
node
->
child
;
for
(;
next
;
next
=
next
->
sibling
)
if
(
of_node_get
(
next
))
break
;
of_node_put
(
prev
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
next
;
}
EXPORT_SYMBOL
(
of_get_next_child
);
...
...
@@ -396,7 +401,7 @@ struct device_node *of_get_next_available_child(const struct device_node *node,
{
struct
device_node
*
next
;
r
ead
_lock
(
&
devtree_lock
);
r
aw_spin
_lock
(
&
devtree_lock
);
next
=
prev
?
prev
->
sibling
:
node
->
child
;
for
(;
next
;
next
=
next
->
sibling
)
{
if
(
!
of_device_is_available
(
next
))
...
...
@@ -405,7 +410,7 @@ struct device_node *of_get_next_available_child(const struct device_node *node,
break
;
}
of_node_put
(
prev
);
r
ead
_unlock
(
&
devtree_lock
);
r
aw_spin
_unlock
(
&
devtree_lock
);
return
next
;
}
EXPORT_SYMBOL
(
of_get_next_available_child
);
...
...
@@ -443,14 +448,15 @@ EXPORT_SYMBOL(of_get_child_by_name);
struct
device_node
*
of_find_node_by_path
(
const
char
*
path
)
{
struct
device_node
*
np
=
of_allnodes
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
for
(;
np
;
np
=
np
->
allnext
)
{
if
(
np
->
full_name
&&
(
of_node_cmp
(
np
->
full_name
,
path
)
==
0
)
&&
of_node_get
(
np
))
break
;
}
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_node_by_path
);
...
...
@@ -470,15 +476,16 @@ struct device_node *of_find_node_by_name(struct device_node *from,
const
char
*
name
)
{
struct
device_node
*
np
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
np
=
from
?
from
->
allnext
:
of_allnodes
;
for
(;
np
;
np
=
np
->
allnext
)
if
(
np
->
name
&&
(
of_node_cmp
(
np
->
name
,
name
)
==
0
)
&&
of_node_get
(
np
))
break
;
of_node_put
(
from
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_node_by_name
);
...
...
@@ -499,15 +506,16 @@ struct device_node *of_find_node_by_type(struct device_node *from,
const
char
*
type
)
{
struct
device_node
*
np
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
np
=
from
?
from
->
allnext
:
of_allnodes
;
for
(;
np
;
np
=
np
->
allnext
)
if
(
np
->
type
&&
(
of_node_cmp
(
np
->
type
,
type
)
==
0
)
&&
of_node_get
(
np
))
break
;
of_node_put
(
from
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_node_by_type
);
...
...
@@ -530,8 +538,9 @@ struct device_node *of_find_compatible_node(struct device_node *from,
const
char
*
type
,
const
char
*
compatible
)
{
struct
device_node
*
np
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
np
=
from
?
from
->
allnext
:
of_allnodes
;
for
(;
np
;
np
=
np
->
allnext
)
{
if
(
type
...
...
@@ -542,7 +551,7 @@ struct device_node *of_find_compatible_node(struct device_node *from,
break
;
}
of_node_put
(
from
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_compatible_node
);
...
...
@@ -564,8 +573,9 @@ struct device_node *of_find_node_with_property(struct device_node *from,
{
struct
device_node
*
np
;
struct
property
*
pp
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
np
=
from
?
from
->
allnext
:
of_allnodes
;
for
(;
np
;
np
=
np
->
allnext
)
{
for
(
pp
=
np
->
properties
;
pp
;
pp
=
pp
->
next
)
{
...
...
@@ -577,7 +587,7 @@ struct device_node *of_find_node_with_property(struct device_node *from,
}
out:
of_node_put
(
from
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_node_with_property
);
...
...
@@ -618,10 +628,11 @@ const struct of_device_id *of_match_node(const struct of_device_id *matches,
const
struct
device_node
*
node
)
{
const
struct
of_device_id
*
match
;
unsigned
long
flags
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
match
=
__of_match_node
(
matches
,
node
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
match
;
}
EXPORT_SYMBOL
(
of_match_node
);
...
...
@@ -645,11 +656,12 @@ struct device_node *of_find_matching_node_and_match(struct device_node *from,
{
struct
device_node
*
np
;
const
struct
of_device_id
*
m
;
unsigned
long
flags
;
if
(
match
)
*
match
=
NULL
;
r
ead_lock
(
&
devtree_lock
);
r
aw_spin_lock_irqsave
(
&
devtree_lock
,
flags
);
np
=
from
?
from
->
allnext
:
of_allnodes
;
for
(;
np
;
np
=
np
->
allnext
)
{
m
=
__of_match_node
(
matches
,
np
);
...
...
@@ -660,7 +672,7 @@ struct device_node *of_find_matching_node_and_match(struct device_node *from,
}
}
of_node_put
(
from
);
r
ead_unlock
(
&
devtree_lock
);
r
aw_spin_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_matching_node_and_match
);
...
...
@@ -703,12 +715,12 @@ struct device_node *of_find_node_by_phandle(phandle handle)
{
struct
device_node
*
np
;
r
ead
_lock
(
&
devtree_lock
);
r
aw_spin
_lock
(
&
devtree_lock
);
for
(
np
=
of_allnodes
;
np
;
np
=
np
->
allnext
)
if
(
np
->
phandle
==
handle
)
break
;
of_node_get
(
np
);
r
ead
_unlock
(
&
devtree_lock
);
r
aw_spin
_unlock
(
&
devtree_lock
);
return
np
;
}
EXPORT_SYMBOL
(
of_find_node_by_phandle
);
...
...
@@ -1180,18 +1192,18 @@ int of_add_property(struct device_node *np, struct property *prop)
return
rc
;
prop
->
next
=
NULL
;
write
_lock_irqsave
(
&
devtree_lock
,
flags
);
raw_spin
_lock_irqsave
(
&
devtree_lock
,
flags
);
next
=
&
np
->
properties
;
while
(
*
next
)
{
if
(
strcmp
(
prop
->
name
,
(
*
next
)
->
name
)
==
0
)
{
/* duplicate ! don't insert it */
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
-
1
;
}
next
=
&
(
*
next
)
->
next
;
}
*
next
=
prop
;
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
#ifdef CONFIG_PROC_DEVICETREE
/* try to add to proc as well if it was initialized */
...
...
@@ -1221,7 +1233,7 @@ int of_remove_property(struct device_node *np, struct property *prop)
if
(
rc
)
return
rc
;
write
_lock_irqsave
(
&
devtree_lock
,
flags
);
raw_spin
_lock_irqsave
(
&
devtree_lock
,
flags
);
next
=
&
np
->
properties
;
while
(
*
next
)
{
if
(
*
next
==
prop
)
{
...
...
@@ -1234,7 +1246,7 @@ int of_remove_property(struct device_node *np, struct property *prop)
}
next
=
&
(
*
next
)
->
next
;
}
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
if
(
!
found
)
return
-
ENODEV
;
...
...
@@ -1274,7 +1286,7 @@ int of_update_property(struct device_node *np, struct property *newprop)
if
(
!
oldprop
)
return
of_add_property
(
np
,
newprop
);
write
_lock_irqsave
(
&
devtree_lock
,
flags
);
raw_spin
_lock_irqsave
(
&
devtree_lock
,
flags
);
next
=
&
np
->
properties
;
while
(
*
next
)
{
if
(
*
next
==
oldprop
)
{
...
...
@@ -1288,7 +1300,7 @@ int of_update_property(struct device_node *np, struct property *newprop)
}
next
=
&
(
*
next
)
->
next
;
}
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
if
(
!
found
)
return
-
ENODEV
;
...
...
@@ -1361,12 +1373,12 @@ int of_attach_node(struct device_node *np)
if
(
rc
)
return
rc
;
write
_lock_irqsave
(
&
devtree_lock
,
flags
);
raw_spin
_lock_irqsave
(
&
devtree_lock
,
flags
);
np
->
sibling
=
np
->
parent
->
child
;
np
->
allnext
=
of_allnodes
;
np
->
parent
->
child
=
np
;
of_allnodes
=
np
;
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
of_add_proc_dt_entry
(
np
);
return
0
;
...
...
@@ -1409,17 +1421,17 @@ int of_detach_node(struct device_node *np)
if
(
rc
)
return
rc
;
write
_lock_irqsave
(
&
devtree_lock
,
flags
);
raw_spin
_lock_irqsave
(
&
devtree_lock
,
flags
);
if
(
of_node_check_flag
(
np
,
OF_DETACHED
))
{
/* someone already detached it */
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
rc
;
}
parent
=
np
->
parent
;
if
(
!
parent
)
{
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
return
rc
;
}
...
...
@@ -1446,7 +1458,7 @@ int of_detach_node(struct device_node *np)
}
of_node_set_flag
(
np
,
OF_DETACHED
);
write
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
raw_spin
_unlock_irqrestore
(
&
devtree_lock
,
flags
);
of_remove_proc_dt_entry
(
np
);
return
rc
;
...
...
include/linux/of.h
浏览文件 @
bfc4a589
...
...
@@ -92,7 +92,7 @@ static inline void of_node_put(struct device_node *node) { }
extern
struct
device_node
*
of_allnodes
;
extern
struct
device_node
*
of_chosen
;
extern
struct
device_node
*
of_aliases
;
extern
r
w
lock_t
devtree_lock
;
extern
r
aw_spin
lock_t
devtree_lock
;
static
inline
bool
of_have_populated_dt
(
void
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录