ASoC: wcd9335: reduce speaker teardown latency
In tasha codec, speaker teardown latency is high. Acquire clock gear for complete teardown sequence to improve latency. CRs-Fixed: 1065561 Change-Id: I7db756e363cb66d22eb5d516e6e512e89e26e6a3 Signed-off-by: Laxminath Kasam <lkasam@codeaurora.org>
This commit is contained in:
parent
9b82a4c589
commit
e99fdc1340
1 changed files with 27 additions and 7 deletions
|
@ -3136,8 +3136,13 @@ static int tasha_codec_enable_slimrx(struct snd_soc_dapm_widget *w,
|
||||||
dai->rate, dai->bit_width,
|
dai->rate, dai->bit_width,
|
||||||
&dai->grph);
|
&dai->grph);
|
||||||
break;
|
break;
|
||||||
|
case SND_SOC_DAPM_PRE_PMD:
|
||||||
|
if (!test_bit(SB_CLK_GEAR, &tasha_p->status_mask)) {
|
||||||
|
tasha_codec_vote_max_bw(codec, true);
|
||||||
|
set_bit(SB_CLK_GEAR, &tasha_p->status_mask);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SND_SOC_DAPM_POST_PMD:
|
case SND_SOC_DAPM_POST_PMD:
|
||||||
tasha_codec_vote_max_bw(codec, true);
|
|
||||||
ret = wcd9xxx_disconnect_port(core, &dai->wcd9xxx_ch_list,
|
ret = wcd9xxx_disconnect_port(core, &dai->wcd9xxx_ch_list,
|
||||||
dai->grph);
|
dai->grph);
|
||||||
dev_dbg(codec->dev, "%s: Disconnect RX port, ret = %d\n",
|
dev_dbg(codec->dev, "%s: Disconnect RX port, ret = %d\n",
|
||||||
|
@ -3151,7 +3156,6 @@ static int tasha_codec_enable_slimrx(struct snd_soc_dapm_widget *w,
|
||||||
__func__);
|
__func__);
|
||||||
ret = wcd9xxx_close_slim_sch_rx(core, &dai->wcd9xxx_ch_list,
|
ret = wcd9xxx_close_slim_sch_rx(core, &dai->wcd9xxx_ch_list,
|
||||||
dai->grph);
|
dai->grph);
|
||||||
tasha_codec_vote_max_bw(codec, false);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -10106,20 +10110,25 @@ static const struct snd_soc_dapm_widget tasha_dapm_widgets[] = {
|
||||||
SND_SOC_DAPM_OUTPUT("ANC EAR"),
|
SND_SOC_DAPM_OUTPUT("ANC EAR"),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF1 PB", "AIF1 Playback", 0, SND_SOC_NOPM,
|
SND_SOC_DAPM_AIF_IN_E("AIF1 PB", "AIF1 Playback", 0, SND_SOC_NOPM,
|
||||||
AIF1_PB, 0, tasha_codec_enable_slimrx,
|
AIF1_PB, 0, tasha_codec_enable_slimrx,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD |
|
||||||
|
SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF2 PB", "AIF2 Playback", 0, SND_SOC_NOPM,
|
SND_SOC_DAPM_AIF_IN_E("AIF2 PB", "AIF2 Playback", 0, SND_SOC_NOPM,
|
||||||
AIF2_PB, 0, tasha_codec_enable_slimrx,
|
AIF2_PB, 0, tasha_codec_enable_slimrx,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD |
|
||||||
|
SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF3 PB", "AIF3 Playback", 0, SND_SOC_NOPM,
|
SND_SOC_DAPM_AIF_IN_E("AIF3 PB", "AIF3 Playback", 0, SND_SOC_NOPM,
|
||||||
AIF3_PB, 0, tasha_codec_enable_slimrx,
|
AIF3_PB, 0, tasha_codec_enable_slimrx,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD |
|
||||||
|
SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF4 PB", "AIF4 Playback", 0, SND_SOC_NOPM,
|
SND_SOC_DAPM_AIF_IN_E("AIF4 PB", "AIF4 Playback", 0, SND_SOC_NOPM,
|
||||||
AIF4_PB, 0, tasha_codec_enable_slimrx,
|
AIF4_PB, 0, tasha_codec_enable_slimrx,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD |
|
||||||
|
SND_SOC_DAPM_POST_PMD),
|
||||||
SND_SOC_DAPM_AIF_IN_E("AIF MIX1 PB", "AIF Mix Playback", 0,
|
SND_SOC_DAPM_AIF_IN_E("AIF MIX1 PB", "AIF Mix Playback", 0,
|
||||||
SND_SOC_NOPM, AIF_MIX1_PB, 0,
|
SND_SOC_NOPM, AIF_MIX1_PB, 0,
|
||||||
tasha_codec_enable_slimrx,
|
tasha_codec_enable_slimrx,
|
||||||
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
|
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD |
|
||||||
|
SND_SOC_DAPM_POST_PMD),
|
||||||
|
|
||||||
SND_SOC_DAPM_MUX("SLIM RX0 MUX", SND_SOC_NOPM, TASHA_RX0, 0,
|
SND_SOC_DAPM_MUX("SLIM RX0 MUX", SND_SOC_NOPM, TASHA_RX0, 0,
|
||||||
&slim_rx_mux[TASHA_RX0]),
|
&slim_rx_mux[TASHA_RX0]),
|
||||||
|
@ -10971,8 +10980,19 @@ static int tasha_startup(struct snd_pcm_substream *substream,
|
||||||
static void tasha_shutdown(struct snd_pcm_substream *substream,
|
static void tasha_shutdown(struct snd_pcm_substream *substream,
|
||||||
struct snd_soc_dai *dai)
|
struct snd_soc_dai *dai)
|
||||||
{
|
{
|
||||||
|
struct tasha_priv *tasha = snd_soc_codec_get_drvdata(dai->codec);
|
||||||
|
|
||||||
pr_debug("%s(): substream = %s stream = %d\n" , __func__,
|
pr_debug("%s(): substream = %s stream = %d\n" , __func__,
|
||||||
substream->name, substream->stream);
|
substream->name, substream->stream);
|
||||||
|
|
||||||
|
if (tasha->intf_type == WCD9XXX_INTERFACE_TYPE_I2C)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((substream->stream == SNDRV_PCM_STREAM_PLAYBACK) &&
|
||||||
|
test_bit(SB_CLK_GEAR, &tasha->status_mask)) {
|
||||||
|
tasha_codec_vote_max_bw(dai->codec, false);
|
||||||
|
clear_bit(SB_CLK_GEAR, &tasha->status_mask);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tasha_set_decimator_rate(struct snd_soc_dai *dai,
|
static int tasha_set_decimator_rate(struct snd_soc_dai *dai,
|
||||||
|
|
Loading…
Add table
Reference in a new issue