diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts index 86206c4a58a2..89e6267ddecf 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_skt.dts @@ -1205,6 +1205,7 @@ "tdma_dout2_z", "tdma_dout3_z"; function = "tdma_out"; + bias-disable; }; }; diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts index ec41b1039c9e..462c23533ba1 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_t309.dts @@ -1476,6 +1476,7 @@ "tdma_fs_z", "tdma_dout0_z"; function = "tdma_out"; + bias-disable; }; }; diff --git a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts index 1f08f982b9af..27c3b1c1a57f 100644 --- a/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts +++ b/arch/arm/boot/dts/amlogic/tl1_t962x2_x301.dts @@ -1203,6 +1203,7 @@ "tdma_fs_z", "tdma_dout0_z"; function = "tdma_out"; + bias-disable; }; }; diff --git a/sound/soc/amlogic/auge/tdm.c b/sound/soc/amlogic/auge/tdm.c index 15dd5bb812af..881c31d4408c 100644 --- a/sound/soc/amlogic/auge/tdm.c +++ b/sound/soc/amlogic/auge/tdm.c @@ -592,9 +592,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"); memset(substream->runtime->dma_area, @@ -614,7 +611,7 @@ static int aml_dai_tdm_trigger(struct snd_pcm_substream *substream, int cmd, aml_toddr_enable(p_tdm->tddr, 0); } aml_tdm_enable(p_tdm->actrl, - substream->stream, p_tdm->id, false); + substream->stream, p_tdm->id, false); break; default: return -EINVAL; @@ -877,6 +874,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 */ diff --git a/sound/soc/amlogic/auge/tdm_hw.c b/sound/soc/amlogic/auge/tdm_hw.c index 2927beb5c2f5..24c079bfe39f 100644 --- a/sound/soc/amlogic/auge/tdm_hw.c +++ b/sound/soc/amlogic/auge/tdm_hw.c @@ -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, diff --git a/sound/soc/amlogic/auge/tdm_hw.h b/sound/soc/amlogic/auge/tdm_hw.h index 791ecaabbabe..04a7b83be8c6 100644 --- a/sound/soc/amlogic/auge/tdm_hw.h +++ b/sound/soc/amlogic/auge/tdm_hw.h @@ -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);