audio: fix H-voltage when tdm disable [1/1]
authorShuai Li <shuai.li@amlogic.com>
Tue, 12 Mar 2019 06:40:20 +0000 (14:40 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Wed, 13 Mar 2019 05:58:44 +0000 (21:58 -0800)
PD#SWPL-2952

Problem:
High voltage will cause the tdmout
data pin wrong I2S data which cause pop.

Solution:
Disable the bias of gpio.

Verify:
I2S data will be low when I2s closed.

Change-Id: If5d68e0f30df074f528dfec21cbe297795bc4ea7
Signed-off-by: Shuai Li <shuai.li@amlogic.com>
arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts
arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts
arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts
arch/arm64/boot/dts/amlogic/tl1_t962x2_t309.dts
arch/arm64/boot/dts/amlogic/tl1_t962x2_x301.dts
sound/soc/amlogic/auge/tdm.c
sound/soc/amlogic/auge/tdm_hw.c
sound/soc/amlogic/auge/tdm_hw.h

index 562e8bb..e3d901f 100644 (file)
                                "tdma_dout2_z",
                                "tdma_dout3_z";
                        function = "tdma_out";
+                       bias-disable;
                };
        };
 
index c8ec735..73621c6 100644 (file)
                                "tdma_fs_z",
                                "tdma_dout0_z";
                        function = "tdma_out";
+                       bias-disable;
                };
        };
 
index 9aac226..402275a 100644 (file)
                                "tdma_fs_z",
                                "tdma_dout0_z";
                        function = "tdma_out";
+                       bias-disable;
                };
        };
 
index 4fa1576..fe252bb 100644 (file)
                                "tdma_fs_z",
                                "tdma_dout0_z";
                        function = "tdma_out";
+                       bias-disable;
                };
        };
 
index 658680a..cf68cd9 100644 (file)
                                "tdma_fs_z",
                                "tdma_dout0_z";
                        function = "tdma_out";
+                       bias-disable;
                };
        };
 
index a4ebd94..79742b3 100644 (file)
@@ -625,9 +625,6 @@ static int aml_dai_tdm_trigger(struct snd_pcm_substream *substream, int cmd,
                        break;
                }
 
-               aml_tdm_enable(p_tdm->actrl,
-                       substream->stream, p_tdm->id, false);
-
                if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
                        dev_info(substream->pcm->card->dev, "tdm playback stop\n");
                        aml_frddr_enable(p_tdm->fddr, 0);
@@ -643,6 +640,8 @@ static int aml_dai_tdm_trigger(struct snd_pcm_substream *substream, int cmd,
                        dev_info(substream->pcm->card->dev, "tdm capture stop\n");
                        aml_toddr_enable(p_tdm->tddr, 0);
                }
+               aml_tdm_enable(p_tdm->actrl,
+                       substream->stream, p_tdm->id, false);
                break;
        default:
                return -EINVAL;
@@ -902,6 +901,14 @@ static int aml_dai_set_tdm_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
        aml_tdm_set_format(p_tdm->actrl,
                &(p_tdm->setting), p_tdm->clk_sel, p_tdm->id, fmt,
                1, 1);
+       if (p_tdm->contns_clk && !IS_ERR(p_tdm->mclk)) {
+               int ret = clk_prepare_enable(p_tdm->mclk);
+
+               if (ret) {
+                       pr_err("Can't enable mclk: %d\n", ret);
+                       return ret;
+               }
+       }
 
 capture:
        /* update skew for ACODEC_ADC */
index f8f89bc..a685e58 100644 (file)
@@ -637,6 +637,16 @@ void aml_tdmout_get_aed_info(int tdmout_id,
                *frddrtype = (val >> 4) & 0x7;
 }
 
+void aml_tdmout_enable_gain(int tdmout_id, int en)
+{
+       unsigned int reg, offset;
+
+       offset = EE_AUDIO_TDMOUT_B_CTRL1
+                       - EE_AUDIO_TDMOUT_A_CTRL1;
+       reg = EE_AUDIO_TDMOUT_A_CTRL1 + offset * tdmout_id;
+       audiobus_update_bits(reg, 0x1 << 26, !!en << 26);
+}
+
 void aml_tdm_clk_pad_select(
        struct aml_audio_controller *actrl,
        int mpad, int mclk_sel,
index 85fe630..2c5fe03 100644 (file)
@@ -71,6 +71,7 @@ extern void aml_tdm_arb_config(
 extern void aml_tdm_fifo_reset(
        struct aml_audio_controller *actrl,
        int stream, int index);
+void aml_tdmout_enable_gain(int tdmout_id, int en);
 
 extern int tdmout_get_frddr_type(int bitwidth);