audio: enable continuous clks

PD#150879: if continuous-clock is configed, the audio clock don't
gate off when there is audio stream. Also, this commit could simply
set the same MPLL source to make PDM-in and TDM-out work synchronously.

Change-Id: Iac488b4d4813f758f0bc1ebd8bb5f35f9a8dfff1
Signed-off-by: Shuai Li <shuai.li@amlogic.com>
This commit is contained in:
Shuai Li
2017-09-19 20:56:11 +08:00
committed by Jianxin Pan
parent 84cc35e6e1
commit 6040daab70
13 changed files with 259 additions and 233 deletions

View File

@@ -426,12 +426,11 @@
meson_sound {
compatible = "amlogic, sound-card";
aml-audio-card,name = "AML-AXGSOUND";
//aml-audio-card,mclk-fs = <256>;
aml-audio-card,dai-link@0 {
format = "dsp_a";
mclk-fs = <512>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
//bitclock-master = <&tdmacodec>;
@@ -454,7 +453,7 @@
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
//bitclock-master = <&aml_tdmb>;
@@ -475,7 +474,7 @@
aml-audio-card,dai-link@2 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
//bitclock-master = <&aml_tdmc>;
@@ -494,7 +493,7 @@
};
aml-audio-card,dai-link@3 {
mclk-fs = <256>;
mclk-fs = <64>;
cpu {
sound-dai = <&aml_pdm>;
};
@@ -507,6 +506,7 @@
mclk-fs = <128>;
cpu {
sound-dai = <&aml_spdif>;
system-clock-frequency = <6144000>;
};
codec {
sound-dai = <&dummy_codec>;
@@ -762,10 +762,9 @@
#sound-dai-cells = <0>;
dai-tdm-lane-slot-mask = <1>;
dai-tdm-clk-sel = <0>;
clocks = <&clkc CLKID_MPLL0>;
//&clkaudio CLKID_AUDIO_TDMOUTA
//&clkaudio CLKID_AUDIO_MCLK_A>;
clock-names = "mpll0", "gate", "mclk";
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmout_a &tdmin_a>;
};
@@ -775,8 +774,9 @@
#sound-dai-cells = <0>;
dai-tdm-lane-slot-mask = <1 1 1 1>;
dai-tdm-clk-sel = <1>;
clocks = <&clkc CLKID_MPLL1>;
clock-names = "mpll1";
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk &tdmout_b>;
};
@@ -787,8 +787,9 @@
dai-tdm-lane-slot-mask-in = <0 1 0 0>;
dai-tdm-lane-slot-mask-out = <1 0 1 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL2>;
clock-names = "mpll2";
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c>;// &tdmin_c>;
};
@@ -816,10 +817,15 @@
compatible = "amlogic, snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate", "pll_clk", "pdm_dclk", "pdm_sysclk";
&clkc CLKID_FCLK_DIV4
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"src_sysclk",
"src_dclk",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */

View File

@@ -342,12 +342,11 @@
meson_sound {
compatible = "amlogic, sound-card";
aml-audio-card,name = "AML-AXGSOUND";
//aml-audio-card,mclk-fs = <256>;
aml-audio-card,dai-link@0 {
format = "dsp_a";
mclk-fs = <256>;//512
continuous-clock;
//continuous-clock;
bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdma>;
@@ -358,6 +357,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec &dummy_codec>;
@@ -367,7 +367,7 @@
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmb>;
@@ -378,6 +378,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&tas5707_36 &tlv320adc3101_32>;
@@ -387,7 +388,7 @@
aml-audio-card,dai-link@2 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
/* tdmb clk using tdmc so no bclk-inv */
//bitclock-inversion;
//frame-inversion;
@@ -399,6 +400,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec>;
@@ -761,10 +763,9 @@
dai-tdm-lane-slot-mask = <1 1 1 1>;
/* select tdm lr/bclk src, see aml_axg_tdm.c */
dai-tdm-clk-sel = <0>;
clocks = <&clkc CLKID_MPLL0>;
//&clkaudio CLKID_AUDIO_TDMOUTA
//&clkaudio CLKID_AUDIO_MCLK_A>;
clock-names = "mpll0", "gate", "mclk";
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmin_a &tdmout_a>;
};
@@ -775,8 +776,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL1>;
clock-names = "mpll1";
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;
};
@@ -787,8 +789,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL2>;
clock-names = "mpll2";
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c &tdmin_c>;
};
@@ -817,10 +820,15 @@
compatible = "amlogic, snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate", "pll_clk", "pdm_dclk", "pdm_sysclk";
&clkc CLKID_FCLK_DIV4
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"src_sysclk",
"src_dclk",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */

