summaryrefslogtreecommitdiff
authorShuai Li <shuai.li@amlogic.com>2019-09-06 08:26:02 (GMT)
committer Tao Zeng <tao.zeng@amlogic.com>2019-09-09 09:23:40 (GMT)
commit48f15a63dba2a75fa12873fd8ed9d21662b416c2 (patch)
treea44572b924caf2d47973a7ad89f4295548e809e1
parent39c3bf33567168f4bc292f89442faf6c23e7ef64 (diff)
downloadcommon-48f15a63dba2a75fa12873fd8ed9d21662b416c2.zip
common-48f15a63dba2a75fa12873fd8ed9d21662b416c2.tar.gz
common-48f15a63dba2a75fa12873fd8ed9d21662b416c2.tar.bz2
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 <shuai.li@amlogic.com>
Diffstat
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905d3_ac200.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905d3_ac202.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905d3_skt.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905x3_ac213.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905x3_ac214.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/sm1_s905y3_ac223.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/tm2_t962e2_ab311.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/tm2_t962e2_ab319.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/tm2_t962x3_ab301.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/tm2_t962x3_ab309.dts3
-rw-r--r--arch/arm/boot/dts/amlogic/tm2_t962x3_t312.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_buildroot.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905d3_ac200_drm_buildroot.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905d3_skt.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213_buildroot.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905x3_ac214_buildroot.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/sm1_s905y3_ac223.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/tm2_t962e2_ab311.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/tm2_t962e2_ab319.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/tm2_t962x3_ab301.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/tm2_t962x3_ab309.dts3
-rw-r--r--arch/arm64/boot/dts/amlogic/tm2_t962x3_t312.dts3
-rw-r--r--include/dt-bindings/clock/amlogic,sm1-audio-clk.h5
-rw-r--r--include/dt-bindings/clock/amlogic,tm2-audio-clk.h5
-rw-r--r--sound/soc/amlogic/auge/audio_clks.h9
-rw-r--r--sound/soc/amlogic/auge/sm1,clocks.c24
-rw-r--r--sound/soc/amlogic/auge/tdm.c49
-rw-r--r--sound/soc/amlogic/auge/tdm_hw.c59
-rw-r--r--sound/soc/amlogic/auge/tdm_hw.h4
-rw-r--r--sound/soc/amlogic/auge/tm2,clocks.c24
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;
}