All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gururaja Hebbar <gururaja.hebbar@ti.com>
To: Daniel Mack <zonque@gmail.com>, alsa-devel@alsa-project.org
Cc: marek.belisko@gmail.com, broonie@kernel.org,
	s.neumann@raumfeld.com, nsekhar@ti.com
Subject: Re: [PATCH] ASoC: davinci-mcasp: add support for suspend and resume
Date: Thu, 3 Oct 2013 12:18:58 +0530	[thread overview]
Message-ID: <524D135A.8040405@ti.com> (raw)
In-Reply-To: <1380631802-19498-1-git-send-email-zonque@gmail.com>

On Tuesday 01 October 2013 06:20 PM, Daniel Mack wrote:
> When the system returns from suspend, it looses its configuration. Most
> of it is restored by running a normal audio stream startup, but the DAI
> format is left unset as that's configured on the audio device creation.
> 
> Hence, it suffices here to care for the registers which are touched by
> davinci_mcasp_set_dai_fmt() and restore them when the system is resumed.


I believe you have confirmed below are the only registers/fields which
will lose context across suspend/resume.

Regards
Gururaja


> 
> Signed-off-by: Daniel Mack <zonque@gmail.com>
> ---
>  sound/soc/davinci/davinci-mcasp.c | 39 +++++++++++++++++++++++++++++++++++++++
>  sound/soc/davinci/davinci-mcasp.h | 12 ++++++++++++
>  2 files changed, 51 insertions(+)
> 
> diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
> index 591f853..5023da7 100644
> --- a/sound/soc/davinci/davinci-mcasp.c
> +++ b/sound/soc/davinci/davinci-mcasp.c
> @@ -1272,12 +1272,51 @@ static int davinci_mcasp_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> +#ifdef CONFIG_PM_SLEEP
> +static int davinci_mcasp_suspend(struct device *dev)
> +{
> +	struct davinci_audio_dev *a = dev_get_drvdata(dev);
> +	void __iomem *base = a->base;
> +
> +	a->context.txfmtctl = mcasp_get_reg(base + DAVINCI_MCASP_TXFMCTL_REG);
> +	a->context.rxfmtctl = mcasp_get_reg(base + DAVINCI_MCASP_RXFMCTL_REG);
> +	a->context.txfmt = mcasp_get_reg(base + DAVINCI_MCASP_TXFMT_REG);
> +	a->context.rxfmt = mcasp_get_reg(base + DAVINCI_MCASP_RXFMT_REG);
> +	a->context.aclkxctl = mcasp_get_reg(base + DAVINCI_MCASP_ACLKXCTL_REG);
> +	a->context.aclkrctl = mcasp_get_reg(base + DAVINCI_MCASP_ACLKRCTL_REG);
> +	a->context.pdir = mcasp_get_reg(base + DAVINCI_MCASP_PDIR_REG);
> +
> +	return 0;
> +}
> +
> +static int davinci_mcasp_resume(struct device *dev)
> +{
> +	struct davinci_audio_dev *a = dev_get_drvdata(dev);
> +	void __iomem *base = a->base;
> +
> +	mcasp_set_reg(base + DAVINCI_MCASP_TXFMCTL_REG, a->context.txfmtctl);
> +	mcasp_set_reg(base + DAVINCI_MCASP_RXFMCTL_REG, a->context.rxfmtctl);
> +	mcasp_set_reg(base + DAVINCI_MCASP_TXFMT_REG, a->context.txfmt);
> +	mcasp_set_reg(base + DAVINCI_MCASP_RXFMT_REG, a->context.rxfmt);
> +	mcasp_set_reg(base + DAVINCI_MCASP_ACLKXCTL_REG, a->context.aclkxctl);
> +	mcasp_set_reg(base + DAVINCI_MCASP_ACLKRCTL_REG, a->context.aclkrctl);
> +	mcasp_set_reg(base + DAVINCI_MCASP_PDIR_REG, a->context.pdir);
> +
> +	return 0;
> +}
> +#endif
> +
> +SIMPLE_DEV_PM_OPS(davinci_mcasp_pm_ops,
> +		  davinci_mcasp_suspend,
> +		  davinci_mcasp_resume);
> +
>  static struct platform_driver davinci_mcasp_driver = {
>  	.probe		= davinci_mcasp_probe,
>  	.remove		= davinci_mcasp_remove,
>  	.driver		= {
>  		.name	= "davinci-mcasp",
>  		.owner	= THIS_MODULE,
> +		.pm	= &davinci_mcasp_pm_ops,
>  		.of_match_table = mcasp_dt_ids,
>  	},
>  };
> diff --git a/sound/soc/davinci/davinci-mcasp.h b/sound/soc/davinci/davinci-mcasp.h
> index a9ac0c1..a2e27e1 100644
> --- a/sound/soc/davinci/davinci-mcasp.h
> +++ b/sound/soc/davinci/davinci-mcasp.h
> @@ -43,6 +43,18 @@ struct davinci_audio_dev {
>  	/* McASP FIFO related */
>  	u8	txnumevt;
>  	u8	rxnumevt;
> +
> +#ifdef CONFIG_PM_SLEEP
> +	struct {
> +		u32	txfmtctl;
> +		u32	rxfmtctl;
> +		u32	txfmt;
> +		u32	rxfmt;
> +		u32	aclkxctl;
> +		u32	aclkrctl;
> +		u32	pdir;
> +	} context;
> +#endif
>  };
>  
>  #endif	/* DAVINCI_MCASP_H */
> 

  reply	other threads:[~2013-10-03  6:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-01 12:50 [PATCH] ASoC: davinci-mcasp: add support for suspend and resume Daniel Mack
2013-10-03  6:48 ` Gururaja Hebbar [this message]
2013-10-03 13:22 ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=524D135A.8040405@ti.com \
    --to=gururaja.hebbar@ti.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=marek.belisko@gmail.com \
    --cc=nsekhar@ti.com \
    --cc=s.neumann@raumfeld.com \
    --cc=zonque@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.