mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
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:
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user