audio: TM2 audio basic function bringup [1/1]
authorZhe Wang <Zhe.Wang@amlogic.com>
Fri, 5 Apr 2019 06:42:48 +0000 (14:42 +0800)
committerJianxiong Pan <jianxiong.pan@amlogic.com>
Thu, 11 Apr 2019 07:42:33 +0000 (15:42 +0800)
PD#SWPL-6721

Problem:
TM2 bringup

Solution:
audio basic function bringup

Verify:
Verified on T962e2_ab311

Change-Id: Ic48ded3964ea87e40c4d683d71a50bbdc1975f91
Signed-off-by: Zhe Wang <Zhe.Wang@amlogic.com>
23 files changed:
MAINTAINERS
arch/arm/boot/dts/amlogic/mesontm2.dtsi
arch/arm/boot/dts/amlogic/tm2_t962e2_ab311.dts
arch/arm/boot/dts/amlogic/tm2_t962e2_ab319.dts
arch/arm/boot/dts/amlogic/tm2_t962x3_ab301.dts
arch/arm/boot/dts/amlogic/tm2_t962x3_ab309.dts
arch/arm64/boot/dts/amlogic/mesontm2.dtsi
arch/arm64/boot/dts/amlogic/tm2_t962e2_ab311.dts
arch/arm64/boot/dts/amlogic/tm2_t962e2_ab319.dts
arch/arm64/boot/dts/amlogic/tm2_t962x3_ab301.dts
arch/arm64/boot/dts/amlogic/tm2_t962x3_ab309.dts
include/dt-bindings/clock/amlogic,tm2-audio-clk.h [new file with mode: 0644]
sound/soc/amlogic/auge/Makefile
sound/soc/amlogic/auge/audio_clks.c
sound/soc/amlogic/auge/audio_clks.h
sound/soc/amlogic/auge/audio_controller.c
sound/soc/amlogic/auge/card.c
sound/soc/amlogic/auge/ddr_mngr.c
sound/soc/amlogic/auge/earc.c
sound/soc/amlogic/auge/pdm_match_table.c
sound/soc/amlogic/auge/spdif_match_table.c
sound/soc/amlogic/auge/tdm_match_table.c
sound/soc/amlogic/auge/tm2,clocks.c [new file with mode: 0644]

index c843178..eb61354 100644 (file)
@@ -13809,7 +13809,8 @@ F: include/dt-bindings/clock/*
 F: include/linux/amlogic/media/sound/*
 F: sound/soc/Kconfig
 F: sound/soc/Makefile
-F: sound/soc/amlogic/*
+F: sound/soc/amlogic/auge/*
+F: sound/soc/amlogic/meson/*
 F: sound/soc/codecs/Kconfig
 F: sound/soc/codecs/Makefile
 F: sound/soc/codecs/amlogic/*
index 29144ea..a79018a 100644 (file)
@@ -23,7 +23,7 @@
 #include <dt-bindings/pwm/pwm.h>
 #include <dt-bindings/pwm/meson.h>
 #include <dt-bindings/clock/amlogic,tl1-clkc.h>
-#include <dt-bindings/clock/amlogic,tl1-audio-clk.h>
+#include <dt-bindings/clock/amlogic,tm2-audio-clk.h>
 #include <dt-bindings/phy/phy-amlogic-pcie.h>
 #include "mesong12a-bifrost.dtsi"
 #include <dt-bindings/iio/adc/amlogic-saradc.h>
                        ranges = <0x0 0xff600000 0x10000>;
 
                        clkaudio:audio_clocks {
-                               compatible = "amlogic, tl1-audio-clocks";
+                               compatible = "amlogic, tm2-audio-clocks";
                                #clock-cells = <1>;
                                reg = <0x0 0xb0>;
                        };
                                reg = <0xFF601400 0x400>;
                        };
                        eqdrc_base {
-                               reg = <0xFF602000 0x2000>;
+                               reg = <0xFF602000 0x1000>;
                        };
                        reset_base {
                                reg = <0xFFD01000 0x1000>;
                        };
                        vad_base {
-                               reg = <0xFF601800 0x800>;
+                               reg = <0xFF601800 0x400>;
+                       };
+                       earcrx_cdmc_base {
+                               reg = <0xFF603800 0x30>;
+                       };
+                       earcrx_dmac_base {
+                               reg = <0xFF603C00 0x20>;
+                       };
+                       earcrx_top_base {
+                               reg = <0xFF603E00 0x10>;
                        };
                };
 
index c50b0b1..b4e73fd 100644 (file)
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                        };
                };
 
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
        };
        /* Audio Related end */
 
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+               status = "okay";
+       };
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL1
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
 
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
-
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                /* max 0xff, each bit for one channel */
                channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
        /* audio pin mux */
 
        tdma_mclk: tdma_mclk {
-               mux { /* GPIOZ_0 */
-                       groups = "mclk0_z";
+               mux { /* GPIOH_4 */
+                       groups = "mclk0_h";
                        function = "mclk0";
                };
        };
 
        tdmout_a: tdmout_a {
-               mux { /* GPIOH_5, GPIOH_6, GPIOH_7 */
+               mux { /* GPIOH_5, GPIOH_6, GPIOH_7, GPIOH_8*/
                        groups = "tdma_fs_h",
                                "tdma_sclk_h",
-                               "tdma_dout0_h";
+                               "tdma_dout0_h",
+                               "tdma_dout1_h";
                        function = "tdma_out";
                        bias-pull-down;
                };
        };
 
        tdmin_a: tdmin_a {
-               mux { /* GPIOZ_9 */
-                       groups = "tdma_din2_z";
+               mux { /* GPIOH_11, GPIOH_12 */
+                       groups = "tdma_din0_h",
+                           "tdma_din1_h";
                        function = "tdma_in";
                };
        };
index ec18754..e44b95e 100644 (file)
                reg = <0xff632000 0x1c>;
                tdmout_index = <0>;
                tdmin_index = <0>;
+               dat1_ch_sel = <1>;
        };
 
        aml_dtv_demod {
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                };
 
                aml-audio-card,dai-link@1 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
 
                aml-audio-card,dai-link@4 {
                        mclk-fs = <128>;
+                       continuous-clock;
                        /* suffix-name, sync with android audio hal used for */
                        suffix-name = "alsaPORT-spdif";
                        cpu {
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                                sound-dai = <&dummy_codec>;
                        };
                };
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
        };
 
        /* Audio Related end */
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
                        "samesource_srcpll", "samesource_clk";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdma_mclk &tdmout_a>;
+               pinctrl-0 = </*&tdma_mclk &tdmout_a*/>;
 
                /*
                 * 0: tdmout_a;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                clock-names = "mclk", "clk_srcpll";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdmout_c &tdmin_c>;
+               pinctrl-0 = </*&tdmout_c &tdmin_c*/>;
 
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+               status = "okay";
+       };
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkc CLKID_MPLL0
+               clocks = <&clkc CLKID_MPLL1
                                &clkc CLKID_FCLK_DIV4
                                &clkaudio CLKID_AUDIO_GATE_SPDIFIN
                                &clkaudio CLKID_AUDIO_GATE_SPDIFOUT_A
                 * 7: "Enable:192K",
                 */
                asrc_id = <0>;
-               auto_asrc = <0>;
+               auto_asrc = <3>;
 
                status = "okay";
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
-
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
 
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                        &clkaudio CLKID_AUDIO_EQDRC>;
                clock-names = "gate", "srcpll", "eqdrc";
 
-               eq_enable = <1>;
-               multiband_drc_enable = <0>;
-               fullband_drc_enable = <0>;
                /*
                 * 0:tdmout_a
                 * 1:tdmout_b
                /* max 0xf, each bit for one lane, usually one lane */
                lane_mask = <0x1>;
                /* max 0xff, each bit for one channel */
-               channel_mask = <0x3>;
+               channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
                 * 0: in user space
                 * 1: in kernel space
                 */
