[PATCH 2/2] ASoC: atmel-classd: Enable pclk during probe

From: phucduc . bui

Date: Fri Nov 13 2026 - 13:12:05 EST


From: bui duc phuc <phucduc.bui@xxxxxxxxx>

The peripheral clock is enabled in the startup callback but never
disabled, causing its enable reference count to increase on each
startup and preventing the clock from being gated.

Use devm_clk_get_enabled() to enable pclk once during probe and
automatically disable it on device removal.

Signed-off-by: bui duc phuc <phucduc.bui@xxxxxxxxx>
---
sound/soc/atmel/atmel-classd.c | 15 +++------------
1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/sound/soc/atmel/atmel-classd.c b/sound/soc/atmel/atmel-classd.c
index 117c8e400184..b6d815804e33 100644
--- a/sound/soc/atmel/atmel-classd.c
+++ b/sound/soc/atmel/atmel-classd.c
@@ -122,19 +122,10 @@ static int atmel_classd_cpu_dai_startup(struct snd_pcm_substream *substream,
{
struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
struct atmel_classd *dd = snd_soc_card_get_drvdata(rtd->card);
- int err;

regmap_write(dd->regmap, CLASSD_THR, 0x0);

- err = clk_prepare_enable(dd->pclk);
- if (err)
- return err;
- err = clk_prepare_enable(dd->gclk);
- if (err) {
- clk_disable_unprepare(dd->pclk);
- return err;
- }
- return 0;
+ return clk_prepare_enable(dd->gclk);
}

/* platform */
@@ -546,10 +537,10 @@ static int atmel_classd_probe(struct platform_device *pdev)
if (dd->irq < 0)
return dd->irq;

- dd->pclk = devm_clk_get(dev, "pclk");
+ dd->pclk = devm_clk_get_enabled(dev, "pclk");
if (IS_ERR(dd->pclk))
return dev_err_probe(dev, PTR_ERR(dd->pclk),
- "failed to get peripheral clock\n");
+ "failed to get/enable peripheral clock\n");

dd->gclk = devm_clk_get(dev, "gclk");
if (IS_ERR(dd->gclk))
--
2.43.0