mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* bring OSS mad16 in sync with 2.4
@ 2003-03-24 16:42 davej
  0 siblings, 0 replies; only message in thread
From: davej @ 2003-03-24 16:42 UTC (permalink / raw)
  To: torvalds; +Cc: linux-kernel

diff -urpN --exclude-from=/home/davej/.exclude bk-linus/sound/oss/mad16.c linux-2.5/sound/oss/mad16.c
--- bk-linus/sound/oss/mad16.c	2003-03-08 09:58:07.000000000 +0000
+++ linux-2.5/sound/oss/mad16.c	2003-03-17 23:43:14.000000000 +0000
@@ -365,6 +365,8 @@ static int __init init_c930(struct addre
 {
 	unsigned char cfg = 0;
 
+	cfg |= (0x0f & mad16_conf);
+
 	if(c931_detected)
 	{
 		/* Bit 0 has reversd meaning. Bits 1 and 2 sese
@@ -402,7 +404,10 @@ static int __init init_c930(struct addre
 	   and the C931. */
 	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(MC6_PORT, 0x02);	/* Enable WSS, Disable MPU and SB */
@@ -529,10 +534,12 @@ static int __init probe_mad16(struct add
 		return init_c930(hw_config);
 
 
-	for (i = 0xf8d; i <= 0xf93; i++)
+	for (i = 0xf8d; i <= 0xf93; i++) {
 		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)));
+	}
 
 /*
  * Set the WSS address
@@ -559,10 +566,10 @@ static int __init probe_mad16(struct add
 	 */
 
 	tmp &= ~0x0f;
+	tmp |= (mad16_conf & 0x0f);	/* CD-ROM and joystick bits */
 	mad_write(MC1_PORT, tmp);
 
-	tmp = mad_read(MC2_PORT);
-
+	tmp = mad16_cdsel;
 	mad_write(MC2_PORT, tmp);
 	mad_write(MC3_PORT, 0xf0);	/* Disable SB */
 
@@ -590,9 +597,12 @@ static int __init probe_mad16(struct add
 		mad_write(MC5_PORT, 0x30 | cs4231_mode);
 	}
 
-	for (i = 0xf8d; i <= 0xf93; i++) if (!c924pnp)
-		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)));
+	for (i = 0xf8d; i <= 0xf93; i++) {
+		if (!c924pnp)
+			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);
 
 	return 1;
@@ -879,7 +889,7 @@ static int __initdata cdirq = 0;
 static int __initdata cdport = 0x340;
 static int __initdata cddma = -1;
 static int __initdata opl4 = 0;
-static int __initdata joystick = 1;
+static int __initdata joystick = 0;
 
 MODULE_PARM(mpu_io, "i");
 MODULE_PARM(mpu_irq, "i");
@@ -953,14 +963,14 @@ static int __init init_mad16(void)
 			return -EINVAL;
 	}
 
- 	/*
-         *    Build the config words
-         */
+	/*
+	 *    Build the config words
+	 */
 
-        mad16_conf = (joystick ^ 1) | cdtype;
+	mad16_conf = (joystick ^ 1) | cdtype;
 	mad16_cdsel = 0;
-        if (opl4)
-                mad16_cdsel |= 0x20;
+	if (opl4)
+		mad16_cdsel |= 0x20;
 
 	if(cdtype){
 		if (cddma > 7 || cddma < 0 || dma_map[dmatype][cddma] == -1)
@@ -978,8 +988,8 @@ static int __init init_mad16(void)
 			printk(", no IRQ");
 		else if (cdirq < 0 || cdirq > 15 || irq_map[cdirq] == -1)
 		{
-		  	printk(", invalid IRQ (disabling)");
-		  	cdirq = 0;
+			printk(", invalid IRQ (disabling)");
+			cdirq = 0;
 		}
 		else printk(", IRQ %d", cdirq);
 
@@ -1032,14 +1042,14 @@ static int __init init_mad16(void)
 	found_mpu = probe_mad16_mpu(&cfg_mpu);
 
 	if (joystick == 1) {
-	        /* register gameport */
-                if (!request_region(0x201, 1, "mad16 gameport"))
-                        printk(KERN_ERR "mad16: gameport address 0x201 already in use\n");
-                else {
+		/* register gameport */
+		if (!request_region(0x201, 1, "mad16 gameport"))
+			printk(KERN_ERR "mad16: gameport address 0x201 already in use\n");
+		else {
 			printk(KERN_ERR "mad16: gameport enabled at 0x201\n");
-                        gameport.io = 0x201;
-		        gameport_register_port(&gameport);
-                }
+			gameport.io = 0x201;
+			gameport_register_port(&gameport);
+		}
 	}
 	else printk(KERN_ERR "mad16: gameport disabled.\n");
 	return 0;
@@ -1049,6 +1059,12 @@ static void __exit cleanup_mad16(void)
 {
 	if (found_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);
 }
 
@@ -1058,9 +1074,9 @@ module_exit(cleanup_mad16);
 #ifndef MODULE
 static int __init setup_mad16(char *str)
 {
-        /* io, irq */
+	/* io, irq */
 	int ints[8];
-	
+
 	str = get_options(str, ARRAY_SIZE(ints), ints);
 
 	io	 = ints[1];

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2003-03-24 16:36 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-24 16:42 bring OSS mad16 in sync with 2.4 davej

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®