Re: [PATCH] ASoC: pcm: allow delayed suspending request by users

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux