[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(®s->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_AWR);
> udelay(3);
> out_be32(®s->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(®s->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_ACRB);
> + /* Notify the PSC that a reset has occurred */
> + out_be32(®s->sicr, psc_dma->sicr | MPC52xx_PSC_SICR_ACRB);
>
> - /* Re-enable RX and TX */
> - out_8(®s->command, MPC52xx_PSC_TX_ENABLE | MPC52xx_PSC_RX_ENABLE);
> -
> - mutex_unlock(&psc_dma->mutex);
> + /* Re-enable RX and TX */
> + out_8(®s->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