View File

@@ -463,14 +463,13 @@
meson_sound {
compatible = "amlogic, sound-card";
aml-audio-card,name = "AML-AXGSOUND";
//aml-audio-card,mclk-fs = <256>;
aml-audio-card,loopback = <&aml_loopback>;
aml-audio-card,dai-link@0 {
format = "dsp_a";
mclk-fs = <512>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
//bitclock-master = <&tdmacodec>;
@@ -483,6 +482,7 @@
<1 1 1 1 1 1 1 1>;
dai-tdm-slot-num = <8>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <24576000>;
};
tdmacodec: codec {
sound-dai = <&dummy_codec &dummy_codec>;
@@ -492,7 +492,7 @@
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmb>;
@@ -503,6 +503,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
/*
@@ -531,6 +532,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
prefix-names = "5707_A", "5707_B";
@@ -540,7 +542,7 @@
};
aml-audio-card,dai-link@3 {
mclk-fs = <256>;
mclk-fs = <64>;
cpu {
sound-dai = <&aml_pdm>;
};
@@ -553,6 +555,7 @@
mclk-fs = <128>;
cpu {
sound-dai = <&aml_spdif>;
system-clock-frequency = <6144000>;
};
codec {
sound-dai = <&dummy_codec>;
@@ -934,10 +937,9 @@
dai-tdm-lane-slot-mask-in = <1 0>;
dai-tdm-lane-slot-mask-out = <0 1>;
dai-tdm-clk-sel = <0>;
clocks = <&clkc CLKID_MPLL0>;
//&clkaudio CLKID_AUDIO_TDMOUTA
//&clkaudio CLKID_AUDIO_MCLK_A>;
clock-names = "mpll0", "gate", "mclk";
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmout_a &tdmin_a &tdmout_a_data>;
};
@@ -947,8 +949,9 @@
#sound-dai-cells = <0>;
dai-tdm-lane-slot-mask-in = <1 1 1 1>;
dai-tdm-clk-sel = <1>;
clocks = <&clkc CLKID_MPLL1>;
clock-names = "mpll1";
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;
};
@@ -959,8 +962,9 @@
dai-tdm-lane-slot-mask-in = <0 1 0 0>;
dai-tdm-lane-slot-mask-out = <1 0 1 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL2>;
clock-names = "mpll2";
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c &tdmin_c>;
};
@@ -988,10 +992,15 @@
compatible = "amlogic, snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate", "pll_clk", "pdm_dclk", "pdm_sysclk";
&clkc CLKID_FCLK_DIV4
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"src_sysclk",
"src_dclk",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */

View File

@@ -463,14 +463,13 @@
meson_sound {
compatible = "amlogic, sound-card";
aml-audio-card,name = "AML-AXGSOUND";
//aml-audio-card,mclk-fs = <256>;
aml-audio-card,loopback = <&aml_loopback>;
aml-audio-card,dai-link@0 {
format = "dsp_a";
mclk-fs = <512>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
//bitclock-master = <&tdmacodec>;
@@ -483,6 +482,7 @@
<1 1 1 1 1 1 1 1>;
dai-tdm-slot-num = <8>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <24576000>;
};
tdmacodec: codec {
sound-dai = <&dummy_codec &dummy_codec>;
@@ -492,7 +492,7 @@
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmb>;
@@ -503,6 +503,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
/*
@@ -520,7 +521,7 @@
aml-audio-card,dai-link@2 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
//bitclock-master = <&aml_tdmc>;
@@ -531,6 +532,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
prefix-names = "5707_A", "5707_B";
@@ -553,6 +555,7 @@
mclk-fs = <128>;
cpu {
sound-dai = <&aml_spdif>;
system-clock-frequency = <6144000>;
};
codec {
sound-dai = <&dummy_codec>;
@@ -935,10 +938,9 @@
dai-tdm-lane-slot-mask-in = <1 0>;
dai-tdm-lane-slot-mask-out = <0 1>;
dai-tdm-clk-sel = <0>;
clocks = <&clkc CLKID_MPLL0>;
//&clkaudio CLKID_AUDIO_TDMOUTA
//&clkaudio CLKID_AUDIO_MCLK_A>;
clock-names = "mpll0", "gate", "mclk";
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmout_a &tdmin_a &tdmout_a_data>;
};
@@ -949,8 +951,9 @@
/*dai-tdm-lane-slot-mask-in = <1 1 1 1>;*/
dai-tdm-lane-slot-mask-in = <0 0 0 1>;
dai-tdm-clk-sel = <1>;
clocks = <&clkc CLKID_MPLL1>;
clock-names = "mpll1";
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;
};
@@ -961,8 +964,9 @@
dai-tdm-lane-slot-mask-in = <0 1 0 0>;
dai-tdm-lane-slot-mask-out = <0 0 1 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL2>;
clock-names = "mpll2";
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c &tdmin_c>;
};
@@ -990,10 +994,15 @@
compatible = "amlogic, snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate", "pll_clk", "pdm_dclk", "pdm_sysclk";
&clkc CLKID_FCLK_DIV4
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"src_sysclk",
"src_dclk",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */

View File

@@ -342,14 +342,13 @@
meson_sound {
compatible = "amlogic, sound-card";
aml-audio-card,name = "AML-AXGSOUND";
//aml-audio-card,mclk-fs = <256>;
aml-audio-card,loopback = <&aml_loopback>;
aml-audio-card,dai-link@0 {
format = "dsp_a";
mclk-fs = <256>;//512
continuous-clock;
//continuous-clock;
bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdma>;
@@ -360,6 +359,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec &dummy_codec>;
@@ -369,7 +369,7 @@
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmb>;
@@ -380,6 +380,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&tas5707_36 &tlv320adc3101_32>;
@@ -401,6 +402,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec>;
@@ -765,10 +767,9 @@
dai-tdm-lane-slot-mask-in = <1 0>;
dai-tdm-lane-slot-mask-out = <0 1>;
dai-tdm-clk-sel = <0>;
clocks = <&clkc CLKID_MPLL0>;
//&clkaudio CLKID_AUDIO_TDMOUTA
//&clkaudio CLKID_AUDIO_MCLK_A>;
clock-names = "mpll0", "gate", "mclk";
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmin_a &tdmout_a &tdmout_a_data>;
};
@@ -779,8 +780,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL1>;
clock-names = "mpll1";
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;
};
@@ -791,8 +793,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL2>;
clock-names = "mpll2";
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c &tdmin_c>;
};
@@ -823,10 +826,15 @@
compatible = "amlogic, snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate", "pll_clk", "pdm_dclk", "pdm_sysclk";
&clkc CLKID_FCLK_DIV4
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"src_sysclk",
"src_dclk",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */

View File

@@ -340,14 +340,13 @@
meson_sound {
compatible = "amlogic, sound-card";
aml-audio-card,name = "AML-AXGSOUND";
//aml-audio-card,mclk-fs = <256>;
aml-audio-card,loopback = <&aml_loopback>;
aml-audio-card,dai-link@0 {
format = "dsp_a";
mclk-fs = <256>;//512
continuous-clock;
//continuous-clock;
bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdma>;
@@ -358,6 +357,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec &dummy_codec>;
@@ -367,7 +367,7 @@
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmb>;
@@ -378,6 +378,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&tlv320adc3101_32>;
@@ -400,6 +401,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&tas5707_36 &dummy_codec>;
@@ -765,10 +767,9 @@
dai-tdm-lane-slot-mask-out = <0 1>;
/* select tdm lr/bclk src, see aml_axg_tdm.c */
dai-tdm-clk-sel = <0>;
clocks = <&clkc CLKID_MPLL0>;
//&clkaudio CLKID_AUDIO_TDMOUTA
//&clkaudio CLKID_AUDIO_MCLK_A>;
clock-names = "mpll0", "gate", "mclk";
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmin_a &tdmout_a &tdmout_a_data>;
};
@@ -779,8 +780,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <1>;
clocks = <&clkc CLKID_MPLL1>;
clock-names = "mpll1";
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;
};
@@ -791,8 +793,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL2>;
clock-names = "mpll2";
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c &tdmin_c>;
};
@@ -821,10 +824,15 @@
compatible = "amlogic, snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate", "pll_clk", "pdm_dclk", "pdm_sysclk";
&clkc CLKID_FCLK_DIV4
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"src_sysclk",
"src_dclk",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */

