static int sb_initialized;
#endif
-static int kilroy_was_here; /* Don't detect twice */
-static int mpu_initialized;
static spinlock_t lock=SPIN_LOCK_UNLOCKED;
-static int *opl3sa_osp;
static unsigned char opl3sa_read(int addr)
{
static int __init probe_opl3sa_wss(struct address_info *hw_config)
{
- int ret;
unsigned char tmp = 0x24; /* WSS enable */
- if (check_region(0xf86, 2)) /* Control port is busy */
- return 0;
/*
* Check if the IO port returns valid signature. The original MS Sound
* system returns 0x04 while some cards (OPL3-SA for example)
printk(KERN_ERR "OPL3-SA: MSS I/O port conflict (%x)\n", hw_config->io_base);
return 0;
}
- opl3sa_osp = hw_config->osp;
if (!opl3sa_detect())
{
}
opl3sa_write(0x01, tmp); /* WSS setup register */
- kilroy_was_here = 1;
-
- ret = probe_ms_sound(hw_config);
- if (ret)
- request_region(0xf86, 2, "OPL3-SA");
- return ret;
+ return probe_ms_sound(hw_config);
}
static void __init attach_opl3sa_wss(struct address_info *hw_config)
-1, -1, -1, -1, -1, 1, -1, 2, -1, 3, 4
};
- if (!kilroy_was_here)
- return 0; /* OPL3-SA has not been detected earlier */
-
- if (mpu_initialized)
- {
- DDB(printk("OPL3-SA: MPU mode already initialized\n"));
- return 0;
- }
if (hw_config->irq > 10)
{
printk(KERN_ERR "OPL3-SA: Bad MPU IRQ %d\n", hw_config->irq);
opl3sa_write(0x03, conf);
- mpu_initialized = 1;
hw_config->name = "OPL3-SA (MPU401)";
return probe_uart401(hw_config, THIS_MODULE);
cfg_mpu.io_base = mpu_io;
cfg_mpu.irq = mpu_irq;
- if (probe_opl3sa_wss(&cfg) == 0)
+ if (!request_region(0xf86, 2, "OPL3-SA"))/* Control port is busy */
+ return 0;
+
+ if (probe_opl3sa_wss(&cfg) == 0) {
+ release_region(0xf86, 2);
return -ENODEV;
+ }
found_mpu=probe_opl3sa_mpu(&cfg_mpu);