audio: add clk tuning_enable/start_enable control in dts [1/1]
authorZhe Wang <Zhe.Wang@amlogic.com>
Tue, 14 May 2019 06:14:11 +0000 (14:14 +0800)
committerTao Zeng <tao.zeng@amlogic.com>
Tue, 14 May 2019 07:54:30 +0000 (00:54 -0700)
PD#SWPL-8306

Problem:
speaker without audio on S400. sideeffect of SWPL-7680

Solution:
add control interface in dts to enable clk tuning
and start clk before codec init

Verify:
verify on S400

Change-Id: Ic9f4e7b13b7d4ced18852346cdc7cf5f48e510dc
Signed-off-by: Zhe Wang <Zhe.Wang@amlogic.com>
26 files changed:
arch/arm/boot/dts/amlogic/sm1_s905d3_ac200.dts
arch/arm/boot/dts/amlogic/sm1_s905d3_ac202.dts
arch/arm/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts
arch/arm/boot/dts/amlogic/sm1_s905d3_skt.dts
arch/arm/boot/dts/amlogic/sm1_s905x3_ac213.dts
arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts
arch/arm/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
arch/arm/boot/dts/amlogic/tl1_t962x2_x301_2g.dts
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/sm1_s905d3_ac200.dts
arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202.dts
arch/arm64/boot/dts/amlogic/sm1_s905d3_ac202_1g.dts
arch/arm64/boot/dts/amlogic/sm1_s905d3_skt.dts
arch/arm64/boot/dts/amlogic/sm1_s905x3_ac213.dts
arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts
arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_1g.dts
arch/arm64/boot/dts/amlogic/tl1_t962x2_x301_2g.dts
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
sound/soc/amlogic/auge/spdif.c
sound/soc/amlogic/auge/tdm.c

index 98e2fa0..799d4cd 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout &spdifin>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index b4c97f4..e70c436 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout>; /* bob remove &spdifin*/
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index 1fbfb81..69d12ba 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout>;/* bob remove &spdifin*/
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index 2fc59d6..5faede8 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <0>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout &spdifin>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index de23031..ea6dff0 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout &spdifin>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index 805132d..5a406b0 100644 (file)
                acodec_adc = <1>;
                mclk_pad = <0>;  /* 0: mclk_0; 1: mclk_1 */
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index a2d6f6a..48383fd 100644 (file)
                acodec_adc = <1>;
                mclk_pad = <0>;  /* 0: mclk_0; 1: mclk_1 */
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 97c8908..5f80bbc 100644 (file)
                acodec_adc = <1>;
                mclk_pad = <0>;  /* 0: mclk_0; 1: mclk_1 */
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
index 63c6016..dd6f76d 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
 
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index ee97829..c39ae3e 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
 
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index e1d25cc..2e2f38c 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
 
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 54b315e..dddc68e 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
 
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 9609a03..ac05450 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout /* &spdifin */>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index e6c7d24..d3e0666 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout /* &spdifin */>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index ea75088..f89640c 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout /* &spdifin */>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index 73f3343..8ca1072 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <0>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout &spdifin>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index 079f59b..f19f86e 100644 (file)
                 */
                samesource_sel = <3>;
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
 
                pinctrl-names = "spdif_pins";
                pinctrl-0 = <&spdifout &spdifin>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
+
                status = "okay";
        };
        spdifb: spdif@1 {
index bd3b92d..9f00292 100644 (file)
                acodec_adc = <1>;
                mclk_pad = <0>;  /* 0: mclk_0; 1: mclk_1 */
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 8ddea1d..ce567e9 100644 (file)
                acodec_adc = <1>;
                mclk_pad = <0>;  /* 0: mclk_0; 1: mclk_1 */
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index cd6c7a7..98ec97e 100644 (file)
                acodec_adc = <1>;
                mclk_pad = <0>;  /* 0: mclk_0; 1: mclk_1 */
 
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index b111cc9..f044545 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
 
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 7af791f..db003a7 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
 
                status = "okay";
 
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 590a133..a2576f3 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
 
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 63e8232..bd0d17c 100644 (file)
 
                /* In for ACODEC_ADC */
                acodec_adc = <1>;
+               /*enable default mclk(12.288M), before extern codec start*/
+               start_clk_enable = <1>;
 
+               /*tdm clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
 
                /* !!!For --TV platform-- ONLY */
                asrc_id = <0>;
                auto_asrc = <3>;
 
+               /*spdif clk tuning enable*/
+               clk_tuning_enable = <1>;
                status = "okay";
        };
 
index 61a4dc9..03ed3a9 100644 (file)
@@ -114,6 +114,7 @@ struct aml_spdif {
        /* mixer control vals */
        bool mute;
        enum SPDIF_SRC spdifin_src;
+       int clk_tuning_enable;
 };
 
 static const struct snd_pcm_hardware aml_spdif_hardware = {
@@ -400,7 +401,9 @@ static const struct snd_kcontrol_new snd_spdif_controls[] = {
                                0, aml_get_hdmi_out_audio,
                                aml_set_hdmi_out_audio),
 #endif
+};
 
