]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: samsung: pcm: Use guard() for spin locks
authorbui duc phuc <phucduc.bui@gmail.com>
Thu, 23 Apr 2026 12:56:45 +0000 (19:56 +0700)
committerMark Brown <broonie@kernel.org>
Sun, 26 Apr 2026 23:28:18 +0000 (08:28 +0900)
Clean up the code using guard() for spin locks.
Merely code refactoring, and no behavior change.

Signed-off-by: bui duc phuc <phucduc.bui@gmail.com>
Link: https://patch.msgid.link/20260423125646.156599-5-phucduc.bui@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/samsung/pcm.c

index a03ba9374c2e6930f9cb8fc615eca777619a8a49..309f024bf2a4d10ae93ed3ed0d7fdb8e97452807 100644 (file)
@@ -218,7 +218,6 @@ static int s3c_pcm_trigger(struct snd_pcm_substream *substream, int cmd,
 {
        struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream);
        struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(snd_soc_rtd_to_cpu(rtd, 0));
-       unsigned long flags;
 
        dev_dbg(pcm->dev, "Entered %s\n", __func__);
 
@@ -226,27 +225,23 @@ static int s3c_pcm_trigger(struct snd_pcm_substream *substream, int cmd,
        case SNDRV_PCM_TRIGGER_START:
        case SNDRV_PCM_TRIGGER_RESUME:
        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-               spin_lock_irqsave(&pcm->lock, flags);
-
-               if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
-                       s3c_pcm_snd_rxctrl(pcm, 1);
-               else
-                       s3c_pcm_snd_txctrl(pcm, 1);
-
-               spin_unlock_irqrestore(&pcm->lock, flags);
+               scoped_guard(spinlock_irqsave, &pcm->lock) {
+                       if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
+                               s3c_pcm_snd_rxctrl(pcm, 1);
+                       else
+                               s3c_pcm_snd_txctrl(pcm, 1);
+               }
                break;
 
        case SNDRV_PCM_TRIGGER_STOP:
        case SNDRV_PCM_TRIGGER_SUSPEND:
        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-               spin_lock_irqsave(&pcm->lock, flags);
-
-               if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
-                       s3c_pcm_snd_rxctrl(pcm, 0);
-               else
-                       s3c_pcm_snd_txctrl(pcm, 0);
-
-               spin_unlock_irqrestore(&pcm->lock, flags);
+               scoped_guard(spinlock_irqsave, &pcm->lock) {
+                       if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
+                               s3c_pcm_snd_rxctrl(pcm, 0);
+                       else
+                               s3c_pcm_snd_txctrl(pcm, 0);
+               }
                break;
 
        default:
@@ -265,7 +260,6 @@ static int s3c_pcm_hw_params(struct snd_pcm_substream *substream,
        void __iomem *regs = pcm->regs;
        struct clk *clk;
        int sclk_div, sync_div;
-       unsigned long flags;
        u32 clkctl;
 
        dev_dbg(pcm->dev, "Entered %s\n", __func__);
@@ -278,36 +272,33 @@ static int s3c_pcm_hw_params(struct snd_pcm_substream *substream,
                return -EINVAL;
        }
 
-       spin_lock_irqsave(&pcm->lock, flags);
-
-       /* Get hold of the PCMSOURCE_CLK */
-       clkctl = readl(regs + S3C_PCM_CLKCTL);
-       if (clkctl & S3C_PCM_CLKCTL_SERCLKSEL_PCLK)
-               clk = pcm->pclk;
-       else
-               clk = pcm->cclk;
-
-       /* Set the SCLK divider */
-       sclk_div = clk_get_rate(clk) / pcm->sclk_per_fs /
-                                       params_rate(params) / 2 - 1;
-
-       clkctl &= ~(S3C_PCM_CLKCTL_SCLKDIV_MASK
-                       << S3C_PCM_CLKCTL_SCLKDIV_SHIFT);
-       clkctl |= ((sclk_div & S3C_PCM_CLKCTL_SCLKDIV_MASK)
-                       << S3C_PCM_CLKCTL_SCLKDIV_SHIFT);
+       scoped_guard(spinlock_irqsave, &pcm->lock) {
+               /* Get hold of the PCMSOURCE_CLK */
+               clkctl = readl(regs + S3C_PCM_CLKCTL);
+               if (clkctl & S3C_PCM_CLKCTL_SERCLKSEL_PCLK)
+                       clk = pcm->pclk;
+               else
+                       clk = pcm->cclk;
 
-       /* Set the SYNC divider */
-       sync_div = pcm->sclk_per_fs - 1;
+               /* Set the SCLK divider */
+               sclk_div = clk_get_rate(clk) / pcm->sclk_per_fs /
+                                               params_rate(params) / 2 - 1;
 
-       clkctl &= ~(S3C_PCM_CLKCTL_SYNCDIV_MASK
-                               << S3C_PCM_CLKCTL_SYNCDIV_SHIFT);
-       clkctl |= ((sync_div & S3C_PCM_CLKCTL_SYNCDIV_MASK)
-                               << S3C_PCM_CLKCTL_SYNCDIV_SHIFT);
+               clkctl &= ~(S3C_PCM_CLKCTL_SCLKDIV_MASK
+                               << S3C_PCM_CLKCTL_SCLKDIV_SHIFT);
+               clkctl |= ((sclk_div & S3C_PCM_CLKCTL_SCLKDIV_MASK)
+                               << S3C_PCM_CLKCTL_SCLKDIV_SHIFT);
 
-       writel(clkctl, regs + S3C_PCM_CLKCTL);
+               /* Set the SYNC divider */
+               sync_div = pcm->sclk_per_fs - 1;
 
-       spin_unlock_irqrestore(&pcm->lock, flags);
+               clkctl &= ~(S3C_PCM_CLKCTL_SYNCDIV_MASK
+                                       << S3C_PCM_CLKCTL_SYNCDIV_SHIFT);
+               clkctl |= ((sync_div & S3C_PCM_CLKCTL_SYNCDIV_MASK)
+                                       << S3C_PCM_CLKCTL_SYNCDIV_SHIFT);
 
+               writel(clkctl, regs + S3C_PCM_CLKCTL);
+       }
        dev_dbg(pcm->dev, "PCMSOURCE_CLK-%lu SCLK=%ufs SCLK_DIV=%d SYNC_DIV=%d\n",
                                clk_get_rate(clk), pcm->sclk_per_fs,
                                sclk_div, sync_div);
@@ -320,13 +311,11 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai,
 {
        struct s3c_pcm_info *pcm = snd_soc_dai_get_drvdata(cpu_dai);
        void __iomem *regs = pcm->regs;
-       unsigned long flags;
-       int ret = 0;
        u32 ctl;
 
        dev_dbg(pcm->dev, "Entered %s\n", __func__);
 
-       spin_lock_irqsave(&pcm->lock, flags);
+       guard(spinlock_irqsave)(&pcm->lock);
 
        ctl = readl(regs + S3C_PCM_CTL);
 
@@ -336,8 +325,7 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai,
                break;
        default:
                dev_err(pcm->dev, "Unsupported clock inversion!\n");
-               ret = -EINVAL;
-               goto exit;
+               return -EINVAL;
        }
 
        switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
@@ -346,8 +334,7 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai,
                break;
        default:
                dev_err(pcm->dev, "Unsupported master/slave format!\n");
-               ret = -EINVAL;
-               goto exit;
+               return -EINVAL;
        }
 
        switch (fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
@@ -359,8 +346,7 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai,
                break;
        default:
                dev_err(pcm->dev, "Invalid Clock gating request!\n");
-               ret = -EINVAL;
-               goto exit;
+               return -EINVAL;
        }
 
        switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
@@ -374,16 +360,11 @@ static int s3c_pcm_set_fmt(struct snd_soc_dai *cpu_dai,
                break;
        default:
                dev_err(pcm->dev, "Unsupported data format!\n");
-               ret = -EINVAL;
-               goto exit;
+               return -EINVAL;
        }
 
        writel(ctl, regs + S3C_PCM_CTL);
-
-exit:
-       spin_unlock_irqrestore(&pcm->lock, flags);
-
-       return ret;
+       return 0;
 }
 
 static int s3c_pcm_set_clkdiv(struct snd_soc_dai *cpu_dai,