summaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-pcm.c
diff options
context:
space:
mode:
authorSanyog Kale <sanyog.r.kale@intel.com>2016-01-05 06:44:49 -0500
committerMark Brown <broonie@kernel.org>2016-01-05 11:27:53 -0500
commit3f80978397f447973d278198e8bbde82826cb9c1 (patch)
tree90adb8df001be44af039bf5387c0d1916fe8960d /sound/soc/soc-pcm.c
parent8005c49d9aea74d382f474ce11afbbc7d7130bec (diff)
ASoC: pcm: allow delayed suspending request by users
If a device would like to use delayed suspending then PM recommendation is to set ‘power.use_autosuspend’ flag. To allow users to do so we need to change runtime calls in core to use autosuspend counterparts. For user who do not wish to use delayed suspend not setting the device's ‘power.use_autosuspend’ flag will result in non-delayed suspend even with these APIs which incidentally is also the default behaviour, so only users will be impacted who opt in for this. Signed-off-by: Sanyog Kale <sanyog.r.kale@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/soc-pcm.c')
-rw-r--r--sound/soc/soc-pcm.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index c86dc96e8986..efad248efd4f 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -599,10 +599,15 @@ platform_err:
599out: 599out:
600 mutex_unlock(&rtd->pcm_mutex); 600 mutex_unlock(&rtd->pcm_mutex);
601 601
602 pm_runtime_put(platform->dev); 602 pm_runtime_mark_last_busy(platform->dev);
603 for (i = 0; i < rtd->num_codecs; i++) 603 pm_runtime_put_autosuspend(platform->dev);
604 pm_runtime_put(rtd->codec_dais[i]->dev); 604 for (i = 0; i < rtd->num_codecs; i++) {
605 pm_runtime_put(cpu_dai->dev); 605 pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev);
606 pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev);
607 }
608
609 pm_runtime_mark_last_busy(cpu_dai->dev);
610 pm_runtime_put_autosuspend(cpu_dai->dev);
606 for (i = 0; i < rtd->num_codecs; i++) { 611 for (i = 0; i < rtd->num_codecs; i++) {
607 if (!rtd->codec_dais[i]->active) 612 if (!rtd->codec_dais[i]->active)
608 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); 613 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev);
@@ -706,10 +711,17 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
706 711
707 mutex_unlock(&rtd->pcm_mutex); 712 mutex_unlock(&rtd->pcm_mutex);
708 713
709 pm_runtime_put(platform->dev); 714 pm_runtime_mark_last_busy(platform->dev);
710 for (i = 0; i < rtd->num_codecs; i++) 715 pm_runtime_put_autosuspend(platform->dev);
711 pm_runtime_put(rtd->codec_dais[i]->dev); 716
712 pm_runtime_put(cpu_dai->dev); 717 for (i = 0; i < rtd->num_codecs; i++) {
718 pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev);
719 pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev);
720 }
721
722 pm_runtime_mark_last_busy(cpu_dai->dev);
723 pm_runtime_put_autosuspend(cpu_dai->dev);
724
713 for (i = 0; i < rtd->num_codecs; i++) { 725 for (i = 0; i < rtd->num_codecs; i++) {
714 if (!rtd->codec_dais[i]->active) 726 if (!rtd->codec_dais[i]->active)
715 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); 727 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev);