On Tue, 05 Jan 2016 12:44:49 +0100, Vinod Koul wrote: > > From: Sanyog Kale <sanyog.r.kale@xxxxxxxxx> > > 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@xxxxxxxxx> > Signed-off-by: Vinod Koul <vinod.koul@xxxxxxxxx> > --- > sound/soc/soc-pcm.c | 28 ++++++++++++++++++++-------- > 1 file 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: > out: > mutex_unlock(&rtd->pcm_mutex); > > - pm_runtime_put(platform->dev); > - for (i = 0; i < rtd->num_codecs; i++) > - pm_runtime_put(rtd->codec_dais[i]->dev); > - pm_runtime_put(cpu_dai->dev); > + pm_runtime_mark_last_busy(platform->dev); > + pm_runtime_put_autosuspend(platform->dev); > + for (i = 0; i < rtd->num_codecs; i++) { > + pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev); > + pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev); > + } > + > + pm_runtime_mark_last_busy(cpu_dai->dev); > + pm_runtime_put_autosuspend(cpu_dai->dev); > for (i = 0; i < rtd->num_codecs; i++) { > if (!rtd->codec_dais[i]->active) > pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); > @@ -706,10 +711,17 @@ static int soc_pcm_close(struct snd_pcm_substream *substream) > > mutex_unlock(&rtd->pcm_mutex); > > - pm_runtime_put(platform->dev); > - for (i = 0; i < rtd->num_codecs; i++) > - pm_runtime_put(rtd->codec_dais[i]->dev); > - pm_runtime_put(cpu_dai->dev); > + pm_runtime_mark_last_busy(platform->dev); > + pm_runtime_put_autosuspend(platform->dev); > + > + for (i = 0; i < rtd->num_codecs; i++) { > + pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev); > + pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev); > + } > + > + pm_runtime_mark_last_busy(cpu_dai->dev); > + pm_runtime_put_autosuspend(cpu_dai->dev); > + > for (i = 0; i < rtd->num_codecs; i++) { > if (!rtd->codec_dais[i]->active) > pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); Lots of duplicated codes there... Worth to have a common helper? Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel