[PATCH] ALSA: spi: Replace lock/unlock patterns with guard

Erick Karanja posted 1 patch 3 weeks, 2 days ago
sound/spi/at73c213.c | 99 ++++++++++++++++++--------------------------
1 file changed, 41 insertions(+), 58 deletions(-)
[PATCH] ALSA: spi: Replace lock/unlock patterns with guard
Posted by Erick Karanja 3 weeks, 2 days ago
Replace lock/unlock patterns with guard.This simplifies control
flow especially with conditional jumps and improves code readability.

Generated-by: Coccinelle SmPL

Signed-off-by: Erick Karanja <karanja99erick@gmail.com>
---
 sound/spi/at73c213.c | 99 ++++++++++++++++++--------------------------
 1 file changed, 41 insertions(+), 58 deletions(-)

diff --git a/sound/spi/at73c213.c b/sound/spi/at73c213.c
index a0a7f90b6146..944bc3d56e4c 100644
--- a/sound/spi/at73c213.c
+++ b/sound/spi/at73c213.c
@@ -275,7 +275,7 @@ static int snd_at73c213_pcm_trigger(struct snd_pcm_substream *substream,
 	struct snd_at73c213 *chip = snd_pcm_substream_chip(substream);
 	int retval = 0;
 
-	spin_lock(&chip->lock);
+	guard(spinlock)(&chip->lock);
 
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
@@ -292,8 +292,6 @@ static int snd_at73c213_pcm_trigger(struct snd_pcm_substream *substream,
 		break;
 	}
 
-	spin_unlock(&chip->lock);
-
 	return retval;
 }
 
@@ -358,30 +356,30 @@ static irqreturn_t snd_at73c213_interrupt(int irq, void *dev_id)
 	int next_period;
 	int retval = IRQ_NONE;
 
-	spin_lock(&chip->lock);
+	scoped_guard (spinlock, &chip->lock) {
 
-	block_size = frames_to_bytes(runtime, runtime->period_size);
-	status = ssc_readl(chip->ssc->regs, IMR);
-
-	if (status & SSC_BIT(IMR_ENDTX)) {
-		chip->period++;
-		if (chip->period == runtime->periods)
-			chip->period = 0;
-		next_period = chip->period + 1;
-		if (next_period == runtime->periods)
-			next_period = 0;
-
-		offset = block_size * next_period;
-
-		ssc_writel(chip->ssc->regs, PDC_TNPR,
-				(long)runtime->dma_addr + offset);
-		ssc_writel(chip->ssc->regs, PDC_TNCR,
-				runtime->period_size * runtime->channels);
-		retval = IRQ_HANDLED;
-	}
+		block_size = frames_to_bytes(runtime, runtime->period_size);
+		status = ssc_readl(chip->ssc->regs, IMR);
+
+		if (status & SSC_BIT(IMR_ENDTX)) {
+			chip->period++;
+			if (chip->period == runtime->periods)
+				chip->period = 0;
+			next_period = chip->period + 1;
+			if (next_period == runtime->periods)
+				next_period = 0;
 
-	ssc_readl(chip->ssc->regs, IMR);
-	spin_unlock(&chip->lock);
+			offset = block_size * next_period;
+
+			ssc_writel(chip->ssc->regs, PDC_TNPR,
+					(long)runtime->dma_addr + offset);
+			ssc_writel(chip->ssc->regs, PDC_TNCR,
+					runtime->period_size * runtime->channels);
+			retval = IRQ_HANDLED;
+		}
+
+		ssc_readl(chip->ssc->regs, IMR);
+	}
 
 	if (status & SSC_BIT(IMR_ENDTX))
 		snd_pcm_period_elapsed(chip->substream);
