aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2011-10-14 07:43:33 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-10-14 15:42:21 -0400
commit1d69c5c5de32c355667c105a5fac85c8043128e6 (patch)
treefcfe58ff456b0503c063f2e678d4c09110334b73
parent7a0e67b68701d73b2252bd73f7fd49c54aea1e58 (diff)
ASoC: core: Add flag to ignore pmdown_time at pcm_close
With this flag codec drivers can indicate that it is desired to ignore the pmdown_time for DAPM shutdown sequence when playback stream is stopped. The DAPM sequence will be executed without delay in this case. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--include/sound/soc.h1
-rw-r--r--sound/soc/soc-pcm.c15
2 files changed, 12 insertions, 4 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 858291dc08f9..11cfb5953e06 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -578,6 +578,7 @@ struct snd_soc_codec {
578 578
579 /* dapm */ 579 /* dapm */
580 struct snd_soc_dapm_context dapm; 580 struct snd_soc_dapm_context dapm;
581 unsigned int ignore_pmdown_time:1; /* pmdown_time is ignored at stop */
581 582
582#ifdef CONFIG_DEBUG_FS 583#ifdef CONFIG_DEBUG_FS
583 struct dentry *debugfs_codec_root; 584 struct dentry *debugfs_codec_root;
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 8eb0f0711f8c..ee15337353fa 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -319,10 +319,17 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
319 cpu_dai->runtime = NULL; 319 cpu_dai->runtime = NULL;
320 320
321 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 321 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
322 /* start delayed pop wq here for playback streams */ 322 if (unlikely(codec->ignore_pmdown_time)) {
323 codec_dai->pop_wait = 1; 323 /* powered down playback stream now */
324 schedule_delayed_work(&rtd->delayed_work, 324 snd_soc_dapm_stream_event(rtd,
325 msecs_to_jiffies(rtd->pmdown_time)); 325 codec_dai->driver->playback.stream_name,
326 SND_SOC_DAPM_STREAM_STOP);
327 } else {
328 /* start delayed pop wq here for playback streams */
329 codec_dai->pop_wait = 1;
330 schedule_delayed_work(&rtd->delayed_work,
331 msecs_to_jiffies(rtd->pmdown_time));
332 }
326 } else { 333 } else {
327 /* capture streams can be powered down now */ 334 /* capture streams can be powered down now */
328 snd_soc_dapm_stream_event(rtd, 335 snd_soc_dapm_stream_event(rtd,