-               level = <0>;
+               level = <1>;
 
                status = "disabled";
        };
        /* audio pin mux */
 
        tdma_mclk: tdma_mclk {
-               mux { /* GPIOZ_0 */
-                       groups = "mclk0_z";
+               mux { /* GPIOH_4 */
+                       groups = "mclk0_h";
                        function = "mclk0";
                };
        };
 
        tdmout_a: tdmout_a {
-               mux { /* GPIOZ_1, GPIOZ_2, GPIOZ_3, GPIOZ_5, GPIOZ_6 */
-                       groups = "tdma_sclk_z",
-                               "tdma_fs_z",
-                               "tdma_dout0_z",
-                               "tdma_dout2_z",
-                               "tdma_dout3_z";
+               mux { /* GPIOH_5, GPIOH_6, GPIOH_7, GPIOH_8*/
+                       groups = "tdma_fs_h",
+                               "tdma_sclk_h",
+                               "tdma_dout0_h",
+                               "tdma_dout1_h";
                        function = "tdma_out";
                        bias-pull-down;
                };
        };
 
        tdmin_a: tdmin_a {
-               mux { /* GPIOZ_9 */
-                       groups = "tdma_din2_z";
-                       function = "tdma_in";
-               };
-       };
-#if 0 //verify tdm/i2s in
-       tdmin_a: tdmin_a {
-               mux { /* GPIOZ_7 */
-                       groups = "tdma_din0_z";
+               mux { /* GPIOH_11, GPIOH_12 */
+                       groups = "tdma_din0_h",
+                           "tdma_din1_h";
                        function = "tdma_in";
                };
        };
-#endif
+
        tdmout_c: tdmout_c {
                mux { /* GPIODV_7, GPIODV_8, GPIODV_9 */
                        groups = "tdmc_sclk",
index ba85917..adc316a 100644 (file)
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                        };
                        tdmacodec: codec {
                                //sound-dai = <&dummy_codec>;
-                               sound-dai = <&ad82584f &tl1_codec>;
+                               sound-dai = </*&ad82584f*/ &tl1_codec>;
                        };
                };
 
                aml-audio-card,dai-link@1 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                        };
                };
 
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
        };
        /* Audio Related end */
 
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+               status = "okay";
+       };
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL1
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
-
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
 
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                /* max 0xff, each bit for one channel */
                channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
        };
 
        tdmout_a: tdmout_a {
-               mux { /* GPIOZ_1, GPIOZ_2, GPIOZ_3 */
+               mux { /* GPIOZ_1, GPIOZ_2, GPIOZ_3, GPIOZ_5, GPIOZ_6 */
                        groups = "tdma_sclk_z",
                                "tdma_fs_z",
-                               "tdma_dout0_z";
+                               "tdma_dout0_z",
+                               "tdma_dout2_z",
+                               "tdma_dout3_z";
                        function = "tdma_out";
                        bias-pull-down;
                };
        };
 
        tdmin_a: tdmin_a {
-               mux { /* GPIOZ_9 */
-                       groups = "tdma_din2_z";
+               mux { /* GPIOH_11, GPIOH_12 */
+                       groups = "tdma_din0_h",
+                           "tdma_din1_h";
                        function = "tdma_in";
                };
        };
index 45fbe42..27418b4 100644 (file)
                reg = <0xff632000 0x1c>;
                tdmout_index = <0>;
                tdmin_index = <0>;
+               dat1_ch_sel = <1>;
        };
 
        aml_dtv_demod {
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                };
 
                aml-audio-card,dai-link@1 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
 
                aml-audio-card,dai-link@4 {
                        mclk-fs = <128>;
+                       continuous-clock;
                        /* suffix-name, sync with android audio hal used for */
                        suffix-name = "alsaPORT-spdif";
                        cpu {
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                                sound-dai = <&dummy_codec>;
                        };
                };
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
        };
 
        /* Audio Related end */
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
                        "samesource_srcpll", "samesource_clk";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdma_mclk &tdmout_a>;
+               pinctrl-0 = </*&tdma_mclk &tdmout_a*/>;
 
                /*
                 * 0: tdmout_a;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                clock-names = "mclk", "clk_srcpll";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdmout_c &tdmin_c>;
+               pinctrl-0 = </*&tdmout_c &tdmin_c*/>;
 
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+               status = "okay";
+       };
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkc CLKID_MPLL0
+               clocks = <&clkc CLKID_MPLL1
                                &clkc CLKID_FCLK_DIV4
                                &clkaudio CLKID_AUDIO_GATE_SPDIFIN
                                &clkaudio CLKID_AUDIO_GATE_SPDIFOUT_A
                 * 7: "Enable:192K",
                 */
                asrc_id = <0>;
-               auto_asrc = <0>;
+               auto_asrc = <3>;
 
                status = "okay";
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
-
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
 
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                        &clkaudio CLKID_AUDIO_EQDRC>;
                clock-names = "gate", "srcpll", "eqdrc";
 
-               eq_enable = <1>;
-               multiband_drc_enable = <0>;
-               fullband_drc_enable = <0>;
                /*
                 * 0:tdmout_a
                 * 1:tdmout_b
                /* max 0xf, each bit for one lane, usually one lane */
                lane_mask = <0x1>;
                /* max 0xff, each bit for one channel */
-               channel_mask = <0x3>;
+               channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
                 * 0: in user space
                 * 1: in kernel space
                 */
-               level = <0>;
+               level = <1>;
 
                status = "disabled";
        };
                        function = "tdma_in";
                };
        };
-#if 0 //verify tdm/i2s in
-       tdmin_a: tdmin_a {
-               mux { /* GPIOZ_7 */
-                       groups = "tdma_din0_z";
-                       function = "tdma_in";
-               };
-       };
-#endif
+
        tdmout_c: tdmout_c {
                mux { /* GPIODV_7, GPIODV_8, GPIODV_9 */
                        groups = "tdmc_sclk",
index 148fc30..7e02100 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * arch/arm64/boot/dts/amlogic/mesontl1.dtsi
+ * arch/arm64/boot/dts/amlogic/mesontm2.dtsi
  *
  * Copyright (C) 2018 Amlogic, Inc. All rights reserved.
  *
@@ -23,7 +23,7 @@
 #include <dt-bindings/pwm/pwm.h>
 #include <dt-bindings/pwm/meson.h>
 #include <dt-bindings/clock/amlogic,tl1-clkc.h>
-#include <dt-bindings/clock/amlogic,tl1-audio-clk.h>
+#include <dt-bindings/clock/amlogic,tm2-audio-clk.h>
 #include <dt-bindings/phy/phy-amlogic-pcie.h>
 #include "mesong12a-bifrost.dtsi"
 #include <dt-bindings/iio/adc/amlogic-saradc.h>
                        ranges = <0x0 0x0 0x0 0xff600000 0x0 0x10000>;
 
                        clkaudio:audio_clocks {
-                               compatible = "amlogic, tl1-audio-clocks";
+                               compatible = "amlogic, tm2-audio-clocks";
                                #clock-cells = <1>;
                                reg = <0x0 0x0 0x0 0xb0>;
                        };
                                reg = <0x0 0xFF601400 0x0 0x400>;
                        };
                        eqdrc_base {
-                               reg = <0x0 0xFF602000 0x0 0x2000>;
+                               reg = <0x0 0xFF602000 0x0 0x1000>;
                        };
                        reset_base {
                                reg = <0x0 0xFFD01000 0x0 0x1000>;
                        };
                        vad_base {
-                               reg = <0x0 0xFF601800 0x0 0x800>;
+                               reg = <0x0 0xFF601800 0x0 0x400>;
+                       };
+                       earcrx_cdmc_base {
+                               reg = <0x0 0xFF603800 0x0 0x30>;
+                       };
+                       earcrx_dmac_base {
+                               reg = <0x0 0xFF603C00 0x0 0x20>;
+                       };
+                       earcrx_top_base {
+                               reg = <0x0 0xFF603E00 0x0 0x10>;
                        };
                };
 
index 8c4eea9..14ef4d6 100644 (file)
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                aml-audio-card,dai-link@0 {
                        format = "i2s";
                        mclk-fs = <256>;
-                       //continuous-clock;
+                       continuous-clock;
                        //bitclock-inversion;
                        //frame-inversion;
                        /* master mode */
                };
 
                aml-audio-card,dai-link@1 {
-                       status = "disabled";
-
                        format = "i2s";
                        mclk-fs = <256>;
                        //continuous-clock;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
-
                        format = "i2s";
                        mclk-fs = <256>;
                        //continuous-clock;
 
                aml-audio-card,dai-link@4 {
                        mclk-fs = <128>;
+                       continuous-clock;
                        /* suffix-name, sync with android audio hal used for */
                        suffix-name = "alsaPORT-spdif";
                        cpu {
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                        };
                };
 
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
        };
        /* Audio Related end */
 
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+
+               status = "okay";
+       };
+
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL1
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
-
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
-
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                /* max 0xff, each bit for one channel */
                channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
                status = "disabled";
        };
 
