Commit ba8add90 authored by Dave Jones's avatar Dave Jones

[PATCH] bring OSS mad16 in sync with 2.4

parent dafb1e82
...@@ -365,6 +365,8 @@ static int __init init_c930(struct address_info *hw_config) ...@@ -365,6 +365,8 @@ static int __init init_c930(struct address_info *hw_config)
{ {
unsigned char cfg = 0; unsigned char cfg = 0;
cfg |= (0x0f & mad16_conf);
if(c931_detected) if(c931_detected)
{ {
/* Bit 0 has reversd meaning. Bits 1 and 2 sese /* Bit 0 has reversd meaning. Bits 1 and 2 sese
...@@ -402,7 +404,10 @@ static int __init init_c930(struct address_info *hw_config) ...@@ -402,7 +404,10 @@ static int __init init_c930(struct address_info *hw_config)
and the C931. */ and the C931. */
cfg = c931_detected ? 0x04 : 0x00; cfg = c931_detected ? 0x04 : 0x00;
mad_write(MC4_PORT, 0x52|cfg); if(mad16_cdsel & 0x20)
mad_write(MC4_PORT, 0x62|cfg); /* opl4 */
else
mad_write(MC4_PORT, 0x52|cfg); /* opl3 */
mad_write(MC5_PORT, 0x3C); /* Init it into mode2 */ mad_write(MC5_PORT, 0x3C); /* Init it into mode2 */
mad_write(MC6_PORT, 0x02); /* Enable WSS, Disable MPU and SB */ mad_write(MC6_PORT, 0x02); /* Enable WSS, Disable MPU and SB */
...@@ -529,10 +534,12 @@ static int __init probe_mad16(struct address_info *hw_config) ...@@ -529,10 +534,12 @@ static int __init probe_mad16(struct address_info *hw_config)
return init_c930(hw_config); return init_c930(hw_config);
for (i = 0xf8d; i <= 0xf93; i++) for (i = 0xf8d; i <= 0xf93; i++) {
if (!c924pnp) if (!c924pnp)
DDB(printk("port %03x = %02x\n", i, mad_read(i))) else DDB(printk("port %03x = %02x\n", i, mad_read(i)))
else
DDB(printk("port %03x = %02x\n", i-0x80, mad_read(i))); DDB(printk("port %03x = %02x\n", i-0x80, mad_read(i)));
}
/* /*
* Set the WSS address * Set the WSS address
...@@ -559,10 +566,10 @@ static int __init probe_mad16(struct address_info *hw_config) ...@@ -559,10 +566,10 @@ static int __init probe_mad16(struct address_info *hw_config)
*/ */
tmp &= ~0x0f; tmp &= ~0x0f;
tmp |= (mad16_conf & 0x0f); /* CD-ROM and joystick bits */
mad_write(MC1_PORT, tmp); mad_write(MC1_PORT, tmp);
tmp = mad_read(MC2_PORT); tmp = mad16_cdsel;
mad_write(MC2_PORT, tmp); mad_write(MC2_PORT, tmp);
mad_write(MC3_PORT, 0xf0); /* Disable SB */ mad_write(MC3_PORT, 0xf0); /* Disable SB */
...@@ -590,9 +597,12 @@ static int __init probe_mad16(struct address_info *hw_config) ...@@ -590,9 +597,12 @@ static int __init probe_mad16(struct address_info *hw_config)
mad_write(MC5_PORT, 0x30 | cs4231_mode); mad_write(MC5_PORT, 0x30 | cs4231_mode);
} }
for (i = 0xf8d; i <= 0xf93; i++) if (!c924pnp) for (i = 0xf8d; i <= 0xf93; i++) {
DDB(printk("port %03x after init = %02x\n", i, mad_read(i))) else if (!c924pnp)
DDB(printk("port %03x after init = %02x\n", i-0x80, mad_read(i))); DDB(printk("port %03x after init = %02x\n", i, mad_read(i)))
else
DDB(printk("port %03x after init = %02x\n", i-0x80, mad_read(i)));
}
wss_init(hw_config); wss_init(hw_config);
return 1; return 1;
...@@ -879,7 +889,7 @@ static int __initdata cdirq = 0; ...@@ -879,7 +889,7 @@ static int __initdata cdirq = 0;
static int __initdata cdport = 0x340; static int __initdata cdport = 0x340;
static int __initdata cddma = -1; static int __initdata cddma = -1;
static int __initdata opl4 = 0; static int __initdata opl4 = 0;
static int __initdata joystick = 1; static int __initdata joystick = 0;
MODULE_PARM(mpu_io, "i"); MODULE_PARM(mpu_io, "i");
MODULE_PARM(mpu_irq, "i"); MODULE_PARM(mpu_irq, "i");
...@@ -953,14 +963,14 @@ static int __init init_mad16(void) ...@@ -953,14 +963,14 @@ static int __init init_mad16(void)
return -EINVAL; return -EINVAL;
} }
/* /*
* Build the config words * Build the config words
*/ */
mad16_conf = (joystick ^ 1) | cdtype; mad16_conf = (joystick ^ 1) | cdtype;
mad16_cdsel = 0; mad16_cdsel = 0;
if (opl4) if (opl4)
mad16_cdsel |= 0x20; mad16_cdsel |= 0x20;
if(cdtype){ if(cdtype){
if (cddma > 7 || cddma < 0 || dma_map[dmatype][cddma] == -1) if (cddma > 7 || cddma < 0 || dma_map[dmatype][cddma] == -1)
...@@ -978,8 +988,8 @@ static int __init init_mad16(void) ...@@ -978,8 +988,8 @@ static int __init init_mad16(void)
printk(", no IRQ"); printk(", no IRQ");
else if (cdirq < 0 || cdirq > 15 || irq_map[cdirq] == -1) else if (cdirq < 0 || cdirq > 15 || irq_map[cdirq] == -1)
{ {
printk(", invalid IRQ (disabling)"); printk(", invalid IRQ (disabling)");
cdirq = 0; cdirq = 0;
} }
else printk(", IRQ %d", cdirq); else printk(", IRQ %d", cdirq);
...@@ -1032,14 +1042,14 @@ static int __init init_mad16(void) ...@@ -1032,14 +1042,14 @@ static int __init init_mad16(void)
found_mpu = probe_mad16_mpu(&cfg_mpu); found_mpu = probe_mad16_mpu(&cfg_mpu);
if (joystick == 1) { if (joystick == 1) {
/* register gameport */ /* register gameport */
if (!request_region(0x201, 1, "mad16 gameport")) if (!request_region(0x201, 1, "mad16 gameport"))
printk(KERN_ERR "mad16: gameport address 0x201 already in use\n"); printk(KERN_ERR "mad16: gameport address 0x201 already in use\n");
else { else {
printk(KERN_ERR "mad16: gameport enabled at 0x201\n"); printk(KERN_ERR "mad16: gameport enabled at 0x201\n");
gameport.io = 0x201; gameport.io = 0x201;
gameport_register_port(&gameport); gameport_register_port(&gameport);
} }
} }
else printk(KERN_ERR "mad16: gameport disabled.\n"); else printk(KERN_ERR "mad16: gameport disabled.\n");
return 0; return 0;
...@@ -1049,6 +1059,12 @@ static void __exit cleanup_mad16(void) ...@@ -1049,6 +1059,12 @@ static void __exit cleanup_mad16(void)
{ {
if (found_mpu) if (found_mpu)
unload_mad16_mpu(&cfg_mpu); unload_mad16_mpu(&cfg_mpu);
if (gameport.io) {
/* the gameport was initialized so we must free it up */
gameport_unregister_port(&gameport);
gameport.io = 0;
release_region(0x201, 1);
}
unload_mad16(&cfg); unload_mad16(&cfg);
} }
...@@ -1058,9 +1074,9 @@ module_exit(cleanup_mad16); ...@@ -1058,9 +1074,9 @@ module_exit(cleanup_mad16);
#ifndef MODULE #ifndef MODULE
static int __init setup_mad16(char *str) static int __init setup_mad16(char *str)
{ {
/* io, irq */ /* io, irq */
int ints[8]; int ints[8];
str = get_options(str, ARRAY_SIZE(ints), ints); str = get_options(str, ARRAY_SIZE(ints), ints);
io = ints[1]; io = ints[1];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment