[PATCH v2 11/11] ASoC: fsl: mpc5200_psc_ac97: Use guard() for mutex locks

Frank Li Frank.li at oss.nxp.com
Mon Jun 15 07:26:32 PDT 2026


On Mon, Jun 15, 2026 at 04:38:24PM +0700, phucduc.bui at gmail.com wrote:
> From: bui duc phuc <phucduc.bui at gmail.com>
>
> Clean up the code using guard() for mutex locks.
> Merely code refactoring, and no behavior change.
>
> Signed-off-by: bui duc phuc <phucduc.bui at gmail.com>
> ---

Reviewed-by: Frank Li <Frank.Li at nxp.com>

>
> Changes in v2:
>  - psc_ac97_cold_reset(): Fix scoped_guard() usage by replacing
>    scoped_guard(mutex_lock, ...) with scoped_guard(mutex, ...).
>
>  sound/soc/fsl/mpc5200_psc_ac97.c | 34 +++++++++++---------------------
>  1 file changed, 12 insertions(+), 22 deletions(-)
>
> diff --git a/sound/soc/fsl/mpc5200_psc_ac97.c b/sound/soc/fsl/mpc5200_psc_ac97.c
> index 8554fb690772..d4d9f5b6bc07 100644
> --- a/sound/soc/fsl/mpc5200_psc_ac97.c
> +++ b/sound/soc/fsl/mpc5200_psc_ac97.c
> @@ -31,14 +31,13 @@ static unsigned short psc_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
>  	int status;
>  	unsigned int val;
>
> -	mutex_lock(&psc_dma->mutex);
> +	guard(mutex)(&psc_dma->mutex);
>
>  	/* Wait for command send status zero = ready */
>  	status = spin_event_timeout(!(in_be16(&psc_dma->psc_regs->sr_csr.status) &
>  				MPC52xx_PSC_SR_CMDSEND), 100, 0);
>  	if (status == 0) {
>  		pr_err("timeout on ac97 bus (rdy)\n");
> -		mutex_unlock(&psc_dma->mutex);
>  		return -ENODEV;
>  	}
>
> @@ -54,19 +53,16 @@ static unsigned short psc_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
>  	if (status == 0) {
>  		pr_err("timeout on ac97 read (val) %x\n",
>  				in_be16(&psc_dma->psc_regs->sr_csr.status));
> -		mutex_unlock(&psc_dma->mutex);
>  		return -ENODEV;
>  	}
>  	/* Get the data */
>  	val = in_be32(&psc_dma->psc_regs->ac97_data);
>  	if (((val >> 24) & 0x7f) != reg) {
>  		pr_err("reg echo error on ac97 read\n");
> -		mutex_unlock(&psc_dma->mutex);
>  		return -ENODEV;
>  	}
>  	val = (val >> 8) & 0xffff;
>
> -	mutex_unlock(&psc_dma->mutex);
>  	return (unsigned short) val;
>  }
>
> @@ -75,52 +71,46 @@ static void psc_ac97_write(struct snd_ac97 *ac97,
>  {
>  	int status;
>
> -	mutex_lock(&psc_dma->mutex);
> +	guard(mutex)(&psc_dma->mutex);
>
>  	/* Wait for command status zero = ready */
>  	status = spin_event_timeout(!(in_be16(&psc_dma->psc_regs->sr_csr.status) &
>  				MPC52xx_PSC_SR_CMDSEND), 100, 0);
>  	if (status == 0) {
>  		pr_err("timeout on ac97 bus (write)\n");
> -		goto out;
> +		return;
>  	}
>  	/* Write data */
>  	out_be32(&psc_dma->psc_regs->ac97_cmd,
>  			((reg & 0x7f) << 24) | (val << 8));
> -
> - out:
> -	mutex_unlock(&psc_dma->mutex);
>  }
>
>  static void psc_ac97_warm_reset(struct snd_ac97 *ac97)
>  {
>  	struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
>
> -	mutex_lock(&psc_dma->mutex);
> +	guard(mutex)(&psc_dma->mutex);
>
>  	out_be32(&regs->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_AWR);
>  	udelay(3);
>  	out_be32(&regs->sicr, psc_dma->sicr);
> -
> -	mutex_unlock(&psc_dma->mutex);
>  }
>
>  static void psc_ac97_cold_reset(struct snd_ac97 *ac97)
>  {
>  	struct mpc52xx_psc __iomem *regs = psc_dma->psc_regs;
>
> -	mutex_lock(&psc_dma->mutex);
> -	dev_dbg(psc_dma->dev, "cold reset\n");
> +	scoped_guard(mutex, &psc_dma->mutex) {
> +		dev_dbg(psc_dma->dev, "cold reset\n");
>
> -	mpc5200_psc_ac97_gpio_reset(psc_dma->id);
> +		mpc5200_psc_ac97_gpio_reset(psc_dma->id);
>
> -	/* Notify the PSC that a reset has occurred */
> -	out_be32(&regs->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_ACRB);
> +		/* Notify the PSC that a reset has occurred */
> +		out_be32(&regs->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_ACRB);
>
> -	/* Re-enable RX and TX */
> -	out_8(&regs->command, MPC52xx_PSC_TX_ENABLE | MPC52xx_PSC_RX_ENABLE);
> -
> -	mutex_unlock(&psc_dma->mutex);
> +		/* Re-enable RX and TX */
> +		out_8(&regs->command, MPC52xx_PSC_TX_ENABLE | MPC52xx_PSC_RX_ENABLE);
> +	}
>
>  	usleep_range(1000, 2000);
>  	psc_ac97_warm_reset(ac97);
> --
> 2.43.0
>
>



More information about the linux-arm-kernel mailing list