@@ -401,7 +399,7 @@ static int snd_at73c213_mono_get(struct snd_kcontrol *kcontrol,
 	int mask = (kcontrol->private_value >> 16) & 0xff;
 	int invert = (kcontrol->private_value >> 24) & 0xff;
 
-	mutex_lock(&chip->mixer_lock);
+	guard(mutex)(&chip->mixer_lock);
 
 	ucontrol->value.integer.value[0] =
 		(chip->reg_image[reg] >> shift) & mask;
@@ -410,8 +408,6 @@ static int snd_at73c213_mono_get(struct snd_kcontrol *kcontrol,
 		ucontrol->value.integer.value[0] =
 			mask - ucontrol->value.integer.value[0];
 
-	mutex_unlock(&chip->mixer_lock);
-
 	return 0;
 }
 
@@ -431,13 +427,13 @@ static int snd_at73c213_mono_put(struct snd_kcontrol *kcontrol,
 		val = mask - val;
 	val <<= shift;
 
-	mutex_lock(&chip->mixer_lock);
+	scoped_guard (mutex, &chip->mixer_lock) {
 
-	val = (chip->reg_image[reg] & ~(mask << shift)) | val;
-	change = val != chip->reg_image[reg];
-	retval = snd_at73c213_write_reg(chip, reg, val);
+		val = (chip->reg_image[reg] & ~(mask << shift)) | val;
+		change = val != chip->reg_image[reg];
+		retval = snd_at73c213_write_reg(chip, reg, val);
 
-	mutex_unlock(&chip->mixer_lock);
+	}
 
 	if (retval)
 		return retval;
@@ -473,7 +469,7 @@ static int snd_at73c213_stereo_get(struct snd_kcontrol *kcontrol,
 	int mask = (kcontrol->private_value >> 24) & 0xff;
 	int invert = (kcontrol->private_value >> 22) & 1;
 
-	mutex_lock(&chip->mixer_lock);
+	guard(mutex)(&chip->mixer_lock);
 
 	ucontrol->value.integer.value[0] =
 		(chip->reg_image[left_reg] >> shift_left) & mask;
@@ -487,8 +483,6 @@ static int snd_at73c213_stereo_get(struct snd_kcontrol *kcontrol,
 			mask - ucontrol->value.integer.value[1];
 	}
 
-	mutex_unlock(&chip->mixer_lock);
-
 	return 0;
 }
 
@@ -514,29 +508,20 @@ static int snd_at73c213_stereo_put(struct snd_kcontrol *kcontrol,
 	val1 <<= shift_left;
 	val2 <<= shift_right;
 
-	mutex_lock(&chip->mixer_lock);
+	guard(mutex)(&chip->mixer_lock);
 
 	val1 = (chip->reg_image[left_reg] & ~(mask << shift_left)) | val1;
 	val2 = (chip->reg_image[right_reg] & ~(mask << shift_right)) | val2;
 	change = val1 != chip->reg_image[left_reg]
 		|| val2 != chip->reg_image[right_reg];
 	retval = snd_at73c213_write_reg(chip, left_reg, val1);
-	if (retval) {
-		mutex_unlock(&chip->mixer_lock);
-		goto out;
-	}
+	if (retval)
+		return retval;
 	retval = snd_at73c213_write_reg(chip, right_reg, val2);
-	if (retval) {
-		mutex_unlock(&chip->mixer_lock);
-		goto out;
-	}
-
-	mutex_unlock(&chip->mixer_lock);
+	if (retval)
+		return retval;
 
 	return change;
-
-out:
-	return retval;
 }
 
 #define snd_at73c213_mono_switch_info	snd_ctl_boolean_mono_info
@@ -549,7 +534,7 @@ static int snd_at73c213_mono_switch_get(struct snd_kcontrol *kcontrol,
 	int shift = (kcontrol->private_value >> 8) & 0xff;
 	int invert = (kcontrol->private_value >> 24) & 0xff;
 
-	mutex_lock(&chip->mixer_lock);
+	guard(mutex)(&chip->mixer_lock);
 
 	ucontrol->value.integer.value[0] =
 		(chip->reg_image[reg] >> shift) & 0x01;
@@ -558,8 +543,6 @@ static int snd_at73c213_mono_switch_get(struct snd_kcontrol *kcontrol,
 		ucontrol->value.integer.value[0] =
 			0x01 - ucontrol->value.integer.value[0];
 
-	mutex_unlock(&chip->mixer_lock);
-
 	return 0;
 }
 
@@ -583,14 +566,14 @@ static int snd_at73c213_mono_switch_put(struct snd_kcontrol *kcontrol,
 		val = mask - val;
 	val <<= shift;
 
-	mutex_lock(&chip->mixer_lock);
+	scoped_guard (mutex, &chip->mixer_lock) {
 
-	val |= (chip->reg_image[reg] & ~(mask << shift));
-	change = val != chip->reg_image[reg];
+		val |= (chip->reg_image[reg] & ~(mask << shift));
+		change = val != chip->reg_image[reg];
 
-	retval = snd_at73c213_write_reg(chip, reg, val);
+		retval = snd_at73c213_write_reg(chip, reg, val);
 
-	mutex_unlock(&chip->mixer_lock);
+	}
 
 	if (retval)
 		return retval;
-- 
2.43.0
Re: [PATCH] ALSA: spi: Replace lock/unlock patterns with guard
Posted by Takashi Iwai 3 weeks, 2 days ago
On Tue, 09 Sep 2025 08:17:02 +0200,
Erick Karanja wrote:
> 
> Replace lock/unlock patterns with guard.This simplifies control
> flow especially with conditional jumps and improves code readability.
> 
> Generated-by: Coccinelle SmPL
> 
> Signed-off-by: Erick Karanja <karanja99erick@gmail.com>

The mutex locks have been already converted with guard().
Please rebase your patch to linux-next or sound.git tree for-next
branch, and resubmit.


thanks,

Takashi