Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
ad2ab00c
Commit
ad2ab00c
authored
May 27, 2016
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/mtk' into asoc-next
parents
e61249bb
27becea0
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
90 additions
and
5 deletions
+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
No files found.
Documentation/devicetree/bindings/sound/mt8173-rt5650-rt5676.txt
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
|
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment