From 48f15a63dba2a75fa12873fd8ed9d21662b416c2 Mon Sep 17 00:00:00 2001 From: Shuai Li Date: Fri, 6 Sep 2019 16:26:02 +0800 Subject: [PATCH] audio: mclk pad0 doesn't output clk [1/1] PD#OTT-5603 Problem: Configurate GPIO_AO 9 as mclk_0,it doesn't work. Solution: From SM1, the mclk pad register is changed. Using standard clk tree to make it compitable. Verify: TM2, SM1. Change-Id: I8d53296297536c90768495232570f33fc89db131 Signed-off-by: Shuai Li --- arch/arm/boot/dts/amlogic/sm1_s905d3_ac200.dts | 3 +- .../dts/amlogic/sm1_s905d3_ac200_buildroot.dts | 3 +- .../dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts | 3 +- arch/arm/boot/dts/amlogic/sm1_s905d3_ac202.dts | 3 +- arch/arm/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts | 3 +- arch/arm/boot/dts/amlogic/sm1_s905d3_skt.dts | 3 +- arch/arm/boot/dts/amlogic/sm1_s905x3_ac213.dts | 3 +- .../dts/amlogic/sm1_s905x3_ac213_buildroot.dts | 3 +- arch/arm/boot/dts/amlogic/sm1_s905x3_ac214.dts | 3 +- .../dts/amlogic/sm1_s905x3_ac214_buildroot.dts | 3 +- arch/arm/boot/dts/amlogic/sm1_s905y3_ac223.dts | 3 +- arch/arm/boot/dts/amlogic/tm2_t962e2_ab311.dts | 3 +- arch/arm/boot/dts/amlogic/tm2_t962e2_ab319.dts | 3 +- arch/arm/boot/dts/amlogic/tm2_t962x3_ab301.dts | 3 +- arch/arm/boot/dts/amlogic/tm2_t962x3_ab309.dts | 3 +- arch/arm/boot/dts/amlogic/tm2_t962x3_t312.dts | 3 +- arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts | 3 +- .../dts/amlogic/sm1_s905d3_ac200_buildroot.dts | 3 +- .../dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts | 3 +- arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202.dts | 3 +- .../arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts | 3 +- arch/arm64/boot/dts/amlogic/sm1_s905d3_skt.dts | 3 +- arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213.dts | 3 +- .../dts/amlogic/sm1_s905x3_ac213_buildroot.dts | 3 +- arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214.dts | 3 +- .../dts/amlogic/sm1_s905x3_ac214_buildroot.dts | 3 +- arch/arm64/boot/dts/amlogic/sm1_s905y3_ac223.dts | 3 +- arch/arm64/boot/dts/amlogic/tm2_t962e2_ab311.dts | 3 +- arch/arm64/boot/dts/amlogic/tm2_t962e2_ab319.dts | 3 +- arch/arm64/boot/dts/amlogic/tm2_t962x3_ab301.dts | 3 +- arch/arm64/boot/dts/amlogic/tm2_t962x3_ab309.dts | 3 +- arch/arm64/boot/dts/amlogic/tm2_t962x3_t312.dts | 3 +- include/dt-bindings/clock/amlogic,sm1-audio-clk.h | 5 +- include/dt-bindings/clock/amlogic,tm2-audio-clk.h | 5 +- sound/soc/amlogic/auge/audio_clks.h | 9 ++++ sound/soc/amlogic/auge/sm1,clocks.c | 24 +++++++++ sound/soc/amlogic/auge/tdm.c | 49 +++++++++++++----- sound/soc/amlogic/auge/tdm_hw.c | 59 +++++++++++----------- sound/soc/amlogic/auge/tdm_hw.h | 4 ++ sound/soc/amlogic/auge/tm2,clocks.c | 24 +++++++++ 40 files changed, 199 insertions(+), 76 deletions(-) diff --git a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200.dts b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200.dts index 65b9c7b..f3feccb 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200.dts @@ -1152,10 +1152,11 @@ //dai-tdm-lane-slot-mask-out = <1 1 1 1 1 1 1 1>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts index 45559f2..bfbe926 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts @@ -1214,10 +1214,11 @@ //dai-tdm-lane-slot-mask-out = <1 1 1 1 1 1 1 1>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts index 6ed20c3..64b01a4 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts @@ -1230,10 +1230,11 @@ //dai-tdm-lane-slot-mask-out = <1 1 1 1 1 1 1 1>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202.dts b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202.dts index 87612e7..517ff31 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202.dts @@ -1162,10 +1162,11 @@ //dai-tdm-lane-slot-mask-out = <1 1 1 1 1 1 1 1>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; /*pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;*/ diff --git a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts index 3a1d62a..a1b00c6 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts @@ -1162,10 +1162,11 @@ //dai-tdm-lane-slot-mask-out = <1 1 1 1 1 1 1 1>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; /*pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;*/ diff --git a/arch/arm/boot/dts/amlogic/sm1_s905d3_skt.dts b/arch/arm/boot/dts/amlogic/sm1_s905d3_skt.dts index fc1418e..1c42f7b 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905d3_skt.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905d3_skt.dts @@ -1157,10 +1157,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213.dts b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213.dts index ab3752a..1821df3 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213.dts @@ -1127,10 +1127,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts index aecc964..a7e4029 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts @@ -1189,10 +1189,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214.dts b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214.dts index 9aadb9a..c86161c 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214.dts @@ -1114,10 +1114,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts index 1cf5f7c..7eef34e 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts @@ -1189,10 +1189,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/sm1_s905y3_ac223.dts b/arch/arm/boot/dts/amlogic/sm1_s905y3_ac223.dts index 8ce40ee..a977322 100644 --- a/arch/arm/boot/dts/amlogic/sm1_s905y3_ac223.dts +++ b/arch/arm/boot/dts/amlogic/sm1_s905y3_ac223.dts @@ -1073,10 +1073,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm/boot/dts/amlogic/tm2_t962e2_ab311.dts b/arch/arm/boot/dts/amlogic/tm2_t962e2_ab311.dts index ccc6945..c02676d 100644 --- a/arch/arm/boot/dts/amlogic/tm2_t962e2_ab311.dts +++ b/arch/arm/boot/dts/amlogic/tm2_t962e2_ab311.dts @@ -1390,10 +1390,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm/boot/dts/amlogic/tm2_t962e2_ab319.dts b/arch/arm/boot/dts/amlogic/tm2_t962e2_ab319.dts index 1a0045e..79b1336 100644 --- a/arch/arm/boot/dts/amlogic/tm2_t962e2_ab319.dts +++ b/arch/arm/boot/dts/amlogic/tm2_t962e2_ab319.dts @@ -1323,10 +1323,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm/boot/dts/amlogic/tm2_t962x3_ab301.dts b/arch/arm/boot/dts/amlogic/tm2_t962x3_ab301.dts index c8c0803..5604baa 100644 --- a/arch/arm/boot/dts/amlogic/tm2_t962x3_ab301.dts +++ b/arch/arm/boot/dts/amlogic/tm2_t962x3_ab301.dts @@ -1393,10 +1393,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm/boot/dts/amlogic/tm2_t962x3_ab309.dts b/arch/arm/boot/dts/amlogic/tm2_t962x3_ab309.dts index 9c82e09..e07ecc4 100644 --- a/arch/arm/boot/dts/amlogic/tm2_t962x3_ab309.dts +++ b/arch/arm/boot/dts/amlogic/tm2_t962x3_ab309.dts @@ -1324,10 +1324,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm/boot/dts/amlogic/tm2_t962x3_t312.dts b/arch/arm/boot/dts/amlogic/tm2_t962x3_t312.dts index 5e0e86e..156201e 100644 --- a/arch/arm/boot/dts/amlogic/tm2_t962x3_t312.dts +++ b/arch/arm/boot/dts/amlogic/tm2_t962x3_t312.dts @@ -1374,10 +1374,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts index 8e5251a..9a6b330 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts @@ -1149,10 +1149,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts index cdff1ae..458771b 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts @@ -1211,10 +1211,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts index 149c166..dbf3b93 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts @@ -1227,10 +1227,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202.dts index 593c201..e1721ef 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202.dts @@ -1161,10 +1161,11 @@ //dai-tdm-lane-slot-mask-out = <1 1 1 1 1 1 1 1>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; /*pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;*/ diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts index 250033c..14a54f3 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts @@ -1161,10 +1161,11 @@ //dai-tdm-lane-slot-mask-out = <1 1 1 1 1 1 1 1>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; /*pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>;*/ diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905d3_skt.dts b/arch/arm64/boot/dts/amlogic/sm1_s905d3_skt.dts index 3e5f31a..8525f0a 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905d3_skt.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905d3_skt.dts @@ -1155,10 +1155,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213.dts b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213.dts index fdb83a7..2da82d4 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213.dts @@ -1191,10 +1191,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts index 473d95e..d06841455 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts @@ -1266,10 +1266,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214.dts b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214.dts index 181a724..0a27970 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214.dts @@ -1179,10 +1179,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts index 728ef44..6cc423f 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts @@ -1266,10 +1266,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/sm1_s905y3_ac223.dts b/arch/arm64/boot/dts/amlogic/sm1_s905y3_ac223.dts index 61b6e14..08843ba 100644 --- a/arch/arm64/boot/dts/amlogic/sm1_s905y3_ac223.dts +++ b/arch/arm64/boot/dts/amlogic/sm1_s905y3_ac223.dts @@ -1137,10 +1137,11 @@ dai-tdm-lane-slot-mask-out = <1 0 0 0>; dai-tdm-clk-sel = <1>; clocks = <&clkaudio CLKID_AUDIO_MCLK_B + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL1 &clkc CLKID_MPLL0 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; pinctrl-0 = <&tdmb_mclk &tdmout_b &tdmin_b>; diff --git a/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab311.dts b/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab311.dts index a703d42..5362576 100644 --- a/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab311.dts +++ b/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab311.dts @@ -1385,10 +1385,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab319.dts b/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab319.dts index 31ea486..7caa66d 100644 --- a/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab319.dts +++ b/arch/arm64/boot/dts/amlogic/tm2_t962e2_ab319.dts @@ -1323,10 +1323,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab301.dts b/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab301.dts index bed8523..ab3410f 100644 --- a/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab301.dts +++ b/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab301.dts @@ -1390,10 +1390,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab309.dts b/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab309.dts index 3cb3fee..9c0961f 100644 --- a/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab309.dts +++ b/arch/arm64/boot/dts/amlogic/tm2_t962x3_ab309.dts @@ -1324,10 +1324,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/arch/arm64/boot/dts/amlogic/tm2_t962x3_t312.dts b/arch/arm64/boot/dts/amlogic/tm2_t962x3_t312.dts index 8e1da08..2fe848c 100644 --- a/arch/arm64/boot/dts/amlogic/tm2_t962x3_t312.dts +++ b/arch/arm64/boot/dts/amlogic/tm2_t962x3_t312.dts @@ -1376,10 +1376,11 @@ dai-tdm-clk-sel = <0>; clocks = <&clkaudio CLKID_AUDIO_MCLK_A + &clkaudio CLKID_AUDIO_MCLK_PAD0 &clkc CLKID_MPLL0 &clkc CLKID_MPLL1 &clkaudio CLKID_AUDIO_SPDIFOUT_A>; - clock-names = "mclk", "clk_srcpll", + clock-names = "mclk", "mclk_pad", "clk_srcpll", "samesource_srcpll", "samesource_clk"; pinctrl-names = "tdm_pins"; diff --git a/include/dt-bindings/clock/amlogic,sm1-audio-clk.h b/include/dt-bindings/clock/amlogic,sm1-audio-clk.h index 9ec20b6..e745f64 100644 --- a/include/dt-bindings/clock/amlogic,sm1-audio-clk.h +++ b/include/dt-bindings/clock/amlogic,sm1-audio-clk.h @@ -88,5 +88,8 @@ #define CLKID_EARCRX_CMDC (MCLK_BASE + 20) #define CLKID_EARCRX_DMAC (MCLK_BASE + 21) -#define NUM_AUDIO_CLKS (MCLK_BASE + 22) +#define CLKID_AUDIO_MCLK_PAD0 (MCLK_BASE + 22) +#define CLKID_AUDIO_MCLK_PAD1 (MCLK_BASE + 23) + +#define NUM_AUDIO_CLKS (MCLK_BASE + 24) #endif /* __SM1_AUDIO_CLK_H__ */ diff --git a/include/dt-bindings/clock/amlogic,tm2-audio-clk.h b/include/dt-bindings/clock/amlogic,tm2-audio-clk.h index a70cf1e..458ca72 100644 --- a/include/dt-bindings/clock/amlogic,tm2-audio-clk.h +++ b/include/dt-bindings/clock/amlogic,tm2-audio-clk.h @@ -93,5 +93,8 @@ #define CLKID_EARCRX_CMDC (MCLK_BASE + 20) #define CLKID_EARCRX_DMAC (MCLK_BASE + 21) -#define NUM_AUDIO_CLKS (MCLK_BASE + 22) +#define CLKID_AUDIO_MCLK_PAD0 (MCLK_BASE + 22) +#define CLKID_AUDIO_MCLK_PAD1 (MCLK_BASE + 23) + +#define NUM_AUDIO_CLKS (MCLK_BASE + 24) #endif /* __TM2_AUDIO_CLK_H__ */ diff --git a/sound/soc/amlogic/auge/audio_clks.h b/sound/soc/amlogic/auge/audio_clks.h index e0dbefd..cafc7c3 100644 --- a/sound/soc/amlogic/auge/audio_clks.h +++ b/sound/soc/amlogic/auge/audio_clks.h @@ -84,6 +84,15 @@ do { \ &_name##_gate.hw, &clk_gate_ops, \ CLK_SET_RATE_NO_REPARENT) +#define REGISTER_CLK_COM_PARENTS(_name, pnames) \ + clk_register_composite(NULL, #_name, \ + pnames##_parent_names, \ + ARRAY_SIZE(pnames##_parent_names), \ + &_name##_mux.hw, &clk_mux_ops, \ + &_name##_div.hw, &clk_divider_ops, \ + &_name##_gate.hw, &clk_gate_ops, \ + CLK_SET_RATE_NO_REPARENT) + struct audio_clk_init { int clk_num; int (*clk_gates)(struct clk **clks, void __iomem *iobase); diff --git a/sound/soc/amlogic/auge/sm1,clocks.c b/sound/soc/amlogic/auge/sm1,clocks.c index 3190c70..7a2321d 100644 --- a/sound/soc/amlogic/auge/sm1,clocks.c +++ b/sound/soc/amlogic/auge/sm1,clocks.c @@ -32,6 +32,11 @@ static const char *const audioclk_parent_names[] = { "i_slv_sclk_d", "i_slv_sclk_e", "i_slv_sclk_f", "i_slv_sclk_g", "i_slv_sclk_h", "i_slv_sclk_i", "i_slv_sclk_j"}; +static const char *const mclk_pad_parent_names[] = { + "mclk_a", "mclk_b", "mclk_c", + "mclk_d", "mclk_e", "mclk_f" +}; + CLOCK_GATE(audio_ddr_arb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 0); CLOCK_GATE(audio_pdm, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 1); CLOCK_GATE(audio_tdmina, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 2); @@ -192,6 +197,15 @@ CLOCK_COM_GATE(mclk_d, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_D_CTRL(1)), 31); CLOCK_COM_MUX(mclk_e, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_E_CTRL(1)), 0x7, 24); CLOCK_COM_DIV(mclk_e, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_E_CTRL(1)), 0, 16); CLOCK_COM_GATE(mclk_e, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_E_CTRL(1)), 31); +/* mclk_pad0 */ +CLOCK_COM_MUX(mclk_pad0, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 0x7, 8); +CLOCK_COM_DIV(mclk_pad0, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 0, 8); +CLOCK_COM_GATE(mclk_pad0, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 15); +/* mclk_pad1 */ +CLOCK_COM_MUX(mclk_pad1, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 0x7, 24); +CLOCK_COM_DIV(mclk_pad1, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 16, 8); +CLOCK_COM_GATE(mclk_pad1, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 31); + /* mclk_f */ CLOCK_COM_MUX(mclk_f, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_F_CTRL(1)), 0x7, 24); CLOCK_COM_DIV(mclk_f, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_F_CTRL(1)), 0, 16); @@ -367,6 +381,16 @@ static int sm1_clks_init(struct clk **clks, void __iomem *iobase) clks[CLKID_EARCRX_DMAC] = REGISTER_CLK_COM(earcrx_dmac); WARN_ON(IS_ERR_OR_NULL(clks[CLKID_EARCRX_DMAC])); + IOMAP_COM_CLK(mclk_pad0, iobase); + clks[CLKID_AUDIO_MCLK_PAD0] = + REGISTER_CLK_COM_PARENTS(mclk_pad0, mclk_pad); + WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_PAD0])); + + IOMAP_COM_CLK(mclk_pad1, iobase); + clks[CLKID_AUDIO_MCLK_PAD1] = + REGISTER_CLK_COM_PARENTS(mclk_pad1, mclk_pad); + WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_PAD1])); + return 0; } diff --git a/sound/soc/amlogic/auge/tdm.c b/sound/soc/amlogic/auge/tdm.c index 4cf0daf..3e3c051 100644 --- a/sound/soc/amlogic/auge/tdm.c +++ b/sound/soc/amlogic/auge/tdm.c @@ -85,6 +85,8 @@ struct aml_tdm { struct clk *clk; struct clk *clk_gate; struct clk *mclk; + /* mclk mux out to pad */ + struct clk *mclk2pad; struct clk *samesrc_srcpll; struct clk *samesrc_clk; bool contns_clk; @@ -909,12 +911,17 @@ static int aml_tdm_set_clk_pad(struct aml_tdm *p_tdm) if (p_tdm->chipinfo && (!p_tdm->chipinfo->mclkpad_no_offset)) mpad_offset = 1; - aml_tdm_clk_pad_select(p_tdm->actrl, - p_tdm->mclk_pad, - mpad_offset, - p_tdm->id, - p_tdm->id, - p_tdm->clk_sel); + if (p_tdm->mclk_pad >= 0) { + aml_tdm_mclk_pad_select(p_tdm->actrl, + p_tdm->mclk_pad, + mpad_offset, + p_tdm->clk_sel); + } + + aml_tdm_sclk_pad_select(p_tdm->actrl, + mpad_offset, + p_tdm->id, + p_tdm->id); return 0; } @@ -1659,7 +1666,7 @@ static int aml_tdm_platform_probe(struct platform_device *pdev) ret = of_parse_tdm_lane_slot_out(node, &p_tdm->setting.lane_mask_out); if (ret < 0) - p_tdm->setting.lane_mask_out = 0x0; + p_tdm->setting.lane_mask_out = 0x1; /* get tdm lanes oe info. if not, set to default 0 */ ret = of_parse_tdm_lane_oe_slot_in(node, @@ -1701,6 +1708,28 @@ static int aml_tdm_platform_probe(struct platform_device *pdev) return ret; } + /* clk tree style after SM1, instead of legacy prop */ + p_tdm->mclk2pad = devm_clk_get(&pdev->dev, "mclk_pad"); + if (!IS_ERR(p_tdm->mclk2pad)) { + ret = clk_set_parent(p_tdm->mclk2pad, p_tdm->mclk); + if (ret) { + dev_err(&pdev->dev, "Can't set tdm mclk_pad parent\n"); + return -EINVAL; + } + clk_prepare_enable(p_tdm->mclk2pad); + p_tdm->mclk_pad = -1; + } else { + /* mclk pad ctrl */ + ret = of_property_read_u32(node, "mclk_pad", + &p_tdm->mclk_pad); + if (ret < 0) { + /* No mclk in defalut if chip needs mclk pad mux. */ + p_tdm->mclk_pad = -1; + dev_warn_once(&pdev->dev, + "neither mclk_pad nor mclk2pad set\n"); + } + } + /* complete mclk for tdm */ if (get_meson_cpu_version(MESON_CPU_VERSION_LVL_MINOR) == 0xa) meson_clk_measure((1<<16) | 0x67); @@ -1723,12 +1752,6 @@ static int aml_tdm_platform_probe(struct platform_device *pdev) if (p_tdm->start_clk_enable == 1) aml_set_default_tdm_clk(p_tdm); - /* mclk pad ctrl */ - ret = of_property_read_u32(node, "mclk_pad", - &p_tdm->mclk_pad); - if (ret < 0) - p_tdm->mclk_pad = -1; /* not use mclk in defalut. */ - p_tdm->dev = dev; /* For debug to disable share buffer */ p_tdm->en_share = 1; diff --git a/sound/soc/amlogic/auge/tdm_hw.c b/sound/soc/amlogic/auge/tdm_hw.c index 96e8c02..3c557cc 100644 --- a/sound/soc/amlogic/auge/tdm_hw.c +++ b/sound/soc/amlogic/auge/tdm_hw.c @@ -705,39 +705,40 @@ void aml_tdmout_enable_gain(int tdmout_id, int en) audiobus_update_bits(reg, 0x1 << 26, !!en << 26); } -void aml_tdm_clk_pad_select( - struct aml_audio_controller *actrl, - int mpad, int mpad_offset, int mclk_sel, - int tdm_index, int clk_sel) +void aml_tdm_mclk_pad_select(struct aml_audio_controller *actrl, + int mpad, int mpad_offset, int mclk_sel) { unsigned int reg, mask_offset, val_offset; - if (mpad >= 0) { - switch (mpad) { - case 0: - mask_offset = 0x7 << 0; - val_offset = mclk_sel << 0; - break; - case 1: - mask_offset = 0x7 << 4; - val_offset = mclk_sel << 4; - break; - default: - mask_offset = 0; - val_offset = 0; - pr_info("unknown tdm mpad:%d\n", mpad); - break; - } + switch (mpad) { + case 0: + mask_offset = 0x7 << 0; + val_offset = mclk_sel << 0; + break; + case 1: + mask_offset = 0x7 << 4; + val_offset = mclk_sel << 4; + break; + default: + mask_offset = 0x7 << 4; + val_offset = 0; + pr_info("unknown tdm mpad:%d\n", mpad); + break; + } - reg = EE_AUDIO_MST_PAD_CTRL0(mpad_offset); - if (actrl) - aml_audiobus_update_bits(actrl, reg, - mask_offset, val_offset); - else - audiobus_update_bits(reg, - mask_offset, val_offset); - } else - pr_warn("mclk is not configured\n"); + reg = EE_AUDIO_MST_PAD_CTRL0(mpad_offset); + if (actrl) + aml_audiobus_update_bits(actrl, reg, + mask_offset, val_offset); + else + audiobus_update_bits(reg, + mask_offset, val_offset); +} + +void aml_tdm_sclk_pad_select(struct aml_audio_controller *actrl, + int mpad_offset, int tdm_index, int clk_sel) +{ + unsigned int reg, mask_offset, val_offset; reg = EE_AUDIO_MST_PAD_CTRL1(mpad_offset); switch (tdm_index) { diff --git a/sound/soc/amlogic/auge/tdm_hw.h b/sound/soc/amlogic/auge/tdm_hw.h index 656fa29..6e11077 100644 --- a/sound/soc/amlogic/auge/tdm_hw.h +++ b/sound/soc/amlogic/auge/tdm_hw.h @@ -150,6 +150,10 @@ extern void aml_tdm_clk_pad_select( struct aml_audio_controller *actrl, int mpad, int mpad_offset, int mclk_sel, int tdm_index, int clk_sel); +void aml_tdm_mclk_pad_select(struct aml_audio_controller *actrl, + int mpad, int mpad_offset, int mclk_sel); +void aml_tdm_sclk_pad_select(struct aml_audio_controller *actrl, + int mpad_offset, int tdm_index, int clk_sel); extern void i2s_to_hdmitx_ctrl(int tdm_index); void aml_tdm_mute_playback( diff --git a/sound/soc/amlogic/auge/tm2,clocks.c b/sound/soc/amlogic/auge/tm2,clocks.c index f21e9f2..a188d2a 100644 --- a/sound/soc/amlogic/auge/tm2,clocks.c +++ b/sound/soc/amlogic/auge/tm2,clocks.c @@ -32,6 +32,11 @@ static const char *const audioclk_parent_names[] = { "i_slv_sclk_d", "i_slv_sclk_e", "i_slv_sclk_f", "i_slv_sclk_g", "i_slv_sclk_h", "i_slv_sclk_i", "i_slv_sclk_j"}; +static const char *const mclk_pad_parent_names[] = { + "mclk_a", "mclk_b", "mclk_c", + "mclk_d", "mclk_e", "mclk_f" +}; + CLOCK_GATE(audio_ddr_arb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 0); CLOCK_GATE(audio_pdm, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 1); CLOCK_GATE(audio_tdmina, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 2); @@ -212,6 +217,15 @@ CLOCK_COM_GATE(mclk_e, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_E_CTRL(1)), 31); CLOCK_COM_MUX(mclk_f, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_F_CTRL(1)), 0x7, 24); CLOCK_COM_DIV(mclk_f, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_F_CTRL(1)), 0, 16); CLOCK_COM_GATE(mclk_f, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_F_CTRL(1)), 31); +/* mclk_pad0 */ +CLOCK_COM_MUX(mclk_pad0, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 0x7, 8); +CLOCK_COM_DIV(mclk_pad0, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 0, 8); +CLOCK_COM_GATE(mclk_pad0, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 15); +/* mclk_pad1 */ +CLOCK_COM_MUX(mclk_pad1, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 0x7, 24); +CLOCK_COM_DIV(mclk_pad1, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 16, 8); +CLOCK_COM_GATE(mclk_pad1, AUD_ADDR_OFFSET(EE_AUDIO_MST_PAD_CTRL0(1)), 31); + /* spdifin */ CLOCK_COM_MUX(spdifin, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFIN_CTRL), 0x7, 24); CLOCK_COM_DIV(spdifin, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFIN_CTRL), 0, 8); @@ -383,6 +397,16 @@ static int tm2_clks_init(struct clk **clks, void __iomem *iobase) clks[CLKID_EARCRX_DMAC] = REGISTER_CLK_COM(earcrx_dmac); WARN_ON(IS_ERR_OR_NULL(clks[CLKID_EARCRX_DMAC])); + IOMAP_COM_CLK(mclk_pad0, iobase); + clks[CLKID_AUDIO_MCLK_PAD0] = + REGISTER_CLK_COM_PARENTS(mclk_pad0, mclk_pad); + WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_PAD0])); + + IOMAP_COM_CLK(mclk_pad1, iobase); + clks[CLKID_AUDIO_MCLK_PAD1] = + REGISTER_CLK_COM_PARENTS(mclk_pad1, mclk_pad); + WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_PAD1])); + return 0; } -- 2.7.4