Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
f1cc981b
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
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看板
提交
f1cc981b
编写于
4月 12, 2013
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/ak4104' into asoc-next
上级
7d9ca53b
b692a436
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
39 addition
and
16 deletion
+39
-16
sound/soc/codecs/ak4104.c
sound/soc/codecs/ak4104.c
+39
-16
未找到文件。
sound/soc/codecs/ak4104.c
浏览文件 @
f1cc981b
...
...
@@ -55,6 +55,7 @@ static int ak4104_set_dai_fmt(struct snd_soc_dai *codec_dai,
unsigned
int
format
)
{
struct
snd_soc_codec
*
codec
=
codec_dai
->
codec
;
struct
ak4104_private
*
ak4104
=
snd_soc_codec_get_drvdata
(
codec
);
int
val
=
0
;
int
ret
;
...
...
@@ -77,9 +78,9 @@ static int ak4104_set_dai_fmt(struct snd_soc_dai *codec_dai,
if
((
format
&
SND_SOC_DAIFMT_MASTER_MASK
)
!=
SND_SOC_DAIFMT_CBS_CFS
)
return
-
EINVAL
;
ret
=
snd_soc_update_bits
(
codec
,
AK4104_REG_CONTROL1
,
AK4104_CONTROL1_DIF0
|
AK4104_CONTROL1_DIF1
,
val
);
ret
=
regmap_update_bits
(
ak4104
->
regmap
,
AK4104_REG_CONTROL1
,
AK4104_CONTROL1_DIF0
|
AK4104_CONTROL1_DIF1
,
val
);
if
(
ret
<
0
)
return
ret
;
...
...
@@ -91,11 +92,12 @@ static int ak4104_hw_params(struct snd_pcm_substream *substream,
struct
snd_soc_dai
*
dai
)
{
struct
snd_soc_codec
*
codec
=
dai
->
codec
;
int
val
=
0
;
struct
ak4104_private
*
ak4104
=
snd_soc_codec_get_drvdata
(
codec
);
int
ret
,
val
=
0
;
/* set the IEC958 bits: consumer mode, no copyright bit */
val
|=
IEC958_AES0_CON_NOT_COPYRIGHT
;
snd_soc_write
(
codec
,
AK4104_REG_CHN_STATUS
(
0
),
val
);
regmap_write
(
ak4104
->
regmap
,
AK4104_REG_CHN_STATUS
(
0
),
val
);
val
=
0
;
...
...
@@ -132,11 +134,33 @@ static int ak4104_hw_params(struct snd_pcm_substream *substream,
return
-
EINVAL
;
}
return
snd_soc_write
(
codec
,
AK4104_REG_CHN_STATUS
(
3
),
val
);
ret
=
regmap_write
(
ak4104
->
regmap
,
AK4104_REG_CHN_STATUS
(
3
),
val
);
if
(
ret
<
0
)
return
ret
;
/* enable transmitter */
ret
=
regmap_update_bits
(
ak4104
->
regmap
,
AK4104_REG_TX
,
AK4104_TX_TXE
,
AK4104_TX_TXE
);
if
(
ret
<
0
)
return
ret
;
return
0
;
}
static
int
ak4104_hw_free
(
struct
snd_pcm_substream
*
substream
,
struct
snd_soc_dai
*
dai
)
{
struct
snd_soc_codec
*
codec
=
dai
->
codec
;
struct
ak4104_private
*
ak4104
=
snd_soc_codec_get_drvdata
(
codec
);
/* disable transmitter */
return
regmap_update_bits
(
ak4104
->
regmap
,
AK4104_REG_TX
,
AK4104_TX_TXE
,
0
);
}
static
const
struct
snd_soc_dai_ops
ak4101_dai_ops
=
{
.
hw_params
=
ak4104_hw_params
,
.
hw_free
=
ak4104_hw_free
,
.
set_fmt
=
ak4104_set_dai_fmt
,
};
...
...
@@ -160,20 +184,17 @@ static int ak4104_probe(struct snd_soc_codec *codec)
int
ret
;
codec
->
control_data
=
ak4104
->
regmap
;
ret
=
snd_soc_codec_set_cache_io
(
codec
,
8
,
8
,
SND_SOC_REGMAP
);
if
(
ret
!=
0
)
return
ret
;
/* set power-up and non-reset bits */
ret
=
snd_soc_update_bits
(
codec
,
AK4104_REG_CONTROL1
,
AK4104_CONTROL1_PW
|
AK4104_CONTROL1_RSTN
,
AK4104_CONTROL1_PW
|
AK4104_CONTROL1_RSTN
);
ret
=
regmap_update_bits
(
ak4104
->
regmap
,
AK4104_REG_CONTROL1
,
AK4104_CONTROL1_PW
|
AK4104_CONTROL1_RSTN
,
AK4104_CONTROL1_PW
|
AK4104_CONTROL1_RSTN
);
if
(
ret
<
0
)
return
ret
;
/* enable transmitter */
ret
=
snd_soc_update_bits
(
codec
,
AK4104_REG_TX
,
AK4104_TX_TXE
,
AK4104_TX_TXE
);
ret
=
regmap_update_bits
(
ak4104
->
regmap
,
AK4104_REG_TX
,
AK4104_TX_TXE
,
AK4104_TX_TXE
);
if
(
ret
<
0
)
return
ret
;
...
...
@@ -182,8 +203,10 @@ static int ak4104_probe(struct snd_soc_codec *codec)
static
int
ak4104_remove
(
struct
snd_soc_codec
*
codec
)
{
snd_soc_update_bits
(
codec
,
AK4104_REG_CONTROL1
,
AK4104_CONTROL1_PW
|
AK4104_CONTROL1_RSTN
,
0
);
struct
ak4104_private
*
ak4104
=
snd_soc_codec_get_drvdata
(
codec
);
regmap_update_bits
(
ak4104
->
regmap
,
AK4104_REG_CONTROL1
,
AK4104_CONTROL1_PW
|
AK4104_CONTROL1_RSTN
,
0
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录