u8 snd_opl4_read(struct snd_opl4 *opl4, u8 reg) { snd_opl4_wait(opl4); outb(reg, opl4->pcm_port); snd_opl4_wait(opl4); return inb(opl4->pcm_port + 1); }
void snd_opl4_write(struct snd_opl4 *opl4, u8 reg, u8 value) { snd_opl4_wait(opl4); outb(reg, opl4->pcm_port); snd_opl4_wait(opl4); outb(value, opl4->pcm_port + 1); }
void snd_opl4_write(opl4_t *opl4, u8 reg, u8 value) { unsigned long flags; spin_lock_irqsave(&opl4->reg_lock, flags); snd_opl4_wait(opl4); outb(reg, opl4->pcm_port); snd_opl4_wait(opl4); outb(value, opl4->pcm_port + 1); spin_unlock_irqrestore(&opl4->reg_lock, flags); }
u8 snd_opl4_read(opl4_t *opl4, u8 reg) { unsigned long flags; u8 value; spin_lock_irqsave(&opl4->reg_lock, flags); snd_opl4_wait(opl4); outb(reg, opl4->pcm_port); snd_opl4_wait(opl4); value = inb(opl4->pcm_port + 1); spin_unlock_irqrestore(&opl4->reg_lock, flags); return value; }
void snd_opl4_write_memory(struct snd_opl4 *opl4, const char *buf, int offset, int size) { unsigned long flags; u8 memcfg; spin_lock_irqsave(&opl4->reg_lock, flags); memcfg = snd_opl4_read(opl4, OPL4_REG_MEMORY_CONFIGURATION); snd_opl4_write(opl4, OPL4_REG_MEMORY_CONFIGURATION, memcfg | OPL4_MODE_BIT); snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_HIGH, offset >> 16); snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_MID, offset >> 8); snd_opl4_write(opl4, OPL4_REG_MEMORY_ADDRESS_LOW, offset); snd_opl4_wait(opl4); outb(OPL4_REG_MEMORY_DATA, opl4->pcm_port); snd_opl4_wait(opl4); outsb(opl4->pcm_port + 1, buf, size); snd_opl4_write(opl4, OPL4_REG_MEMORY_CONFIGURATION, memcfg); spin_unlock_irqrestore(&opl4->reg_lock, flags); }