Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
10abe843
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
10abe843
编写于
10月 24, 2013
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/mxs' into asoc-next
上级
07797e9b
863ebdde
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
40 addition
and
22 deletion
+40
-22
include/sound/soc-dai.h
include/sound/soc-dai.h
+7
-0
sound/soc/mxs/mxs-saif.c
sound/soc/mxs/mxs-saif.c
+25
-5
sound/soc/mxs/mxs-saif.h
sound/soc/mxs/mxs-saif.h
+5
-0
sound/soc/mxs/mxs-sgtl5000.c
sound/soc/mxs/mxs-sgtl5000.c
+3
-17
未找到文件。
include/sound/soc-dai.h
浏览文件 @
10abe843
...
...
@@ -169,6 +169,13 @@ struct snd_soc_dai_ops {
struct
snd_soc_dai
*
);
int
(
*
prepare
)(
struct
snd_pcm_substream
*
,
struct
snd_soc_dai
*
);
/*
* NOTE: Commands passed to the trigger function are not necessarily
* compatible with the current state of the dai. For example this
* sequence of commands is possible: START STOP STOP.
* So do not unconditionally use refcounting functions in the trigger
* function, e.g. clk_enable/disable.
*/
int
(
*
trigger
)(
struct
snd_pcm_substream
*
,
int
,
struct
snd_soc_dai
*
);
int
(
*
bespoke_trigger
)(
struct
snd_pcm_substream
*
,
int
,
...
...
sound/soc/mxs/mxs-saif.c
浏览文件 @
10abe843
...
...
@@ -494,6 +494,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
struct
mxs_saif
*
saif
=
snd_soc_dai_get_drvdata
(
cpu_dai
);
struct
mxs_saif
*
master_saif
;
u32
delay
;
int
ret
;
master_saif
=
mxs_saif_get_master
(
saif
);
if
(
!
master_saif
)
...
...
@@ -503,23 +504,37 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
case
SNDRV_PCM_TRIGGER_START
:
case
SNDRV_PCM_TRIGGER_RESUME
:
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
if
(
saif
->
state
==
MXS_SAIF_STATE_RUNNING
)
return
0
;
dev_dbg
(
cpu_dai
->
dev
,
"start
\n
"
);
clk_enable
(
master_saif
->
clk
);
if
(
!
master_saif
->
mclk_in_use
)
__raw_writel
(
BM_SAIF_CTRL_RUN
,
master_saif
->
base
+
SAIF_CTRL
+
MXS_SET_ADDR
);
ret
=
clk_enable
(
master_saif
->
clk
);
if
(
ret
)
{
dev_err
(
saif
->
dev
,
"Failed to enable master clock
\n
"
);
return
ret
;
}
/*
* If the saif's master is not himself, we also need to enable
* itself clk for its internal basic logic to work.
*/
if
(
saif
!=
master_saif
)
{
clk_enable
(
saif
->
clk
);
ret
=
clk_enable
(
saif
->
clk
);
if
(
ret
)
{
dev_err
(
saif
->
dev
,
"Failed to enable master clock
\n
"
);
clk_disable
(
master_saif
->
clk
);
return
ret
;
}
__raw_writel
(
BM_SAIF_CTRL_RUN
,
saif
->
base
+
SAIF_CTRL
+
MXS_SET_ADDR
);
}
if
(
!
master_saif
->
mclk_in_use
)
__raw_writel
(
BM_SAIF_CTRL_RUN
,
master_saif
->
base
+
SAIF_CTRL
+
MXS_SET_ADDR
);
if
(
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
{
/*
* write data to saif data register to trigger
...
...
@@ -543,6 +558,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
}
master_saif
->
ongoing
=
1
;
saif
->
state
=
MXS_SAIF_STATE_RUNNING
;
dev_dbg
(
saif
->
dev
,
"CTRL 0x%x STAT 0x%x
\n
"
,
__raw_readl
(
saif
->
base
+
SAIF_CTRL
),
...
...
@@ -555,6 +571,9 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
case
SNDRV_PCM_TRIGGER_SUSPEND
:
case
SNDRV_PCM_TRIGGER_STOP
:
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
if
(
saif
->
state
==
MXS_SAIF_STATE_STOPPED
)
return
0
;
dev_dbg
(
cpu_dai
->
dev
,
"stop
\n
"
);
/* wait a while for the current sample to complete */
...
...
@@ -575,6 +594,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
}
master_saif
->
ongoing
=
0
;
saif
->
state
=
MXS_SAIF_STATE_STOPPED
;
break
;
default:
...
...
sound/soc/mxs/mxs-saif.h
浏览文件 @
10abe843
...
...
@@ -124,6 +124,11 @@ struct mxs_saif {
u32
fifo_underrun
;
u32
fifo_overrun
;
enum
{
MXS_SAIF_STATE_STOPPED
,
MXS_SAIF_STATE_RUNNING
,
}
state
;
};
extern
int
mxs_saif_put_mclk
(
unsigned
int
saif_id
);
...
...
sound/soc/mxs/mxs-sgtl5000.c
浏览文件 @
10abe843
...
...
@@ -122,14 +122,12 @@ static struct snd_soc_card mxs_sgtl5000 = {
.
num_links
=
ARRAY_SIZE
(
mxs_sgtl5000_dai
),
};
static
int
mxs_sgtl5000_probe
_dt
(
struct
platform_device
*
pdev
)
static
int
mxs_sgtl5000_probe
(
struct
platform_device
*
pdev
)
{
struct
snd_soc_card
*
card
=
&
mxs_sgtl5000
;
int
ret
,
i
;
struct
device_node
*
np
=
pdev
->
dev
.
of_node
;
struct
device_node
*
saif_np
[
2
],
*
codec_np
;
int
i
;
if
(
!
np
)
return
1
;
/* no device tree */
saif_np
[
0
]
=
of_parse_phandle
(
np
,
"saif-controllers"
,
0
);
saif_np
[
1
]
=
of_parse_phandle
(
np
,
"saif-controllers"
,
1
);
...
...
@@ -152,18 +150,6 @@ static int mxs_sgtl5000_probe_dt(struct platform_device *pdev)
of_node_put
(
saif_np
[
0
]);
of_node_put
(
saif_np
[
1
]);
return
0
;
}
static
int
mxs_sgtl5000_probe
(
struct
platform_device
*
pdev
)
{
struct
snd_soc_card
*
card
=
&
mxs_sgtl5000
;
int
ret
;
ret
=
mxs_sgtl5000_probe_dt
(
pdev
);
if
(
ret
<
0
)
return
ret
;
/*
* Set an init clock(11.28Mhz) for sgtl5000 initialization(i2c r/w).
* The Sgtl5000 sysclk is derived from saif0 mclk and it's range
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录