Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
1921bab2
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看板
提交
1921bab2
编写于
8月 11, 2009
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge commit '
a5479e38
' into for-2.6.32
上级
17244c24
a5479e38
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
33 addition
and
15 deletion
+33
-15
include/sound/soc-dai.h
include/sound/soc-dai.h
+3
-2
sound/soc/codecs/wm9081.c
sound/soc/codecs/wm9081.c
+3
-2
sound/soc/pxa/magician.c
sound/soc/pxa/magician.c
+1
-1
sound/soc/pxa/pxa-ssp.c
sound/soc/pxa/pxa-ssp.c
+20
-7
sound/soc/soc-core.c
sound/soc/soc-core.c
+6
-3
未找到文件。
include/sound/soc-dai.h
浏览文件 @
1921bab2
...
...
@@ -112,7 +112,7 @@ int snd_soc_dai_set_pll(struct snd_soc_dai *dai,
int
snd_soc_dai_set_fmt
(
struct
snd_soc_dai
*
dai
,
unsigned
int
fmt
);
int
snd_soc_dai_set_tdm_slot
(
struct
snd_soc_dai
*
dai
,
unsigned
int
mask
,
int
slots
);
unsigned
int
tx_mask
,
unsigned
int
rx_mask
,
int
slots
,
int
slot_width
);
int
snd_soc_dai_set_tristate
(
struct
snd_soc_dai
*
dai
,
int
tristate
);
...
...
@@ -146,7 +146,8 @@ struct snd_soc_dai_ops {
*/
int
(
*
set_fmt
)(
struct
snd_soc_dai
*
dai
,
unsigned
int
fmt
);
int
(
*
set_tdm_slot
)(
struct
snd_soc_dai
*
dai
,
unsigned
int
mask
,
int
slots
);
unsigned
int
tx_mask
,
unsigned
int
rx_mask
,
int
slots
,
int
slot_width
);
int
(
*
set_tristate
)(
struct
snd_soc_dai
*
dai
,
int
tristate
);
/*
...
...
sound/soc/codecs/wm9081.c
浏览文件 @
1921bab2
...
...
@@ -1149,8 +1149,9 @@ static int wm9081_set_sysclk(struct snd_soc_dai *codec_dai,
return
0
;
}
/* FIXME: Needs to handle slot_width */
static
int
wm9081_set_tdm_slot
(
struct
snd_soc_dai
*
dai
,
unsigned
int
mask
,
int
slots
)
unsigned
int
tx_mask
,
unsigned
int
rx_mask
,
int
slots
,
int
slot_width
)
{
struct
snd_soc_codec
*
codec
=
dai
->
codec
;
unsigned
int
aif1
=
snd_soc_read
(
codec
,
WM9081_AUDIO_INTERFACE_1
);
...
...
@@ -1162,7 +1163,7 @@ static int wm9081_set_tdm_slot(struct snd_soc_dai *dai,
aif1
|=
(
slots
-
1
)
<<
WM9081_AIFDAC_TDM_MODE_SHIFT
;
switch
(
mask
)
{
switch
(
rx_
mask
)
{
case
1
:
break
;
case
2
:
...
...
sound/soc/pxa/magician.c
浏览文件 @
1921bab2
...
...
@@ -190,7 +190,7 @@ static int magician_playback_hw_params(struct snd_pcm_substream *substream,
if
(
ret
<
0
)
return
ret
;
ret
=
snd_soc_dai_set_tdm_slot
(
cpu_dai
,
1
,
1
);
ret
=
snd_soc_dai_set_tdm_slot
(
cpu_dai
,
1
,
0
,
1
,
width
);
if
(
ret
<
0
)
return
ret
;
...
...
sound/soc/pxa/pxa-ssp.c
浏览文件 @
1921bab2
...
...
@@ -375,21 +375,34 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai,
* Set the active slots in TDM/Network mode
*/
static
int
pxa_ssp_set_dai_tdm_slot
(
struct
snd_soc_dai
*
cpu_dai
,
unsigned
int
mask
,
int
slots
)
unsigned
int
tx_mask
,
unsigned
int
rx_mask
,
int
slots
,
int
slot_width
)
{
struct
ssp_priv
*
priv
=
cpu_dai
->
private_data
;
struct
ssp_device
*
ssp
=
priv
->
dev
.
ssp
;
u32
sscr0
;
sscr0
=
ssp_read_reg
(
ssp
,
SSCR0
)
&
~
SSCR0_SlotsPerFrm
(
7
);
sscr0
=
ssp_read_reg
(
ssp
,
SSCR0
);
sscr0
&=
~
(
SSCR0_MOD
|
SSCR0_SlotsPerFrm
(
8
)
|
SSCR0_EDSS
|
SSCR0_DSS
);
/* set slot width */
if
(
slot_width
>
16
)
sscr0
|=
SSCR0_EDSS
|
SSCR0_DataSize
(
slot_width
-
16
);
else
sscr0
|=
SSCR0_DataSize
(
slot_width
);
if
(
slots
>
1
)
{
/* enable network mode */
sscr0
|=
SSCR0_MOD
;
/* set number of active slots */
sscr0
|=
SSCR0_SlotsPerFrm
(
slots
);
ssp_write_reg
(
ssp
,
SSCR0
,
sscr0
);
/* set active slot mask */
ssp_write_reg
(
ssp
,
SSTSA
,
mask
);
ssp_write_reg
(
ssp
,
SSRSA
,
mask
);
ssp_write_reg
(
ssp
,
SSTSA
,
tx_mask
);
ssp_write_reg
(
ssp
,
SSRSA
,
rx_mask
);
}
ssp_write_reg
(
ssp
,
SSCR0
,
sscr0
);
return
0
;
}
...
...
sound/soc/soc-core.c
浏览文件 @
1921bab2
...
...
@@ -2223,17 +2223,20 @@ EXPORT_SYMBOL_GPL(snd_soc_dai_set_fmt);
/**
* snd_soc_dai_set_tdm_slot - configure DAI TDM.
* @dai: DAI
* @mask: DAI specific mask representing used slots.
* @tx_mask: bitmask representing active TX slots.
* @rx_mask: bitmask representing active RX slots.
* @slots: Number of slots in use.
* @slot_width: Width in bits for each slot.
*
* Configures a DAI for TDM operation. Both mask and slots are codec and DAI
* specific.
*/
int
snd_soc_dai_set_tdm_slot
(
struct
snd_soc_dai
*
dai
,
unsigned
int
mask
,
int
slots
)
unsigned
int
tx_mask
,
unsigned
int
rx_mask
,
int
slots
,
int
slot_width
)
{
if
(
dai
->
ops
&&
dai
->
ops
->
set_tdm_slot
)
return
dai
->
ops
->
set_tdm_slot
(
dai
,
mask
,
slots
);
return
dai
->
ops
->
set_tdm_slot
(
dai
,
tx_mask
,
rx_mask
,
slots
,
slot_width
);
else
return
-
EINVAL
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录