Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
1a34ec4a
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看板
提交
1a34ec4a
编写于
9月 01, 2017
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/fix/rcar' into asoc-linus
上级
c8b24e23
e0936c34
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
44 addition
and
16 deletion
+44
-16
sound/soc/sh/rcar/adg.c
sound/soc/sh/rcar/adg.c
+7
-0
sound/soc/sh/rcar/core.c
sound/soc/sh/rcar/core.c
+3
-4
sound/soc/sh/rcar/ssi.c
sound/soc/sh/rcar/ssi.c
+34
-12
未找到文件。
sound/soc/sh/rcar/adg.c
浏览文件 @
1a34ec4a
...
...
@@ -610,6 +610,13 @@ void rsnd_adg_remove(struct rsnd_priv *priv)
{
struct
device
*
dev
=
rsnd_priv_to_dev
(
priv
);
struct
device_node
*
np
=
dev
->
of_node
;
struct
rsnd_adg
*
adg
=
priv
->
adg
;
struct
clk
*
clk
;
int
i
;
for_each_rsnd_clkout
(
clk
,
adg
,
i
)
if
(
adg
->
clkout
[
i
])
clk_unregister_fixed_rate
(
adg
->
clkout
[
i
]);
of_clk_del_provider
(
np
);
...
...
sound/soc/sh/rcar/core.c
浏览文件 @
1a34ec4a
...
...
@@ -726,7 +726,6 @@ static int rsnd_soc_set_dai_tdm_slot(struct snd_soc_dai *dai,
case
2
:
case
6
:
case
8
:
case
16
:
/* TDM Extend Mode */
rsnd_rdai_channels_set
(
rdai
,
slots
);
rsnd_rdai_ssi_lane_set
(
rdai
,
1
);
...
...
@@ -740,7 +739,7 @@ static int rsnd_soc_set_dai_tdm_slot(struct snd_soc_dai *dai,
}
static
unsigned
int
rsnd_soc_hw_channels_list
[]
=
{
2
,
6
,
8
,
16
,
2
,
6
,
8
,
};
static
unsigned
int
rsnd_soc_hw_rate_list
[]
=
{
...
...
@@ -1017,7 +1016,7 @@ static void __rsnd_dai_probe(struct rsnd_priv *priv,
drv
->
playback
.
rates
=
RSND_RATES
;
drv
->
playback
.
formats
=
RSND_FMTS
;
drv
->
playback
.
channels_min
=
2
;
drv
->
playback
.
channels_max
=
16
;
drv
->
playback
.
channels_max
=
8
;
drv
->
playback
.
stream_name
=
rdai
->
playback
.
name
;
snprintf
(
rdai
->
capture
.
name
,
RSND_DAI_NAME_SIZE
,
...
...
@@ -1025,7 +1024,7 @@ static void __rsnd_dai_probe(struct rsnd_priv *priv,
drv
->
capture
.
rates
=
RSND_RATES
;
drv
->
capture
.
formats
=
RSND_FMTS
;
drv
->
capture
.
channels_min
=
2
;
drv
->
capture
.
channels_max
=
16
;
drv
->
capture
.
channels_max
=
8
;
drv
->
capture
.
stream_name
=
rdai
->
capture
.
name
;
rdai
->
playback
.
rdai
=
rdai
;
...
...
sound/soc/sh/rcar/ssi.c
浏览文件 @
1a34ec4a
...
...
@@ -72,6 +72,7 @@ struct rsnd_ssi {
u32
cr_own
;
u32
cr_clk
;
u32
cr_mode
;
u32
cr_en
;
u32
wsr
;
int
chan
;
int
rate
;
...
...
@@ -291,6 +292,16 @@ static int rsnd_ssi_master_clk_start(struct rsnd_mod *mod,
if
(
ret
<
0
)
return
ret
;
/*
* SSI clock will be output contiguously
* by below settings.
* This means, rsnd_ssi_master_clk_start()
* and rsnd_ssi_register_setup() are necessary
* for SSI parent
*
* SSICR : FORCE, SCKD, SWSD
* SSIWSR : CONT
*/
ssi
->
cr_clk
=
FORCE
|
SWL_32
|
SCKD
|
SWSD
|
CKDV
(
idx
);
ssi
->
wsr
=
CONT
;
ssi
->
rate
=
rate
;
...
...
@@ -393,7 +404,8 @@ static void rsnd_ssi_register_setup(struct rsnd_mod *mod)
rsnd_mod_write
(
mod
,
SSIWSR
,
ssi
->
wsr
);
rsnd_mod_write
(
mod
,
SSICR
,
ssi
->
cr_own
|
ssi
->
cr_clk
|
ssi
->
cr_mode
);
/* without EN */
ssi
->
cr_mode
|
ssi
->
cr_en
);
}
static
void
rsnd_ssi_pointer_init
(
struct
rsnd_mod
*
mod
,
...
...
@@ -544,6 +556,8 @@ static int rsnd_ssi_start(struct rsnd_mod *mod,
struct
rsnd_dai_stream
*
io
,
struct
rsnd_priv
*
priv
)
{
struct
rsnd_ssi
*
ssi
=
rsnd_mod_to_ssi
(
mod
);
if
(
!
rsnd_ssi_is_run_mods
(
mod
,
io
))
return
0
;
...
...
@@ -554,7 +568,19 @@ static int rsnd_ssi_start(struct rsnd_mod *mod,
if
(
rsnd_ssi_multi_slaves_runtime
(
io
))
return
0
;
rsnd_mod_bset
(
mod
,
SSICR
,
EN
,
EN
);
/*
* EN is for data output.
* SSI parent EN is not needed.
*/
if
(
rsnd_ssi_is_parent
(
mod
,
io
))
return
0
;
ssi
->
cr_en
=
EN
;
rsnd_mod_write
(
mod
,
SSICR
,
ssi
->
cr_own
|
ssi
->
cr_clk
|
ssi
->
cr_mode
|
ssi
->
cr_en
);
return
0
;
}
...
...
@@ -569,13 +595,7 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
if
(
!
rsnd_ssi_is_run_mods
(
mod
,
io
))
return
0
;
/*
* don't stop if not last user
* see also
* rsnd_ssi_start
* rsnd_ssi_interrupt
*/
if
(
ssi
->
usrcnt
>
1
)
if
(
rsnd_ssi_is_parent
(
mod
,
io
))
return
0
;
/*
...
...
@@ -595,6 +615,8 @@ static int rsnd_ssi_stop(struct rsnd_mod *mod,
rsnd_mod_write
(
mod
,
SSICR
,
cr
);
/* disabled all */
rsnd_ssi_status_check
(
mod
,
IIRQ
);
ssi
->
cr_en
=
0
;
return
0
;
}
...
...
@@ -823,10 +845,10 @@ static int rsnd_ssi_dma_remove(struct rsnd_mod *mod,
struct
rsnd_priv
*
priv
)
{
struct
rsnd_ssi
*
ssi
=
rsnd_mod_to_ssi
(
mod
);
struct
rsnd_mod
*
ssi_parent_mod
=
rsnd_io_to_mod_ssip
(
io
);
struct
rsnd_mod
*
pure_ssi_mod
=
rsnd_io_to_mod_ssi
(
io
);
/* Do nothing
for SSI parent
mod */
if
(
ssi_parent_mod
=
=
mod
)
/* Do nothing
if non SSI (= SSI parent, multi SSI)
mod */
if
(
pure_ssi_mod
!
=
mod
)
return
0
;
/* PIO will request IRQ again */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录