Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
ad2ab00c
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ad2ab00c
编写于
5月 27, 2016
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/mtk' into asoc-next
上级
e61249bb
27becea0
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
90 addition
and
5 deletion
+90
-5
Documentation/devicetree/bindings/sound/mt8173-rt5650-rt5676.txt
...tation/devicetree/bindings/sound/mt8173-rt5650-rt5676.txt
+3
-2
Documentation/devicetree/bindings/sound/mt8173-rt5650.txt
Documentation/devicetree/bindings/sound/mt8173-rt5650.txt
+10
-0
sound/soc/mediatek/Kconfig
sound/soc/mediatek/Kconfig
+1
-0
sound/soc/mediatek/mt8173-rt5650-rt5676.c
sound/soc/mediatek/mt8173-rt5650-rt5676.c
+27
-0
sound/soc/mediatek/mt8173-rt5650.c
sound/soc/mediatek/mt8173-rt5650.c
+47
-3
sound/soc/mediatek/mtk-afe-pcm.c
sound/soc/mediatek/mtk-afe-pcm.c
+2
-0
未找到文件。
Documentation/devicetree/bindings/sound/mt8173-rt5650-rt5676.txt
浏览文件 @
ad2ab00c
MT8173 with RT5650 RT5676 CODECS
MT8173 with RT5650 RT5676 CODECS
and HDMI via I2S
Required properties:
Required properties:
- compatible : "mediatek,mt8173-rt5650-rt5676"
- compatible : "mediatek,mt8173-rt5650-rt5676"
- mediatek,audio-codec: the phandles of rt5650 and rt5676 codecs
- mediatek,audio-codec: the phandles of rt5650 and rt5676 codecs
and of the hdmi encoder node
- mediatek,platform: the phandle of MT8173 ASoC platform
- mediatek,platform: the phandle of MT8173 ASoC platform
Example:
Example:
sound {
sound {
compatible = "mediatek,mt8173-rt5650-rt5676";
compatible = "mediatek,mt8173-rt5650-rt5676";
mediatek,audio-codec = <&rt5650 &rt5676>;
mediatek,audio-codec = <&rt5650 &rt5676
&hdmi0
>;
mediatek,platform = <&afe>;
mediatek,platform = <&afe>;
};
};
Documentation/devicetree/bindings/sound/mt8173-rt5650.txt
浏览文件 @
ad2ab00c
...
@@ -5,11 +5,21 @@ Required properties:
...
@@ -5,11 +5,21 @@ Required properties:
- mediatek,audio-codec: the phandles of rt5650 codecs
- mediatek,audio-codec: the phandles of rt5650 codecs
- mediatek,platform: the phandle of MT8173 ASoC platform
- mediatek,platform: the phandle of MT8173 ASoC platform
Optional subnodes:
- codec-capture : the subnode of rt5650 codec capture
Required codec-capture subnode properties:
- sound-dai: audio codec dai name on capture path
<&rt5650 0> : Default setting. Connect rt5650 I2S1 for capture. (dai_name = rt5645-aif1)
<&rt5650 1> : Connect rt5650 I2S2 for capture. (dai_name = rt5645-aif2)
Example:
Example:
sound {
sound {
compatible = "mediatek,mt8173-rt5650";
compatible = "mediatek,mt8173-rt5650";
mediatek,audio-codec = <&rt5650>;
mediatek,audio-codec = <&rt5650>;
mediatek,platform = <&afe>;
mediatek,platform = <&afe>;
codec-capture {
sound-dai = <&rt5650 1>;
};
};
};
sound/soc/mediatek/Kconfig
浏览文件 @
ad2ab00c
...
@@ -43,6 +43,7 @@ config SND_SOC_MT8173_RT5650_RT5676
...
@@ -43,6 +43,7 @@ config SND_SOC_MT8173_RT5650_RT5676
depends on SND_SOC_MEDIATEK && I2C
depends on SND_SOC_MEDIATEK && I2C
select SND_SOC_RT5645
select SND_SOC_RT5645
select SND_SOC_RT5677
select SND_SOC_RT5677
select SND_SOC_HDMI_CODEC
help
help
This adds ASoC driver for Mediatek MT8173 boards
This adds ASoC driver for Mediatek MT8173 boards
with the RT5650 and RT5676 codecs.
with the RT5650 and RT5676 codecs.
...
...
sound/soc/mediatek/mt8173-rt5650-rt5676.c
浏览文件 @
ad2ab00c
...
@@ -134,7 +134,9 @@ static struct snd_soc_dai_link_component mt8173_rt5650_rt5676_codecs[] = {
...
@@ -134,7 +134,9 @@ static struct snd_soc_dai_link_component mt8173_rt5650_rt5676_codecs[] = {
enum
{
enum
{
DAI_LINK_PLAYBACK
,
DAI_LINK_PLAYBACK
,
DAI_LINK_CAPTURE
,
DAI_LINK_CAPTURE
,
DAI_LINK_HDMI
,
DAI_LINK_CODEC_I2S
,
DAI_LINK_CODEC_I2S
,
DAI_LINK_HDMI_I2S
,
DAI_LINK_INTERCODEC
DAI_LINK_INTERCODEC
};
};
...
@@ -161,6 +163,16 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
...
@@ -161,6 +163,16 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
.
dynamic
=
1
,
.
dynamic
=
1
,
.
dpcm_capture
=
1
,
.
dpcm_capture
=
1
,
},
},
[
DAI_LINK_HDMI
]
=
{
.
name
=
"HDMI"
,
.
stream_name
=
"HDMI PCM"
,
.
cpu_dai_name
=
"HDMI"
,
.
codec_name
=
"snd-soc-dummy"
,
.
codec_dai_name
=
"snd-soc-dummy-dai"
,
.
trigger
=
{
SND_SOC_DPCM_TRIGGER_POST
,
SND_SOC_DPCM_TRIGGER_POST
},
.
dynamic
=
1
,
.
dpcm_playback
=
1
,
},
/* Back End DAI links */
/* Back End DAI links */
[
DAI_LINK_CODEC_I2S
]
=
{
[
DAI_LINK_CODEC_I2S
]
=
{
...
@@ -177,6 +189,13 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
...
@@ -177,6 +189,13 @@ static struct snd_soc_dai_link mt8173_rt5650_rt5676_dais[] = {
.
dpcm_playback
=
1
,
.
dpcm_playback
=
1
,
.
dpcm_capture
=
1
,
.
dpcm_capture
=
1
,
},
},
[
DAI_LINK_HDMI_I2S
]
=
{
.
name
=
"HDMI BE"
,
.
cpu_dai_name
=
"HDMIO"
,
.
no_pcm
=
1
,
.
codec_dai_name
=
"i2s-hifi"
,
.
dpcm_playback
=
1
,
},
/* rt5676 <-> rt5650 intercodec link: Sets rt5676 I2S2 as master */
/* rt5676 <-> rt5650 intercodec link: Sets rt5676 I2S2 as master */
[
DAI_LINK_INTERCODEC
]
=
{
[
DAI_LINK_INTERCODEC
]
=
{
.
name
=
"rt5650_rt5676 intercodec"
,
.
name
=
"rt5650_rt5676 intercodec"
,
...
@@ -251,6 +270,14 @@ static int mt8173_rt5650_rt5676_dev_probe(struct platform_device *pdev)
...
@@ -251,6 +270,14 @@ static int mt8173_rt5650_rt5676_dev_probe(struct platform_device *pdev)
mt8173_rt5650_rt5676_dais
[
DAI_LINK_INTERCODEC
].
codec_of_node
=
mt8173_rt5650_rt5676_dais
[
DAI_LINK_INTERCODEC
].
codec_of_node
=
mt8173_rt5650_rt5676_codecs
[
1
].
of_node
;
mt8173_rt5650_rt5676_codecs
[
1
].
of_node
;
mt8173_rt5650_rt5676_dais
[
DAI_LINK_HDMI_I2S
].
codec_of_node
=
of_parse_phandle
(
pdev
->
dev
.
of_node
,
"mediatek,audio-codec"
,
2
);
if
(
!
mt8173_rt5650_rt5676_dais
[
DAI_LINK_HDMI_I2S
].
codec_of_node
)
{
dev_err
(
&
pdev
->
dev
,
"Property 'audio-codec' missing or invalid
\n
"
);
return
-
EINVAL
;
}
card
->
dev
=
&
pdev
->
dev
;
card
->
dev
=
&
pdev
->
dev
;
platform_set_drvdata
(
pdev
,
card
);
platform_set_drvdata
(
pdev
,
card
);
...
...
sound/soc/mediatek/mt8173-rt5650.c
浏览文件 @
ad2ab00c
...
@@ -85,12 +85,29 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime)
...
@@ -85,12 +85,29 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime)
{
{
struct
snd_soc_card
*
card
=
runtime
->
card
;
struct
snd_soc_card
*
card
=
runtime
->
card
;
struct
snd_soc_codec
*
codec
=
runtime
->
codec_dais
[
0
]
->
codec
;
struct
snd_soc_codec
*
codec
=
runtime
->
codec_dais
[
0
]
->
codec
;
const
char
*
codec_capture_dai
=
runtime
->
codec_dais
[
1
]
->
name
;
int
ret
;
int
ret
;
rt5645_sel_asrc_clk_src
(
codec
,
rt5645_sel_asrc_clk_src
(
codec
,
RT5645_DA_STEREO_FILTER
|
RT5645_DA_STEREO_FILTER
,
RT5645_AD_STEREO_FILTER
,
RT5645_CLK_SEL_I2S1_ASRC
);
RT5645_CLK_SEL_I2S1_ASRC
);
if
(
!
strcmp
(
codec_capture_dai
,
"rt5645-aif1"
))
{
rt5645_sel_asrc_clk_src
(
codec
,
RT5645_AD_STEREO_FILTER
,
RT5645_CLK_SEL_I2S1_ASRC
);
}
else
if
(
!
strcmp
(
codec_capture_dai
,
"rt5645-aif2"
))
{
rt5645_sel_asrc_clk_src
(
codec
,
RT5645_AD_STEREO_FILTER
,
RT5645_CLK_SEL_I2S2_ASRC
);
}
else
{
dev_warn
(
card
->
dev
,
"Only one dai codec found in DTS, enabled rt5645 AD filter
\n
"
);
rt5645_sel_asrc_clk_src
(
codec
,
RT5645_AD_STEREO_FILTER
,
RT5645_CLK_SEL_I2S1_ASRC
);
}
/* enable jack detection */
/* enable jack detection */
ret
=
snd_soc_card_jack_new
(
card
,
"Headset Jack"
,
ret
=
snd_soc_card_jack_new
(
card
,
"Headset Jack"
,
SND_JACK_HEADPHONE
|
SND_JACK_MICROPHONE
|
SND_JACK_HEADPHONE
|
SND_JACK_MICROPHONE
|
...
@@ -110,6 +127,11 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime)
...
@@ -110,6 +127,11 @@ static int mt8173_rt5650_init(struct snd_soc_pcm_runtime *runtime)
static
struct
snd_soc_dai_link_component
mt8173_rt5650_codecs
[]
=
{
static
struct
snd_soc_dai_link_component
mt8173_rt5650_codecs
[]
=
{
{
{
/* Playback */
.
dai_name
=
"rt5645-aif1"
,
},
{
/* Capture */
.
dai_name
=
"rt5645-aif1"
,
.
dai_name
=
"rt5645-aif1"
,
},
},
};
};
...
@@ -149,7 +171,7 @@ static struct snd_soc_dai_link mt8173_rt5650_dais[] = {
...
@@ -149,7 +171,7 @@ static struct snd_soc_dai_link mt8173_rt5650_dais[] = {
.
cpu_dai_name
=
"I2S"
,
.
cpu_dai_name
=
"I2S"
,
.
no_pcm
=
1
,
.
no_pcm
=
1
,
.
codecs
=
mt8173_rt5650_codecs
,
.
codecs
=
mt8173_rt5650_codecs
,
.
num_codecs
=
1
,
.
num_codecs
=
2
,
.
init
=
mt8173_rt5650_init
,
.
init
=
mt8173_rt5650_init
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBS_CFS
,
SND_SOC_DAIFMT_CBS_CFS
,
...
@@ -177,6 +199,8 @@ static int mt8173_rt5650_dev_probe(struct platform_device *pdev)
...
@@ -177,6 +199,8 @@ static int mt8173_rt5650_dev_probe(struct platform_device *pdev)
{
{
struct
snd_soc_card
*
card
=
&
mt8173_rt5650_card
;
struct
snd_soc_card
*
card
=
&
mt8173_rt5650_card
;
struct
device_node
*
platform_node
;
struct
device_node
*
platform_node
;
struct
device_node
*
np
;
const
char
*
codec_capture_dai
;
int
i
,
ret
;
int
i
,
ret
;
platform_node
=
of_parse_phandle
(
pdev
->
dev
.
of_node
,
platform_node
=
of_parse_phandle
(
pdev
->
dev
.
of_node
,
...
@@ -199,6 +223,26 @@ static int mt8173_rt5650_dev_probe(struct platform_device *pdev)
...
@@ -199,6 +223,26 @@ static int mt8173_rt5650_dev_probe(struct platform_device *pdev)
"Property 'audio-codec' missing or invalid
\n
"
);
"Property 'audio-codec' missing or invalid
\n
"
);
return
-
EINVAL
;
return
-
EINVAL
;
}
}
mt8173_rt5650_codecs
[
1
].
of_node
=
mt8173_rt5650_codecs
[
0
].
of_node
;
if
(
of_find_node_by_name
(
platform_node
,
"codec-capture"
))
{
np
=
of_get_child_by_name
(
pdev
->
dev
.
of_node
,
"codec-capture"
);
if
(
!
np
)
{
dev_err
(
&
pdev
->
dev
,
"%s: Can't find codec-capture DT node
\n
"
,
__func__
);
return
-
EINVAL
;
}
ret
=
snd_soc_of_get_dai_name
(
np
,
&
codec_capture_dai
);
if
(
ret
<
0
)
{
dev_err
(
&
pdev
->
dev
,
"%s codec_capture_dai name fail %d
\n
"
,
__func__
,
ret
);
return
ret
;
}
mt8173_rt5650_codecs
[
1
].
dai_name
=
codec_capture_dai
;
}
card
->
dev
=
&
pdev
->
dev
;
card
->
dev
=
&
pdev
->
dev
;
platform_set_drvdata
(
pdev
,
card
);
platform_set_drvdata
(
pdev
,
card
);
...
...
sound/soc/mediatek/mtk-afe-pcm.c
浏览文件 @
ad2ab00c
...
@@ -123,6 +123,7 @@
...
@@ -123,6 +123,7 @@
#define AFE_TDM_CON1_WLEN_32BIT (0x2 << 8)
#define AFE_TDM_CON1_WLEN_32BIT (0x2 << 8)
#define AFE_TDM_CON1_MSB_ALIGNED (0x1 << 4)
#define AFE_TDM_CON1_MSB_ALIGNED (0x1 << 4)
#define AFE_TDM_CON1_1_BCK_DELAY (0x1 << 3)
#define AFE_TDM_CON1_1_BCK_DELAY (0x1 << 3)
#define AFE_TDM_CON1_LRCK_INV (0x1 << 2)
#define AFE_TDM_CON1_BCK_INV (0x1 << 1)
#define AFE_TDM_CON1_BCK_INV (0x1 << 1)
#define AFE_TDM_CON1_EN (0x1 << 0)
#define AFE_TDM_CON1_EN (0x1 << 0)
...
@@ -449,6 +450,7 @@ static int mtk_afe_hdmi_prepare(struct snd_pcm_substream *substream,
...
@@ -449,6 +450,7 @@ static int mtk_afe_hdmi_prepare(struct snd_pcm_substream *substream,
runtime
->
rate
*
runtime
->
channels
*
32
);
runtime
->
rate
*
runtime
->
channels
*
32
);
val
=
AFE_TDM_CON1_BCK_INV
|
val
=
AFE_TDM_CON1_BCK_INV
|
AFE_TDM_CON1_LRCK_INV
|
AFE_TDM_CON1_1_BCK_DELAY
|
AFE_TDM_CON1_1_BCK_DELAY
|
AFE_TDM_CON1_MSB_ALIGNED
|
/* I2S mode */
AFE_TDM_CON1_MSB_ALIGNED
|
/* I2S mode */
AFE_TDM_CON1_WLEN_32BIT
|
AFE_TDM_CON1_WLEN_32BIT
|
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录