ALSA: emu10k1: merge common paths in snd_emu10k1_ptr_{read,write}()
authorOswald Buddenhagen <oswald.buddenhagen@gmx.de>
Sun, 14 May 2023 17:03:22 +0000 (19:03 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 15 May 2023 20:00:56 +0000 (22:00 +0200)
Avoids some code duplication.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Link: https://lore.kernel.org/r/20230514170323.3408798-3-oswald.buddenhagen@gmx.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/emu10k1/io.c

index ced6916..2d6bbb7 100644 (file)
@@ -40,6 +40,11 @@ unsigned int snd_emu10k1_ptr_read(struct snd_emu10k1 * emu, unsigned int reg, un
        if (!check_ptr_reg(emu, regptr))
                return 0;
 
+       spin_lock_irqsave(&emu->emu_lock, flags);
+       outl(regptr, emu->port + PTR);
+       val = inl(emu->port + DATA);
+       spin_unlock_irqrestore(&emu->emu_lock, flags);
+
        if (reg & 0xff000000) {
                unsigned char size, offset;
                
@@ -47,17 +52,8 @@ unsigned int snd_emu10k1_ptr_read(struct snd_emu10k1 * emu, unsigned int reg, un
                offset = (reg >> 16) & 0x1f;
                mask = ((1 << size) - 1) << offset;
                
-               spin_lock_irqsave(&emu->emu_lock, flags);
-               outl(regptr, emu->port + PTR);
-               val = inl(emu->port + DATA);
-               spin_unlock_irqrestore(&emu->emu_lock, flags);
-               
                return (val & mask) >> offset;
        } else {
-               spin_lock_irqsave(&emu->emu_lock, flags);
-               outl(regptr, emu->port + PTR);
-               val = inl(emu->port + DATA);
-               spin_unlock_irqrestore(&emu->emu_lock, flags);
                return val;
        }
 }
@@ -88,14 +84,12 @@ void snd_emu10k1_ptr_write(struct snd_emu10k1 *emu, unsigned int reg, unsigned i
                spin_lock_irqsave(&emu->emu_lock, flags);
                outl(regptr, emu->port + PTR);
                data |= inl(emu->port + DATA) & ~mask;
-               outl(data, emu->port + DATA);
-               spin_unlock_irqrestore(&emu->emu_lock, flags);          
        } else {
                spin_lock_irqsave(&emu->emu_lock, flags);
                outl(regptr, emu->port + PTR);
-               outl(data, emu->port + DATA);
-               spin_unlock_irqrestore(&emu->emu_lock, flags);
        }
+       outl(data, emu->port + DATA);
+       spin_unlock_irqrestore(&emu->emu_lock, flags);
 }
 
 EXPORT_SYMBOL(snd_emu10k1_ptr_write);