+       vad:vad {
+               compatible = "amlogic, snd-vad";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_TOVAD
+                       &clkc CLKID_FCLK_DIV5
+                       &clkaudio CLKID_AUDIO_VAD>;
+               clock-names = "gate", "pll", "clk";
+               interrupts = <GIC_SPI 155 IRQ_TYPE_EDGE_RISING
+                               GIC_SPI 47 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_wakeup", "irq_frame_sync";
+               /*
+                * Data src sel:
+                * 0: tdmin_a;
+                * 1: tdmin_b;
+                * 2: tdmin_c;
+                * 3: spdifin;
+                * 4: pdmin;
+                * 5: loopback_b;
+                * 6: tdmin_lb;
+                * 7: loopback_a;
+                */
+               src = <4>;
+               /*
+                * deal with hot word in user space or kernel space
+                * 0: in user space
+                * 1: in kernel space
+                */
+               level = <1>;
+               status = "disabled";
+       };
 }; /* end of audiobus */
 
 &pinctrl_periphs {
        /* audio pin mux */
 
        tdma_mclk: tdma_mclk {
-               mux { /* GPIOZ_0 */
-                       groups = "mclk0_z";
+               mux { /* GPIOH_4 */
+                       groups = "mclk0_h";
                        function = "mclk0";
                };
        };
 
        tdmout_a: tdmout_a {
-               mux { /* GPIOH_5, GPIOH_6, GPIOH_7 */
+               mux { /* GPIOH_5, GPIOH_6, GPIOH_7, GPIOH_8*/
                        groups = "tdma_fs_h",
                                "tdma_sclk_h",
-                               "tdma_dout0_h";
+                               "tdma_dout0_h",
+                               "tdma_dout1_h";
                        function = "tdma_out";
                        bias-pull-down;
                };
        };
 
        tdmin_a: tdmin_a {
-               mux { /* GPIOZ_9 */
-                       groups = "tdma_din2_z";
+               mux { /* GPIOH_11, GPIOH_12 */
+                       groups = "tdma_din0_h",
+                           "tdma_din1_h";
                        function = "tdma_in";
                };
        };
index 81df6ba..72d9048 100644 (file)
                reg = <0x0 0xff632000 0x0 0x1c>;
                tdmout_index = <0>;
                tdmin_index = <0>;
+               dat1_ch_sel = <1>;
        };
 
        aml_dtv_demod {
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                };
 
                aml-audio-card,dai-link@1 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
 
                aml-audio-card,dai-link@4 {
                        mclk-fs = <128>;
+                       continuous-clock;
                        /* suffix-name, sync with android audio hal used for */
                        suffix-name = "alsaPORT-spdif";
                        cpu {
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                                sound-dai = <&dummy_codec>;
                        };
                };
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
        };
-
        /* Audio Related end */
+
        dvb {
                compatible = "amlogic, dvb";
                status = "okay";
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
                        "samesource_srcpll", "samesource_clk";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdma_mclk &tdmout_a>;
+               pinctrl-0 = </*&tdma_mclk &tdmout_a*/>;
 
                /*
                 * 0: tdmout_a;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                clock-names = "mclk", "clk_srcpll";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdmout_c &tdmin_c>;
+               pinctrl-0 = </*&tdmout_c &tdmin_c*/>;
 
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+               status = "okay";
+       };
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkc CLKID_MPLL0
+               clocks = <&clkc CLKID_MPLL1
                                &clkc CLKID_FCLK_DIV4
                                &clkaudio CLKID_AUDIO_GATE_SPDIFIN
                                &clkaudio CLKID_AUDIO_GATE_SPDIFOUT_A
                 * 7: "Enable:192K",
                 */
                asrc_id = <0>;
-               auto_asrc = <0>;
+               auto_asrc = <3>;
 
                status = "okay";
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
-
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
 
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                        &clkaudio CLKID_AUDIO_EQDRC>;
                clock-names = "gate", "srcpll", "eqdrc";
 
-               eq_enable = <1>;
-               multiband_drc_enable = <0>;
-               fullband_drc_enable = <0>;
                /*
                 * 0:tdmout_a
                 * 1:tdmout_b
                /* max 0xf, each bit for one lane, usually one lane */
                lane_mask = <0x1>;
                /* max 0xff, each bit for one channel */
-               channel_mask = <0x3>;
+               channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
                 * 0: in user space
                 * 1: in kernel space
                 */
-               level = <0>;
+               level = <1>;
 
                status = "disabled";
        };
        /* audio pin mux */
 
        tdma_mclk: tdma_mclk {
-               mux { /* GPIOZ_0 */
-                       groups = "mclk0_z";
+               mux { /* GPIOH_4 */
+                       groups = "mclk0_h";
                        function = "mclk0";
                };
        };
 
        tdmout_a: tdmout_a {
-               mux { /* GPIOZ_1, GPIOZ_2, GPIOZ_3, GPIOZ_5, GPIOZ_6 */
-                       groups = "tdma_sclk_z",
-                               "tdma_fs_z",
-                               "tdma_dout0_z",
-                               "tdma_dout2_z",
-                               "tdma_dout3_z";
+               mux { /* GPIOH_5, GPIOH_6, GPIOH_7, GPIOH_8*/
+                       groups = "tdma_fs_h",
+                               "tdma_sclk_h",
+                               "tdma_dout0_h",
+                               "tdma_dout1_h";
                        function = "tdma_out";
                        bias-pull-down;
                };
        };
 
        tdmin_a: tdmin_a {
-               mux { /* GPIOZ_9 */
-                       groups = "tdma_din2_z";
-                       function = "tdma_in";
-               };
-       };
-#if 0 //verify tdm/i2s in
-       tdmin_a: tdmin_a {
-               mux { /* GPIOZ_7 */
-                       groups = "tdma_din0_z";
+               mux { /* GPIOH_11, GPIOH_12 */
+                       groups = "tdma_din0_h",
+                           "tdma_din1_h";
                        function = "tdma_in";
                };
        };
-#endif
+
        tdmout_c: tdmout_c {
                mux { /* GPIODV_7, GPIODV_8, GPIODV_9 */
                        groups = "tdmc_sclk",
index e782df2..9de2ee6 100644 (file)
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                        };
                        tdmacodec: codec {
                                //sound-dai = <&dummy_codec>;
-                               sound-dai = <&ad82584f &tl1_codec>;
+                               sound-dai = </*&ad82584f*/ &tl1_codec>;
                        };
                };
 
                aml-audio-card,dai-link@1 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
 
                aml-audio-card,dai-link@4 {
                        mclk-fs = <128>;
+                       continuous-clock;
                        /* suffix-name, sync with android audio hal used for */
                        suffix-name = "alsaPORT-spdif";
                        cpu {
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                                sound-dai = <&dummy_codec>;
                        };
                };
-       };
 
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
+       };
        /* Audio Related end */
        dvb {
                compatible = "amlogic, dvb";
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+               status = "okay";
+       };
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkc CLKID_MPLL0
+               clocks = <&clkc CLKID_MPLL1
                                &clkc CLKID_FCLK_DIV4
                                &clkaudio CLKID_AUDIO_GATE_SPDIFIN
                                &clkaudio CLKID_AUDIO_GATE_SPDIFOUT_A
                pinctrl-names = "spdif_pins",
                                "spdif_pins_mute";
 
-               pinctrl-0 = <&spdifout_a &spdifin_a>;
+               pinctrl-0 = <&spdifout_a>;
                pinctrl-1 = <&spdifout_a_mute>;
 
                /*
                 * 7: "Enable:192K",
                 */
                asrc_id = <0>;
-               auto_asrc = <0>;
+               auto_asrc = <3>;
 
                status = "okay";
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
-
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
 
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                        &clkaudio CLKID_AUDIO_EQDRC>;
                clock-names = "gate", "srcpll", "eqdrc";
 
-               eq_enable = <1>;
-               multiband_drc_enable = <0>;
-               fullband_drc_enable = <0>;
                /*
                 * 0:tdmout_a
                 * 1:tdmout_b
                /* max 0xf, each bit for one lane, usually one lane */
                lane_mask = <0x1>;
                /* max 0xff, each bit for one channel */
-               channel_mask = <0x3>;
+               channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
                 * 0: in user space
                 * 1: in kernel space
                 */
-               level = <0>;
+               level = <1>;
 
                status = "disabled";
        };
        };
 
        tdmin_a: tdmin_a {
-               mux { /* GPIOZ_9 */
-                       groups = "tdma_din2_z";
-                       function = "tdma_in";
-               };
-       };
-#if 0 //verify tdm/i2s in
-       tdmin_a: tdmin_a {
-               mux { /* GPIOZ_7 */
-                       groups = "tdma_din0_z";
+               mux { /* GPIOH_11, GPIOH_12 */
+                       groups = "tdma_din0_h",
+                           "tdma_din1_h";
                        function = "tdma_in";
                };
        };
-#endif
+
        tdmout_c: tdmout_c {
                mux { /* GPIODV_7, GPIODV_8, GPIODV_9 */
                        groups = "tdmc_sclk",
index 1f4818c..bb11edc 100644 (file)
                reg = <0x0 0xff632000 0x0 0x1c>;
                tdmout_index = <0>;
                tdmin_index = <0>;
+               dat1_ch_sel = <1>;
        };
 
        aml_dtv_demod {
        };
 
        auge_sound {
-               compatible = "amlogic, tl1-sound-card";
+               compatible = "amlogic, tm2-sound-card";
                aml-audio-card,name = "AML-AUGESOUND";
 
                avout_mute-gpios = <&gpio GPIODV_3 GPIO_ACTIVE_HIGH>;
                };
 
                aml-audio-card,dai-link@1 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
                };
 
                aml-audio-card,dai-link@2 {
-                       status = "disabled";
 
                        format = "i2s";
                        mclk-fs = <256>;
 
                aml-audio-card,dai-link@4 {
                        mclk-fs = <128>;
+                       continuous-clock;
                        /* suffix-name, sync with android audio hal used for */
                        suffix-name = "alsaPORT-spdif";
                        cpu {
 
                aml-audio-card,dai-link@5 {
                        mclk-fs = <128>;
+                       suffix-name = "alsaPORT-spdifb";
                        cpu {
                                sound-dai = <&spdifb>;
                                system-clock-frequency = <6144000>;
                                sound-dai = <&dummy_codec>;
                        };
                };
+               aml-audio-card,dai-link@7 {
+                       mclk-fs = <256>;
+                       suffix-name = "alsaPORT-earc";
+                       cpu {
+                               sound-dai = <&earc>;
+                               system-clock-frequency = <12288000>;
+                       };
+                       codec {
+                               sound-dai = <&dummy_codec>;
+                       };
+               };
        };
 
        /* Audio Related end */
 
 &audiobus {
        tdma:tdm@0 {
-               compatible = "amlogic, tl1-snd-tdma";
+               compatible = "amlogic, tm2-snd-tdma";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0>;
                        "samesource_srcpll", "samesource_clk";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdma_mclk &tdmout_a>;
+               pinctrl-0 = </*&tdma_mclk &tdmout_a*/>;
 
                /*
                 * 0: tdmout_a;
        };
 
        tdmb:tdm@1 {
-               compatible = "amlogic, tl1-snd-tdmb";
+               compatible = "amlogic, tm2-snd-tdmb";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
        };
 
        tdmc:tdm@2 {
-               compatible = "amlogic, tl1-snd-tdmc";
+               compatible = "amlogic, tm2-snd-tdmc";
                #sound-dai-cells = <0>;
 
                dai-tdm-lane-slot-mask-in = <1 0 0 0>;
                clock-names = "mclk", "clk_srcpll";
 
                pinctrl-names = "tdm_pins";
-               pinctrl-0 = <&tdmout_c &tdmin_c>;
+               pinctrl-0 = </*&tdmout_c &tdmin_c*/>;
 
                status = "okay";
        };
 
+       pdm:pdm {
+               compatible = "amlogic, tm2-snd-pdm";
+               #sound-dai-cells = <0>;
+               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
+                       &clkc CLKID_FCLK_DIV3
+                       &clkc CLKID_MPLL3
+                       &clkaudio CLKID_AUDIO_PDMIN0
+                       &clkaudio CLKID_AUDIO_PDMIN1>;
+               clock-names = "gate",
+                       "sysclk_srcpll",
+                       "dclk_srcpll",
+                       "pdm_dclk",
+                       "pdm_sysclk";
+               pinctrl-names = "pdm_pins";
+               pinctrl-0 = <&pdmin>;
+               /* mode 0~4, defalut:1 */
+               filter_mode = <1>;
+               status = "okay";
+       };
        spdifa:spdif@0 {
-               compatible = "amlogic, tl1-snd-spdif-a";
+               compatible = "amlogic, tm2-snd-spdif-a";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkc CLKID_MPLL0
+               clocks = <&clkc CLKID_MPLL1
                                &clkc CLKID_FCLK_DIV4
                                &clkaudio CLKID_AUDIO_GATE_SPDIFIN
                                &clkaudio CLKID_AUDIO_GATE_SPDIFOUT_A
                 * 7: "Enable:192K",
                 */
                asrc_id = <0>;
-               auto_asrc = <0>;
+               auto_asrc = <3>;
 
                status = "okay";
        };
 
        spdifb:spdif@1 {
-               compatible = "amlogic, tl1-snd-spdif-b";
+               compatible = "amlogic, tm2-snd-spdif-b";
                #sound-dai-cells = <0>;
 
                clocks = <&clkc CLKID_MPLL0 /*CLKID_HIFI_PLL*/
                status = "okay";
        };
 
-       pdm:pdm {
-               compatible = "amlogic, tl1-snd-pdm";
+       extn:extn {
+               compatible = "amlogic, snd-extn";
                #sound-dai-cells = <0>;
 
-               clocks = <&clkaudio CLKID_AUDIO_GATE_PDM
-                       &clkc CLKID_FCLK_DIV3
-                       &clkc CLKID_MPLL3
-                       &clkaudio CLKID_AUDIO_PDMIN0
-                       &clkaudio CLKID_AUDIO_PDMIN1>;
-               clock-names = "gate",
-                       "sysclk_srcpll",
-                       "dclk_srcpll",
-                       "pdm_dclk",
-                       "pdm_sysclk";
-
-               pinctrl-names = "pdm_pins";
-               pinctrl-0 = <&pdmin>;
 
-               /* mode 0~4, defalut:1 */
-               filter_mode = <1>;
+               interrupts =
+                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
+               interrupt-names = "irq_frhdmirx";
 
                status = "okay";
        };
 
-       extn:extn {
-               compatible = "amlogic, snd-extn";
+       earc:earc {
+               compatible = "amlogic, tm2-snd-earc";
                #sound-dai-cells = <0>;
 
-               interrupts =
-                               <GIC_SPI 158 IRQ_TYPE_EDGE_RISING>;
-               interrupt-names = "irq_frhdmirx";
+               clocks = < &clkaudio CLKID_EARCRX_CMDC
+                       &clkaudio CLKID_EARCRX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       &clkaudio CLKID_EARCTX_CMDC
+                       &clkaudio CLKID_EARCTX_DMAC
+                       &clkc CLKID_FCLK_DIV5
+                       &clkc CLKID_FCLK_DIV3
+                       >;
+               clock-names =
+                       "rx_cmdc",
+                       "rx_dmac",
+                       "rx_cmdc_srcpll",
+                       "rx_dmac_srcpll",
+                       "tx_cmdc",
+                       "tx_dmac",
+                       "tx_cmdc_srcpll",
+                       "tx_dmac_srcpll";
+               interrupts = <
+                       GIC_SPI 88 IRQ_TYPE_EDGE_RISING
+                       GIC_SPI 87 IRQ_TYPE_EDGE_RISING
+               >;
+               interrupt-names = "rx_cmdc", "rx_dmac";
 
                status = "okay";
        };
                        &clkaudio CLKID_AUDIO_EQDRC>;
                clock-names = "gate", "srcpll", "eqdrc";
 
-               eq_enable = <1>;
-               multiband_drc_enable = <0>;
-               fullband_drc_enable = <0>;
                /*
                 * 0:tdmout_a
                 * 1:tdmout_b
                /* max 0xf, each bit for one lane, usually one lane */
                lane_mask = <0x1>;
                /* max 0xff, each bit for one channel */
-               channel_mask = <0x3>;
+               channel_mask = <0xff>;
 
-               status = "okay";
+               status = "disable";
        };
 
        asrca: resample@0 {
                 */
                resample_module = <3>;
 
-               status = "okay";
+               status = "disabled";
        };
 
        asrcb: resample@1 {
                 * 0: in user space
                 * 1: in kernel space
                 */
-               level = <0>;
+               level = <1>;
 
                status = "disabled";
        };
        /* audio pin mux */
 
        tdma_mclk: tdma_mclk {
-               mux { /* GPIOZ_0 */
-                       groups = "mclk0_z";
+               mux { /* GPIOH_4 */
+                       groups = "mclk0_h";
                        function = "mclk0";
                };
        };
 
        tdmout_a: tdmout_a {
-               mux { /* GPIOZ_1, GPIOZ_2, GPIOZ_3, GPIOZ_5, GPIOZ_6 */
-                       groups = "tdma_sclk_z",
-                               "tdma_fs_z",
-                               "tdma_dout0_z",
-                               "tdma_dout2_z",
-                               "tdma_dout3_z";
+               mux { /* GPIOH_5, GPIOH_6, GPIOH_7, GPIOH_8*/
+                       groups = "tdma_fs_h",
+                               "tdma_sclk_h",
+                               "tdma_dout0_h",
+                               "tdma_dout1_h";
                        function = "tdma_out";
                        bias-pull-down;
                };
        };
 
        tdmin_a: tdmin_a {
-               mux { /* GPIOZ_9 */
-                       groups = "tdma_din2_z";
-                       function = "tdma_in";
-               };
-       };
-#if 0 //verify tdm/i2s in
-       tdmin_a: tdmin_a {
-               mux { /* GPIOZ_7 */
-                       groups = "tdma_din0_z";
+               mux { /* GPIOH_11, GPIOH_12 */
+                       groups = "tdma_din0_h",
+                           "tdma_din1_h";
                        function = "tdma_in";
                };
        };
-#endif
+
        tdmout_c: tdmout_c {
                mux { /* GPIODV_7, GPIODV_8, GPIODV_9 */
                        groups = "tdmc_sclk",
diff --git a/include/dt-bindings/clock/amlogic,tm2-audio-clk.h b/include/dt-bindings/clock/amlogic,tm2-audio-clk.h
new file mode 100644 (file)
index 0000000..a70cf1e
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * include/dt-bindings/clock/amlogic,tm2-audio-clk.h
+ *
+ * Copyright (C) 2018 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+
+#ifndef __TM2_AUDIO_CLK_H__
+#define __TM2_AUDIO_CLK_H__
+
+/*
+ * CLKID audio index values
+ */
+
+#define CLKID_AUDIO_GATE_DDR_ARB                0
+#define CLKID_AUDIO_GATE_PDM                    1
+#define CLKID_AUDIO_GATE_TDMINA                 2
+#define CLKID_AUDIO_GATE_TDMINB                 3
+#define CLKID_AUDIO_GATE_TDMINC                 4
+#define CLKID_AUDIO_GATE_TDMINLB                5
+#define CLKID_AUDIO_GATE_TDMOUTA                6
+#define CLKID_AUDIO_GATE_TDMOUTB                7
+#define CLKID_AUDIO_GATE_TDMOUTC                8
+#define CLKID_AUDIO_GATE_FRDDRA                 9
+#define CLKID_AUDIO_GATE_FRDDRB                 10
+#define CLKID_AUDIO_GATE_FRDDRC                 11
+#define CLKID_AUDIO_GATE_TODDRA                 12
+#define CLKID_AUDIO_GATE_TODDRB                 13
+#define CLKID_AUDIO_GATE_TODDRC                 14
+#define CLKID_AUDIO_GATE_LOOPBACKA              15
+#define CLKID_AUDIO_GATE_SPDIFIN                16
+#define CLKID_AUDIO_GATE_SPDIFOUT_A             17
+#define CLKID_AUDIO_GATE_RESAMPLEA              18
+#define CLKID_AUDIO_GATE_RESERVED0              19
+#define CLKID_AUDIO_GATE_RESERVED1              20
+#define CLKID_AUDIO_GATE_SPDIFOUT_B             21
+#define CLKID_AUDIO_GATE_EQDRC                  22
+#define CLKID_AUDIO_GATE_RESERVED2              23
+#define CLKID_AUDIO_GATE_RESERVED3              24
+#define CLKID_AUDIO_GATE_RESERVED4              25
+#define CLKID_AUDIO_GATE_RESAMPLEB              26
+#define CLKID_AUDIO_GATE_TOVAD                  27
+#define CLKID_AUDIO_GATE_AUDIOLOCKER            28
+#define CLKID_AUDIO_GATE_SPDIFIN_LB             29
+#define CLKID_AUDIO_GATE_FRATV                  30
+#define CLKID_AUDIO_GATE_FRHDMIRX               31
+
+/* Gate En1 */
+#define CLKID_AUDIO_GATE_FRDDRD                 32
+#define CLKID_AUDIO_GATE_TODDRD                 33
+#define CLKID_AUDIO_GATE_LOOPBACKB              34
+#define CLKID_AUDIO_GATE_FRDDRE                 35
+#define CLKID_AUDIO_GATE_TODDRE                 36
+#define CLKID_AUDIO_GATE_EARCTX                 37
+#define CLKID_AUDIO_GATE_EARCRX                 38
+#define CLKID_AUDIO_GATE_RESAMPLEB_OLD          39
+#define CLKID_AUDIO_GATE_LOCKER                 40
+
+#define CLKID_AUDIO_GATE_MAX                    41
+
+#define MCLK_BASE                               CLKID_AUDIO_GATE_MAX
+#define CLKID_AUDIO_MCLK_A                      (MCLK_BASE + 0)
+#define CLKID_AUDIO_MCLK_B                      (MCLK_BASE + 1)
+#define CLKID_AUDIO_MCLK_C                      (MCLK_BASE + 2)
+#define CLKID_AUDIO_MCLK_D                      (MCLK_BASE + 3)
+#define CLKID_AUDIO_MCLK_E                      (MCLK_BASE + 4)
+#define CLKID_AUDIO_MCLK_F                      (MCLK_BASE + 5)
+
+#define CLKID_AUDIO_SPDIFIN                     (MCLK_BASE + 6)
+#define CLKID_AUDIO_SPDIFOUT_A                  (MCLK_BASE + 7)
+#define CLKID_AUDIO_RESAMPLE_A                  (MCLK_BASE + 8)
+#define CLKID_AUDIO_LOCKER_OUT                  (MCLK_BASE + 9)
+#define CLKID_AUDIO_LOCKER_IN                   (MCLK_BASE + 10)
+#define CLKID_AUDIO_PDMIN0                      (MCLK_BASE + 11)
+#define CLKID_AUDIO_PDMIN1                      (MCLK_BASE + 12)
+#define CLKID_AUDIO_SPDIFOUT_B                  (MCLK_BASE + 13)
+#define CLKID_AUDIO_RESAMPLE_B                  (MCLK_BASE + 14)
+#define CLKID_AUDIO_SPDIFIN_LB                  (MCLK_BASE + 15)
+#define CLKID_AUDIO_EQDRC                       (MCLK_BASE + 16)
+#define CLKID_AUDIO_VAD                         (MCLK_BASE + 17)
+#define CLKID_EARCTX_CMDC                       (MCLK_BASE + 18)
+#define CLKID_EARCTX_DMAC                       (MCLK_BASE + 19)
+#define CLKID_EARCRX_CMDC                       (MCLK_BASE + 20)
+#define CLKID_EARCRX_DMAC                       (MCLK_BASE + 21)
+
+#define NUM_AUDIO_CLKS                          (MCLK_BASE + 22)
+#endif /* __TM2_AUDIO_CLK_H__ */
index 91825bf..b8d6cc8 100644 (file)
@@ -5,6 +5,7 @@ obj-$(CONFIG_AMLOGIC_SND_SOC_AUGE)      += audio_controller.o \
                                                g12a,clocks.o \
                                                tl1,clocks.o \
                                                sm1,clocks.o \
+                                               tm2,clocks.o \
                                                card.o \
                                                card_utils.o \
                                                tdm.o \
index e02f2a5..4aa82c3 100644 (file)
@@ -40,6 +40,10 @@ static const struct of_device_id audio_clocks_of_match[] = {
                .compatible = "amlogic, sm1-audio-clocks",
                .data           = &sm1_audio_clks_init,
        },
+       {
+               .compatible = "amlogic, tm2-audio-clocks",
+               .data           = &tm2_audio_clks_init,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, audio_clocks_of_match);
index 56a0a67..ede4ec9 100644 (file)
@@ -94,6 +94,7 @@ extern struct audio_clk_init axg_audio_clks_init;
 extern struct audio_clk_init g12a_audio_clks_init;
 extern struct audio_clk_init tl1_audio_clks_init;
 extern struct audio_clk_init sm1_audio_clks_init;
+extern struct audio_clk_init tm2_audio_clks_init;
 
 struct clk_chipinfo {
        /* force clock source as oscin(24M) */
index 1b50eac..04845c5 100644 (file)
@@ -104,6 +104,7 @@ static int register_audio_controller(struct platform_device *pdev,
 
        /* gate on all clks on bringup stage, need gate separately */
        aml_audiobus_write(actrl, EE_AUDIO_CLK_GATE_EN0, 0xffffffff);
+       aml_audiobus_write(actrl, EE_AUDIO_CLK_GATE_EN1, 0xffffffff);
 
        return 0;
 }
index b863a0a..047f412 100644 (file)
@@ -871,6 +871,10 @@ static const struct of_device_id auge_of_match[] = {
                .compatible = "amlogic, tl1-sound-card",
                .data       = &tl1_chipset_info,
        },
+       {
+               .compatible = "amlogic, tm2-sound-card",
+               .data       = &tl1_chipset_info,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, auge_of_match);
@@ -913,9 +917,8 @@ static int aml_card_probe(struct platform_device *pdev)
 
                ret = aml_card_parse_of(np, priv);
                if (ret < 0) {
-                       if (ret != -EPROBE_DEFER)
-                               dev_err(dev, "%s, parse error %d\n",
-                                       __func__, ret);
+                       dev_err(dev, "%s, parse error %d\n",
+                           __func__, ret);
                        goto err;
                }
 
index f4abd9f..8cd7392 100644 (file)
@@ -406,7 +406,7 @@ void aml_toddr_set_fifos(struct toddr *to, unsigned int thresh)
 
        if (to->chipinfo && to->chipinfo->ugt) {
                reg = calc_toddr_address(EE_AUDIO_TODDR_A_CTRL0, reg_base);
-               aml_audiobus_update_bits(actrl, reg, 0x0 << 0, 0x1 << 0);
+               aml_audiobus_update_bits(actrl, reg, 0x1, 0x1);
        }
 }
 
@@ -1263,8 +1263,8 @@ void aml_frddr_set_fifos(struct frddr *fr,
                        (depth - 1)<<24 | (thresh - 1)<<16 | 2<<8);
 
        if (fr->chipinfo && fr->chipinfo->ugt) {
-               reg = calc_toddr_address(EE_AUDIO_FRDDR_A_CTRL0, reg_base);
-               aml_audiobus_update_bits(actrl, reg, 0x0 << 0, 0x1 << 0);
+               reg = calc_frddr_address(EE_AUDIO_FRDDR_A_CTRL0, reg_base);
+               aml_audiobus_update_bits(actrl, reg, 0x1, 0x1);
        }
 }
 
index 355e7db..30b5f30 100644 (file)
@@ -625,6 +625,9 @@ static const struct of_device_id earc_device_id[] = {
        {
                .compatible = "amlogic, sm1-snd-earc",
        },
+       {
+               .compatible = "amlogic, tm2-snd-earc",
+       },
        {},
 };
 
@@ -664,7 +667,7 @@ static int earc_platform_probe(struct platform_device *pdev)
        if (IS_ERR(p_earc->clk_rx_gate)) {
                dev_err(&pdev->dev,
                        "Can't get earc gate\n");
-               return PTR_ERR(p_earc->clk_rx_gate);
+               /*return PTR_ERR(p_earc->clk_rx_gate);*/
        }
        /* RX */
        p_earc->clk_rx_cmdc = devm_clk_get(&pdev->dev, "rx_cmdc");
index 850b509..27ce1dd 100644 (file)
@@ -31,6 +31,12 @@ static struct pdm_chipinfo sm1_pdm_chipinfo = {
        .train           = true,
 };
 
+static struct pdm_chipinfo tm2_pdm_chipinfo = {
+       .mute_fn         = true,
+       .truncate_data   = false,
+       .train           = true,
+};
+
 static const struct of_device_id aml_pdm_device_id[] = {
        {
                .compatible = "amlogic, axg-snd-pdm",
@@ -47,6 +53,10 @@ static const struct of_device_id aml_pdm_device_id[] = {
                .compatible = "amlogic, sm1-snd-pdm",
                .data           = &sm1_pdm_chipinfo,
        },
+       {
+               .compatible = "amlogic, tm2-snd-pdm",
+               .data           = &tm2_pdm_chipinfo,
+       },
 
        {}
 };
index 0253015..c88929e 100644 (file)
@@ -92,6 +92,20 @@ struct spdif_chipinfo sm1_spdif_b_chipinfo = {
        .eq_drc_en    = true,
 };
 
+struct spdif_chipinfo tm2_spdif_a_chipinfo = {
+       .id           = SPDIF_A,
+       .chnum_en     = true,
+       .hold_start   = true,
+       .eq_drc_en    = true,
+};
+
+struct spdif_chipinfo tm2_spdif_b_chipinfo = {
+       .id           = SPDIF_B,
+       .chnum_en     = true,
+       .hold_start   = true,
+       .eq_drc_en    = true,
+};
+
 static const struct of_device_id aml_spdif_device_id[] = {
        {
                .compatible = "amlogic, axg-snd-spdif",
@@ -121,6 +135,14 @@ static const struct of_device_id aml_spdif_device_id[] = {
                .compatible = "amlogic, sm1-snd-spdif-b",
                .data           = &sm1_spdif_b_chipinfo,
        },
+       {
+               .compatible = "amlogic, tm2-snd-spdif-a",
+               .data           = &tm2_spdif_a_chipinfo,
+       },
+       {
+               .compatible = "amlogic, tm2-snd-spdif-b",
+               .data           = &tm2_spdif_b_chipinfo,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, aml_spdif_device_id);
index fd56921..3853477 100644 (file)
@@ -132,6 +132,30 @@ struct tdm_chipinfo sm1_tdmc_chipinfo = {
        .lane_cnt    = LANE_MAX1,
 };
 
+struct tdm_chipinfo tm2_tdma_chipinfo = {
+       .id          = TDM_A,
+       .sclk_ws_inv = true,
+       .oe_fn       = true,
+       .same_src_fn = true,
+       .lane_cnt    = LANE_MAX0,
+};
+
+struct tdm_chipinfo tm2_tdmb_chipinfo = {
+       .id          = TDM_B,
+       .sclk_ws_inv = true,
+       .oe_fn       = true,
+       .same_src_fn = true,
+       .lane_cnt    = LANE_MAX3,
+};
+
+struct tdm_chipinfo tm2_tdmc_chipinfo = {
+       .id          = TDM_C,
+       .sclk_ws_inv = true,
+       .oe_fn       = true,
+       .same_src_fn = true,
+       .lane_cnt    = LANE_MAX1,
+};
+
 static const struct of_device_id aml_tdm_device_id[] = {
        {
                .compatible = "amlogic, axg-snd-tdma",
@@ -181,6 +205,18 @@ static const struct of_device_id aml_tdm_device_id[] = {
                .compatible = "amlogic, sm1-snd-tdmc",
                .data           = &sm1_tdmc_chipinfo,
        },
+       {
+               .compatible = "amlogic, tm2-snd-tdma",
+               .data           = &tm2_tdma_chipinfo,
+       },
+       {
+               .compatible = "amlogic, tm2-snd-tdmb",
+               .data           = &tm2_tdmb_chipinfo,
+       },
+       {
+               .compatible = "amlogic, tm2-snd-tdmc",
+               .data           = &tm2_tdmc_chipinfo,
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, aml_tdm_device_id);
diff --git a/sound/soc/amlogic/auge/tm2,clocks.c b/sound/soc/amlogic/auge/tm2,clocks.c
new file mode 100644 (file)
index 0000000..aed576e
--- /dev/null
@@ -0,0 +1,392 @@
+/*
+ * sound/soc/amlogic/auge/tm2_clocks.c
+ *
+ * Copyright (C) 2019 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ */
+#undef pr_fmt
+#define pr_fmt(fmt) "tm2_audio_clocks: " fmt
+
+#include <dt-bindings/clock/amlogic,tm2-audio-clk.h>
+
+#include "audio_clks.h"
+#include "regs.h"
+
+static spinlock_t aclk_lock;
+
+static const char *const mclk_parent_names[] = {
+       "mpll0", "mpll1", "mpll2", "mpll3", "hifi_pll",
+       "fclk_div3", "fclk_div4", "fclk_div5"};
+
+static const char *const audioclk_parent_names[] = {
+       "mclk_a", "mclk_b", "mclk_c", "mclk_d", "mclk_e",
+       "mclk_f", "i_slv_sclk_a", "i_slv_sclk_b", "i_slv_sclk_c",
+       "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"};
+
+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);
+CLOCK_GATE(audio_tdminb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 3);
+CLOCK_GATE(audio_tdminc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 4);
+CLOCK_GATE(audio_tdminlb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 5);
+CLOCK_GATE(audio_tdmouta, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 6);
+CLOCK_GATE(audio_tdmoutb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 7);
+CLOCK_GATE(audio_tdmoutc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 8);
+CLOCK_GATE(audio_frddra, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 9);
+CLOCK_GATE(audio_frddrb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 10);
+CLOCK_GATE(audio_frddrc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 11);
+CLOCK_GATE(audio_toddra, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 12);
+CLOCK_GATE(audio_toddrb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 13);
+CLOCK_GATE(audio_toddrc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 14);
+CLOCK_GATE(audio_loopbacka, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 15);
+CLOCK_GATE(audio_spdifin, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 16);
+CLOCK_GATE(audio_spdifout, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 17);
+CLOCK_GATE(audio_resamplea, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 18);
+CLOCK_GATE(audio_reserved0, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 19);
+CLOCK_GATE(audio_reserved1, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 20);
+CLOCK_GATE(audio_spdifoutb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 21);
+CLOCK_GATE(audio_eqdrc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 22);
+CLOCK_GATE(audio_reserved2, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 23);
+CLOCK_GATE(audio_reserved3, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 24);
+CLOCK_GATE(audio_reserved4, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 25);
+CLOCK_GATE(audio_resampleb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 26);
+CLOCK_GATE(audio_tovad, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 27);
+CLOCK_GATE(audio_audiolocker, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 28);
+CLOCK_GATE(audio_spdifin_lb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 29);
+CLOCK_GATE(audio_fratv, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 30);
+CLOCK_GATE(audio_frhdmirx, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN0), 31);
+
+CLOCK_GATE(audio_frddrd, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 0);
+CLOCK_GATE(audio_toddrd, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 1);
+CLOCK_GATE(audio_loopbackb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 2);
+CLOCK_GATE(audio_frddre, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 3);
+CLOCK_GATE(audio_toddre, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 4);
+CLOCK_GATE(audio_earctx, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 5);
+CLOCK_GATE(audio_earcrx, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 6);
+CLOCK_GATE(audio_resampleb_old, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 7);
+CLOCK_GATE(audio_locker, AUD_ADDR_OFFSET(EE_AUDIO_CLK_GATE_EN1), 8);
+
+
+static struct clk_gate *tm2_audio_clk_gates[] = {
+       &audio_ddr_arb,
+       &audio_pdm,
+       &audio_tdmina,
+       &audio_tdminb,
+       &audio_tdminc,
+       &audio_tdminlb,
+       &audio_tdmouta,
+       &audio_tdmoutb,
+       &audio_tdmoutc,
+       &audio_frddra,
+       &audio_frddrb,
+       &audio_frddrc,
+       &audio_toddra,
+       &audio_toddrb,
+       &audio_toddrc,
+       &audio_loopbacka,
+       &audio_spdifin,
+       &audio_spdifout,
+       &audio_resamplea,
+       &audio_reserved0,
+       &audio_reserved1,
+       &audio_spdifoutb,
+       &audio_eqdrc,
+       &audio_reserved2,
+       &audio_reserved3,
+       &audio_reserved4,
+       &audio_resampleb,
+       &audio_tovad,
+       &audio_audiolocker,
+       &audio_spdifin_lb,
+       &audio_fratv,
+       &audio_frhdmirx,
+
+       &audio_frddrd,
+       &audio_toddrd,
+       &audio_loopbackb,
+       &audio_frddre,
+       &audio_toddre,
+       &audio_earctx,
+       &audio_earcrx,
+       &audio_resampleb_old,
+       &audio_locker,
+};
+
+/* Array of all clocks provided by this provider */
+static struct clk_hw *tm2_audio_clk_hws[] = {
+       [CLKID_AUDIO_GATE_DDR_ARB]     = &audio_ddr_arb.hw,
+       [CLKID_AUDIO_GATE_PDM]         = &audio_pdm.hw,
+       [CLKID_AUDIO_GATE_TDMINA]      = &audio_tdmina.hw,
+       [CLKID_AUDIO_GATE_TDMINB]      = &audio_tdminb.hw,
+       [CLKID_AUDIO_GATE_TDMINC]      = &audio_tdminc.hw,
+       [CLKID_AUDIO_GATE_TDMINLB]     = &audio_tdminlb.hw,
+       [CLKID_AUDIO_GATE_TDMOUTA]     = &audio_tdmouta.hw,
+       [CLKID_AUDIO_GATE_TDMOUTB]     = &audio_tdmoutb.hw,
+       [CLKID_AUDIO_GATE_TDMOUTC]     = &audio_tdmoutc.hw,
+       [CLKID_AUDIO_GATE_FRDDRA]      = &audio_frddra.hw,
+       [CLKID_AUDIO_GATE_FRDDRB]      = &audio_frddrb.hw,
+       [CLKID_AUDIO_GATE_FRDDRC]      = &audio_frddrc.hw,
+       [CLKID_AUDIO_GATE_TODDRA]      = &audio_toddra.hw,
+       [CLKID_AUDIO_GATE_TODDRB]      = &audio_toddrb.hw,
+       [CLKID_AUDIO_GATE_TODDRC]      = &audio_toddrc.hw,
+       [CLKID_AUDIO_GATE_LOOPBACKA]   = &audio_loopbacka.hw,
+       [CLKID_AUDIO_GATE_SPDIFIN]     = &audio_spdifin.hw,
+       [CLKID_AUDIO_GATE_SPDIFOUT_A]  = &audio_spdifout.hw,
+       [CLKID_AUDIO_GATE_RESAMPLEA]   = &audio_resamplea.hw,
+       [CLKID_AUDIO_GATE_RESERVED0]   = &audio_reserved0.hw,
+       [CLKID_AUDIO_GATE_RESERVED1]   = &audio_reserved1.hw,
+       [CLKID_AUDIO_GATE_SPDIFOUT_B]  = &audio_spdifoutb.hw,
+       [CLKID_AUDIO_GATE_EQDRC]       = &audio_eqdrc.hw,
+       [CLKID_AUDIO_GATE_RESERVED2]   = &audio_reserved2.hw,
+       [CLKID_AUDIO_GATE_RESERVED3]   = &audio_reserved3.hw,
+       [CLKID_AUDIO_GATE_RESERVED4]   = &audio_reserved4.hw,
+       [CLKID_AUDIO_GATE_RESAMPLEB]   = &audio_resampleb.hw,
+       [CLKID_AUDIO_GATE_TOVAD]       = &audio_tovad.hw,
+       [CLKID_AUDIO_GATE_AUDIOLOCKER] = &audio_audiolocker.hw,
+       [CLKID_AUDIO_GATE_SPDIFIN_LB]  = &audio_spdifin_lb.hw,
+       [CLKID_AUDIO_GATE_FRATV]       = &audio_fratv.hw,
+       [CLKID_AUDIO_GATE_FRHDMIRX]    = &audio_frhdmirx.hw,
+
+       [CLKID_AUDIO_GATE_FRDDRD]      = &audio_frddrd.hw,
+       [CLKID_AUDIO_GATE_TODDRD]      = &audio_toddrd.hw,
+       [CLKID_AUDIO_GATE_LOOPBACKB]   = &audio_loopbackb.hw,
+       [CLKID_AUDIO_GATE_FRDDRE]      = &audio_frddre.hw,
+       [CLKID_AUDIO_GATE_TODDRE]      = &audio_toddre.hw,
+       [CLKID_AUDIO_GATE_EARCTX]      = &audio_earctx.hw,
+       [CLKID_AUDIO_GATE_EARCRX]      = &audio_earcrx.hw,
+       [CLKID_AUDIO_GATE_RESAMPLEB_OLD] = &audio_resampleb_old.hw,
+       [CLKID_AUDIO_GATE_LOCKER]      = &audio_locker.hw,
+};
+
+static int tm2_clk_gates_init(struct clk **clks, void __iomem *iobase)
+{
+       int clkid;
+
+       if (ARRAY_SIZE(tm2_audio_clk_gates) != MCLK_BASE) {
+               pr_err("check clk gates number\n");
+               return -EINVAL;
+       }
+
+       for (clkid = 0; clkid < MCLK_BASE; clkid++) {
+               tm2_audio_clk_gates[clkid]->reg = iobase;
+               clks[clkid] = clk_register(NULL, tm2_audio_clk_hws[clkid]);
+               WARN_ON(IS_ERR_OR_NULL(clks[clkid]));
+       }
+
+       return 0;
+}
+
+/* mclk_a */
+CLOCK_COM_MUX(mclk_a, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_A_CTRL(1)), 0x7, 24);
+CLOCK_COM_DIV(mclk_a, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_A_CTRL(1)), 0, 16);
+CLOCK_COM_GATE(mclk_a, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_A_CTRL(1)), 31);
+/* mclk_b */
+CLOCK_COM_MUX(mclk_b, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_B_CTRL(1)), 0x7, 24);
+CLOCK_COM_DIV(mclk_b, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_B_CTRL(1)), 0, 16);
+CLOCK_COM_GATE(mclk_b, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_B_CTRL(1)), 31);
+/* mclk_c */
+CLOCK_COM_MUX(mclk_c, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_C_CTRL(1)), 0x7, 24);
+CLOCK_COM_DIV(mclk_c, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_C_CTRL(1)), 0, 16);
+CLOCK_COM_GATE(mclk_c, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_C_CTRL(1)), 31);
+/* mclk_d */
+CLOCK_COM_MUX(mclk_d, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_D_CTRL(1)), 0x7, 24);
+CLOCK_COM_DIV(mclk_d, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_D_CTRL(1)), 0, 16);
+CLOCK_COM_GATE(mclk_d, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_D_CTRL(1)), 31);
+/* mclk_e */
+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_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);
+CLOCK_COM_GATE(mclk_f, AUD_ADDR_OFFSET(EE_AUDIO_MCLK_F_CTRL(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);
+CLOCK_COM_GATE(spdifin, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFIN_CTRL), 31);
+/* spdifout */
+CLOCK_COM_MUX(spdifout, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_CTRL), 0x7, 24);
+CLOCK_COM_DIV(spdifout, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_CTRL), 0, 10);
+CLOCK_COM_GATE(spdifout, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_CTRL), 31);
+/* audio resample_a */
+CLOCK_COM_MUX(resample_a,
+       AUD_ADDR_OFFSET(EE_AUDIO_CLK_RESAMPLEA_CTRL), 0xf, 24);
+CLOCK_COM_DIV(resample_a, AUD_ADDR_OFFSET(EE_AUDIO_CLK_RESAMPLEA_CTRL), 0, 8);
+CLOCK_COM_GATE(resample_a, AUD_ADDR_OFFSET(EE_AUDIO_CLK_RESAMPLEA_CTRL), 31);
+/* audio locker_out */
+CLOCK_COM_MUX(locker_out, AUD_ADDR_OFFSET(EE_AUDIO_CLK_LOCKER_CTRL), 0xf, 24);
+CLOCK_COM_DIV(locker_out, AUD_ADDR_OFFSET(EE_AUDIO_CLK_LOCKER_CTRL), 16, 8);
+CLOCK_COM_GATE(locker_out, AUD_ADDR_OFFSET(EE_AUDIO_CLK_LOCKER_CTRL), 31);
+/* audio locker_in */
+CLOCK_COM_MUX(locker_in, AUD_ADDR_OFFSET(EE_AUDIO_CLK_LOCKER_CTRL), 0xf, 8);
+CLOCK_COM_DIV(locker_in, AUD_ADDR_OFFSET(EE_AUDIO_CLK_LOCKER_CTRL), 0, 8);
+CLOCK_COM_GATE(locker_in, AUD_ADDR_OFFSET(EE_AUDIO_CLK_LOCKER_CTRL), 15);
+/* pdmin0 */
+CLOCK_COM_MUX(pdmin0, AUD_ADDR_OFFSET(EE_AUDIO_CLK_PDMIN_CTRL0), 0x7, 24);
+CLOCK_COM_DIV(pdmin0, AUD_ADDR_OFFSET(EE_AUDIO_CLK_PDMIN_CTRL0), 0, 16);
+CLOCK_COM_GATE(pdmin0, AUD_ADDR_OFFSET(EE_AUDIO_CLK_PDMIN_CTRL0), 31);
+/* pdmin1 */
+CLOCK_COM_MUX(pdmin1, AUD_ADDR_OFFSET(EE_AUDIO_CLK_PDMIN_CTRL1), 0x7, 24);
+CLOCK_COM_DIV(pdmin1, AUD_ADDR_OFFSET(EE_AUDIO_CLK_PDMIN_CTRL1), 0, 16);
+CLOCK_COM_GATE(pdmin1, AUD_ADDR_OFFSET(EE_AUDIO_CLK_PDMIN_CTRL1), 31);
+/* spdifout b*/
+CLOCK_COM_MUX(spdifout_b,
+       AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_B_CTRL), 0x7, 24);
+CLOCK_COM_DIV(spdifout_b, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_B_CTRL), 0, 10);
+CLOCK_COM_GATE(spdifout_b, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_B_CTRL), 31);
+/* audio resample_b */
+CLOCK_COM_MUX(resample_b,
+       AUD_ADDR_OFFSET(EE_AUDIO_CLK_RESAMPLEB_CTRL), 0xf, 24);
+CLOCK_COM_DIV(resample_b, AUD_ADDR_OFFSET(EE_AUDIO_CLK_RESAMPLEB_CTRL), 0, 8);
+CLOCK_COM_GATE(resample_b, AUD_ADDR_OFFSET(EE_AUDIO_CLK_RESAMPLEB_CTRL), 31);
+/* spdifin_lb, div is a fake */
+CLOCK_COM_MUX(spdifin_lb,
+       AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_B_CTRL), 0x1, 30);
+CLOCK_COM_DIV(spdifin_lb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_B_CTRL), 0, 29);
+CLOCK_COM_GATE(spdifin_lb, AUD_ADDR_OFFSET(EE_AUDIO_CLK_SPDIFOUT_B_CTRL), 31);
+/* audio eqdrc  */
+CLOCK_COM_MUX(eqdrc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_EQDRC_CTRL0), 0x7, 24);
+CLOCK_COM_DIV(eqdrc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_EQDRC_CTRL0), 0, 16);
+CLOCK_COM_GATE(eqdrc, AUD_ADDR_OFFSET(EE_AUDIO_CLK_EQDRC_CTRL0), 31);
+/* audio vad  */
+CLOCK_COM_MUX(vad, AUD_ADDR_OFFSET(EE_AUDIO_VAD_CLK_CTRL), 0x7, 24);
+CLOCK_COM_DIV(vad, AUD_ADDR_OFFSET(EE_AUDIO_VAD_CLK_CTRL), 0, 16);
+CLOCK_COM_GATE(vad, AUD_ADDR_OFFSET(EE_AUDIO_VAD_CLK_CTRL), 31);
+/* EARC TX CMDC */
+CLOCK_COM_MUX(earctx_cmdc,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCTX_CMDC_CLK_CTRL), 0x7, 24);
+CLOCK_COM_DIV(earctx_cmdc,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCTX_CMDC_CLK_CTRL), 0, 16);
+CLOCK_COM_GATE(earctx_cmdc,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCTX_CMDC_CLK_CTRL), 31);
+/* EARC TX DMAC */
+CLOCK_COM_MUX(earctx_dmac,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCTX_DMAC_CLK_CTRL), 0x7, 24);
+CLOCK_COM_DIV(earctx_dmac,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCTX_DMAC_CLK_CTRL), 0, 16);
+CLOCK_COM_GATE(earctx_dmac,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCTX_DMAC_CLK_CTRL), 31);
+/* EARC RX CMDC */
+CLOCK_COM_MUX(earcrx_cmdc,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCRX_CMDC_CLK_CTRL), 0x7, 24);
+CLOCK_COM_DIV(earcrx_cmdc,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCRX_CMDC_CLK_CTRL), 0, 16);
+CLOCK_COM_GATE(earcrx_cmdc,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCRX_CMDC_CLK_CTRL), 31);
+/* EARC RX DMAC */
+CLOCK_COM_MUX(earcrx_dmac,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCRX_DMAC_CLK_CTRL), 0x7, 24);
+CLOCK_COM_DIV(earcrx_dmac,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCRX_DMAC_CLK_CTRL), 0, 16);
+CLOCK_COM_GATE(earcrx_dmac,
+       AUD_ADDR_OFFSET(EE_AUDIO_EARCRX_DMAC_CLK_CTRL), 31);
+
+static int tm2_clks_init(struct clk **clks, void __iomem *iobase)
+{
+       IOMAP_COM_CLK(mclk_a, iobase);
+       clks[CLKID_AUDIO_MCLK_A] = REGISTER_CLK_COM(mclk_a);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_A]));
+
+       IOMAP_COM_CLK(mclk_b, iobase);
+       clks[CLKID_AUDIO_MCLK_B] = REGISTER_CLK_COM(mclk_b);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_B]));
+
+       IOMAP_COM_CLK(mclk_c, iobase);
+       clks[CLKID_AUDIO_MCLK_C] = REGISTER_CLK_COM(mclk_c);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_C]));
+
+       IOMAP_COM_CLK(mclk_d, iobase);
+       clks[CLKID_AUDIO_MCLK_D] = REGISTER_CLK_COM(mclk_d);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_D]));
+
+       IOMAP_COM_CLK(mclk_e, iobase);
+       clks[CLKID_AUDIO_MCLK_E] = REGISTER_CLK_COM(mclk_e);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_E]));
+
+       IOMAP_COM_CLK(mclk_f, iobase);
+       clks[CLKID_AUDIO_MCLK_F] = REGISTER_CLK_COM(mclk_f);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_MCLK_F]));
+
+       IOMAP_COM_CLK(spdifin, iobase);
+       clks[CLKID_AUDIO_SPDIFIN] = REGISTER_CLK_COM(spdifin);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_SPDIFIN]));
+
+       IOMAP_COM_CLK(spdifout, iobase);
+       clks[CLKID_AUDIO_SPDIFOUT_A] = REGISTER_CLK_COM(spdifout);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_SPDIFOUT_A]));
+
+       IOMAP_COM_CLK(resample_a, iobase);
+       clks[CLKID_AUDIO_RESAMPLE_A] = REGISTER_AUDIOCLK_COM(resample_a);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_RESAMPLE_A]));
+
+       IOMAP_COM_CLK(locker_out, iobase);
+       clks[CLKID_AUDIO_LOCKER_OUT] = REGISTER_AUDIOCLK_COM(locker_out);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_LOCKER_OUT]));
+
+       IOMAP_COM_CLK(locker_in, iobase);
+       clks[CLKID_AUDIO_LOCKER_IN] = REGISTER_AUDIOCLK_COM(locker_in);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_LOCKER_IN]));
+
+       IOMAP_COM_CLK(pdmin0, iobase);
+       clks[CLKID_AUDIO_PDMIN0] = REGISTER_CLK_COM(pdmin0);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_PDMIN0]));
+
+       IOMAP_COM_CLK(pdmin1, iobase);
+       clks[CLKID_AUDIO_PDMIN1] = REGISTER_CLK_COM(pdmin1);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_PDMIN1]));
+
+       IOMAP_COM_CLK(spdifout_b, iobase);
+       clks[CLKID_AUDIO_SPDIFOUT_B] = REGISTER_CLK_COM(spdifout_b);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_SPDIFOUT_B]));
+
+       IOMAP_COM_CLK(resample_b, iobase);
+       clks[CLKID_AUDIO_RESAMPLE_B] = REGISTER_AUDIOCLK_COM(resample_b);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_RESAMPLE_B]));
+
+       IOMAP_COM_CLK(spdifin_lb, iobase);
+       clks[CLKID_AUDIO_SPDIFIN_LB] = REGISTER_CLK_COM(spdifin_lb);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_SPDIFIN_LB]));
+
+       IOMAP_COM_CLK(eqdrc, iobase);
+       clks[CLKID_AUDIO_EQDRC] = REGISTER_CLK_COM(eqdrc);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_EQDRC]));
+
+       IOMAP_COM_CLK(vad, iobase);
+       clks[CLKID_AUDIO_VAD] = REGISTER_CLK_COM(vad);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_AUDIO_VAD]));
+
+       IOMAP_COM_CLK(earctx_cmdc, iobase);
+       clks[CLKID_EARCTX_CMDC] = REGISTER_CLK_COM(earctx_cmdc);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_EARCTX_CMDC]));
+
+       IOMAP_COM_CLK(earctx_dmac, iobase);
+       clks[CLKID_EARCTX_DMAC] = REGISTER_CLK_COM(earctx_dmac);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_EARCTX_DMAC]));
+
+       IOMAP_COM_CLK(earcrx_cmdc, iobase);
+       clks[CLKID_EARCRX_CMDC] = REGISTER_CLK_COM(earcrx_cmdc);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_EARCRX_CMDC]));
+
+       IOMAP_COM_CLK(earcrx_dmac, iobase);
+       clks[CLKID_EARCRX_DMAC] = REGISTER_CLK_COM(earcrx_dmac);
+       WARN_ON(IS_ERR_OR_NULL(clks[CLKID_EARCRX_DMAC]));
+
+       return 0;
+}
+
+struct audio_clk_init tm2_audio_clks_init = {
+       .clk_num   = NUM_AUDIO_CLKS,
+       .clk_gates = tm2_clk_gates_init,
+       .clks      = tm2_clks_init,
+};