Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / cdrom / isp16.c
index 6d66d0b..db0fd9a 100644 (file)
  *                        module_init & module_exit.
  *                        Torben Mathiasen <tmm@image.dk>
  *
+ *     19 June 2004     -- check_region() converted to request_region()
+ *                         and return statement cleanups.
+ *                          - Jesper Juhl
+ *
  *    Detect cdrom interface on ISP16 sound card.
  *    Configure cdrom interface.
  *
@@ -68,14 +72,10 @@ static int isp16_cdrom_irq = ISP16_CDROM_IRQ;
 static int isp16_cdrom_dma = ISP16_CDROM_DMA;
 static char *isp16_cdrom_type = ISP16_CDROM_TYPE;
 
-MODULE_PARM(isp16_cdrom_base, "i");
-MODULE_PARM(isp16_cdrom_irq, "i");
-MODULE_PARM(isp16_cdrom_dma, "i");
-MODULE_PARM(isp16_cdrom_type, "s");
-
-#ifdef MODULE
-void isp16_exit(void);
-#endif
+module_param(isp16_cdrom_base, int, 0);
+module_param(isp16_cdrom_irq, int, 0);
+module_param(isp16_cdrom_dma, int, 0);
+module_param(isp16_cdrom_type, charp, 0);
 
 #define ISP16_IN(p) (outb(isp16_ctrl,ISP16_CTRL_PORT), inb(p))
 #define ISP16_OUT(p,b) (outb(isp16_ctrl,ISP16_CTRL_PORT), outb(b,p))
@@ -108,7 +108,7 @@ __setup("isp16=", isp16_setup);
  *  ISP16 initialisation.
  *
  */
-int __init isp16_init(void)
+static int __init isp16_init(void)
 {
        u_char expected_drive;
 
@@ -118,17 +118,17 @@ int __init isp16_init(void)
 
        if (!strcmp(isp16_cdrom_type, "noisp16")) {
                printk("ISP16: no cdrom interface configured.\n");
-               return (0);
+               return 0;
        }
 
-       if (check_region(ISP16_IO_BASE, ISP16_IO_SIZE)) {
+       if (!request_region(ISP16_IO_BASE, ISP16_IO_SIZE, "isp16")) {
                printk("ISP16: i/o ports already in use.\n");
-               return (-EIO);
+               goto out;
        }
 
        if ((isp16_type = isp16_detect()) < 0) {
                printk("ISP16: no cdrom interface found.\n");
-               return (-EIO);
+               goto cleanup_out;
        }
 
        printk(KERN_INFO
@@ -148,27 +148,32 @@ int __init isp16_init(void)
        else {
                printk("ISP16: %s not supported by cdrom interface.\n",
                       isp16_cdrom_type);
-               return (-EIO);
+               goto cleanup_out;
        }
 
        if (isp16_cdi_config(isp16_cdrom_base, expected_drive,
                             isp16_cdrom_irq, isp16_cdrom_dma) < 0) {
                printk
                    ("ISP16: cdrom interface has not been properly configured.\n");
-               return (-EIO);
+               goto cleanup_out;
        }
        printk(KERN_INFO
               "ISP16: cdrom interface set up with io base 0x%03X, irq %d, dma %d,"
               " type %s.\n", isp16_cdrom_base, isp16_cdrom_irq,
               isp16_cdrom_dma, isp16_cdrom_type);
-       return (0);
+       return 0;
+
+cleanup_out:
+       release_region(ISP16_IO_BASE, ISP16_IO_SIZE);
+out:
+       return -EIO;
 }
 
 static short __init isp16_detect(void)
 {
 
        if (isp16_c929__detect() >= 0)
-               return (2);
+               return 2;
        else
                return (isp16_c928__detect());
 }
@@ -206,7 +211,7 @@ static short __init isp16_c928__detect(void)
                        ISP16_OUT(ISP16_C928__ENABLE_PORT, enable_cdrom);
                } else {        /* bits are not the same */
                        ISP16_OUT(ISP16_CTRL_PORT, ctrl);
-                       return (i);     /* -> not detected: possibly incorrect conclusion */
+                       return i;       /* -> not detected: possibly incorrect conclusion */
                }
        } else if (enable_cdrom == 0x20)
                i = 0;
@@ -215,7 +220,7 @@ static short __init isp16_c928__detect(void)
 
        ISP16_OUT(ISP16_CTRL_PORT, ctrl);
 
-       return (i);
+       return i;
 }
 
 static short __init isp16_c929__detect(void)
@@ -236,12 +241,12 @@ static short __init isp16_c929__detect(void)
        tmp = ISP16_IN(ISP16_CTRL_PORT);
 
        if (tmp != 2)           /* isp16 with 82C929 not detected */
-               return (-1);
+               return -1;
 
        /* restore ctrl port value */
        ISP16_OUT(ISP16_CTRL_PORT, ctrl);
 
-       return (2);
+       return 2;
 }
 
 static short __init
@@ -272,7 +277,7 @@ isp16_cdi_config(int base, u_char drive_type, int irq, int dma)
                printk
                    ("ISP16: base address 0x%03X not supported by cdrom interface.\n",
                     base);
-               return (-1);
+               return -1;
        }
        switch (irq) {
        case 0:
@@ -303,7 +308,7 @@ isp16_cdi_config(int base, u_char drive_type, int irq, int dma)
        default:
                printk("ISP16: irq %d not supported by cdrom interface.\n",
                       irq);
-               return (-1);
+               return -1;
        }
        switch (dma) {
        case 0:
@@ -312,7 +317,7 @@ isp16_cdi_config(int base, u_char drive_type, int irq, int dma)
        case 1:
                printk("ISP16: dma 1 cannot be used by cdrom interface,"
                       " due to conflict with the sound card.\n");
-               return (-1);
+               return -1;
                break;
        case 3:
                dma_code = ISP16_DMA_3;
@@ -329,7 +334,7 @@ isp16_cdi_config(int base, u_char drive_type, int irq, int dma)
        default:
                printk("ISP16: dma %d not supported by cdrom interface.\n",
                       dma);
-               return (-1);
+               return -1;
        }
 
        if (drive_type != ISP16_SONY && drive_type != ISP16_PANASONIC0 &&
@@ -339,7 +344,7 @@ isp16_cdi_config(int base, u_char drive_type, int irq, int dma)
                printk
                    ("ISP16: drive type (code 0x%02X) not supported by cdrom"
                     " interface.\n", drive_type);
-               return (-1);
+               return -1;
        }
 
        /* set type of interface */
@@ -354,18 +359,16 @@ isp16_cdi_config(int base, u_char drive_type, int irq, int dma)
        i = ISP16_IN(ISP16_IO_SET_PORT) & ISP16_IO_SET_MASK;    /* keep some bits */
        ISP16_OUT(ISP16_IO_SET_PORT, i | base_code | irq_code | dma_code);
 
-       return (0);
+       return 0;
 }
 
-void __exit isp16_exit(void)
+static void __exit isp16_exit(void)
 {
        release_region(ISP16_IO_BASE, ISP16_IO_SIZE);
        printk(KERN_INFO "ISP16: module released.\n");
 }
 
-#ifdef MODULE
 module_init(isp16_init);
-#endif
 module_exit(isp16_exit);
 
 MODULE_LICENSE("GPL");