mask = AC97_SC_SPSR_MASK;
}
- down(&ac97->reg_mutex);
+ spin_lock(&ac97->reg_lock);
old = snd_ac97_read(ac97, reg) & mask;
+ spin_unlock(&ac97->reg_lock);
if (old != bits) {
- snd_ac97_update_bits_nolock(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0);
- snd_ac97_update_bits_nolock(ac97, reg, mask, bits);
+ snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0);
+ snd_ac97_update_bits(ac97, reg, mask, bits);
/* update the internal spdif bits */
+ spin_lock(&ac97->reg_lock);
sbits = ac97->spdif_status;
if (sbits & IEC958_AES0_PROFESSIONAL) {
sbits &= ~IEC958_AES0_PRO_FS;
}
}
ac97->spdif_status = sbits;
+ spin_unlock(&ac97->reg_lock);
}
- snd_ac97_update_bits_nolock(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, AC97_EA_SPDIF);
- up(&ac97->reg_mutex);
+ snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, AC97_EA_SPDIF);
return 0;
}
{
ac97_bus_t *bus;
int i, cidx, r, ok_flag;
- unsigned int reg_ok[4] = {0,0,0,0};
+ unsigned int reg_ok = 0;
unsigned char reg;
int err = 0;
snd_printk(KERN_ERR "invalid AC97 slot %i?\n", i);
continue;
}
- if (reg_ok[cidx] & (1 << (reg - AC97_PCM_FRONT_DAC_RATE)))
+ if (reg_ok & (1 << (reg - AC97_PCM_FRONT_DAC_RATE)))
continue;
//printk(KERN_DEBUG "setting ac97 reg 0x%x to rate %d\n", reg, rate);
err = snd_ac97_set_rate(pcm->r[r].codec[cidx], reg, rate);
if (err < 0)
snd_printk(KERN_ERR "error in snd_ac97_set_rate: cidx=%d, reg=0x%x, rate=%d, err=%d\n", cidx, reg, rate, err);
else
- reg_ok[cidx] |= (1 << (reg - AC97_PCM_FRONT_DAC_RATE));
+ reg_ok |= (1 << (reg - AC97_PCM_FRONT_DAC_RATE));
}
}
}