Re: [PATCH v2 1/2] ASoC: adau1372: Fix unchecked clk_prepare_enable() return value

From: Nuno Sá

Date: Thu Mar 26 2026 - 05:36:57 EST


On Wed, 2026-03-25 at 22:07 +0100, Jihed Chaibi wrote:
> adau1372_set_power() calls clk_prepare_enable() but discards the return
> value. If the clock enable fails, the driver proceeds to access registers
> on unpowered hardware, potentially causing silent corruption.
>
> Make adau1372_set_power() return int and propagate the error from
> clk_prepare_enable(). Update adau1372_set_bias_level() to return the
> error directly for the STANDBY and OFF cases.
>
> Signed-off-by: Jihed Chaibi <jihed.chaibi.dev@xxxxxxxxx>
> ---

No Fixes tag?

- Nuno Sá

> Changes in v2:
> - No changes.
>
>  sound/soc/codecs/adau1372.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/sound/soc/codecs/adau1372.c b/sound/soc/codecs/adau1372.c
> index fdee689cae53..6345342218d6 100644
> --- a/sound/soc/codecs/adau1372.c
> +++ b/sound/soc/codecs/adau1372.c
> @@ -782,15 +782,18 @@ static void adau1372_enable_pll(struct adau1372 *adau1372)
>   dev_err(adau1372->dev, "Failed to lock PLL\n");
>  }
>
> -static void adau1372_set_power(struct adau1372 *adau1372, bool enable)
> +static int adau1372_set_power(struct adau1372 *adau1372, bool enable)
>  {
>   if (adau1372->enabled == enable)
> - return;
> + return 0;
>
>   if (enable) {
>   unsigned int clk_ctrl = ADAU1372_CLK_CTRL_MCLK_EN;
> + int ret;
>
> - clk_prepare_enable(adau1372->mclk);
> + ret = clk_prepare_enable(adau1372->mclk);
> + if (ret)
> + return ret;
>   if (adau1372->pd_gpio)
>   gpiod_set_value(adau1372->pd_gpio, 0);
>
> @@ -829,6 +832,8 @@ static void adau1372_set_power(struct adau1372 *adau1372, bool enable)
>   }
>
>   adau1372->enabled = enable;
> +
> + return 0;
>  }
>
>  static int adau1372_set_bias_level(struct snd_soc_component *component,
> @@ -842,11 +847,9 @@ static int adau1372_set_bias_level(struct snd_soc_component *component,
>   case SND_SOC_BIAS_PREPARE:
>   break;
>   case SND_SOC_BIAS_STANDBY:
> - adau1372_set_power(adau1372, true);
> - break;
> + return adau1372_set_power(adau1372, true);
>   case SND_SOC_BIAS_OFF:
> - adau1372_set_power(adau1372, false);
> - break;
> + return adau1372_set_power(adau1372, false);
>   }
>
>   return 0;
> --
> 2.47.3