View File

@@ -342,7 +342,6 @@
meson_sound {
compatible = "amlogic, sound-card";
aml-audio-card,name = "AML-AXGSOUND";
//aml-audio-card,mclk-fs = <256>;
aml-audio-card,loopback = <&aml_loopback>;
@@ -360,6 +359,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&dummy_codec &dummy_codec>;
@@ -369,7 +369,7 @@
aml-audio-card,dai-link@1 {
format = "i2s";
mclk-fs = <256>;
continuous-clock;
//continuous-clock;
//bitclock-inversion;
//frame-inversion;
bitclock-master = <&aml_tdmb>;
@@ -402,6 +402,7 @@
dai-tdm-slot-rx-mask = <1 1>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
system-clock-frequency = <12288000>;
};
codec {
sound-dai = <&tas5707_36 &dummy_codec>;
@@ -767,10 +768,9 @@
dai-tdm-lane-slot-mask-out = <0 1>;
/* select tdm lr/bclk src, see aml_axg_tdm.c */
dai-tdm-clk-sel = <0>;
clocks = <&clkc CLKID_MPLL0>;
//&clkaudio CLKID_AUDIO_TDMOUTA
//&clkaudio CLKID_AUDIO_MCLK_A>;
clock-names = "mpll0", "gate", "mclk";
clocks = <&clkaudio CLKID_AUDIO_MCLK_A
&clkc CLKID_MPLL0>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmin_a &tdmout_a &tdmout_a_data>;
};
@@ -781,8 +781,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <1>;
clocks = <&clkc CLKID_MPLL1>;
clock-names = "mpll1";
clocks = <&clkaudio CLKID_AUDIO_MCLK_B
&clkc CLKID_MPLL1>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;
};
@@ -793,8 +794,9 @@
dai-tdm-lane-slot-mask-out = <1 0>;
dai-tdm-lane-slot-mask-in = <0 1>;
dai-tdm-clk-sel = <2>;
clocks = <&clkc CLKID_MPLL2>;
clock-names = "mpll2";
clocks = <&clkaudio CLKID_AUDIO_MCLK_C
&clkc CLKID_MPLL2>;
clock-names = "mclk", "clk_srcpll";
pinctrl-names = "tdm_pins";
pinctrl-0 = <&tdmc_mclk &tdmout_c &tdmin_c>;
};
@@ -825,10 +827,15 @@
compatible = "amlogic, snd-pdm";
#sound-dai-cells = <0>;
clocks = <&clkaudio CLKID_AUDIO_PDM
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate", "pll_clk", "pdm_dclk", "pdm_sysclk";
&clkc CLKID_FCLK_DIV4
&clkc CLKID_MPLL3
&clkaudio CLKID_AUDIO_PDMIN0
&clkaudio CLKID_AUDIO_PDMIN1>;
clock-names = "gate",
"src_sysclk",
"src_dclk",
"pdm_dclk",
"pdm_sysclk";
pinctrl-names = "pdm_pins";
pinctrl-0 = <&pdmin>;
filter_mode = <1>; /* mode 0~4, defalut:1 */

