]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: ti: omap-mcbsp: Simplify lock and resource handling
authorbui duc phuc <phucduc.bui@gmail.com>
Fri, 8 May 2026 10:38:37 +0000 (17:38 +0700)
committerMark Brown <broonie@kernel.org>
Mon, 11 May 2026 00:58:49 +0000 (09:58 +0900)
Convert spinlock protected sections to guard()/scoped_guard()
helpers and simplify the cleanup paths, including the
reg_cache lifetime handling in omap_mcbsp_request().

No functional change intended.

Signed-off-by: bui duc phuc <phucduc.bui@gmail.com>
Acked-by: Jarkko Nikula <jarkko.nikula@bitmer.com>
Link: https://patch.msgid.link/20260508103837.138142-8-phucduc.bui@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/ti/omap-mcbsp.c

index 411970399271a2b8e63d0032e83208de40b5011f..d82fef629867aadc388a5e7eba45803891913d23 100644 (file)
@@ -290,23 +290,22 @@ static u16 omap_mcbsp_get_rx_delay(struct omap_mcbsp *mcbsp)
 
 static int omap_mcbsp_request(struct omap_mcbsp *mcbsp)
 {
-       void *reg_cache;
+       void *reg_cache __free(kfree) = kzalloc(mcbsp->reg_cache_size, GFP_KERNEL);
        int err;
 
-       reg_cache = kzalloc(mcbsp->reg_cache_size, GFP_KERNEL);
        if (!reg_cache)
                return -ENOMEM;
 
-       spin_lock(&mcbsp->lock);
-       if (!mcbsp->free) {
-               dev_err(mcbsp->dev, "McBSP%d is currently in use\n", mcbsp->id);
-               err = -EBUSY;
-               goto err_kfree;
-       }
+       scoped_guard(spinlock, &mcbsp->lock) {
+               if (!mcbsp->free) {
+                       dev_err(mcbsp->dev, "McBSP%d is currently in use\n", mcbsp->id);
+                       return -EBUSY;
+               }
 
-       mcbsp->free = false;
-       mcbsp->reg_cache = reg_cache;
-       spin_unlock(&mcbsp->lock);
+               mcbsp->free = false;
+               mcbsp->reg_cache = reg_cache;
+               reg_cache = NULL;
+       }
 
        if(mcbsp->pdata->ops && mcbsp->pdata->ops->request)
                mcbsp->pdata->ops->request(mcbsp->id - 1);
@@ -352,12 +351,11 @@ err_clk_disable:
        if (mcbsp->pdata->has_wakeup)
                MCBSP_WRITE(mcbsp, WAKEUPEN, 0);
 
-       spin_lock(&mcbsp->lock);
-       mcbsp->free = true;
-       mcbsp->reg_cache = NULL;
-err_kfree:
-       spin_unlock(&mcbsp->lock);
-       kfree(reg_cache);
+       scoped_guard(spinlock, &mcbsp->lock) {
+               reg_cache = mcbsp->reg_cache;
+               mcbsp->free = true;
+               mcbsp->reg_cache = NULL;
+       }
 
        return err;
 }
@@ -395,13 +393,13 @@ static void omap_mcbsp_free(struct omap_mcbsp *mcbsp)
        if (!mcbsp_omap1())
                omap2_mcbsp_set_clks_src(mcbsp, MCBSP_CLKS_PRCM_SRC);
 
-       spin_lock(&mcbsp->lock);
-       if (mcbsp->free)
-               dev_err(mcbsp->dev, "McBSP%d was not reserved\n", mcbsp->id);
-       else
-               mcbsp->free = true;
-       mcbsp->reg_cache = NULL;
-       spin_unlock(&mcbsp->lock);
+       scoped_guard(spinlock, &mcbsp->lock) {
+               if (mcbsp->free)
+                       dev_err(mcbsp->dev, "McBSP%d was not reserved\n", mcbsp->id);
+               else
+                       mcbsp->free = true;
+               mcbsp->reg_cache = NULL;
+       }
 
        kfree(reg_cache);
 }
@@ -581,16 +579,12 @@ static ssize_t dma_op_mode_store(struct device *dev,
        if (i < 0)
                return i;
 
-       spin_lock_irq(&mcbsp->lock);
+       guard(spinlock_irq)(&mcbsp->lock);
        if (!mcbsp->free) {
-               size = -EBUSY;
-               goto unlock;
+               return -EBUSY;
        }
        mcbsp->dma_op_mode = i;
 
-unlock:
-       spin_unlock_irq(&mcbsp->lock);
-
        return size;
 }