예제 #1
0
파일: opl4_lib.c 프로젝트: 020gzh/linux
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);
}
예제 #2
0
파일: opl4_lib.c 프로젝트: 020gzh/linux
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);
}
예제 #3
0
파일: opl4_lib.c 프로젝트: xricson/knoppix
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);
}
예제 #4
0
파일: opl4_lib.c 프로젝트: xricson/knoppix
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;
}
예제 #5
0
파일: opl4_lib.c 프로젝트: 020gzh/linux
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);
}