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>
This commit is contained in:
Shuai Li
2019-09-06 16:26:02 +08:00
committed by Tao Zeng
parent 39c3bf3356
commit 48f15a63db
40 changed files with 199 additions and 76 deletions

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;*/

View File

@@ -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>;*/

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;*/

View File

@@ -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>;*/

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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>;

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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";

View File

@@ -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__ */

View File

@@ -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__ */

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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(

View File

@@ -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;
}