+static const struct snd_kcontrol_new snd_spdif_clk_controls[] = {
        SOC_SINGLE_EXT("SPDIF CLK Fine Setting",
                                0, 0, 2000000, 0,
                                spdif_clk_get,
@@ -985,6 +988,15 @@ static int aml_dai_spdif_probe(struct snd_soc_dai *cpu_dai)
                        pr_err("%s, failed add snd spdif controls\n", __func__);
        }
 
+       if (p_spdif->clk_tuning_enable == 1) {
+               ret = snd_soc_add_dai_controls(cpu_dai,
+                               snd_spdif_clk_controls,
+                               ARRAY_SIZE(snd_spdif_clk_controls));
+               if (ret < 0)
+                       pr_err("%s, failed add snd spdif clk controls\n",
+                               __func__);
+       }
+
        return 0;
 }
 
@@ -1511,6 +1523,15 @@ static int aml_spdif_parse_of(struct platform_device *pdev)
                return PTR_ERR(p_spdif->clk_spdifout);
        }
 
+       ret = of_property_read_u32(pdev->dev.of_node,
+                               "clk_tuning_enable",
+                               &p_spdif->clk_tuning_enable);
+       if (ret < 0)
+               p_spdif->clk_tuning_enable = 0;
+       else
+               pr_info("Spdif id %d tuning clk enable:%d\n",
+                       p_spdif->id, p_spdif->clk_tuning_enable);
+
        return 0;
 }
 
index 7a2f5f8..e31c9f0 100644 (file)
@@ -110,6 +110,8 @@ struct aml_tdm {
 
        /* tdmin_lb src sel */
        int tdmin_lb_src;
+       int start_clk_enable;
+       int clk_tuning_enable;
 };
 
 static const struct snd_pcm_hardware aml_tdm_hardware = {
@@ -199,21 +201,19 @@ static const struct soc_enum i2sin_clk_enum[] = {
                        i2sin_clk),
 };
 
-
-
 static const struct snd_kcontrol_new snd_tdm_controls[] = {
        SOC_ENUM_EXT("I2SIn CLK", i2sin_clk_enum,
                                tdmin_clk_get,
                                NULL),
+};
 
+static const struct snd_kcontrol_new snd_tdm_clk_controls[] = {
        SOC_SINGLE_EXT("TDM MCLK Fine Setting",
                                0, 0, 2000000, 0,
                                tdm_clk_get,
                                tdm_clk_set),
 };
 
-
-
 static irqreturn_t aml_tdm_ddr_isr(int irq, void *devid)
 {
        struct snd_pcm_substream *substream = (struct snd_pcm_substream *)devid;
@@ -1283,7 +1283,16 @@ static int aml_dai_tdm_probe(struct snd_soc_dai *cpu_dai)
        ret = snd_soc_add_dai_controls(cpu_dai, snd_tdm_controls,
                                        ARRAY_SIZE(snd_tdm_controls));
        if (ret < 0)
-               pr_err("%s, failed add snd spdif controls\n", __func__);
+               pr_err("%s, failed add snd tdm controls\n", __func__);
+
+       if (p_tdm->clk_tuning_enable == 1) {
+               ret = snd_soc_add_dai_controls(cpu_dai,
+                               snd_tdm_clk_controls,
+                               ARRAY_SIZE(snd_tdm_clk_controls));
+               if (ret < 0)
+                       pr_err("%s, failed add snd tdm clk controls\n",
+                               __func__);
+       }
 
        /* config ddr arb */
        aml_tdm_arb_config(p_tdm->actrl);
@@ -1665,8 +1674,17 @@ static int aml_tdm_platform_probe(struct platform_device *pdev)
                /*return PTR_ERR(p_tdm->pin_ctl);*/
        }
 
+       ret = of_property_read_u32(node, "start_clk_enable",
+                               &p_tdm->start_clk_enable);
+       if (ret < 0)
+               p_tdm->start_clk_enable = 0;
+       else
+               pr_info("TDM id %d output clk enable:%d\n",
+                       p_tdm->id, p_tdm->start_clk_enable);
+
        /*set default clk for output*/
-       aml_set_default_tdm_clk(p_tdm);
+       if (p_tdm->start_clk_enable == 1)
+               aml_set_default_tdm_clk(p_tdm);
 
        /* mclk pad ctrl */
        ret = of_property_read_u32(node, "mclk_pad",
@@ -1690,6 +1708,14 @@ static int aml_tdm_platform_probe(struct platform_device *pdev)
                return ret;
        }
 
+       ret = of_property_read_u32(node, "clk_tuning_enable",
+                               &p_tdm->clk_tuning_enable);
+       if (ret < 0)
+               p_tdm->clk_tuning_enable = 0;
+       else
+               pr_info("TDM id %d tuning clk enable:%d\n",
+                       p_tdm->id, p_tdm->clk_tuning_enable);
+
        return devm_snd_soc_register_platform(dev, &aml_tdm_platform);
 }