View File

@@ -171,8 +171,6 @@ static int aml_card_hw_params(struct snd_pcm_substream *substream,
mclk_fs = dai_props->mclk_fs;
if (mclk_fs) {
struct aml_dai *aml_codec_dai = &dai_props->codec_dai;
struct aml_dai *aml_cpu_dai = &dai_props->cpu_dai;
mclk = params_rate(params) * mclk_fs;
for (i = 0; i < rtd->num_codecs; i++) {
@@ -183,15 +181,6 @@ static int aml_card_hw_params(struct snd_pcm_substream *substream,
if (ret && ret != -ENOTSUPP)
goto err;
ret = snd_soc_dai_set_tdm_slot(codec_dai,
aml_codec_dai->tx_slot_mask,
aml_codec_dai->rx_slot_mask,
aml_codec_dai->slots,
aml_codec_dai->slot_width);
if (ret && ret != -ENOTSUPP) {
pr_err("aml-card: set_tdm_slot error\n");
goto err;
}
}
ret = snd_soc_dai_set_sysclk(cpu_dai, 0, mclk,
@@ -202,16 +191,6 @@ static int aml_card_hw_params(struct snd_pcm_substream *substream,
ret = snd_soc_dai_set_fmt(cpu_dai, dai_link->dai_fmt);
if (ret && ret != -ENOTSUPP)
goto err;
ret = snd_soc_dai_set_tdm_slot(cpu_dai,
aml_cpu_dai->tx_slot_mask,
aml_cpu_dai->rx_slot_mask,
aml_cpu_dai->slots,
aml_cpu_dai->slot_width);
if (ret && ret != -ENOTSUPP) {
pr_err("aml-card: set_tdm_slot error\n");
goto err;
}
}
return 0;
err:
@@ -239,7 +218,24 @@ static struct snd_soc_ops aml_card_ops = {
static int aml_card_dai_init(struct snd_soc_pcm_runtime *rtd)
{
struct aml_card_data *priv = snd_soc_card_get_drvdata(rtd->card);
int ret;
struct snd_soc_dai *codec = rtd->codec_dai;
struct snd_soc_dai *cpu = rtd->cpu_dai;
struct aml_dai_props *dai_props =
aml_priv_to_props(priv, rtd->num);
bool idle_clk = false;
int ret, i;
for (i = 0; i < rtd->num_codecs; i++) {
codec = rtd->codec_dais[i];
ret = aml_card_init_dai(codec, &dai_props->codec_dai);
if (ret < 0)
return ret;
}
ret = aml_card_init_dai(cpu, &dai_props->cpu_dai);
if (ret < 0)
return ret;
ret = aml_card_init_hp(rtd->card, &priv->hp_jack, PREFIX);
if (ret < 0)
@@ -249,6 +245,15 @@ static int aml_card_dai_init(struct snd_soc_pcm_runtime *rtd)
if (ret < 0)
return ret;
/* enable dai-link mclk when CONTINUOUS clk setted */
idle_clk = !!(rtd->dai_link->dai_fmt & SND_SOC_DAIFMT_CONT);
if (idle_clk && dai_props->cpu_dai.clk) {
clk_set_rate(dai_props->cpu_dai.clk, dai_props->cpu_dai.sysclk);
ret = clk_prepare_enable(dai_props->cpu_dai.clk);
if (ret)
return ret;
}
return 0;
}

View File

@@ -110,25 +110,25 @@ int aml_card_parse_clk(struct device_node *node,
struct aml_dai *aml_dai)
{
struct clk *clk;
u32 val;
u32 val = 0;
/*
* Parse dai->sysclk come from "clocks = <&xxx>"
* (if system has common clock)
* or "system-clock-frequency = <xxx>"
* or device's module clock.
* and "system-clock-frequency = <xxx>".
*/
clk = of_clk_get(node, 0);
if (!IS_ERR(clk)) {
aml_dai->sysclk = clk_get_rate(clk);
aml_dai->clk = clk;
} else if (!of_property_read_u32(node,
"system-clock-frequency", &val)) {
aml_dai->sysclk = val;
} else {
if (IS_ERR(clk))
clk = of_clk_get(dai_of_node, 0);
if (!IS_ERR(clk))
aml_dai->sysclk = clk_get_rate(clk);
if (!IS_ERR(clk)) {
of_property_read_u32(node,
"system-clock-frequency", &val);
if (val == 0)
val = clk_get_rate(clk);
aml_dai->clk = clk;
aml_dai->sysclk = val;
}
return 0;

View File

@@ -566,24 +566,23 @@ static int aml_pdm_dai_set_sysclk(struct snd_soc_dai *cpu_dai,
int clk_id, unsigned int freq, int dir)
{
struct aml_pdm *p_pdm = snd_soc_dai_get_drvdata(cpu_dai);
unsigned int pll_freq = 0;
unsigned int pll_freq = 0, src_dclk_freq = 0;
pll_freq = freq * 50;
if (pll_freq > 196608000)
pll_freq = 196608000;
pll_freq = clk_get_rate(p_pdm->clk_pll);
src_dclk_freq = clk_get_rate(p_pdm->src_dclk);
pr_info("%s freq:%d, pll_freq:%d, src_dclk_freq=%d\n",
__func__, freq, pll_freq, src_dclk_freq);
if (src_dclk_freq == 0)
clk_set_rate(p_pdm->src_dclk, 24576000);
pr_info("%s freq:%d, pll_freq:%d\n",
__func__, freq, pll_freq);
clk_set_rate(p_pdm->clk_pll, pll_freq);
clk_set_rate(p_pdm->clk_pdm_sysclk, pll_freq);
clk_set_rate(p_pdm->clk_pdm_sysclk, pll_freq/3);
if (pdm_dclk == 1)
clk_set_rate(p_pdm->clk_pdm_dclk, pll_freq / (64 * 3));
clk_set_rate(p_pdm->clk_pdm_dclk, 1024000);
else if (pdm_dclk == 2)
clk_set_rate(p_pdm->clk_pdm_dclk, pll_freq / (64 * 4));
clk_set_rate(p_pdm->clk_pdm_dclk, 768000);
else
clk_set_rate(p_pdm->clk_pdm_dclk, pll_freq / 64);
clk_set_rate(p_pdm->clk_pdm_dclk, 3072000);
return 0;
}
@@ -729,7 +728,7 @@ static int aml_pdm_platform_probe(struct platform_device *pdev)
return PTR_ERR(p_pdm->pdm_pins);
}
p_pdm->clk_pll = devm_clk_get(&pdev->dev, "pll_clk");
p_pdm->clk_pll = devm_clk_get(&pdev->dev, "src_sysclk");
if (IS_ERR(p_pdm->clk_pll)) {
dev_err(&pdev->dev,
"Can't retrieve pll clock\n");
@@ -745,6 +744,14 @@ static int aml_pdm_platform_probe(struct platform_device *pdev)
goto err;
}
p_pdm->src_dclk = devm_clk_get(&pdev->dev, "src_dclk");
if (IS_ERR(p_pdm->src_dclk)) {
dev_err(&pdev->dev,
"Can't retrieve data src clock\n");
ret = PTR_ERR(p_pdm->src_dclk);
goto err;
}
p_pdm->clk_pdm_dclk = devm_clk_get(&pdev->dev, "pdm_dclk");
if (IS_ERR(p_pdm->clk_pdm_dclk)) {
dev_err(&pdev->dev,
@@ -761,7 +768,7 @@ static int aml_pdm_platform_probe(struct platform_device *pdev)
goto err;
}
ret = clk_set_parent(p_pdm->clk_pdm_dclk, p_pdm->clk_pll);
ret = clk_set_parent(p_pdm->clk_pdm_dclk, p_pdm->src_dclk);
if (ret) {
dev_err(&pdev->dev,
"Can't set clk_pdm_dclk parent clock\n");

View File

@@ -45,6 +45,7 @@ struct aml_pdm {
struct pinctrl *pdm_pins;
struct clk *clk_gate;
struct clk *clk_pll;
struct clk *src_dclk;
struct clk *clk_pdm_sysclk;
struct clk *clk_pdm_dclk;
struct toddr *tddr;

View File

@@ -31,7 +31,7 @@ void aml_pdm_ctrl(
struct aml_audio_controller *actrl,
int bitdepth, int channels)
{
int mode, i, ch_mask = 0, sample_count = 28;
int mode, i, ch_mask = 0, sample_count = 23;
if (bitdepth == 32)
mode = 0;

View File

@@ -72,6 +72,7 @@ struct aml_tdm {
struct clk *clk;
struct clk *clk_gate;
struct clk *mclk;
bool contns_clk;
unsigned int id;
/* bclk src selection */
unsigned int clk_sel;
@@ -297,9 +298,9 @@ static int aml_dai_tdm_startup(struct snd_pcm_substream *substream,
struct aml_tdm *p_tdm = snd_soc_dai_get_drvdata(cpu_dai);
int ret;
ret = clk_prepare_enable(p_tdm->clk);
ret = clk_prepare_enable(p_tdm->mclk);
if (ret) {
pr_err("Can't enable mpll clock: %d\n", ret);
pr_err("Can't enable mclk: %d\n", ret);
goto err;
}
@@ -315,8 +316,7 @@ static void aml_dai_tdm_shutdown(struct snd_pcm_substream *substream,
struct aml_tdm *p_tdm = snd_soc_dai_get_drvdata(cpu_dai);
/* disable clock and gate */
clk_disable_unprepare(p_tdm->clk);
clk_disable_unprepare(p_tdm->mclk);
}
static int aml_dai_tdm_prepare(struct snd_pcm_substream *substream,
@@ -535,7 +535,6 @@ static int aml_dai_tdm_hw_params(struct snd_pcm_substream *substream,
unsigned int channels = params_channels(params);
int ret;
ret = pcm_setting_init(setting, rate, channels);
if (ret)
return ret;
@@ -580,6 +579,16 @@ static int aml_dai_set_tdm_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
pr_info("asoc aml_dai_set_tdm_fmt, %#x, %p, id(%d), clksel(%d)\n",
fmt, p_tdm, p_tdm->id, p_tdm->clk_sel);
switch (fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
case SND_SOC_DAIFMT_CONT:
p_tdm->contns_clk = true;
break;
case SND_SOC_DAIFMT_GATED:
p_tdm->contns_clk = false;
break;
default:
return -EINVAL;
}
aml_tdm_set_format(p_tdm->actrl,
&(p_tdm->setting), p_tdm->clk_sel, p_tdm->id, fmt,
@@ -604,47 +613,21 @@ static unsigned int aml_mpll_mclk_ratio(unsigned int freq)
break;
}
pr_info("TDM mpll/mclk = %d\n", ratio);
return ratio;
}
static void aml_tdm_set_mclk(struct aml_tdm *p_tdm)
{
struct aml_audio_controller *actrl = p_tdm->actrl;
unsigned int clk_id, offset;
unsigned int mpll_freq = 0, sysclk_freq = 0;
offset = p_tdm->clk_sel;
/* slave mode */
if (offset > MASTER_F)
return;
clk_id = p_tdm->id;
sysclk_freq = p_tdm->setting.sysclk;
if (sysclk_freq) {
unsigned int mul = aml_mpll_mclk_ratio(sysclk_freq);
mpll_freq = sysclk_freq * mul;
clk_set_rate(p_tdm->clk, mpll_freq);
aml_audiobus_write(actrl, EE_AUDIO_MCLK_A_CTRL + offset,
1 << 31 | //clk enable
clk_id << 24 | // clk src
(mul - 1)); //clk_div mclk
}
}
static int aml_dai_set_tdm_sysclk(struct snd_soc_dai *cpu_dai,
int clk_id, unsigned int freq, int dir)
{
struct aml_tdm *p_tdm = snd_soc_dai_get_drvdata(cpu_dai);
unsigned int ratio = aml_mpll_mclk_ratio(freq);
pr_info("aml_dai_set_tdm_sysclk freq(%d), mpll/mclk(%d)\n",
freq, ratio);
p_tdm->setting.sysclk = freq;
pr_info("aml_dai_set_tdm_sysclk, %d, %d, %d\n",
clk_id, freq, dir);
aml_tdm_set_mclk(p_tdm);
clk_set_rate(p_tdm->clk, freq * ratio);
clk_set_rate(p_tdm->mclk, freq);
return 0;
}
@@ -837,12 +820,11 @@ static int aml_tdm_platform_probe(struct platform_device *pdev)
if (!p_tdm)
return -ENOMEM;
/* get tdm device id */
id = of_match_device(of_match_ptr(aml_tdm_device_id), dev);
pr_info("id = %lu\n", (unsigned long)id->data);
iddata = (unsigned long)id->data;
p_tdm->id = (unsigned int)iddata;
pr_info("%s, tdm ID = %u\n", __func__, p_tdm->id);
/* get audio controller */
node_prt = of_get_parent(node);
@@ -874,42 +856,20 @@ static int aml_tdm_platform_probe(struct platform_device *pdev)
if (ret < 0)
p_tdm->setting.lane_mask_out = 0x1;
/* get sysclk source */
if (iddata == TDM_A) {
p_tdm->clk = devm_clk_get(&pdev->dev, "mpll0");
if (IS_ERR(p_tdm->clk)) {
dev_err(&pdev->dev, "Can't retrieve mpll0 clock\n");
return PTR_ERR(p_tdm->clk);
}
#if 0
p_tdm->clk_gate = devm_clk_get(&pdev->dev, "gate");
if (IS_ERR(p_tdm->clk_gate)) {
dev_err(&pdev->dev, "Can't retrieve clockgate\n");
return PTR_ERR(p_tdm->clk_gate);
}
p_tdm->mclk = devm_clk_get(&pdev->dev, "mclk");
if (IS_ERR(p_tdm->mclk)) {
dev_err(&pdev->dev, "Can't retrieve mclk\n");
return PTR_ERR(p_tdm->mclk);
}
#endif
} else if (iddata == TDM_B) {
p_tdm->clk = devm_clk_get(&pdev->dev, "mpll1");
if (IS_ERR(p_tdm->clk)) {
dev_err(&pdev->dev, "Can't retrieve mpll1 clock\n");
return PTR_ERR(p_tdm->clk);
}
} else if (iddata == TDM_C) {
p_tdm->clk = devm_clk_get(&pdev->dev, "mpll2");
if (IS_ERR(p_tdm->clk)) {
dev_err(&pdev->dev, "Can't retrieve mpll2 clock\n");
return PTR_ERR(p_tdm->clk);
}
} else {
return -EINVAL;
p_tdm->clk = devm_clk_get(&pdev->dev, "clk_srcpll");
if (IS_ERR(p_tdm->clk)) {
dev_err(&pdev->dev, "Can't retrieve mpll2 clock\n");
return PTR_ERR(p_tdm->clk);
}
p_tdm->mclk = devm_clk_get(&pdev->dev, "mclk");
if (IS_ERR(p_tdm->mclk)) {
dev_err(&pdev->dev, "Can't retrieve mclk\n");
return PTR_ERR(p_tdm->mclk);
}
clk_set_parent(p_tdm->mclk, p_tdm->clk);
/* complete mclk for tdm */
if (get_meson_cpu_version(MESON_CPU_VERSION_LVL_MINOR) == 0xa)
meson_clk_measure((1<<16) | 0x67);
@@ -930,8 +890,6 @@ static int aml_tdm_platform_probe(struct platform_device *pdev)
return ret;
}
pr_info("%s, try register soc platform\n", __func__);
return devm_snd_soc_register_platform(dev, &aml_tdm_platform);
}