[alsa-devel] [PATCH v2] audio: sai: Add Power Management support
This patch adds Power Management support for SAI. Activate regmap cache with REGCACHE_FLAT, and use regmap cache code to save and restore registers in suspend and resume. The Transmit Control Register (TCSR) and Receive Control Register(RCSR) should be volatile registers.
Signed-off-by: Alison Wang alison.wang@freescale.com --- Changes since v1: - Use REGCACHE_FLAT instead of REGCACHE_RBTREE. - Use SIMPLE_DEV_PM_OPS to simplify the code.
sound/soc/fsl/fsl_sai.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index a18fd92..030f71e 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -637,9 +637,11 @@ static bool fsl_sai_readable_reg(struct device *dev, unsigned int reg) static bool fsl_sai_volatile_reg(struct device *dev, unsigned int reg) { switch (reg) { + case FSL_SAI_TCSR: case FSL_SAI_TFR: - case FSL_SAI_RFR: case FSL_SAI_TDR: + case FSL_SAI_RCSR: + case FSL_SAI_RFR: case FSL_SAI_RDR: return true; default: @@ -681,6 +683,7 @@ static const struct regmap_config fsl_sai_regmap_config = { .readable_reg = fsl_sai_readable_reg, .volatile_reg = fsl_sai_volatile_reg, .writeable_reg = fsl_sai_writeable_reg, + .cache_type = REGCACHE_FLAT, };
static int fsl_sai_probe(struct platform_device *pdev) @@ -796,6 +799,31 @@ static int fsl_sai_probe(struct platform_device *pdev) return devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0); }
+#ifdef CONFIG_PM_SLEEP +static int fsl_sai_suspend(struct device *dev) +{ + struct fsl_sai *sai = dev_get_drvdata(dev); + + regcache_cache_only(sai->regmap, true); + regcache_mark_dirty(sai->regmap); + + return 0; +} + +static int fsl_sai_resume(struct device *dev) +{ + struct fsl_sai *sai = dev_get_drvdata(dev); + + /* Restore all registers */ + regcache_cache_only(sai->regmap, false); + regcache_sync(sai->regmap); + + return 0; +} +#endif /* CONFIG_PM_SLEEP */ + +static SIMPLE_DEV_PM_OPS(fsl_sai_pm, fsl_sai_suspend, fsl_sai_resume); + static const struct of_device_id fsl_sai_ids[] = { { .compatible = "fsl,vf610-sai", }, { .compatible = "fsl,imx6sx-sai", }, @@ -807,6 +835,7 @@ static struct platform_driver fsl_sai_driver = { .driver = { .name = "fsl-sai", .of_match_table = fsl_sai_ids, + .pm = &fsl_sai_pm, }, }; module_platform_driver(fsl_sai_driver);
On Mon, Sep 14, 2015 at 05:03:24PM +0800, Alison Wang wrote:
This patch adds Power Management support for SAI. Activate regmap cache with REGCACHE_FLAT, and use regmap cache code to save and restore registers in suspend and resume. The Transmit Control Register (TCSR) and Receive Control Register(RCSR) should be volatile registers.
Signed-off-by: Alison Wang alison.wang@freescale.com
Just to remind that there was a similar patch in review that I just acked. Please send your improvements as an incremental patch after that one gets applied.
Please also pay attention to the patch subject which should follow the pattern of previous patches of the driver: ASoC: fsl_sai: xxxx
Thanks Nicolin
On Mon, Sep 14, 2015 at 05:03:24PM +0800, Alison Wang wrote:
This patch adds Power Management support for SAI. Activate regmap cache with REGCACHE_FLAT, and use regmap cache code
to
save and restore registers in suspend and resume. The Transmit
Control
Register (TCSR) and Receive Control Register(RCSR) should be volatile registers.
Signed-off-by: Alison Wang alison.wang@freescale.com
Just to remind that there was a similar patch in review that I just acked. Please send your improvements as an incremental patch after that one gets applied.
[Alison Wang] Ok, I missed that patch.
Please also pay attention to the patch subject which should follow the pattern of previous patches of the driver: ASoC: fsl_sai: xxxx
[Alison Wang] Ok, thanks.
Best Regards, Alison Wang
On Thu, Sep 17, 2015 at 09:53:57AM +0000, Huan Wang wrote:
On Mon, Sep 14, 2015 at 05:03:24PM +0800, Alison Wang wrote:
Just to remind that there was a similar patch in review that I just acked. Please send your improvements as an incremental patch after that one gets applied.
[Alison Wang] Ok, I missed that patch.
Unless that patch has already been applied I'm not sure what it is but I don't seem to have anything pending in my inbox.
On Thu, Sep 17, 2015 at 12:31:23PM +0100, Mark Brown wrote:
On Thu, Sep 17, 2015 at 09:53:57AM +0000, Huan Wang wrote:
On Mon, Sep 14, 2015 at 05:03:24PM +0800, Alison Wang wrote:
Just to remind that there was a similar patch in review that I just acked. Please send your improvements as an incremental patch after that one gets applied.
[Alison Wang] Ok, I missed that patch.
Unless that patch has already been applied I'm not sure what it is but I don't seem to have anything pending in my inbox.
Zidan can later re-send his patch with my ack to the maillist.
Thanks Nicolin
participants (4)
-
Alison Wang
-
Huan Wang
-
Mark Brown
-
Nicolin Chen