2022-11-17 12:54:46

by Claudiu Beznea

[permalink] [raw]
Subject: [PATCH 0/3] ASoC: mchp-spdiftx: add power saving features

Hi,

This series adds support for runtime PM and system suspend/resume
for Microchip SPDIFTX (patches 2/3, 3/3). Along with it I took the
chance and added a minor cleanup (patch 1/3).

Thank you,
Claudiu Beznea

Claudiu Beznea (3):
ASoC: mchp-spdiftx: simplify locking around ctrl->ch_stat
ASoC: mchp-spdiftx: add runtime pm support
ASoC: mchp-spdiftx: add support for system suspend/resume

sound/soc/atmel/mchp-spdiftx.c | 165 ++++++++++++++++++++++-----------
1 file changed, 113 insertions(+), 52 deletions(-)

--
2.34.1



2022-11-17 13:25:43

by Claudiu Beznea

[permalink] [raw]
Subject: [PATCH 3/3] ASoC: mchp-spdiftx: add support for system suspend/resume

Add support for system suspend/resume by moving the enable/disable
of interrupts in mchp_spdiftx_trigger() on SNDRV_PCM_TRIGGER_SUSPEND/
SNDRV_PCM_TRIGGER_RESUME commands.

Signed-off-by: Claudiu Beznea <[email protected]>
---
sound/soc/atmel/mchp-spdiftx.c | 22 +++++++++++++---------
1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/sound/soc/atmel/mchp-spdiftx.c b/sound/soc/atmel/mchp-spdiftx.c
index ec454e64d85c..dc96a6fbf514 100644
--- a/sound/soc/atmel/mchp-spdiftx.c
+++ b/sound/soc/atmel/mchp-spdiftx.c
@@ -198,6 +198,7 @@ struct mchp_spdiftx_dev {
struct clk *pclk;
struct clk *gclk;
unsigned int fmt;
+ unsigned int suspend_irq;
};

static inline int mchp_spdiftx_is_running(struct mchp_spdiftx_dev *dev)
@@ -318,16 +319,25 @@ static int mchp_spdiftx_trigger(struct snd_pcm_substream *substream, int cmd,
running = !!(mr & SPDIFTX_MR_TXEN_ENABLE);

switch (cmd) {
- case SNDRV_PCM_TRIGGER_START:
case SNDRV_PCM_TRIGGER_RESUME:
+ case SNDRV_PCM_TRIGGER_START:
+ regmap_write(dev->regmap, SPDIFTX_IER, dev->suspend_irq |
+ SPDIFTX_IR_TXUDR | SPDIFTX_IR_TXOVR);
+ dev->suspend_irq = 0;
+ fallthrough;
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
if (!running) {
mr &= ~SPDIFTX_MR_TXEN_MASK;
mr |= SPDIFTX_MR_TXEN_ENABLE;
}
break;
- case SNDRV_PCM_TRIGGER_STOP:
case SNDRV_PCM_TRIGGER_SUSPEND:
+ regmap_read(dev->regmap, SPDIFTX_IMR, &dev->suspend_irq);
+ fallthrough;
+ case SNDRV_PCM_TRIGGER_STOP:
+ regmap_write(dev->regmap, SPDIFTX_IDR, dev->suspend_irq |
+ SPDIFTX_IR_TXUDR | SPDIFTX_IR_TXOVR);
+ fallthrough;
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
if (running) {
mr &= ~SPDIFTX_MR_TXEN_MASK;
@@ -507,10 +517,6 @@ static int mchp_spdiftx_hw_params(struct snd_pcm_substream *substream,
dev_dbg(dev->dev, "%s(): GCLK set to %d\n", __func__,
params_rate(params) * SPDIFTX_GCLK_RATIO);

- /* Enable interrupts */
- regmap_write(dev->regmap, SPDIFTX_IER,
- SPDIFTX_IR_TXUDR | SPDIFTX_IR_TXOVR);
-
regmap_write(dev->regmap, SPDIFTX_MR, mr);

return 0;
@@ -521,9 +527,6 @@ static int mchp_spdiftx_hw_free(struct snd_pcm_substream *substream,
{
struct mchp_spdiftx_dev *dev = snd_soc_dai_get_drvdata(dai);

- regmap_write(dev->regmap, SPDIFTX_IDR,
- SPDIFTX_IR_TXUDR | SPDIFTX_IR_TXOVR);
-
return regmap_write(dev->regmap, SPDIFTX_CR,
SPDIFTX_CR_SWRST | SPDIFTX_CR_FCLR);
}
@@ -785,6 +788,7 @@ static int mchp_spdiftx_runtime_resume(struct device *dev)
}

static const struct dev_pm_ops mchp_spdiftx_pm_ops = {
+ SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, pm_runtime_force_resume)
RUNTIME_PM_OPS(mchp_spdiftx_runtime_suspend, mchp_spdiftx_runtime_resume,
NULL)
};
--
2.34.1


2022-11-18 16:30:01

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH 0/3] ASoC: mchp-spdiftx: add power saving features

On Thu, 17 Nov 2022 14:37:47 +0200, Claudiu Beznea wrote:
> This series adds support for runtime PM and system suspend/resume
> for Microchip SPDIFTX (patches 2/3, 3/3). Along with it I took the
> chance and added a minor cleanup (patch 1/3).
>
> Thank you,
> Claudiu Beznea
>
> [...]

Applied to

broonie/sound.git for-next

Thanks!

[1/3] ASoC: mchp-spdiftx: simplify locking around ctrl->ch_stat
commit: 215450eb8b0fac000a42c1cd52c8966fb5159037
[2/3] ASoC: mchp-spdiftx: add runtime pm support
commit: 4bf54ca60f99643cfaa3e5b532f139f6501f318e
[3/3] ASoC: mchp-spdiftx: add support for system suspend/resume
commit: abc7edb0329cd2eabc0b948f5e248c85f6268296

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark