Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
f29b5421
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看板
提交
f29b5421
编写于
5月 01, 2014
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'asoc-dt' into asoc-omap
上级
0265e1ae
3ca041ed
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
54 addition
and
27 deletion
+54
-27
include/sound/soc.h
include/sound/soc.h
+12
-1
sound/soc/soc-core.c
sound/soc/soc-core.c
+42
-26
未找到文件。
include/sound/soc.h
浏览文件 @
f29b5421
...
...
@@ -933,7 +933,12 @@ struct snd_soc_dai_link {
};
struct
snd_soc_codec_conf
{
/*
* specify device either by device name, or by
* DT/OF node, but not both.
*/
const
char
*
dev_name
;
const
struct
device_node
*
of_node
;
/*
* optional map of kcontrol, widget and path name prefixes that are
...
...
@@ -944,7 +949,13 @@ struct snd_soc_codec_conf {
struct
snd_soc_aux_dev
{
const
char
*
name
;
/* Codec name */
const
char
*
codec_name
;
/* for multi-codec */
/*
* specify multi-codec either by device name, or by
* DT/OF node, but not both.
*/
const
char
*
codec_name
;
const
struct
device_node
*
codec_of_node
;
/* codec/machine specific init - e.g. add machine controls */
int
(
*
init
)(
struct
snd_soc_dapm_context
*
dapm
);
...
...
sound/soc/soc-core.c
浏览文件 @
f29b5421
...
...
@@ -1104,10 +1104,12 @@ static void soc_set_name_prefix(struct snd_soc_card *card,
for
(
i
=
0
;
i
<
card
->
num_configs
;
i
++
)
{
struct
snd_soc_codec_conf
*
map
=
&
card
->
codec_conf
[
i
];
if
(
map
->
dev_name
&&
!
strcmp
(
codec
->
name
,
map
->
dev_name
))
{
codec
->
name_prefix
=
map
->
name_prefix
;
break
;
}
if
(
map
->
of_node
&&
codec
->
dev
->
of_node
!=
map
->
of_node
)
continue
;
if
(
map
->
dev_name
&&
strcmp
(
codec
->
name
,
map
->
dev_name
))
continue
;
codec
->
name_prefix
=
map
->
name_prefix
;
break
;
}
}
...
...
@@ -1541,52 +1543,66 @@ static void soc_unregister_ac97_dai_link(struct snd_soc_codec *codec)
}
#endif
st
atic
int
soc_check_aux_dev
(
struct
snd_soc_card
*
card
,
int
num
)
st
ruct
snd_soc_codec
*
soc_find_matching_codec
(
struct
snd_soc_card
*
card
,
int
num
)
{
struct
snd_soc_aux_dev
*
aux_dev
=
&
card
->
aux_dev
[
num
];
struct
snd_soc_codec
*
codec
;
/* find CODEC from registered CODECs*/
/* find CODEC from registered CODECs
*/
list_for_each_entry
(
codec
,
&
codec_list
,
list
)
{
if
(
!
strcmp
(
codec
->
name
,
aux_dev
->
codec_name
))
return
0
;
if
(
aux_dev
->
codec_of_node
&&
(
codec
->
dev
->
of_node
!=
aux_dev
->
codec_of_node
))
continue
;
if
(
aux_dev
->
codec_name
&&
strcmp
(
codec
->
name
,
aux_dev
->
codec_name
))
continue
;
return
codec
;
}
dev_err
(
card
->
dev
,
"ASoC: %s not registered
\n
"
,
aux_dev
->
codec_name
);
return
NULL
;
}
static
int
soc_check_aux_dev
(
struct
snd_soc_card
*
card
,
int
num
)
{
struct
snd_soc_aux_dev
*
aux_dev
=
&
card
->
aux_dev
[
num
];
const
char
*
codecname
=
aux_dev
->
codec_name
;
struct
snd_soc_codec
*
codec
=
soc_find_matching_codec
(
card
,
num
);
if
(
codec
)
return
0
;
if
(
aux_dev
->
codec_of_node
)
codecname
=
of_node_full_name
(
aux_dev
->
codec_of_node
);
dev_err
(
card
->
dev
,
"ASoC: %s not registered
\n
"
,
codecname
);
return
-
EPROBE_DEFER
;
}
static
int
soc_probe_aux_dev
(
struct
snd_soc_card
*
card
,
int
num
)
{
struct
snd_soc_aux_dev
*
aux_dev
=
&
card
->
aux_dev
[
num
];
struct
snd_soc_codec
*
codec
;
const
char
*
codecname
=
aux_dev
->
codec_name
;
int
ret
=
-
ENODEV
;
struct
snd_soc_codec
*
codec
=
soc_find_matching_codec
(
card
,
num
);
/* find CODEC from registered CODECs*/
list_for_each_entry
(
codec
,
&
codec_list
,
list
)
{
if
(
!
strcmp
(
codec
->
name
,
aux_dev
->
codec_name
))
{
if
(
codec
->
probed
)
{
dev_err
(
codec
->
dev
,
"ASoC: codec already probed"
);
ret
=
-
EBUSY
;
goto
out
;
}
goto
found
;
}
if
(
!
codec
)
{
if
(
aux_dev
->
codec_of_node
)
codecname
=
of_node_full_name
(
aux_dev
->
codec_of_node
);
/* codec not found */
dev_err
(
card
->
dev
,
"ASoC: codec %s not found"
,
codecname
);
return
-
EPROBE_DEFER
;
}
if
(
codec
->
probed
)
{
dev_err
(
codec
->
dev
,
"ASoC: codec already probed"
);
return
-
EBUSY
;
}
/* codec not found */
dev_err
(
card
->
dev
,
"ASoC: codec %s not found"
,
aux_dev
->
codec_name
);
return
-
EPROBE_DEFER
;
found:
ret
=
soc_probe_codec
(
card
,
codec
);
if
(
ret
<
0
)
return
ret
;
ret
=
soc_post_component_init
(
card
,
codec
,
num
,
1
);
out:
return
ret
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录