[PATCH 1/5] ASoC: atmel-i2s: fix MCK generator error handling

From: phucduc . bui

Date: Fri Oct 02 2026 - 00:40:02 EST


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

Disable the gclk and reset the MCK configuration when an error occurs
while enabling the MCK generator.

This prevents the gclk from remaining enabled after a failed clock
configuration.

Fixes: 73ad0df57290 ("ASoC: atmel-i2s: Remove unnecessary audio PLL clock (aclk)")
Signed-off-by: bui duc phuc <phucduc.bui@xxxxxxxxx>
---
sound/soc/atmel/atmel-i2s.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/sound/soc/atmel/atmel-i2s.c b/sound/soc/atmel/atmel-i2s.c
index d9ad262ec44d..f28808d980ce 100644
--- a/sound/soc/atmel/atmel-i2s.c
+++ b/sound/soc/atmel/atmel-i2s.c
@@ -466,11 +466,21 @@ static int atmel_i2s_switch_mck_generator(struct atmel_i2s_dev *dev,
mr |= ATMEL_I2SC_MR_IMCKMODE_I2SMCK;
ret = regmap_update_bits(dev->regmap, ATMEL_I2SC_MR, mr_mask, mr);
if (ret)
- return ret;
+ goto err_disable_gclk;

/* Finally enable the I2S Master Clock generator. */
- return regmap_write(dev->regmap, ATMEL_I2SC_CR,
- ATMEL_I2SC_CR_CKEN);
+ ret = regmap_write(dev->regmap, ATMEL_I2SC_CR, ATMEL_I2SC_CR_CKEN);
+ if (ret)
+ goto err_reset_mr;
+
+ return 0;
+
+err_reset_mr:
+ regmap_update_bits(dev->regmap, ATMEL_I2SC_MR, mr_mask, 0);
+err_disable_gclk:
+ clk_disable_unprepare(dev->gclk);
+
+ return ret;
}

static int atmel_i2s_trigger(struct snd_pcm_substream *substream, int cmd,
--
2.43.0